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

« back to all changes in this revision

Viewing changes to mysql-test/suite/parts/r/partition_alter1_2_innodb.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 = 'InnoDB';
 
3
 
 
4
#------------------------------------------------------------------------
 
5
#  0. Setting of auxiliary variables + Creation of an auxiliary tables
 
6
#     needed in many testcases
 
7
#------------------------------------------------------------------------
 
8
SELECT @max_row DIV 2 INTO @max_row_div2;
 
9
SELECT @max_row DIV 3 INTO @max_row_div3;
 
10
SELECT @max_row DIV 4 INTO @max_row_div4;
 
11
SET @max_int_4 = 2147483647;
 
12
DROP TABLE IF EXISTS t0_template;
 
13
CREATE TABLE t0_template (
 
14
f_int1 INTEGER,
 
15
f_int2 INTEGER,
 
16
f_char1 CHAR(20),
 
17
f_char2 CHAR(20),
 
18
f_charbig VARCHAR(1000) ,
 
19
PRIMARY KEY(f_int1))
 
20
ENGINE = MEMORY;
 
21
#     Logging of <max_row> INSERTs into t0_template suppressed
 
22
DROP TABLE IF EXISTS t0_definition;
 
23
CREATE TABLE t0_definition (
 
24
state CHAR(3),
 
25
create_command VARBINARY(5000),
 
26
file_list      VARBINARY(10000),
 
27
PRIMARY KEY (state)
 
28
) ENGINE = MEMORY;
 
29
DROP TABLE IF EXISTS t0_aux;
 
30
CREATE TABLE t0_aux ( f_int1 INTEGER,
 
31
f_int2 INTEGER,
 
32
f_char1 CHAR(20),
 
33
f_char2 CHAR(20),
 
34
f_charbig VARCHAR(1000) )
 
35
ENGINE = MEMORY;
 
36
SET AUTOCOMMIT= 1;
 
37
SET @@session.sql_mode= '';
 
38
# End of basic preparations needed for all tests
 
39
#-----------------------------------------------
 
40
 
 
41
#========================================================================
 
42
#  2     DROP PRIMARY KEY or UNIQUE INDEX
 
43
#========================================================================
 
44
#------------------------------------------------------------------------
 
45
#  2.1   Partitioning function contains one column(f_int1)
 
46
#------------------------------------------------------------------------
 
47
#  2.1.5 DROP PRIMARY KEY + UNIQUE INDEX consisting of two columns
 
48
DROP TABLE IF EXISTS t1;
 
49
CREATE TABLE t1 (
 
50
f_int1 INTEGER,
 
51
f_int2 INTEGER,
 
52
f_char1 CHAR(20),
 
53
f_char2 CHAR(20),
 
54
f_charbig VARCHAR(1000)
 
55
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
56
)
 
57
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
58
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
59
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
60
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
61
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
62
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
63
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
64
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
65
# Start usability test (inc/partition_check.inc)
 
66
create_command
 
67
SHOW CREATE TABLE t1;
 
68
Table   Create Table
 
69
t1      CREATE TABLE `t1` (
 
70
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
71
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
72
  `f_char1` char(20) DEFAULT NULL,
 
73
  `f_char2` char(20) DEFAULT NULL,
 
74
  `f_charbig` varchar(1000) DEFAULT NULL
 
75
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
76
/*!50100 PARTITION BY HASH (f_int1)
 
77
PARTITIONS 2 */
 
78
 
 
79
# check prerequisites-1 success:    1
 
80
# check COUNT(*) success:    1
 
81
# check MIN/MAX(f_int1) success:    1
 
82
# check MIN/MAX(f_int2) success:    1
 
83
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
84
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
85
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
86
WHERE f_int1 IN (2,3);
 
87
# check prerequisites-3 success:    1
 
88
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
89
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
90
# check read via f_int1 success: 1
 
91
# check read via f_int2 success: 1
 
92
        
 
93
# check multiple-1 success:     1
 
94
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
95
        
 
96
# check multiple-2 success:     1
 
97
INSERT INTO t1 SELECT * FROM t0_template
 
98
WHERE MOD(f_int1,3) = 0;
 
99
        
 
100
# check multiple-3 success:     1
 
101
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
102
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
103
AND @max_row_div2 + @max_row_div4;
 
104
        
 
105
# check multiple-4 success:     1
 
106
DELETE FROM t1
 
107
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
108
AND @max_row_div2 + @max_row_div4 + @max_row;
 
109
        
 
110
# check multiple-5 success:     1
 
111
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
112
INSERT INTO t1
 
113
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
114
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
115
f_charbig = '#SINGLE#';
 
116
        
 
117
# check single-1 success:       1
 
118
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
119
INSERT INTO t1
 
120
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
121
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
122
f_charbig = '#SINGLE#';
 
123
        
 
124
# check single-2 success:       1
 
125
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
126
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
127
UPDATE t1 SET f_int1 = @cur_value2
 
128
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
129
        
 
130
# check single-3 success:       1
 
131
SET @cur_value1= -1;
 
132
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
133
UPDATE t1 SET f_int1 = @cur_value1
 
134
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
135
        
 
136
# check single-4 success:       1
 
137
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
138
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
139
        
 
140
# check single-5 success:       1
 
141
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
142
        
 
143
# check single-6 success:       1
 
144
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
145
        
 
146
# check single-7 success:       1
 
147
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
148
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
149
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
150
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
151
f_charbig = '#NULL#';
 
152
INSERT INTO t1
 
153
SET f_int1 = NULL , f_int2 = -@max_row,
 
154
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
155
f_charbig = '#NULL#';
 
156
ERROR 23000: Column 'f_int1' cannot be null
 
157
# check null success:    1
 
158
DELETE FROM t1
 
159
WHERE f_int1 = 0 AND f_int2 = 0
 
160
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
161
AND f_charbig = '#NULL#';
 
162
SET AUTOCOMMIT= 0;
 
163
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
164
SELECT f_int1, f_int1, '', '', 'was inserted'
 
165
FROM t0_template source_tab
 
166
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
167
        
 
168
# check transactions-1 success:         1
 
169
COMMIT WORK;
 
170
        
 
171
# check transactions-2 success:         1
 
172
ROLLBACK WORK;
 
173
        
 
174
# check transactions-3 success:         1
 
175
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
176
COMMIT WORK;
 
177
ROLLBACK WORK;
 
178
        
 
179
# check transactions-4 success:         1
 
180
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
181
SELECT f_int1, f_int1, '', '', 'was inserted'
 
182
FROM t0_template source_tab
 
183
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
184
        
 
185
# check transactions-5 success:         1
 
186
ROLLBACK WORK;
 
187
        
 
188
# check transactions-6 success:         1
 
189
# INFO: Storage engine used for t1 seems to be transactional.
 
190
COMMIT;
 
191
        
 
192
# check transactions-7 success:         1
 
193
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
194
COMMIT WORK;
 
195
SET @@session.sql_mode = 'traditional';
 
196
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
197
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
198
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
199
'', '', 'was inserted' FROM t0_template
 
200
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
201
ERROR 22012: Division by 0
 
202
COMMIT;
 
203
        
 
204
# check transactions-8 success:         1
 
205
# INFO: Storage engine used for t1 seems to be able to revert
 
206
#       changes made by the failing statement.
 
207
SET @@session.sql_mode = '';
 
208
SET AUTOCOMMIT= 1;
 
209
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
210
COMMIT WORK;
 
211
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
212
        
 
213
# check special-1 success:      1
 
214
UPDATE t1 SET f_charbig = '';
 
215
        
 
216
# check special-2 success:      1
 
217
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
218
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
219
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
220
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
221
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
222
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
223
'just inserted' FROM t0_template
 
224
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
225
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
226
BEGIN
 
227
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
228
f_charbig = 'updated by trigger'
 
229
      WHERE f_int1 = new.f_int1;
 
230
END|
 
231
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
232
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
233
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
234
        
 
235
# check trigger-1 success:      1
 
236
DROP TRIGGER trg_1;
 
237
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
238
f_int2 = CAST(f_char1 AS SIGNED INT),
 
239
f_charbig = 'just inserted'
 
240
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
241
DELETE FROM t0_aux
 
242
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
243
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
244
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
245
'just inserted' FROM t0_template
 
246
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
247
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
248
BEGIN
 
249
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
250
f_charbig = 'updated by trigger'
 
251
      WHERE f_int1 = new.f_int1;
 
252
END|
 
253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
254
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
255
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
256
        
 
257
# check trigger-2 success:      1
 
258
DROP TRIGGER trg_1;
 
259
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
260
f_int2 = CAST(f_char1 AS SIGNED INT),
 
261
f_charbig = 'just inserted'
 
262
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
263
DELETE FROM t0_aux
 
264
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
265
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
266
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
267
'just inserted' FROM t0_template
 
268
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
269
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
270
BEGIN
 
271
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
272
f_charbig = 'updated by trigger'
 
273
      WHERE f_int1 = new.f_int1;
 
274
END|
 
275
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
276
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
277
        
 
278
# check trigger-3 success:      1
 
279
DROP TRIGGER trg_1;
 
280
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
281
f_int2 = CAST(f_char1 AS SIGNED INT),
 
282
f_charbig = 'just inserted'
 
283
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
284
DELETE FROM t0_aux
 
285
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
286
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
287
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
288
'just inserted' FROM t0_template
 
289
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
290
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
291
BEGIN
 
292
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
293
f_charbig = 'updated by trigger'
 
294
      WHERE f_int1 = - old.f_int1;
 
295
END|
 
296
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
297
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
298
        
 
299
# check trigger-4 success:      1
 
300
DROP TRIGGER trg_1;
 
301
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
302
f_int2 = CAST(f_char1 AS SIGNED INT),
 
303
f_charbig = 'just inserted'
 
304
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
305
DELETE FROM t0_aux
 
306
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
307
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
308
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
309
'just inserted' FROM t0_template
 
310
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
311
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
312
BEGIN
 
313
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
314
f_charbig = 'updated by trigger'
 
315
      WHERE f_int1 = new.f_int1;
 
316
END|
 
317
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
318
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
319
        
 
320
# check trigger-5 success:      1
 
321
DROP TRIGGER trg_1;
 
322
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
323
f_int2 = CAST(f_char1 AS SIGNED INT),
 
324
f_charbig = 'just inserted'
 
325
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
326
DELETE FROM t0_aux
 
327
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
328
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
329
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
330
'just inserted' FROM t0_template
 
331
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
332
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
333
BEGIN
 
334
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
335
f_charbig = 'updated by trigger'
 
336
      WHERE f_int1 = - old.f_int1;
 
337
END|
 
338
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
339
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
340
        
 
341
# check trigger-6 success:      1
 
342
DROP TRIGGER trg_1;
 
343
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
344
f_int2 = CAST(f_char1 AS SIGNED INT),
 
345
f_charbig = 'just inserted'
 
346
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
347
DELETE FROM t0_aux
 
348
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
349
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
350
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
351
'just inserted' FROM t0_template
 
352
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
353
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
354
BEGIN
 
355
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
356
f_charbig = 'updated by trigger'
 
357
      WHERE f_int1 = - old.f_int1;
 
358
END|
 
359
DELETE FROM t0_aux
 
360
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
361
        
 
362
# check trigger-7 success:      1
 
363
DROP TRIGGER trg_1;
 
364
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
365
f_int2 = CAST(f_char1 AS SIGNED INT),
 
366
f_charbig = 'just inserted'
 
367
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
368
DELETE FROM t0_aux
 
369
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
370
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
371
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
372
'just inserted' FROM t0_template
 
373
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
374
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
375
BEGIN
 
376
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
377
f_charbig = 'updated by trigger'
 
378
      WHERE f_int1 = - old.f_int1;
 
379
END|
 
380
DELETE FROM t0_aux
 
381
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
382
        
 
383
# check trigger-8 success:      1
 
384
DROP TRIGGER trg_1;
 
385
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
386
f_int2 = CAST(f_char1 AS SIGNED INT),
 
387
f_charbig = 'just inserted'
 
388
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
389
DELETE FROM t0_aux
 
390
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
391
DELETE FROM t1
 
392
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
393
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
394
BEGIN
 
395
SET new.f_int1 = old.f_int1 + @max_row,
 
396
new.f_int2 = old.f_int2 - @max_row,
 
397
new.f_charbig = '####updated per update trigger####';
 
398
END|
 
399
UPDATE t1
 
400
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
401
f_charbig = '####updated per update statement itself####';
 
402
        
 
403
# check trigger-9 success:      1
 
404
DROP TRIGGER trg_2;
 
405
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
406
f_int2 = CAST(f_char1 AS SIGNED INT),
 
407
f_charbig = CONCAT('===',f_char1,'===');
 
408
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
409
BEGIN
 
410
SET new.f_int1 = new.f_int1 + @max_row,
 
411
new.f_int2 = new.f_int2 - @max_row,
 
412
new.f_charbig = '####updated per update trigger####';
 
413
END|
 
414
UPDATE t1
 
415
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
416
f_charbig = '####updated per update statement itself####';
 
417
        
 
418
# check trigger-10 success:     1
 
419
DROP TRIGGER trg_2;
 
420
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
421
f_int2 = CAST(f_char1 AS SIGNED INT),
 
422
f_charbig = CONCAT('===',f_char1,'===');
 
423
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
424
BEGIN
 
425
SET new.f_int1 = @my_max1 + @counter,
 
426
new.f_int2 = @my_min2 - @counter,
 
427
new.f_charbig = '####updated per insert trigger####';
 
428
SET @counter = @counter + 1;
 
429
END|
 
430
SET @counter = 1;
 
431
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
432
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
433
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
434
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
435
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
436
ORDER BY f_int1;
 
437
DROP TRIGGER trg_3;
 
438
        
 
439
# check trigger-11 success:     1
 
440
DELETE FROM t1
 
441
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
442
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
443
AND f_charbig = '####updated per insert trigger####';
 
444
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
445
BEGIN
 
446
SET new.f_int1 = @my_max1 + @counter,
 
447
new.f_int2 = @my_min2 - @counter,
 
448
new.f_charbig = '####updated per insert trigger####';
 
449
SET @counter = @counter + 1;
 
450
END|
 
451
SET @counter = 1;
 
452
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
453
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
454
SELECT CAST(f_int1 AS CHAR),
 
455
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
456
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
457
ORDER BY f_int1;
 
458
DROP TRIGGER trg_3;
 
459
        
 
460
# check trigger-12 success:     1
 
461
DELETE FROM t1
 
462
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
463
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
464
AND f_charbig = '####updated per insert trigger####';
 
465
ANALYZE  TABLE t1;
 
466
Table   Op      Msg_type        Msg_text
 
467
test.t1 analyze status  OK
 
468
CHECK    TABLE t1 EXTENDED;
 
469
Table   Op      Msg_type        Msg_text
 
470
test.t1 check   status  OK
 
471
CHECKSUM TABLE t1 EXTENDED;
 
472
Table   Checksum
 
473
test.t1 <some_value>
 
474
OPTIMIZE TABLE t1;
 
475
Table   Op      Msg_type        Msg_text
 
476
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
477
test.t1 optimize        status  OK
 
478
# check layout success:    1
 
479
REPAIR   TABLE t1 EXTENDED;
 
480
Table   Op      Msg_type        Msg_text
 
481
test.t1 repair  note    The storage engine for the table doesn't support repair
 
482
# check layout success:    1
 
483
TRUNCATE t1;
 
484
        
 
485
# check TRUNCATE success:       1
 
486
# check layout success:    1
 
487
# End usability test (inc/partition_check.inc)
 
488
DROP TABLE t1;
 
489
CREATE TABLE t1 (
 
490
f_int1 INTEGER,
 
491
f_int2 INTEGER,
 
492
f_char1 CHAR(20),
 
493
f_char2 CHAR(20),
 
494
f_charbig VARCHAR(1000)
 
495
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
496
)
 
497
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
498
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
499
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
500
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
501
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
502
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
503
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
504
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
505
# Start usability test (inc/partition_check.inc)
 
506
create_command
 
507
SHOW CREATE TABLE t1;
 
508
Table   Create Table
 
509
t1      CREATE TABLE `t1` (
 
510
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
511
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
512
  `f_char1` char(20) DEFAULT NULL,
 
513
  `f_char2` char(20) DEFAULT NULL,
 
514
  `f_charbig` varchar(1000) DEFAULT NULL
 
515
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
516
/*!50100 PARTITION BY KEY (f_int1)
 
517
PARTITIONS 5 */
 
518
 
 
519
# check prerequisites-1 success:    1
 
520
# check COUNT(*) success:    1
 
521
# check MIN/MAX(f_int1) success:    1
 
522
# check MIN/MAX(f_int2) success:    1
 
523
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
524
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
525
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
526
WHERE f_int1 IN (2,3);
 
527
# check prerequisites-3 success:    1
 
528
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
529
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
530
# check read via f_int1 success: 1
 
531
# check read via f_int2 success: 1
 
532
        
 
533
# check multiple-1 success:     1
 
534
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
535
        
 
536
# check multiple-2 success:     1
 
537
INSERT INTO t1 SELECT * FROM t0_template
 
538
WHERE MOD(f_int1,3) = 0;
 
539
        
 
540
# check multiple-3 success:     1
 
541
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
542
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
543
AND @max_row_div2 + @max_row_div4;
 
544
        
 
545
# check multiple-4 success:     1
 
546
DELETE FROM t1
 
547
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
548
AND @max_row_div2 + @max_row_div4 + @max_row;
 
549
        
 
550
# check multiple-5 success:     1
 
551
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
552
INSERT INTO t1
 
553
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
554
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
555
f_charbig = '#SINGLE#';
 
556
        
 
557
# check single-1 success:       1
 
558
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
559
INSERT INTO t1
 
560
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
561
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
562
f_charbig = '#SINGLE#';
 
563
        
 
564
# check single-2 success:       1
 
565
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
566
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
567
UPDATE t1 SET f_int1 = @cur_value2
 
568
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
569
        
 
570
# check single-3 success:       1
 
571
SET @cur_value1= -1;
 
572
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
573
UPDATE t1 SET f_int1 = @cur_value1
 
574
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
575
        
 
576
# check single-4 success:       1
 
577
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
578
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
579
        
 
580
# check single-5 success:       1
 
581
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
582
        
 
583
# check single-6 success:       1
 
584
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
585
        
 
586
# check single-7 success:       1
 
587
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
588
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
589
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
590
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
591
f_charbig = '#NULL#';
 
592
INSERT INTO t1
 
593
SET f_int1 = NULL , f_int2 = -@max_row,
 
594
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
595
f_charbig = '#NULL#';
 
596
ERROR 23000: Column 'f_int1' cannot be null
 
597
# check null success:    1
 
598
DELETE FROM t1
 
599
WHERE f_int1 = 0 AND f_int2 = 0
 
600
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
601
AND f_charbig = '#NULL#';
 
602
SET AUTOCOMMIT= 0;
 
603
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
604
SELECT f_int1, f_int1, '', '', 'was inserted'
 
605
FROM t0_template source_tab
 
606
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
607
        
 
608
# check transactions-1 success:         1
 
609
COMMIT WORK;
 
610
        
 
611
# check transactions-2 success:         1
 
612
ROLLBACK WORK;
 
613
        
 
614
# check transactions-3 success:         1
 
615
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
616
COMMIT WORK;
 
617
ROLLBACK WORK;
 
618
        
 
619
# check transactions-4 success:         1
 
620
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
621
SELECT f_int1, f_int1, '', '', 'was inserted'
 
622
FROM t0_template source_tab
 
623
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
624
        
 
625
# check transactions-5 success:         1
 
626
ROLLBACK WORK;
 
627
        
 
628
# check transactions-6 success:         1
 
629
# INFO: Storage engine used for t1 seems to be transactional.
 
630
COMMIT;
 
631
        
 
632
# check transactions-7 success:         1
 
633
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
634
COMMIT WORK;
 
635
SET @@session.sql_mode = 'traditional';
 
636
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
637
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
638
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
639
'', '', 'was inserted' FROM t0_template
 
640
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
641
ERROR 22012: Division by 0
 
642
COMMIT;
 
643
        
 
644
# check transactions-8 success:         1
 
645
# INFO: Storage engine used for t1 seems to be able to revert
 
646
#       changes made by the failing statement.
 
647
SET @@session.sql_mode = '';
 
648
SET AUTOCOMMIT= 1;
 
649
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
650
COMMIT WORK;
 
651
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
652
        
 
653
# check special-1 success:      1
 
654
UPDATE t1 SET f_charbig = '';
 
655
        
 
656
# check special-2 success:      1
 
657
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
658
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
659
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
660
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
661
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
662
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
663
'just inserted' FROM t0_template
 
664
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
665
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
666
BEGIN
 
667
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
668
f_charbig = 'updated by trigger'
 
669
      WHERE f_int1 = new.f_int1;
 
670
END|
 
671
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
672
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
673
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
674
        
 
675
# check trigger-1 success:      1
 
676
DROP TRIGGER trg_1;
 
677
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
678
f_int2 = CAST(f_char1 AS SIGNED INT),
 
679
f_charbig = 'just inserted'
 
680
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
681
DELETE FROM t0_aux
 
682
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
683
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
684
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
685
'just inserted' FROM t0_template
 
686
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
687
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
688
BEGIN
 
689
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
690
f_charbig = 'updated by trigger'
 
691
      WHERE f_int1 = new.f_int1;
 
692
END|
 
693
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
694
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
695
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
696
        
 
697
# check trigger-2 success:      1
 
698
DROP TRIGGER trg_1;
 
699
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
700
f_int2 = CAST(f_char1 AS SIGNED INT),
 
701
f_charbig = 'just inserted'
 
702
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
703
DELETE FROM t0_aux
 
704
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
705
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
706
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
707
'just inserted' FROM t0_template
 
708
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
709
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
710
BEGIN
 
711
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
712
f_charbig = 'updated by trigger'
 
713
      WHERE f_int1 = new.f_int1;
 
714
END|
 
715
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
716
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
717
        
 
718
# check trigger-3 success:      1
 
719
DROP TRIGGER trg_1;
 
720
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
721
f_int2 = CAST(f_char1 AS SIGNED INT),
 
722
f_charbig = 'just inserted'
 
723
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
724
DELETE FROM t0_aux
 
725
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
726
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
727
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
728
'just inserted' FROM t0_template
 
729
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
730
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
731
BEGIN
 
732
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
733
f_charbig = 'updated by trigger'
 
734
      WHERE f_int1 = - old.f_int1;
 
735
END|
 
736
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
737
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
738
        
 
739
# check trigger-4 success:      1
 
740
DROP TRIGGER trg_1;
 
741
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
742
f_int2 = CAST(f_char1 AS SIGNED INT),
 
743
f_charbig = 'just inserted'
 
744
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
745
DELETE FROM t0_aux
 
746
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
747
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
748
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
749
'just inserted' FROM t0_template
 
750
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
751
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
752
BEGIN
 
753
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
754
f_charbig = 'updated by trigger'
 
755
      WHERE f_int1 = new.f_int1;
 
756
END|
 
757
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
758
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
759
        
 
760
# check trigger-5 success:      1
 
761
DROP TRIGGER trg_1;
 
762
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
763
f_int2 = CAST(f_char1 AS SIGNED INT),
 
764
f_charbig = 'just inserted'
 
765
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
766
DELETE FROM t0_aux
 
767
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
768
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
769
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
770
'just inserted' FROM t0_template
 
771
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
772
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
773
BEGIN
 
774
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
775
f_charbig = 'updated by trigger'
 
776
      WHERE f_int1 = - old.f_int1;
 
777
END|
 
778
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
779
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
780
        
 
781
# check trigger-6 success:      1
 
782
DROP TRIGGER trg_1;
 
783
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
784
f_int2 = CAST(f_char1 AS SIGNED INT),
 
785
f_charbig = 'just inserted'
 
786
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
787
DELETE FROM t0_aux
 
788
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
789
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
790
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
791
'just inserted' FROM t0_template
 
792
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
793
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
794
BEGIN
 
795
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
796
f_charbig = 'updated by trigger'
 
797
      WHERE f_int1 = - old.f_int1;
 
798
END|
 
799
DELETE FROM t0_aux
 
800
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
801
        
 
802
# check trigger-7 success:      1
 
803
DROP TRIGGER trg_1;
 
804
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
805
f_int2 = CAST(f_char1 AS SIGNED INT),
 
806
f_charbig = 'just inserted'
 
807
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
808
DELETE FROM t0_aux
 
809
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
810
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
811
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
812
'just inserted' FROM t0_template
 
813
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
814
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
815
BEGIN
 
816
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
817
f_charbig = 'updated by trigger'
 
818
      WHERE f_int1 = - old.f_int1;
 
819
END|
 
820
DELETE FROM t0_aux
 
821
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
822
        
 
823
# check trigger-8 success:      1
 
824
DROP TRIGGER trg_1;
 
825
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
826
f_int2 = CAST(f_char1 AS SIGNED INT),
 
827
f_charbig = 'just inserted'
 
828
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
829
DELETE FROM t0_aux
 
830
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
831
DELETE FROM t1
 
832
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
833
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
834
BEGIN
 
835
SET new.f_int1 = old.f_int1 + @max_row,
 
836
new.f_int2 = old.f_int2 - @max_row,
 
837
new.f_charbig = '####updated per update trigger####';
 
838
END|
 
839
UPDATE t1
 
840
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
841
f_charbig = '####updated per update statement itself####';
 
842
        
 
843
# check trigger-9 success:      1
 
844
DROP TRIGGER trg_2;
 
845
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
846
f_int2 = CAST(f_char1 AS SIGNED INT),
 
847
f_charbig = CONCAT('===',f_char1,'===');
 
848
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
849
BEGIN
 
850
SET new.f_int1 = new.f_int1 + @max_row,
 
851
new.f_int2 = new.f_int2 - @max_row,
 
852
new.f_charbig = '####updated per update trigger####';
 
853
END|
 
854
UPDATE t1
 
855
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
856
f_charbig = '####updated per update statement itself####';
 
857
        
 
858
# check trigger-10 success:     1
 
859
DROP TRIGGER trg_2;
 
860
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
861
f_int2 = CAST(f_char1 AS SIGNED INT),
 
862
f_charbig = CONCAT('===',f_char1,'===');
 
863
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
864
BEGIN
 
865
SET new.f_int1 = @my_max1 + @counter,
 
866
new.f_int2 = @my_min2 - @counter,
 
867
new.f_charbig = '####updated per insert trigger####';
 
868
SET @counter = @counter + 1;
 
869
END|
 
870
SET @counter = 1;
 
871
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
872
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
873
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
874
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
875
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
876
ORDER BY f_int1;
 
877
DROP TRIGGER trg_3;
 
878
        
 
879
# check trigger-11 success:     1
 
880
DELETE FROM t1
 
881
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
882
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
883
AND f_charbig = '####updated per insert trigger####';
 
884
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
885
BEGIN
 
886
SET new.f_int1 = @my_max1 + @counter,
 
887
new.f_int2 = @my_min2 - @counter,
 
888
new.f_charbig = '####updated per insert trigger####';
 
889
SET @counter = @counter + 1;
 
890
END|
 
891
SET @counter = 1;
 
892
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
893
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
894
SELECT CAST(f_int1 AS CHAR),
 
895
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
896
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
897
ORDER BY f_int1;
 
898
DROP TRIGGER trg_3;
 
899
        
 
900
# check trigger-12 success:     1
 
901
DELETE FROM t1
 
902
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
903
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
904
AND f_charbig = '####updated per insert trigger####';
 
905
ANALYZE  TABLE t1;
 
906
Table   Op      Msg_type        Msg_text
 
907
test.t1 analyze status  OK
 
908
CHECK    TABLE t1 EXTENDED;
 
909
Table   Op      Msg_type        Msg_text
 
910
test.t1 check   status  OK
 
911
CHECKSUM TABLE t1 EXTENDED;
 
912
Table   Checksum
 
913
test.t1 <some_value>
 
914
OPTIMIZE TABLE t1;
 
915
Table   Op      Msg_type        Msg_text
 
916
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
917
test.t1 optimize        status  OK
 
918
# check layout success:    1
 
919
REPAIR   TABLE t1 EXTENDED;
 
920
Table   Op      Msg_type        Msg_text
 
921
test.t1 repair  note    The storage engine for the table doesn't support repair
 
922
# check layout success:    1
 
923
TRUNCATE t1;
 
924
        
 
925
# check TRUNCATE success:       1
 
926
# check layout success:    1
 
927
# End usability test (inc/partition_check.inc)
 
928
DROP TABLE t1;
 
929
CREATE TABLE t1 (
 
930
f_int1 INTEGER,
 
931
f_int2 INTEGER,
 
932
f_char1 CHAR(20),
 
933
f_char2 CHAR(20),
 
934
f_charbig VARCHAR(1000)
 
935
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
936
)
 
937
PARTITION BY LIST(MOD(f_int1,4))
 
938
(PARTITION part_3 VALUES IN (-3),
 
939
PARTITION part_2 VALUES IN (-2),
 
940
PARTITION part_1 VALUES IN (-1),
 
941
PARTITION part_N VALUES IN (NULL),
 
942
PARTITION part0 VALUES IN (0),
 
943
PARTITION part1 VALUES IN (1),
 
944
PARTITION part2 VALUES IN (2),
 
945
PARTITION part3 VALUES IN (3));
 
946
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
947
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
948
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
949
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
950
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
951
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
952
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
953
# Start usability test (inc/partition_check.inc)
 
954
create_command
 
955
SHOW CREATE TABLE t1;
 
956
Table   Create Table
 
957
t1      CREATE TABLE `t1` (
 
958
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
959
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
960
  `f_char1` char(20) DEFAULT NULL,
 
961
  `f_char2` char(20) DEFAULT NULL,
 
962
  `f_charbig` varchar(1000) DEFAULT NULL
 
963
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
964
/*!50100 PARTITION BY LIST (MOD(f_int1,4))
 
965
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
966
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
967
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
968
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
969
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
970
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
971
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
972
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
973
 
 
974
# check prerequisites-1 success:    1
 
975
# check COUNT(*) success:    1
 
976
# check MIN/MAX(f_int1) success:    1
 
977
# check MIN/MAX(f_int2) success:    1
 
978
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
979
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
980
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
981
WHERE f_int1 IN (2,3);
 
982
# check prerequisites-3 success:    1
 
983
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
984
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
985
# check read via f_int1 success: 1
 
986
# check read via f_int2 success: 1
 
987
        
 
988
# check multiple-1 success:     1
 
989
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
990
        
 
991
# check multiple-2 success:     1
 
992
INSERT INTO t1 SELECT * FROM t0_template
 
993
WHERE MOD(f_int1,3) = 0;
 
994
        
 
995
# check multiple-3 success:     1
 
996
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
997
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
998
AND @max_row_div2 + @max_row_div4;
 
999
        
 
1000
# check multiple-4 success:     1
 
1001
DELETE FROM t1
 
1002
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1003
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1004
        
 
1005
# check multiple-5 success:     1
 
1006
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1007
INSERT INTO t1
 
1008
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1009
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1010
f_charbig = '#SINGLE#';
 
1011
        
 
1012
# check single-1 success:       1
 
1013
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1014
INSERT INTO t1
 
1015
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1016
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1017
f_charbig = '#SINGLE#';
 
1018
        
 
1019
# check single-2 success:       1
 
1020
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1021
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1022
UPDATE t1 SET f_int1 = @cur_value2
 
1023
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1024
        
 
1025
# check single-3 success:       1
 
1026
SET @cur_value1= -1;
 
1027
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1028
UPDATE t1 SET f_int1 = @cur_value1
 
1029
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1030
        
 
1031
# check single-4 success:       1
 
1032
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1033
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1034
        
 
1035
# check single-5 success:       1
 
1036
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1037
        
 
1038
# check single-6 success:       1
 
1039
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1040
        
 
1041
# check single-7 success:       1
 
1042
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
1043
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1044
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1045
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1046
f_charbig = '#NULL#';
 
1047
INSERT INTO t1
 
1048
SET f_int1 = NULL , f_int2 = -@max_row,
 
1049
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1050
f_charbig = '#NULL#';
 
1051
ERROR 23000: Column 'f_int1' cannot be null
 
1052
# check null success:    1
 
1053
DELETE FROM t1
 
1054
WHERE f_int1 = 0 AND f_int2 = 0
 
1055
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1056
AND f_charbig = '#NULL#';
 
1057
SET AUTOCOMMIT= 0;
 
1058
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1059
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1060
FROM t0_template source_tab
 
1061
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1062
        
 
1063
# check transactions-1 success:         1
 
1064
COMMIT WORK;
 
1065
        
 
1066
# check transactions-2 success:         1
 
1067
ROLLBACK WORK;
 
1068
        
 
1069
# check transactions-3 success:         1
 
1070
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1071
COMMIT WORK;
 
1072
ROLLBACK WORK;
 
1073
        
 
1074
# check transactions-4 success:         1
 
1075
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1076
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1077
FROM t0_template source_tab
 
1078
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1079
        
 
1080
# check transactions-5 success:         1
 
1081
ROLLBACK WORK;
 
1082
        
 
1083
# check transactions-6 success:         1
 
1084
# INFO: Storage engine used for t1 seems to be transactional.
 
1085
COMMIT;
 
1086
        
 
1087
# check transactions-7 success:         1
 
1088
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1089
COMMIT WORK;
 
1090
SET @@session.sql_mode = 'traditional';
 
1091
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1092
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1093
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1094
'', '', 'was inserted' FROM t0_template
 
1095
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1096
ERROR 22012: Division by 0
 
1097
COMMIT;
 
1098
        
 
1099
# check transactions-8 success:         1
 
1100
# INFO: Storage engine used for t1 seems to be able to revert
 
1101
#       changes made by the failing statement.
 
1102
SET @@session.sql_mode = '';
 
1103
SET AUTOCOMMIT= 1;
 
1104
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1105
COMMIT WORK;
 
1106
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
1107
        
 
1108
# check special-1 success:      1
 
1109
UPDATE t1 SET f_charbig = '';
 
1110
        
 
1111
# check special-2 success:      1
 
1112
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
1113
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1114
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
1115
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1116
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1117
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1118
'just inserted' FROM t0_template
 
1119
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1120
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
1121
BEGIN
 
1122
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1123
f_charbig = 'updated by trigger'
 
1124
      WHERE f_int1 = new.f_int1;
 
1125
END|
 
1126
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1127
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1128
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1129
        
 
1130
# check trigger-1 success:      1
 
1131
DROP TRIGGER trg_1;
 
1132
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1133
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1134
f_charbig = 'just inserted'
 
1135
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1136
DELETE FROM t0_aux
 
1137
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1138
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1139
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1140
'just inserted' FROM t0_template
 
1141
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1142
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1143
BEGIN
 
1144
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1145
f_charbig = 'updated by trigger'
 
1146
      WHERE f_int1 = new.f_int1;
 
1147
END|
 
1148
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1149
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1150
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1151
        
 
1152
# check trigger-2 success:      1
 
1153
DROP TRIGGER trg_1;
 
1154
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1155
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1156
f_charbig = 'just inserted'
 
1157
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1158
DELETE FROM t0_aux
 
1159
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1160
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1161
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1162
'just inserted' FROM t0_template
 
1163
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1164
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1165
BEGIN
 
1166
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1167
f_charbig = 'updated by trigger'
 
1168
      WHERE f_int1 = new.f_int1;
 
1169
END|
 
1170
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1171
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1172
        
 
1173
# check trigger-3 success:      1
 
1174
DROP TRIGGER trg_1;
 
1175
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1176
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1177
f_charbig = 'just inserted'
 
1178
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1179
DELETE FROM t0_aux
 
1180
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1181
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1182
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1183
'just inserted' FROM t0_template
 
1184
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1185
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1186
BEGIN
 
1187
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1188
f_charbig = 'updated by trigger'
 
1189
      WHERE f_int1 = - old.f_int1;
 
1190
END|
 
1191
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1192
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1193
        
 
1194
# check trigger-4 success:      1
 
1195
DROP TRIGGER trg_1;
 
1196
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1197
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1198
f_charbig = 'just inserted'
 
1199
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1200
DELETE FROM t0_aux
 
1201
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1202
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1203
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1204
'just inserted' FROM t0_template
 
1205
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1206
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1207
BEGIN
 
1208
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1209
f_charbig = 'updated by trigger'
 
1210
      WHERE f_int1 = new.f_int1;
 
1211
END|
 
1212
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1213
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1214
        
 
1215
# check trigger-5 success:      1
 
1216
DROP TRIGGER trg_1;
 
1217
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1218
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1219
f_charbig = 'just inserted'
 
1220
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1221
DELETE FROM t0_aux
 
1222
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1223
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1224
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1225
'just inserted' FROM t0_template
 
1226
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1227
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1228
BEGIN
 
1229
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1230
f_charbig = 'updated by trigger'
 
1231
      WHERE f_int1 = - old.f_int1;
 
1232
END|
 
1233
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1234
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1235
        
 
1236
# check trigger-6 success:      1
 
1237
DROP TRIGGER trg_1;
 
1238
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1239
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1240
f_charbig = 'just inserted'
 
1241
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1242
DELETE FROM t0_aux
 
1243
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1244
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1245
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1246
'just inserted' FROM t0_template
 
1247
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1248
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1249
BEGIN
 
1250
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1251
f_charbig = 'updated by trigger'
 
1252
      WHERE f_int1 = - old.f_int1;
 
1253
END|
 
1254
DELETE FROM t0_aux
 
1255
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1256
        
 
1257
# check trigger-7 success:      1
 
1258
DROP TRIGGER trg_1;
 
1259
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1260
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1261
f_charbig = 'just inserted'
 
1262
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1263
DELETE FROM t0_aux
 
1264
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1265
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1266
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1267
'just inserted' FROM t0_template
 
1268
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1269
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1270
BEGIN
 
1271
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1272
f_charbig = 'updated by trigger'
 
1273
      WHERE f_int1 = - old.f_int1;
 
1274
END|
 
1275
DELETE FROM t0_aux
 
1276
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1277
        
 
1278
# check trigger-8 success:      1
 
1279
DROP TRIGGER trg_1;
 
1280
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1281
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1282
f_charbig = 'just inserted'
 
1283
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1284
DELETE FROM t0_aux
 
1285
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1286
DELETE FROM t1
 
1287
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1288
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1289
BEGIN
 
1290
SET new.f_int1 = old.f_int1 + @max_row,
 
1291
new.f_int2 = old.f_int2 - @max_row,
 
1292
new.f_charbig = '####updated per update trigger####';
 
1293
END|
 
1294
UPDATE t1
 
1295
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1296
f_charbig = '####updated per update statement itself####';
 
1297
        
 
1298
# check trigger-9 success:      1
 
1299
DROP TRIGGER trg_2;
 
1300
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1301
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1302
f_charbig = CONCAT('===',f_char1,'===');
 
1303
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1304
BEGIN
 
1305
SET new.f_int1 = new.f_int1 + @max_row,
 
1306
new.f_int2 = new.f_int2 - @max_row,
 
1307
new.f_charbig = '####updated per update trigger####';
 
1308
END|
 
1309
UPDATE t1
 
1310
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1311
f_charbig = '####updated per update statement itself####';
 
1312
        
 
1313
# check trigger-10 success:     1
 
1314
DROP TRIGGER trg_2;
 
1315
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1316
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1317
f_charbig = CONCAT('===',f_char1,'===');
 
1318
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1319
BEGIN
 
1320
SET new.f_int1 = @my_max1 + @counter,
 
1321
new.f_int2 = @my_min2 - @counter,
 
1322
new.f_charbig = '####updated per insert trigger####';
 
1323
SET @counter = @counter + 1;
 
1324
END|
 
1325
SET @counter = 1;
 
1326
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1327
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1328
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1329
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1330
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1331
ORDER BY f_int1;
 
1332
DROP TRIGGER trg_3;
 
1333
        
 
1334
# check trigger-11 success:     1
 
1335
DELETE FROM t1
 
1336
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1337
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1338
AND f_charbig = '####updated per insert trigger####';
 
1339
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1340
BEGIN
 
1341
SET new.f_int1 = @my_max1 + @counter,
 
1342
new.f_int2 = @my_min2 - @counter,
 
1343
new.f_charbig = '####updated per insert trigger####';
 
1344
SET @counter = @counter + 1;
 
1345
END|
 
1346
SET @counter = 1;
 
1347
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1348
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1349
SELECT CAST(f_int1 AS CHAR),
 
1350
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1351
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1352
ORDER BY f_int1;
 
1353
DROP TRIGGER trg_3;
 
1354
        
 
1355
# check trigger-12 success:     1
 
1356
DELETE FROM t1
 
1357
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1358
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1359
AND f_charbig = '####updated per insert trigger####';
 
1360
ANALYZE  TABLE t1;
 
1361
Table   Op      Msg_type        Msg_text
 
1362
test.t1 analyze status  OK
 
1363
CHECK    TABLE t1 EXTENDED;
 
1364
Table   Op      Msg_type        Msg_text
 
1365
test.t1 check   status  OK
 
1366
CHECKSUM TABLE t1 EXTENDED;
 
1367
Table   Checksum
 
1368
test.t1 <some_value>
 
1369
OPTIMIZE TABLE t1;
 
1370
Table   Op      Msg_type        Msg_text
 
1371
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
1372
test.t1 optimize        status  OK
 
1373
# check layout success:    1
 
1374
REPAIR   TABLE t1 EXTENDED;
 
1375
Table   Op      Msg_type        Msg_text
 
1376
test.t1 repair  note    The storage engine for the table doesn't support repair
 
1377
# check layout success:    1
 
1378
TRUNCATE t1;
 
1379
        
 
1380
# check TRUNCATE success:       1
 
1381
# check layout success:    1
 
1382
# End usability test (inc/partition_check.inc)
 
1383
DROP TABLE t1;
 
1384
CREATE TABLE t1 (
 
1385
f_int1 INTEGER,
 
1386
f_int2 INTEGER,
 
1387
f_char1 CHAR(20),
 
1388
f_char2 CHAR(20),
 
1389
f_charbig VARCHAR(1000)
 
1390
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
1391
)
 
1392
PARTITION BY RANGE(f_int1)
 
1393
(PARTITION parta VALUES LESS THAN (0),
 
1394
PARTITION partb VALUES LESS THAN (5),
 
1395
PARTITION partc VALUES LESS THAN (10),
 
1396
PARTITION partd VALUES LESS THAN (10 + 5),
 
1397
PARTITION parte VALUES LESS THAN (20),
 
1398
PARTITION partf VALUES LESS THAN (2147483646));
 
1399
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1400
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1401
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
1402
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
1403
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1404
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1405
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1406
# Start usability test (inc/partition_check.inc)
 
1407
create_command
 
1408
SHOW CREATE TABLE t1;
 
1409
Table   Create Table
 
1410
t1      CREATE TABLE `t1` (
 
1411
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
1412
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
1413
  `f_char1` char(20) DEFAULT NULL,
 
1414
  `f_char2` char(20) DEFAULT NULL,
 
1415
  `f_charbig` varchar(1000) DEFAULT NULL
 
1416
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
1417
/*!50100 PARTITION BY RANGE (f_int1)
 
1418
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
1419
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
1420
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
1421
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
1422
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
1423
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
1424
 
 
1425
# check prerequisites-1 success:    1
 
1426
# check COUNT(*) success:    1
 
1427
# check MIN/MAX(f_int1) success:    1
 
1428
# check MIN/MAX(f_int2) success:    1
 
1429
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1430
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1431
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1432
WHERE f_int1 IN (2,3);
 
1433
# check prerequisites-3 success:    1
 
1434
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1435
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
1436
# check read via f_int1 success: 1
 
1437
# check read via f_int2 success: 1
 
1438
        
 
1439
# check multiple-1 success:     1
 
1440
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1441
        
 
1442
# check multiple-2 success:     1
 
1443
INSERT INTO t1 SELECT * FROM t0_template
 
1444
WHERE MOD(f_int1,3) = 0;
 
1445
        
 
1446
# check multiple-3 success:     1
 
1447
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1448
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1449
AND @max_row_div2 + @max_row_div4;
 
1450
        
 
1451
# check multiple-4 success:     1
 
1452
DELETE FROM t1
 
1453
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1454
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1455
        
 
1456
# check multiple-5 success:     1
 
1457
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1458
INSERT INTO t1
 
1459
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1460
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1461
f_charbig = '#SINGLE#';
 
1462
        
 
1463
# check single-1 success:       1
 
1464
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1465
INSERT INTO t1
 
1466
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1467
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1468
f_charbig = '#SINGLE#';
 
1469
        
 
1470
# check single-2 success:       1
 
1471
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1472
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1473
UPDATE t1 SET f_int1 = @cur_value2
 
1474
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1475
        
 
1476
# check single-3 success:       1
 
1477
SET @cur_value1= -1;
 
1478
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1479
UPDATE t1 SET f_int1 = @cur_value1
 
1480
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1481
        
 
1482
# check single-4 success:       1
 
1483
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1484
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1485
        
 
1486
# check single-5 success:       1
 
1487
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1488
        
 
1489
# check single-6 success:       1
 
1490
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1491
ERROR HY000: Table has no partition for value 2147483647
 
1492
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1493
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1494
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1495
f_charbig = '#NULL#';
 
1496
INSERT INTO t1
 
1497
SET f_int1 = NULL , f_int2 = -@max_row,
 
1498
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1499
f_charbig = '#NULL#';
 
1500
ERROR 23000: Column 'f_int1' cannot be null
 
1501
# check null success:    1
 
1502
DELETE FROM t1
 
1503
WHERE f_int1 = 0 AND f_int2 = 0
 
1504
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1505
AND f_charbig = '#NULL#';
 
1506
SET AUTOCOMMIT= 0;
 
1507
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1508
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1509
FROM t0_template source_tab
 
1510
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1511
        
 
1512
# check transactions-1 success:         1
 
1513
COMMIT WORK;
 
1514
        
 
1515
# check transactions-2 success:         1
 
1516
ROLLBACK WORK;
 
1517
        
 
1518
# check transactions-3 success:         1
 
1519
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1520
COMMIT WORK;
 
1521
ROLLBACK WORK;
 
1522
        
 
1523
# check transactions-4 success:         1
 
1524
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1525
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1526
FROM t0_template source_tab
 
1527
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1528
        
 
1529
# check transactions-5 success:         1
 
1530
ROLLBACK WORK;
 
1531
        
 
1532
# check transactions-6 success:         1
 
1533
# INFO: Storage engine used for t1 seems to be transactional.
 
1534
COMMIT;
 
1535
        
 
1536
# check transactions-7 success:         1
 
1537
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1538
COMMIT WORK;
 
1539
SET @@session.sql_mode = 'traditional';
 
1540
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1541
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1542
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1543
'', '', 'was inserted' FROM t0_template
 
1544
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1545
ERROR 22012: Division by 0
 
1546
COMMIT;
 
1547
        
 
1548
# check transactions-8 success:         1
 
1549
# INFO: Storage engine used for t1 seems to be able to revert
 
1550
#       changes made by the failing statement.
 
1551
SET @@session.sql_mode = '';
 
1552
SET AUTOCOMMIT= 1;
 
1553
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1554
COMMIT WORK;
 
1555
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
1556
        
 
1557
# check special-1 success:      1
 
1558
UPDATE t1 SET f_charbig = '';
 
1559
        
 
1560
# check special-2 success:      1
 
1561
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
1562
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1563
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
1564
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1565
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1566
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1567
'just inserted' FROM t0_template
 
1568
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1569
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
1570
BEGIN
 
1571
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1572
f_charbig = 'updated by trigger'
 
1573
      WHERE f_int1 = new.f_int1;
 
1574
END|
 
1575
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1576
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1577
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1578
        
 
1579
# check trigger-1 success:      1
 
1580
DROP TRIGGER trg_1;
 
1581
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1582
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1583
f_charbig = 'just inserted'
 
1584
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1585
DELETE FROM t0_aux
 
1586
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1587
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1588
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1589
'just inserted' FROM t0_template
 
1590
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1591
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1592
BEGIN
 
1593
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1594
f_charbig = 'updated by trigger'
 
1595
      WHERE f_int1 = new.f_int1;
 
1596
END|
 
1597
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1598
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1599
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1600
        
 
1601
# check trigger-2 success:      1
 
1602
DROP TRIGGER trg_1;
 
1603
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1604
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1605
f_charbig = 'just inserted'
 
1606
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1607
DELETE FROM t0_aux
 
1608
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1609
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1610
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1611
'just inserted' FROM t0_template
 
1612
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1613
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1614
BEGIN
 
1615
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1616
f_charbig = 'updated by trigger'
 
1617
      WHERE f_int1 = new.f_int1;
 
1618
END|
 
1619
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1620
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1621
        
 
1622
# check trigger-3 success:      1
 
1623
DROP TRIGGER trg_1;
 
1624
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1625
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1626
f_charbig = 'just inserted'
 
1627
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1628
DELETE FROM t0_aux
 
1629
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1630
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1631
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1632
'just inserted' FROM t0_template
 
1633
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1634
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1635
BEGIN
 
1636
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1637
f_charbig = 'updated by trigger'
 
1638
      WHERE f_int1 = - old.f_int1;
 
1639
END|
 
1640
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1641
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1642
        
 
1643
# check trigger-4 success:      1
 
1644
DROP TRIGGER trg_1;
 
1645
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1646
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1647
f_charbig = 'just inserted'
 
1648
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1649
DELETE FROM t0_aux
 
1650
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1651
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1652
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1653
'just inserted' FROM t0_template
 
1654
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1655
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1656
BEGIN
 
1657
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1658
f_charbig = 'updated by trigger'
 
1659
      WHERE f_int1 = new.f_int1;
 
1660
END|
 
1661
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1662
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1663
        
 
1664
# check trigger-5 success:      1
 
1665
DROP TRIGGER trg_1;
 
1666
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1667
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1668
f_charbig = 'just inserted'
 
1669
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1670
DELETE FROM t0_aux
 
1671
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1672
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1673
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1674
'just inserted' FROM t0_template
 
1675
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1676
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1677
BEGIN
 
1678
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1679
f_charbig = 'updated by trigger'
 
1680
      WHERE f_int1 = - old.f_int1;
 
1681
END|
 
1682
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1683
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1684
        
 
1685
# check trigger-6 success:      1
 
1686
DROP TRIGGER trg_1;
 
1687
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1688
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1689
f_charbig = 'just inserted'
 
1690
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1691
DELETE FROM t0_aux
 
1692
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1693
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1694
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1695
'just inserted' FROM t0_template
 
1696
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1697
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1698
BEGIN
 
1699
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1700
f_charbig = 'updated by trigger'
 
1701
      WHERE f_int1 = - old.f_int1;
 
1702
END|
 
1703
DELETE FROM t0_aux
 
1704
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1705
        
 
1706
# check trigger-7 success:      1
 
1707
DROP TRIGGER trg_1;
 
1708
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1709
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1710
f_charbig = 'just inserted'
 
1711
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1712
DELETE FROM t0_aux
 
1713
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1714
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1715
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1716
'just inserted' FROM t0_template
 
1717
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1718
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1719
BEGIN
 
1720
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1721
f_charbig = 'updated by trigger'
 
1722
      WHERE f_int1 = - old.f_int1;
 
1723
END|
 
1724
DELETE FROM t0_aux
 
1725
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1726
        
 
1727
# check trigger-8 success:      1
 
1728
DROP TRIGGER trg_1;
 
1729
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1730
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1731
f_charbig = 'just inserted'
 
1732
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1733
DELETE FROM t0_aux
 
1734
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1735
DELETE FROM t1
 
1736
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1737
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1738
BEGIN
 
1739
SET new.f_int1 = old.f_int1 + @max_row,
 
1740
new.f_int2 = old.f_int2 - @max_row,
 
1741
new.f_charbig = '####updated per update trigger####';
 
1742
END|
 
1743
UPDATE t1
 
1744
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1745
f_charbig = '####updated per update statement itself####';
 
1746
        
 
1747
# check trigger-9 success:      1
 
1748
DROP TRIGGER trg_2;
 
1749
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1750
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1751
f_charbig = CONCAT('===',f_char1,'===');
 
1752
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1753
BEGIN
 
1754
SET new.f_int1 = new.f_int1 + @max_row,
 
1755
new.f_int2 = new.f_int2 - @max_row,
 
1756
new.f_charbig = '####updated per update trigger####';
 
1757
END|
 
1758
UPDATE t1
 
1759
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1760
f_charbig = '####updated per update statement itself####';
 
1761
        
 
1762
# check trigger-10 success:     1
 
1763
DROP TRIGGER trg_2;
 
1764
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1765
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1766
f_charbig = CONCAT('===',f_char1,'===');
 
1767
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1768
BEGIN
 
1769
SET new.f_int1 = @my_max1 + @counter,
 
1770
new.f_int2 = @my_min2 - @counter,
 
1771
new.f_charbig = '####updated per insert trigger####';
 
1772
SET @counter = @counter + 1;
 
1773
END|
 
1774
SET @counter = 1;
 
1775
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1776
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1777
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1778
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1779
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1780
ORDER BY f_int1;
 
1781
DROP TRIGGER trg_3;
 
1782
        
 
1783
# check trigger-11 success:     1
 
1784
DELETE FROM t1
 
1785
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1786
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1787
AND f_charbig = '####updated per insert trigger####';
 
1788
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1789
BEGIN
 
1790
SET new.f_int1 = @my_max1 + @counter,
 
1791
new.f_int2 = @my_min2 - @counter,
 
1792
new.f_charbig = '####updated per insert trigger####';
 
1793
SET @counter = @counter + 1;
 
1794
END|
 
1795
SET @counter = 1;
 
1796
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1797
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1798
SELECT CAST(f_int1 AS CHAR),
 
1799
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1800
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1801
ORDER BY f_int1;
 
1802
DROP TRIGGER trg_3;
 
1803
        
 
1804
# check trigger-12 success:     1
 
1805
DELETE FROM t1
 
1806
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1807
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1808
AND f_charbig = '####updated per insert trigger####';
 
1809
ANALYZE  TABLE t1;
 
1810
Table   Op      Msg_type        Msg_text
 
1811
test.t1 analyze status  OK
 
1812
CHECK    TABLE t1 EXTENDED;
 
1813
Table   Op      Msg_type        Msg_text
 
1814
test.t1 check   status  OK
 
1815
CHECKSUM TABLE t1 EXTENDED;
 
1816
Table   Checksum
 
1817
test.t1 <some_value>
 
1818
OPTIMIZE TABLE t1;
 
1819
Table   Op      Msg_type        Msg_text
 
1820
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
1821
test.t1 optimize        status  OK
 
1822
# check layout success:    1
 
1823
REPAIR   TABLE t1 EXTENDED;
 
1824
Table   Op      Msg_type        Msg_text
 
1825
test.t1 repair  note    The storage engine for the table doesn't support repair
 
1826
# check layout success:    1
 
1827
TRUNCATE t1;
 
1828
        
 
1829
# check TRUNCATE success:       1
 
1830
# check layout success:    1
 
1831
# End usability test (inc/partition_check.inc)
 
1832
DROP TABLE t1;
 
1833
CREATE TABLE t1 (
 
1834
f_int1 INTEGER,
 
1835
f_int2 INTEGER,
 
1836
f_char1 CHAR(20),
 
1837
f_char2 CHAR(20),
 
1838
f_charbig VARCHAR(1000)
 
1839
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
1840
)
 
1841
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
1842
(PARTITION parta VALUES LESS THAN (0),
 
1843
PARTITION partb VALUES LESS THAN (5),
 
1844
PARTITION partc VALUES LESS THAN (10),
 
1845
PARTITION partd VALUES LESS THAN (2147483646));
 
1846
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1847
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1848
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
1849
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
1850
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1851
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1852
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1853
# Start usability test (inc/partition_check.inc)
 
1854
create_command
 
1855
SHOW CREATE TABLE t1;
 
1856
Table   Create Table
 
1857
t1      CREATE TABLE `t1` (
 
1858
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
1859
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
1860
  `f_char1` char(20) DEFAULT NULL,
 
1861
  `f_char2` char(20) DEFAULT NULL,
 
1862
  `f_charbig` varchar(1000) DEFAULT NULL
 
1863
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
1864
/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
 
1865
SUBPARTITION BY HASH (f_int1)
 
1866
SUBPARTITIONS 2
 
1867
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
1868
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
1869
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
1870
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
1871
 
 
1872
# check prerequisites-1 success:    1
 
1873
# check COUNT(*) success:    1
 
1874
# check MIN/MAX(f_int1) success:    1
 
1875
# check MIN/MAX(f_int2) success:    1
 
1876
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1877
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1878
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1879
WHERE f_int1 IN (2,3);
 
1880
# check prerequisites-3 success:    1
 
1881
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1882
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
1883
# check read via f_int1 success: 1
 
1884
# check read via f_int2 success: 1
 
1885
        
 
1886
# check multiple-1 success:     1
 
1887
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1888
        
 
1889
# check multiple-2 success:     1
 
1890
INSERT INTO t1 SELECT * FROM t0_template
 
1891
WHERE MOD(f_int1,3) = 0;
 
1892
        
 
1893
# check multiple-3 success:     1
 
1894
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1895
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1896
AND @max_row_div2 + @max_row_div4;
 
1897
        
 
1898
# check multiple-4 success:     1
 
1899
DELETE FROM t1
 
1900
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1901
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1902
        
 
1903
# check multiple-5 success:     1
 
1904
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1905
INSERT INTO t1
 
1906
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1907
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1908
f_charbig = '#SINGLE#';
 
1909
        
 
1910
# check single-1 success:       1
 
1911
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1912
INSERT INTO t1
 
1913
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1914
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1915
f_charbig = '#SINGLE#';
 
1916
        
 
1917
# check single-2 success:       1
 
1918
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1919
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1920
UPDATE t1 SET f_int1 = @cur_value2
 
1921
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1922
        
 
1923
# check single-3 success:       1
 
1924
SET @cur_value1= -1;
 
1925
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1926
UPDATE t1 SET f_int1 = @cur_value1
 
1927
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1928
        
 
1929
# check single-4 success:       1
 
1930
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1931
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1932
        
 
1933
# check single-5 success:       1
 
1934
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1935
        
 
1936
# check single-6 success:       1
 
1937
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1938
        
 
1939
# check single-7 success:       1
 
1940
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
1941
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1942
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1943
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1944
f_charbig = '#NULL#';
 
1945
INSERT INTO t1
 
1946
SET f_int1 = NULL , f_int2 = -@max_row,
 
1947
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1948
f_charbig = '#NULL#';
 
1949
ERROR 23000: Column 'f_int1' cannot be null
 
1950
# check null success:    1
 
1951
DELETE FROM t1
 
1952
WHERE f_int1 = 0 AND f_int2 = 0
 
1953
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1954
AND f_charbig = '#NULL#';
 
1955
SET AUTOCOMMIT= 0;
 
1956
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1957
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1958
FROM t0_template source_tab
 
1959
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1960
        
 
1961
# check transactions-1 success:         1
 
1962
COMMIT WORK;
 
1963
        
 
1964
# check transactions-2 success:         1
 
1965
ROLLBACK WORK;
 
1966
        
 
1967
# check transactions-3 success:         1
 
1968
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1969
COMMIT WORK;
 
1970
ROLLBACK WORK;
 
1971
        
 
1972
# check transactions-4 success:         1
 
1973
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1974
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1975
FROM t0_template source_tab
 
1976
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1977
        
 
1978
# check transactions-5 success:         1
 
1979
ROLLBACK WORK;
 
1980
        
 
1981
# check transactions-6 success:         1
 
1982
# INFO: Storage engine used for t1 seems to be transactional.
 
1983
COMMIT;
 
1984
        
 
1985
# check transactions-7 success:         1
 
1986
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1987
COMMIT WORK;
 
1988
SET @@session.sql_mode = 'traditional';
 
1989
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1990
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1991
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1992
'', '', 'was inserted' FROM t0_template
 
1993
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1994
ERROR 22012: Division by 0
 
1995
COMMIT;
 
1996
        
 
1997
# check transactions-8 success:         1
 
1998
# INFO: Storage engine used for t1 seems to be able to revert
 
1999
#       changes made by the failing statement.
 
2000
SET @@session.sql_mode = '';
 
2001
SET AUTOCOMMIT= 1;
 
2002
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2003
COMMIT WORK;
 
2004
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2005
        
 
2006
# check special-1 success:      1
 
2007
UPDATE t1 SET f_charbig = '';
 
2008
        
 
2009
# check special-2 success:      1
 
2010
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2011
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2012
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2013
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2014
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2015
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2016
'just inserted' FROM t0_template
 
2017
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2018
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2019
BEGIN
 
2020
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2021
f_charbig = 'updated by trigger'
 
2022
      WHERE f_int1 = new.f_int1;
 
2023
END|
 
2024
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2025
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2026
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2027
        
 
2028
# check trigger-1 success:      1
 
2029
DROP TRIGGER trg_1;
 
2030
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2031
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2032
f_charbig = 'just inserted'
 
2033
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2034
DELETE FROM t0_aux
 
2035
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2036
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2037
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2038
'just inserted' FROM t0_template
 
2039
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2040
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2041
BEGIN
 
2042
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2043
f_charbig = 'updated by trigger'
 
2044
      WHERE f_int1 = new.f_int1;
 
2045
END|
 
2046
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2047
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2048
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2049
        
 
2050
# check trigger-2 success:      1
 
2051
DROP TRIGGER trg_1;
 
2052
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2053
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2054
f_charbig = 'just inserted'
 
2055
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2056
DELETE FROM t0_aux
 
2057
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2058
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2059
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2060
'just inserted' FROM t0_template
 
2061
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2062
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2063
BEGIN
 
2064
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2065
f_charbig = 'updated by trigger'
 
2066
      WHERE f_int1 = new.f_int1;
 
2067
END|
 
2068
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2069
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2070
        
 
2071
# check trigger-3 success:      1
 
2072
DROP TRIGGER trg_1;
 
2073
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2074
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2075
f_charbig = 'just inserted'
 
2076
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2077
DELETE FROM t0_aux
 
2078
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2079
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2080
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2081
'just inserted' FROM t0_template
 
2082
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2083
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2084
BEGIN
 
2085
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2086
f_charbig = 'updated by trigger'
 
2087
      WHERE f_int1 = - old.f_int1;
 
2088
END|
 
2089
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2090
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2091
        
 
2092
# check trigger-4 success:      1
 
2093
DROP TRIGGER trg_1;
 
2094
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2095
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2096
f_charbig = 'just inserted'
 
2097
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2098
DELETE FROM t0_aux
 
2099
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2100
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2101
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2102
'just inserted' FROM t0_template
 
2103
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2104
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2105
BEGIN
 
2106
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2107
f_charbig = 'updated by trigger'
 
2108
      WHERE f_int1 = new.f_int1;
 
2109
END|
 
2110
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2111
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2112
        
 
2113
# check trigger-5 success:      1
 
2114
DROP TRIGGER trg_1;
 
2115
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2116
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2117
f_charbig = 'just inserted'
 
2118
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2119
DELETE FROM t0_aux
 
2120
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2121
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2122
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2123
'just inserted' FROM t0_template
 
2124
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2125
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2126
BEGIN
 
2127
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2128
f_charbig = 'updated by trigger'
 
2129
      WHERE f_int1 = - old.f_int1;
 
2130
END|
 
2131
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2132
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2133
        
 
2134
# check trigger-6 success:      1
 
2135
DROP TRIGGER trg_1;
 
2136
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2137
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2138
f_charbig = 'just inserted'
 
2139
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2140
DELETE FROM t0_aux
 
2141
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2142
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2143
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2144
'just inserted' FROM t0_template
 
2145
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2146
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2147
BEGIN
 
2148
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2149
f_charbig = 'updated by trigger'
 
2150
      WHERE f_int1 = - old.f_int1;
 
2151
END|
 
2152
DELETE FROM t0_aux
 
2153
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2154
        
 
2155
# check trigger-7 success:      1
 
2156
DROP TRIGGER trg_1;
 
2157
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2158
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2159
f_charbig = 'just inserted'
 
2160
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2161
DELETE FROM t0_aux
 
2162
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2163
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2164
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2165
'just inserted' FROM t0_template
 
2166
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2167
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2168
BEGIN
 
2169
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2170
f_charbig = 'updated by trigger'
 
2171
      WHERE f_int1 = - old.f_int1;
 
2172
END|
 
2173
DELETE FROM t0_aux
 
2174
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2175
        
 
2176
# check trigger-8 success:      1
 
2177
DROP TRIGGER trg_1;
 
2178
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2179
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2180
f_charbig = 'just inserted'
 
2181
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2182
DELETE FROM t0_aux
 
2183
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2184
DELETE FROM t1
 
2185
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2186
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2187
BEGIN
 
2188
SET new.f_int1 = old.f_int1 + @max_row,
 
2189
new.f_int2 = old.f_int2 - @max_row,
 
2190
new.f_charbig = '####updated per update trigger####';
 
2191
END|
 
2192
UPDATE t1
 
2193
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2194
f_charbig = '####updated per update statement itself####';
 
2195
        
 
2196
# check trigger-9 success:      1
 
2197
DROP TRIGGER trg_2;
 
2198
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2199
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2200
f_charbig = CONCAT('===',f_char1,'===');
 
2201
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2202
BEGIN
 
2203
SET new.f_int1 = new.f_int1 + @max_row,
 
2204
new.f_int2 = new.f_int2 - @max_row,
 
2205
new.f_charbig = '####updated per update trigger####';
 
2206
END|
 
2207
UPDATE t1
 
2208
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2209
f_charbig = '####updated per update statement itself####';
 
2210
        
 
2211
# check trigger-10 success:     1
 
2212
DROP TRIGGER trg_2;
 
2213
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2214
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2215
f_charbig = CONCAT('===',f_char1,'===');
 
2216
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2217
BEGIN
 
2218
SET new.f_int1 = @my_max1 + @counter,
 
2219
new.f_int2 = @my_min2 - @counter,
 
2220
new.f_charbig = '####updated per insert trigger####';
 
2221
SET @counter = @counter + 1;
 
2222
END|
 
2223
SET @counter = 1;
 
2224
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2225
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2226
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2227
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2228
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2229
ORDER BY f_int1;
 
2230
DROP TRIGGER trg_3;
 
2231
        
 
2232
# check trigger-11 success:     1
 
2233
DELETE FROM t1
 
2234
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2235
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2236
AND f_charbig = '####updated per insert trigger####';
 
2237
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2238
BEGIN
 
2239
SET new.f_int1 = @my_max1 + @counter,
 
2240
new.f_int2 = @my_min2 - @counter,
 
2241
new.f_charbig = '####updated per insert trigger####';
 
2242
SET @counter = @counter + 1;
 
2243
END|
 
2244
SET @counter = 1;
 
2245
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2246
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2247
SELECT CAST(f_int1 AS CHAR),
 
2248
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2249
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2250
ORDER BY f_int1;
 
2251
DROP TRIGGER trg_3;
 
2252
        
 
2253
# check trigger-12 success:     1
 
2254
DELETE FROM t1
 
2255
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2256
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2257
AND f_charbig = '####updated per insert trigger####';
 
2258
ANALYZE  TABLE t1;
 
2259
Table   Op      Msg_type        Msg_text
 
2260
test.t1 analyze status  OK
 
2261
CHECK    TABLE t1 EXTENDED;
 
2262
Table   Op      Msg_type        Msg_text
 
2263
test.t1 check   status  OK
 
2264
CHECKSUM TABLE t1 EXTENDED;
 
2265
Table   Checksum
 
2266
test.t1 <some_value>
 
2267
OPTIMIZE TABLE t1;
 
2268
Table   Op      Msg_type        Msg_text
 
2269
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
2270
test.t1 optimize        status  OK
 
2271
# check layout success:    1
 
2272
REPAIR   TABLE t1 EXTENDED;
 
2273
Table   Op      Msg_type        Msg_text
 
2274
test.t1 repair  note    The storage engine for the table doesn't support repair
 
2275
# check layout success:    1
 
2276
TRUNCATE t1;
 
2277
        
 
2278
# check TRUNCATE success:       1
 
2279
# check layout success:    1
 
2280
# End usability test (inc/partition_check.inc)
 
2281
DROP TABLE t1;
 
2282
CREATE TABLE t1 (
 
2283
f_int1 INTEGER,
 
2284
f_int2 INTEGER,
 
2285
f_char1 CHAR(20),
 
2286
f_char2 CHAR(20),
 
2287
f_charbig VARCHAR(1000)
 
2288
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
2289
)
 
2290
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
2291
(PARTITION part1 VALUES LESS THAN (0)
 
2292
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
2293
PARTITION part2 VALUES LESS THAN (5)
 
2294
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
2295
PARTITION part3 VALUES LESS THAN (10)
 
2296
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
2297
PARTITION part4 VALUES LESS THAN (2147483646)
 
2298
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
2299
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2300
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2301
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
2302
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
2303
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2304
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2305
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2306
# Start usability test (inc/partition_check.inc)
 
2307
create_command
 
2308
SHOW CREATE TABLE t1;
 
2309
Table   Create Table
 
2310
t1      CREATE TABLE `t1` (
 
2311
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
2312
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
2313
  `f_char1` char(20) DEFAULT NULL,
 
2314
  `f_char2` char(20) DEFAULT NULL,
 
2315
  `f_charbig` varchar(1000) DEFAULT NULL
 
2316
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
2317
/*!50100 PARTITION BY RANGE (f_int1)
 
2318
SUBPARTITION BY KEY (f_int1)
 
2319
(PARTITION part1 VALUES LESS THAN (0)
 
2320
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
2321
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
2322
 PARTITION part2 VALUES LESS THAN (5)
 
2323
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
2324
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
2325
 PARTITION part3 VALUES LESS THAN (10)
 
2326
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
2327
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
2328
 PARTITION part4 VALUES LESS THAN (2147483646)
 
2329
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
2330
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
2331
 
 
2332
# check prerequisites-1 success:    1
 
2333
# check COUNT(*) success:    1
 
2334
# check MIN/MAX(f_int1) success:    1
 
2335
# check MIN/MAX(f_int2) success:    1
 
2336
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2337
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2338
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2339
WHERE f_int1 IN (2,3);
 
2340
# check prerequisites-3 success:    1
 
2341
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2342
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
2343
# check read via f_int1 success: 1
 
2344
# check read via f_int2 success: 1
 
2345
        
 
2346
# check multiple-1 success:     1
 
2347
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2348
        
 
2349
# check multiple-2 success:     1
 
2350
INSERT INTO t1 SELECT * FROM t0_template
 
2351
WHERE MOD(f_int1,3) = 0;
 
2352
        
 
2353
# check multiple-3 success:     1
 
2354
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2355
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2356
AND @max_row_div2 + @max_row_div4;
 
2357
        
 
2358
# check multiple-4 success:     1
 
2359
DELETE FROM t1
 
2360
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2361
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2362
        
 
2363
# check multiple-5 success:     1
 
2364
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2365
INSERT INTO t1
 
2366
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2367
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2368
f_charbig = '#SINGLE#';
 
2369
        
 
2370
# check single-1 success:       1
 
2371
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2372
INSERT INTO t1
 
2373
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2374
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2375
f_charbig = '#SINGLE#';
 
2376
        
 
2377
# check single-2 success:       1
 
2378
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2379
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2380
UPDATE t1 SET f_int1 = @cur_value2
 
2381
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2382
        
 
2383
# check single-3 success:       1
 
2384
SET @cur_value1= -1;
 
2385
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2386
UPDATE t1 SET f_int1 = @cur_value1
 
2387
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2388
        
 
2389
# check single-4 success:       1
 
2390
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2391
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2392
        
 
2393
# check single-5 success:       1
 
2394
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2395
        
 
2396
# check single-6 success:       1
 
2397
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2398
ERROR HY000: Table has no partition for value 2147483647
 
2399
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2400
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2401
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2402
f_charbig = '#NULL#';
 
2403
INSERT INTO t1
 
2404
SET f_int1 = NULL , f_int2 = -@max_row,
 
2405
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2406
f_charbig = '#NULL#';
 
2407
ERROR 23000: Column 'f_int1' cannot be null
 
2408
# check null success:    1
 
2409
DELETE FROM t1
 
2410
WHERE f_int1 = 0 AND f_int2 = 0
 
2411
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2412
AND f_charbig = '#NULL#';
 
2413
SET AUTOCOMMIT= 0;
 
2414
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2415
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2416
FROM t0_template source_tab
 
2417
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2418
        
 
2419
# check transactions-1 success:         1
 
2420
COMMIT WORK;
 
2421
        
 
2422
# check transactions-2 success:         1
 
2423
ROLLBACK WORK;
 
2424
        
 
2425
# check transactions-3 success:         1
 
2426
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2427
COMMIT WORK;
 
2428
ROLLBACK WORK;
 
2429
        
 
2430
# check transactions-4 success:         1
 
2431
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2432
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2433
FROM t0_template source_tab
 
2434
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2435
        
 
2436
# check transactions-5 success:         1
 
2437
ROLLBACK WORK;
 
2438
        
 
2439
# check transactions-6 success:         1
 
2440
# INFO: Storage engine used for t1 seems to be transactional.
 
2441
COMMIT;
 
2442
        
 
2443
# check transactions-7 success:         1
 
2444
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2445
COMMIT WORK;
 
2446
SET @@session.sql_mode = 'traditional';
 
2447
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2448
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2449
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2450
'', '', 'was inserted' FROM t0_template
 
2451
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2452
ERROR 22012: Division by 0
 
2453
COMMIT;
 
2454
        
 
2455
# check transactions-8 success:         1
 
2456
# INFO: Storage engine used for t1 seems to be able to revert
 
2457
#       changes made by the failing statement.
 
2458
SET @@session.sql_mode = '';
 
2459
SET AUTOCOMMIT= 1;
 
2460
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2461
COMMIT WORK;
 
2462
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2463
        
 
2464
# check special-1 success:      1
 
2465
UPDATE t1 SET f_charbig = '';
 
2466
        
 
2467
# check special-2 success:      1
 
2468
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2469
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2470
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2471
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2472
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2473
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2474
'just inserted' FROM t0_template
 
2475
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2476
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2477
BEGIN
 
2478
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2479
f_charbig = 'updated by trigger'
 
2480
      WHERE f_int1 = new.f_int1;
 
2481
END|
 
2482
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2483
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2484
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2485
        
 
2486
# check trigger-1 success:      1
 
2487
DROP TRIGGER trg_1;
 
2488
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2489
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2490
f_charbig = 'just inserted'
 
2491
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2492
DELETE FROM t0_aux
 
2493
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2494
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2495
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2496
'just inserted' FROM t0_template
 
2497
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2498
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2499
BEGIN
 
2500
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2501
f_charbig = 'updated by trigger'
 
2502
      WHERE f_int1 = new.f_int1;
 
2503
END|
 
2504
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2505
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2506
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2507
        
 
2508
# check trigger-2 success:      1
 
2509
DROP TRIGGER trg_1;
 
2510
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2511
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2512
f_charbig = 'just inserted'
 
2513
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2514
DELETE FROM t0_aux
 
2515
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2516
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2517
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2518
'just inserted' FROM t0_template
 
2519
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2520
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2521
BEGIN
 
2522
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2523
f_charbig = 'updated by trigger'
 
2524
      WHERE f_int1 = new.f_int1;
 
2525
END|
 
2526
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2527
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2528
        
 
2529
# check trigger-3 success:      1
 
2530
DROP TRIGGER trg_1;
 
2531
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2532
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2533
f_charbig = 'just inserted'
 
2534
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2535
DELETE FROM t0_aux
 
2536
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2537
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2538
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2539
'just inserted' FROM t0_template
 
2540
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2541
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2542
BEGIN
 
2543
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2544
f_charbig = 'updated by trigger'
 
2545
      WHERE f_int1 = - old.f_int1;
 
2546
END|
 
2547
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2548
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2549
        
 
2550
# check trigger-4 success:      1
 
2551
DROP TRIGGER trg_1;
 
2552
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2553
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2554
f_charbig = 'just inserted'
 
2555
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2556
DELETE FROM t0_aux
 
2557
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2558
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2559
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2560
'just inserted' FROM t0_template
 
2561
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2562
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2563
BEGIN
 
2564
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2565
f_charbig = 'updated by trigger'
 
2566
      WHERE f_int1 = new.f_int1;
 
2567
END|
 
2568
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2569
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2570
        
 
2571
# check trigger-5 success:      1
 
2572
DROP TRIGGER trg_1;
 
2573
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2574
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2575
f_charbig = 'just inserted'
 
2576
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2577
DELETE FROM t0_aux
 
2578
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2579
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2580
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2581
'just inserted' FROM t0_template
 
2582
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2583
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2584
BEGIN
 
2585
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2586
f_charbig = 'updated by trigger'
 
2587
      WHERE f_int1 = - old.f_int1;
 
2588
END|
 
2589
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2590
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2591
        
 
2592
# check trigger-6 success:      1
 
2593
DROP TRIGGER trg_1;
 
2594
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2595
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2596
f_charbig = 'just inserted'
 
2597
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2598
DELETE FROM t0_aux
 
2599
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2600
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2601
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2602
'just inserted' FROM t0_template
 
2603
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2604
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2605
BEGIN
 
2606
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2607
f_charbig = 'updated by trigger'
 
2608
      WHERE f_int1 = - old.f_int1;
 
2609
END|
 
2610
DELETE FROM t0_aux
 
2611
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2612
        
 
2613
# check trigger-7 success:      1
 
2614
DROP TRIGGER trg_1;
 
2615
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2616
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2617
f_charbig = 'just inserted'
 
2618
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2619
DELETE FROM t0_aux
 
2620
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2621
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2622
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2623
'just inserted' FROM t0_template
 
2624
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2625
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2626
BEGIN
 
2627
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2628
f_charbig = 'updated by trigger'
 
2629
      WHERE f_int1 = - old.f_int1;
 
2630
END|
 
2631
DELETE FROM t0_aux
 
2632
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2633
        
 
2634
# check trigger-8 success:      1
 
2635
DROP TRIGGER trg_1;
 
2636
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2637
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2638
f_charbig = 'just inserted'
 
2639
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2640
DELETE FROM t0_aux
 
2641
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2642
DELETE FROM t1
 
2643
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2644
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2645
BEGIN
 
2646
SET new.f_int1 = old.f_int1 + @max_row,
 
2647
new.f_int2 = old.f_int2 - @max_row,
 
2648
new.f_charbig = '####updated per update trigger####';
 
2649
END|
 
2650
UPDATE t1
 
2651
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2652
f_charbig = '####updated per update statement itself####';
 
2653
        
 
2654
# check trigger-9 success:      1
 
2655
DROP TRIGGER trg_2;
 
2656
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2657
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2658
f_charbig = CONCAT('===',f_char1,'===');
 
2659
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2660
BEGIN
 
2661
SET new.f_int1 = new.f_int1 + @max_row,
 
2662
new.f_int2 = new.f_int2 - @max_row,
 
2663
new.f_charbig = '####updated per update trigger####';
 
2664
END|
 
2665
UPDATE t1
 
2666
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2667
f_charbig = '####updated per update statement itself####';
 
2668
        
 
2669
# check trigger-10 success:     1
 
2670
DROP TRIGGER trg_2;
 
2671
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2672
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2673
f_charbig = CONCAT('===',f_char1,'===');
 
2674
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2675
BEGIN
 
2676
SET new.f_int1 = @my_max1 + @counter,
 
2677
new.f_int2 = @my_min2 - @counter,
 
2678
new.f_charbig = '####updated per insert trigger####';
 
2679
SET @counter = @counter + 1;
 
2680
END|
 
2681
SET @counter = 1;
 
2682
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2683
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2684
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2685
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2686
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2687
ORDER BY f_int1;
 
2688
DROP TRIGGER trg_3;
 
2689
        
 
2690
# check trigger-11 success:     1
 
2691
DELETE FROM t1
 
2692
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2693
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2694
AND f_charbig = '####updated per insert trigger####';
 
2695
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2696
BEGIN
 
2697
SET new.f_int1 = @my_max1 + @counter,
 
2698
new.f_int2 = @my_min2 - @counter,
 
2699
new.f_charbig = '####updated per insert trigger####';
 
2700
SET @counter = @counter + 1;
 
2701
END|
 
2702
SET @counter = 1;
 
2703
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2704
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2705
SELECT CAST(f_int1 AS CHAR),
 
2706
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2707
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2708
ORDER BY f_int1;
 
2709
DROP TRIGGER trg_3;
 
2710
        
 
2711
# check trigger-12 success:     1
 
2712
DELETE FROM t1
 
2713
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2714
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2715
AND f_charbig = '####updated per insert trigger####';
 
2716
ANALYZE  TABLE t1;
 
2717
Table   Op      Msg_type        Msg_text
 
2718
test.t1 analyze status  OK
 
2719
CHECK    TABLE t1 EXTENDED;
 
2720
Table   Op      Msg_type        Msg_text
 
2721
test.t1 check   status  OK
 
2722
CHECKSUM TABLE t1 EXTENDED;
 
2723
Table   Checksum
 
2724
test.t1 <some_value>
 
2725
OPTIMIZE TABLE t1;
 
2726
Table   Op      Msg_type        Msg_text
 
2727
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
2728
test.t1 optimize        status  OK
 
2729
# check layout success:    1
 
2730
REPAIR   TABLE t1 EXTENDED;
 
2731
Table   Op      Msg_type        Msg_text
 
2732
test.t1 repair  note    The storage engine for the table doesn't support repair
 
2733
# check layout success:    1
 
2734
TRUNCATE t1;
 
2735
        
 
2736
# check TRUNCATE success:       1
 
2737
# check layout success:    1
 
2738
# End usability test (inc/partition_check.inc)
 
2739
DROP TABLE t1;
 
2740
CREATE TABLE t1 (
 
2741
f_int1 INTEGER,
 
2742
f_int2 INTEGER,
 
2743
f_char1 CHAR(20),
 
2744
f_char2 CHAR(20),
 
2745
f_charbig VARCHAR(1000)
 
2746
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
2747
)
 
2748
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
2749
(PARTITION part1 VALUES IN (0)
 
2750
(SUBPARTITION sp11, SUBPARTITION sp12),
 
2751
PARTITION part2 VALUES IN (1)
 
2752
(SUBPARTITION sp21, SUBPARTITION sp22),
 
2753
PARTITION part3 VALUES IN (2)
 
2754
(SUBPARTITION sp31, SUBPARTITION sp32),
 
2755
PARTITION part4 VALUES IN (NULL)
 
2756
(SUBPARTITION sp41, SUBPARTITION sp42));
 
2757
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2758
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2759
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
2760
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
2761
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2762
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2763
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2764
# Start usability test (inc/partition_check.inc)
 
2765
create_command
 
2766
SHOW CREATE TABLE t1;
 
2767
Table   Create Table
 
2768
t1      CREATE TABLE `t1` (
 
2769
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
2770
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
2771
  `f_char1` char(20) DEFAULT NULL,
 
2772
  `f_char2` char(20) DEFAULT NULL,
 
2773
  `f_charbig` varchar(1000) DEFAULT NULL
 
2774
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
2775
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
2776
SUBPARTITION BY HASH (f_int1 + 1)
 
2777
(PARTITION part1 VALUES IN (0)
 
2778
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
2779
  SUBPARTITION sp12 ENGINE = InnoDB),
 
2780
 PARTITION part2 VALUES IN (1)
 
2781
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
2782
  SUBPARTITION sp22 ENGINE = InnoDB),
 
2783
 PARTITION part3 VALUES IN (2)
 
2784
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
2785
  SUBPARTITION sp32 ENGINE = InnoDB),
 
2786
 PARTITION part4 VALUES IN (NULL)
 
2787
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
2788
  SUBPARTITION sp42 ENGINE = InnoDB)) */
 
2789
 
 
2790
# check prerequisites-1 success:    1
 
2791
# check COUNT(*) success:    1
 
2792
# check MIN/MAX(f_int1) success:    1
 
2793
# check MIN/MAX(f_int2) success:    1
 
2794
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2795
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2796
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2797
WHERE f_int1 IN (2,3);
 
2798
# check prerequisites-3 success:    1
 
2799
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2800
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
2801
# check read via f_int1 success: 1
 
2802
# check read via f_int2 success: 1
 
2803
        
 
2804
# check multiple-1 success:     1
 
2805
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2806
        
 
2807
# check multiple-2 success:     1
 
2808
INSERT INTO t1 SELECT * FROM t0_template
 
2809
WHERE MOD(f_int1,3) = 0;
 
2810
        
 
2811
# check multiple-3 success:     1
 
2812
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2813
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2814
AND @max_row_div2 + @max_row_div4;
 
2815
        
 
2816
# check multiple-4 success:     1
 
2817
DELETE FROM t1
 
2818
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2819
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2820
        
 
2821
# check multiple-5 success:     1
 
2822
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2823
INSERT INTO t1
 
2824
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2825
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2826
f_charbig = '#SINGLE#';
 
2827
        
 
2828
# check single-1 success:       1
 
2829
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2830
INSERT INTO t1
 
2831
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2832
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2833
f_charbig = '#SINGLE#';
 
2834
        
 
2835
# check single-2 success:       1
 
2836
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2837
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2838
UPDATE t1 SET f_int1 = @cur_value2
 
2839
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2840
        
 
2841
# check single-3 success:       1
 
2842
SET @cur_value1= -1;
 
2843
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2844
UPDATE t1 SET f_int1 = @cur_value1
 
2845
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2846
        
 
2847
# check single-4 success:       1
 
2848
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2849
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2850
        
 
2851
# check single-5 success:       1
 
2852
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2853
        
 
2854
# check single-6 success:       1
 
2855
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2856
        
 
2857
# check single-7 success:       1
 
2858
DELETE FROM t1 WHERE f_charbig = '#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
ERROR 23000: Column 'f_int1' cannot be null
 
2868
# check null success:    1
 
2869
DELETE FROM t1
 
2870
WHERE f_int1 = 0 AND f_int2 = 0
 
2871
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2872
AND f_charbig = '#NULL#';
 
2873
SET AUTOCOMMIT= 0;
 
2874
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2875
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2876
FROM t0_template source_tab
 
2877
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2878
        
 
2879
# check transactions-1 success:         1
 
2880
COMMIT WORK;
 
2881
        
 
2882
# check transactions-2 success:         1
 
2883
ROLLBACK WORK;
 
2884
        
 
2885
# check transactions-3 success:         1
 
2886
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2887
COMMIT WORK;
 
2888
ROLLBACK WORK;
 
2889
        
 
2890
# check transactions-4 success:         1
 
2891
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2892
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2893
FROM t0_template source_tab
 
2894
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2895
        
 
2896
# check transactions-5 success:         1
 
2897
ROLLBACK WORK;
 
2898
        
 
2899
# check transactions-6 success:         1
 
2900
# INFO: Storage engine used for t1 seems to be transactional.
 
2901
COMMIT;
 
2902
        
 
2903
# check transactions-7 success:         1
 
2904
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2905
COMMIT WORK;
 
2906
SET @@session.sql_mode = 'traditional';
 
2907
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2908
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2909
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2910
'', '', 'was inserted' FROM t0_template
 
2911
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2912
ERROR 22012: Division by 0
 
2913
COMMIT;
 
2914
        
 
2915
# check transactions-8 success:         1
 
2916
# INFO: Storage engine used for t1 seems to be able to revert
 
2917
#       changes made by the failing statement.
 
2918
SET @@session.sql_mode = '';
 
2919
SET AUTOCOMMIT= 1;
 
2920
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2921
COMMIT WORK;
 
2922
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2923
        
 
2924
# check special-1 success:      1
 
2925
UPDATE t1 SET f_charbig = '';
 
2926
        
 
2927
# check special-2 success:      1
 
2928
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2929
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2930
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2931
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2932
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2933
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2934
'just inserted' FROM t0_template
 
2935
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2936
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2937
BEGIN
 
2938
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2939
f_charbig = 'updated by trigger'
 
2940
      WHERE f_int1 = new.f_int1;
 
2941
END|
 
2942
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2943
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2944
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2945
        
 
2946
# check trigger-1 success:      1
 
2947
DROP TRIGGER trg_1;
 
2948
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2949
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2950
f_charbig = 'just inserted'
 
2951
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2952
DELETE FROM t0_aux
 
2953
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2954
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2955
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2956
'just inserted' FROM t0_template
 
2957
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2958
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2959
BEGIN
 
2960
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2961
f_charbig = 'updated by trigger'
 
2962
      WHERE f_int1 = new.f_int1;
 
2963
END|
 
2964
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2965
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2966
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2967
        
 
2968
# check trigger-2 success:      1
 
2969
DROP TRIGGER trg_1;
 
2970
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2971
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2972
f_charbig = 'just inserted'
 
2973
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2974
DELETE FROM t0_aux
 
2975
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2976
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2977
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2978
'just inserted' FROM t0_template
 
2979
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2980
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2981
BEGIN
 
2982
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2983
f_charbig = 'updated by trigger'
 
2984
      WHERE f_int1 = new.f_int1;
 
2985
END|
 
2986
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2987
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2988
        
 
2989
# check trigger-3 success:      1
 
2990
DROP TRIGGER trg_1;
 
2991
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2992
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2993
f_charbig = 'just inserted'
 
2994
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2995
DELETE FROM t0_aux
 
2996
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2997
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2998
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2999
'just inserted' FROM t0_template
 
3000
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3001
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3002
BEGIN
 
3003
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3004
f_charbig = 'updated by trigger'
 
3005
      WHERE f_int1 = - old.f_int1;
 
3006
END|
 
3007
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3008
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3009
        
 
3010
# check trigger-4 success:      1
 
3011
DROP TRIGGER trg_1;
 
3012
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3013
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3014
f_charbig = 'just inserted'
 
3015
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3016
DELETE FROM t0_aux
 
3017
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3018
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3019
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3020
'just inserted' FROM t0_template
 
3021
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3022
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3023
BEGIN
 
3024
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3025
f_charbig = 'updated by trigger'
 
3026
      WHERE f_int1 = new.f_int1;
 
3027
END|
 
3028
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3029
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3030
        
 
3031
# check trigger-5 success:      1
 
3032
DROP TRIGGER trg_1;
 
3033
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3034
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3035
f_charbig = 'just inserted'
 
3036
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3037
DELETE FROM t0_aux
 
3038
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3039
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3040
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3041
'just inserted' FROM t0_template
 
3042
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3043
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3044
BEGIN
 
3045
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3046
f_charbig = 'updated by trigger'
 
3047
      WHERE f_int1 = - old.f_int1;
 
3048
END|
 
3049
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3050
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3051
        
 
3052
# check trigger-6 success:      1
 
3053
DROP TRIGGER trg_1;
 
3054
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3055
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3056
f_charbig = 'just inserted'
 
3057
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3058
DELETE FROM t0_aux
 
3059
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3060
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3061
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3062
'just inserted' FROM t0_template
 
3063
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3064
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3065
BEGIN
 
3066
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3067
f_charbig = 'updated by trigger'
 
3068
      WHERE f_int1 = - old.f_int1;
 
3069
END|
 
3070
DELETE FROM t0_aux
 
3071
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3072
        
 
3073
# check trigger-7 success:      1
 
3074
DROP TRIGGER trg_1;
 
3075
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3076
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3077
f_charbig = 'just inserted'
 
3078
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3079
DELETE FROM t0_aux
 
3080
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3081
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3082
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3083
'just inserted' FROM t0_template
 
3084
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3085
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3086
BEGIN
 
3087
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3088
f_charbig = 'updated by trigger'
 
3089
      WHERE f_int1 = - old.f_int1;
 
3090
END|
 
3091
DELETE FROM t0_aux
 
3092
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3093
        
 
3094
# check trigger-8 success:      1
 
3095
DROP TRIGGER trg_1;
 
3096
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3097
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3098
f_charbig = 'just inserted'
 
3099
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3100
DELETE FROM t0_aux
 
3101
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3102
DELETE FROM t1
 
3103
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3104
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3105
BEGIN
 
3106
SET new.f_int1 = old.f_int1 + @max_row,
 
3107
new.f_int2 = old.f_int2 - @max_row,
 
3108
new.f_charbig = '####updated per update trigger####';
 
3109
END|
 
3110
UPDATE t1
 
3111
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3112
f_charbig = '####updated per update statement itself####';
 
3113
        
 
3114
# check trigger-9 success:      1
 
3115
DROP TRIGGER trg_2;
 
3116
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3117
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3118
f_charbig = CONCAT('===',f_char1,'===');
 
3119
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3120
BEGIN
 
3121
SET new.f_int1 = new.f_int1 + @max_row,
 
3122
new.f_int2 = new.f_int2 - @max_row,
 
3123
new.f_charbig = '####updated per update trigger####';
 
3124
END|
 
3125
UPDATE t1
 
3126
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3127
f_charbig = '####updated per update statement itself####';
 
3128
        
 
3129
# check trigger-10 success:     1
 
3130
DROP TRIGGER trg_2;
 
3131
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3132
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3133
f_charbig = CONCAT('===',f_char1,'===');
 
3134
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3135
BEGIN
 
3136
SET new.f_int1 = @my_max1 + @counter,
 
3137
new.f_int2 = @my_min2 - @counter,
 
3138
new.f_charbig = '####updated per insert trigger####';
 
3139
SET @counter = @counter + 1;
 
3140
END|
 
3141
SET @counter = 1;
 
3142
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3143
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3144
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3145
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3146
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3147
ORDER BY f_int1;
 
3148
DROP TRIGGER trg_3;
 
3149
        
 
3150
# check trigger-11 success:     1
 
3151
DELETE FROM t1
 
3152
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3153
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3154
AND f_charbig = '####updated per insert trigger####';
 
3155
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3156
BEGIN
 
3157
SET new.f_int1 = @my_max1 + @counter,
 
3158
new.f_int2 = @my_min2 - @counter,
 
3159
new.f_charbig = '####updated per insert trigger####';
 
3160
SET @counter = @counter + 1;
 
3161
END|
 
3162
SET @counter = 1;
 
3163
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3164
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3165
SELECT CAST(f_int1 AS CHAR),
 
3166
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3167
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3168
ORDER BY f_int1;
 
3169
DROP TRIGGER trg_3;
 
3170
        
 
3171
# check trigger-12 success:     1
 
3172
DELETE FROM t1
 
3173
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3174
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3175
AND f_charbig = '####updated per insert trigger####';
 
3176
ANALYZE  TABLE t1;
 
3177
Table   Op      Msg_type        Msg_text
 
3178
test.t1 analyze status  OK
 
3179
CHECK    TABLE t1 EXTENDED;
 
3180
Table   Op      Msg_type        Msg_text
 
3181
test.t1 check   status  OK
 
3182
CHECKSUM TABLE t1 EXTENDED;
 
3183
Table   Checksum
 
3184
test.t1 <some_value>
 
3185
OPTIMIZE TABLE t1;
 
3186
Table   Op      Msg_type        Msg_text
 
3187
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
3188
test.t1 optimize        status  OK
 
3189
# check layout success:    1
 
3190
REPAIR   TABLE t1 EXTENDED;
 
3191
Table   Op      Msg_type        Msg_text
 
3192
test.t1 repair  note    The storage engine for the table doesn't support repair
 
3193
# check layout success:    1
 
3194
TRUNCATE t1;
 
3195
        
 
3196
# check TRUNCATE success:       1
 
3197
# check layout success:    1
 
3198
# End usability test (inc/partition_check.inc)
 
3199
DROP TABLE t1;
 
3200
CREATE TABLE t1 (
 
3201
f_int1 INTEGER,
 
3202
f_int2 INTEGER,
 
3203
f_char1 CHAR(20),
 
3204
f_char2 CHAR(20),
 
3205
f_charbig VARCHAR(1000)
 
3206
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
3207
)
 
3208
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
3209
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
3210
(PARTITION part1 VALUES IN (0),
 
3211
PARTITION part2 VALUES IN (1),
 
3212
PARTITION part3 VALUES IN (NULL));
 
3213
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3214
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3215
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
3216
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
3217
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3218
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3219
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3220
# Start usability test (inc/partition_check.inc)
 
3221
create_command
 
3222
SHOW CREATE TABLE t1;
 
3223
Table   Create Table
 
3224
t1      CREATE TABLE `t1` (
 
3225
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
3226
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
3227
  `f_char1` char(20) DEFAULT NULL,
 
3228
  `f_char2` char(20) DEFAULT NULL,
 
3229
  `f_charbig` varchar(1000) DEFAULT NULL
 
3230
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
3231
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
3232
SUBPARTITION BY KEY (f_int1)
 
3233
SUBPARTITIONS 3
 
3234
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
3235
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
3236
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
3237
 
 
3238
# check prerequisites-1 success:    1
 
3239
# check COUNT(*) success:    1
 
3240
# check MIN/MAX(f_int1) success:    1
 
3241
# check MIN/MAX(f_int2) success:    1
 
3242
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3243
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3244
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3245
WHERE f_int1 IN (2,3);
 
3246
# check prerequisites-3 success:    1
 
3247
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3248
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
3249
# check read via f_int1 success: 1
 
3250
# check read via f_int2 success: 1
 
3251
        
 
3252
# check multiple-1 success:     1
 
3253
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3254
        
 
3255
# check multiple-2 success:     1
 
3256
INSERT INTO t1 SELECT * FROM t0_template
 
3257
WHERE MOD(f_int1,3) = 0;
 
3258
        
 
3259
# check multiple-3 success:     1
 
3260
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3261
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3262
AND @max_row_div2 + @max_row_div4;
 
3263
        
 
3264
# check multiple-4 success:     1
 
3265
DELETE FROM t1
 
3266
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3267
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3268
        
 
3269
# check multiple-5 success:     1
 
3270
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3271
INSERT INTO t1
 
3272
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3273
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3274
f_charbig = '#SINGLE#';
 
3275
        
 
3276
# check single-1 success:       1
 
3277
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3278
INSERT INTO t1
 
3279
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3280
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3281
f_charbig = '#SINGLE#';
 
3282
        
 
3283
# check single-2 success:       1
 
3284
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3285
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3286
UPDATE t1 SET f_int1 = @cur_value2
 
3287
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3288
        
 
3289
# check single-3 success:       1
 
3290
SET @cur_value1= -1;
 
3291
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3292
UPDATE t1 SET f_int1 = @cur_value1
 
3293
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3294
        
 
3295
# check single-4 success:       1
 
3296
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3297
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3298
        
 
3299
# check single-5 success:       1
 
3300
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3301
        
 
3302
# check single-6 success:       1
 
3303
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3304
        
 
3305
# check single-7 success:       1
 
3306
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
3307
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3308
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3309
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3310
f_charbig = '#NULL#';
 
3311
INSERT INTO t1
 
3312
SET f_int1 = NULL , f_int2 = -@max_row,
 
3313
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3314
f_charbig = '#NULL#';
 
3315
ERROR 23000: Column 'f_int1' cannot be null
 
3316
# check null success:    1
 
3317
DELETE FROM t1
 
3318
WHERE f_int1 = 0 AND f_int2 = 0
 
3319
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3320
AND f_charbig = '#NULL#';
 
3321
SET AUTOCOMMIT= 0;
 
3322
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3323
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3324
FROM t0_template source_tab
 
3325
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3326
        
 
3327
# check transactions-1 success:         1
 
3328
COMMIT WORK;
 
3329
        
 
3330
# check transactions-2 success:         1
 
3331
ROLLBACK WORK;
 
3332
        
 
3333
# check transactions-3 success:         1
 
3334
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3335
COMMIT WORK;
 
3336
ROLLBACK WORK;
 
3337
        
 
3338
# check transactions-4 success:         1
 
3339
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3340
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3341
FROM t0_template source_tab
 
3342
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3343
        
 
3344
# check transactions-5 success:         1
 
3345
ROLLBACK WORK;
 
3346
        
 
3347
# check transactions-6 success:         1
 
3348
# INFO: Storage engine used for t1 seems to be transactional.
 
3349
COMMIT;
 
3350
        
 
3351
# check transactions-7 success:         1
 
3352
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3353
COMMIT WORK;
 
3354
SET @@session.sql_mode = 'traditional';
 
3355
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3356
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3357
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3358
'', '', 'was inserted' FROM t0_template
 
3359
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3360
ERROR 22012: Division by 0
 
3361
COMMIT;
 
3362
        
 
3363
# check transactions-8 success:         1
 
3364
# INFO: Storage engine used for t1 seems to be able to revert
 
3365
#       changes made by the failing statement.
 
3366
SET @@session.sql_mode = '';
 
3367
SET AUTOCOMMIT= 1;
 
3368
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3369
COMMIT WORK;
 
3370
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3371
        
 
3372
# check special-1 success:      1
 
3373
UPDATE t1 SET f_charbig = '';
 
3374
        
 
3375
# check special-2 success:      1
 
3376
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3377
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3378
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3379
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3380
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3381
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3382
'just inserted' FROM t0_template
 
3383
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3384
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3385
BEGIN
 
3386
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3387
f_charbig = 'updated by trigger'
 
3388
      WHERE f_int1 = new.f_int1;
 
3389
END|
 
3390
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3391
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3392
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3393
        
 
3394
# check trigger-1 success:      1
 
3395
DROP TRIGGER trg_1;
 
3396
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3397
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3398
f_charbig = 'just inserted'
 
3399
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3400
DELETE FROM t0_aux
 
3401
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3402
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3403
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3404
'just inserted' FROM t0_template
 
3405
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3406
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3407
BEGIN
 
3408
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3409
f_charbig = 'updated by trigger'
 
3410
      WHERE f_int1 = new.f_int1;
 
3411
END|
 
3412
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3413
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3414
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3415
        
 
3416
# check trigger-2 success:      1
 
3417
DROP TRIGGER trg_1;
 
3418
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3419
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3420
f_charbig = 'just inserted'
 
3421
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3422
DELETE FROM t0_aux
 
3423
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3424
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3425
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3426
'just inserted' FROM t0_template
 
3427
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3428
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3429
BEGIN
 
3430
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3431
f_charbig = 'updated by trigger'
 
3432
      WHERE f_int1 = new.f_int1;
 
3433
END|
 
3434
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3435
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3436
        
 
3437
# check trigger-3 success:      1
 
3438
DROP TRIGGER trg_1;
 
3439
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3440
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3441
f_charbig = 'just inserted'
 
3442
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3443
DELETE FROM t0_aux
 
3444
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3445
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3446
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3447
'just inserted' FROM t0_template
 
3448
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3449
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3450
BEGIN
 
3451
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3452
f_charbig = 'updated by trigger'
 
3453
      WHERE f_int1 = - old.f_int1;
 
3454
END|
 
3455
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3456
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3457
        
 
3458
# check trigger-4 success:      1
 
3459
DROP TRIGGER trg_1;
 
3460
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3461
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3462
f_charbig = 'just inserted'
 
3463
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3464
DELETE FROM t0_aux
 
3465
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3466
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3467
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3468
'just inserted' FROM t0_template
 
3469
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3470
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3471
BEGIN
 
3472
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3473
f_charbig = 'updated by trigger'
 
3474
      WHERE f_int1 = new.f_int1;
 
3475
END|
 
3476
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3477
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3478
        
 
3479
# check trigger-5 success:      1
 
3480
DROP TRIGGER trg_1;
 
3481
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3482
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3483
f_charbig = 'just inserted'
 
3484
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3485
DELETE FROM t0_aux
 
3486
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3487
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3488
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3489
'just inserted' FROM t0_template
 
3490
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3491
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3492
BEGIN
 
3493
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3494
f_charbig = 'updated by trigger'
 
3495
      WHERE f_int1 = - old.f_int1;
 
3496
END|
 
3497
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3498
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3499
        
 
3500
# check trigger-6 success:      1
 
3501
DROP TRIGGER trg_1;
 
3502
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3503
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3504
f_charbig = 'just inserted'
 
3505
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3506
DELETE FROM t0_aux
 
3507
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3508
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3509
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3510
'just inserted' FROM t0_template
 
3511
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3512
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3513
BEGIN
 
3514
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3515
f_charbig = 'updated by trigger'
 
3516
      WHERE f_int1 = - old.f_int1;
 
3517
END|
 
3518
DELETE FROM t0_aux
 
3519
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3520
        
 
3521
# check trigger-7 success:      1
 
3522
DROP TRIGGER trg_1;
 
3523
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3524
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3525
f_charbig = 'just inserted'
 
3526
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3527
DELETE FROM t0_aux
 
3528
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3529
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3530
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3531
'just inserted' FROM t0_template
 
3532
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3533
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3534
BEGIN
 
3535
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3536
f_charbig = 'updated by trigger'
 
3537
      WHERE f_int1 = - old.f_int1;
 
3538
END|
 
3539
DELETE FROM t0_aux
 
3540
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3541
        
 
3542
# check trigger-8 success:      1
 
3543
DROP TRIGGER trg_1;
 
3544
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3545
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3546
f_charbig = 'just inserted'
 
3547
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3548
DELETE FROM t0_aux
 
3549
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3550
DELETE FROM t1
 
3551
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3552
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3553
BEGIN
 
3554
SET new.f_int1 = old.f_int1 + @max_row,
 
3555
new.f_int2 = old.f_int2 - @max_row,
 
3556
new.f_charbig = '####updated per update trigger####';
 
3557
END|
 
3558
UPDATE t1
 
3559
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3560
f_charbig = '####updated per update statement itself####';
 
3561
        
 
3562
# check trigger-9 success:      1
 
3563
DROP TRIGGER trg_2;
 
3564
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3565
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3566
f_charbig = CONCAT('===',f_char1,'===');
 
3567
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3568
BEGIN
 
3569
SET new.f_int1 = new.f_int1 + @max_row,
 
3570
new.f_int2 = new.f_int2 - @max_row,
 
3571
new.f_charbig = '####updated per update trigger####';
 
3572
END|
 
3573
UPDATE t1
 
3574
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3575
f_charbig = '####updated per update statement itself####';
 
3576
        
 
3577
# check trigger-10 success:     1
 
3578
DROP TRIGGER trg_2;
 
3579
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3580
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3581
f_charbig = CONCAT('===',f_char1,'===');
 
3582
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3583
BEGIN
 
3584
SET new.f_int1 = @my_max1 + @counter,
 
3585
new.f_int2 = @my_min2 - @counter,
 
3586
new.f_charbig = '####updated per insert trigger####';
 
3587
SET @counter = @counter + 1;
 
3588
END|
 
3589
SET @counter = 1;
 
3590
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3591
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3592
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3593
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3594
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3595
ORDER BY f_int1;
 
3596
DROP TRIGGER trg_3;
 
3597
        
 
3598
# check trigger-11 success:     1
 
3599
DELETE FROM t1
 
3600
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3601
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3602
AND f_charbig = '####updated per insert trigger####';
 
3603
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3604
BEGIN
 
3605
SET new.f_int1 = @my_max1 + @counter,
 
3606
new.f_int2 = @my_min2 - @counter,
 
3607
new.f_charbig = '####updated per insert trigger####';
 
3608
SET @counter = @counter + 1;
 
3609
END|
 
3610
SET @counter = 1;
 
3611
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3612
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3613
SELECT CAST(f_int1 AS CHAR),
 
3614
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3615
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3616
ORDER BY f_int1;
 
3617
DROP TRIGGER trg_3;
 
3618
        
 
3619
# check trigger-12 success:     1
 
3620
DELETE FROM t1
 
3621
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3622
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3623
AND f_charbig = '####updated per insert trigger####';
 
3624
ANALYZE  TABLE t1;
 
3625
Table   Op      Msg_type        Msg_text
 
3626
test.t1 analyze status  OK
 
3627
CHECK    TABLE t1 EXTENDED;
 
3628
Table   Op      Msg_type        Msg_text
 
3629
test.t1 check   status  OK
 
3630
CHECKSUM TABLE t1 EXTENDED;
 
3631
Table   Checksum
 
3632
test.t1 <some_value>
 
3633
OPTIMIZE TABLE t1;
 
3634
Table   Op      Msg_type        Msg_text
 
3635
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
3636
test.t1 optimize        status  OK
 
3637
# check layout success:    1
 
3638
REPAIR   TABLE t1 EXTENDED;
 
3639
Table   Op      Msg_type        Msg_text
 
3640
test.t1 repair  note    The storage engine for the table doesn't support repair
 
3641
# check layout success:    1
 
3642
TRUNCATE t1;
 
3643
        
 
3644
# check TRUNCATE success:       1
 
3645
# check layout success:    1
 
3646
# End usability test (inc/partition_check.inc)
 
3647
DROP TABLE t1;
 
3648
DROP TABLE IF EXISTS t1;
 
3649
CREATE TABLE t1 (
 
3650
f_int1 INTEGER,
 
3651
f_int2 INTEGER,
 
3652
f_char1 CHAR(20),
 
3653
f_char2 CHAR(20),
 
3654
f_charbig VARCHAR(1000)
 
3655
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
3656
)
 
3657
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
3658
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3659
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3660
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
3661
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
3662
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3663
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3664
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3665
# Start usability test (inc/partition_check.inc)
 
3666
create_command
 
3667
SHOW CREATE TABLE t1;
 
3668
Table   Create Table
 
3669
t1      CREATE TABLE `t1` (
 
3670
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
3671
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
3672
  `f_char1` char(20) DEFAULT NULL,
 
3673
  `f_char2` char(20) DEFAULT NULL,
 
3674
  `f_charbig` varchar(1000) DEFAULT NULL
 
3675
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
3676
/*!50100 PARTITION BY HASH (f_int1)
 
3677
PARTITIONS 2 */
 
3678
 
 
3679
# check prerequisites-1 success:    1
 
3680
# check COUNT(*) success:    1
 
3681
# check MIN/MAX(f_int1) success:    1
 
3682
# check MIN/MAX(f_int2) success:    1
 
3683
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3684
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3685
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3686
WHERE f_int1 IN (2,3);
 
3687
# check prerequisites-3 success:    1
 
3688
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3689
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
3690
# check read via f_int1 success: 1
 
3691
# check read via f_int2 success: 1
 
3692
        
 
3693
# check multiple-1 success:     1
 
3694
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3695
        
 
3696
# check multiple-2 success:     1
 
3697
INSERT INTO t1 SELECT * FROM t0_template
 
3698
WHERE MOD(f_int1,3) = 0;
 
3699
        
 
3700
# check multiple-3 success:     1
 
3701
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3702
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3703
AND @max_row_div2 + @max_row_div4;
 
3704
        
 
3705
# check multiple-4 success:     1
 
3706
DELETE FROM t1
 
3707
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3708
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3709
        
 
3710
# check multiple-5 success:     1
 
3711
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3712
INSERT INTO t1
 
3713
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3714
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3715
f_charbig = '#SINGLE#';
 
3716
        
 
3717
# check single-1 success:       1
 
3718
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3719
INSERT INTO t1
 
3720
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3721
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3722
f_charbig = '#SINGLE#';
 
3723
        
 
3724
# check single-2 success:       1
 
3725
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3726
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3727
UPDATE t1 SET f_int1 = @cur_value2
 
3728
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3729
        
 
3730
# check single-3 success:       1
 
3731
SET @cur_value1= -1;
 
3732
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3733
UPDATE t1 SET f_int1 = @cur_value1
 
3734
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3735
        
 
3736
# check single-4 success:       1
 
3737
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3738
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3739
        
 
3740
# check single-5 success:       1
 
3741
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3742
        
 
3743
# check single-6 success:       1
 
3744
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3745
        
 
3746
# check single-7 success:       1
 
3747
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
3748
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3749
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3750
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3751
f_charbig = '#NULL#';
 
3752
INSERT INTO t1
 
3753
SET f_int1 = NULL , f_int2 = -@max_row,
 
3754
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3755
f_charbig = '#NULL#';
 
3756
ERROR 23000: Column 'f_int1' cannot be null
 
3757
# check null success:    1
 
3758
DELETE FROM t1
 
3759
WHERE f_int1 = 0 AND f_int2 = 0
 
3760
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3761
AND f_charbig = '#NULL#';
 
3762
SET AUTOCOMMIT= 0;
 
3763
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3764
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3765
FROM t0_template source_tab
 
3766
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3767
        
 
3768
# check transactions-1 success:         1
 
3769
COMMIT WORK;
 
3770
        
 
3771
# check transactions-2 success:         1
 
3772
ROLLBACK WORK;
 
3773
        
 
3774
# check transactions-3 success:         1
 
3775
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3776
COMMIT WORK;
 
3777
ROLLBACK WORK;
 
3778
        
 
3779
# check transactions-4 success:         1
 
3780
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3781
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3782
FROM t0_template source_tab
 
3783
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3784
        
 
3785
# check transactions-5 success:         1
 
3786
ROLLBACK WORK;
 
3787
        
 
3788
# check transactions-6 success:         1
 
3789
# INFO: Storage engine used for t1 seems to be transactional.
 
3790
COMMIT;
 
3791
        
 
3792
# check transactions-7 success:         1
 
3793
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3794
COMMIT WORK;
 
3795
SET @@session.sql_mode = 'traditional';
 
3796
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3797
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3798
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3799
'', '', 'was inserted' FROM t0_template
 
3800
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3801
ERROR 22012: Division by 0
 
3802
COMMIT;
 
3803
        
 
3804
# check transactions-8 success:         1
 
3805
# INFO: Storage engine used for t1 seems to be able to revert
 
3806
#       changes made by the failing statement.
 
3807
SET @@session.sql_mode = '';
 
3808
SET AUTOCOMMIT= 1;
 
3809
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3810
COMMIT WORK;
 
3811
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3812
        
 
3813
# check special-1 success:      1
 
3814
UPDATE t1 SET f_charbig = '';
 
3815
        
 
3816
# check special-2 success:      1
 
3817
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3818
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3819
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3820
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3821
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3822
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3823
'just inserted' FROM t0_template
 
3824
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3825
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3826
BEGIN
 
3827
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3828
f_charbig = 'updated by trigger'
 
3829
      WHERE f_int1 = new.f_int1;
 
3830
END|
 
3831
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3832
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3833
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3834
        
 
3835
# check trigger-1 success:      1
 
3836
DROP TRIGGER trg_1;
 
3837
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3838
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3839
f_charbig = 'just inserted'
 
3840
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3841
DELETE FROM t0_aux
 
3842
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3843
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3844
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3845
'just inserted' FROM t0_template
 
3846
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3847
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3848
BEGIN
 
3849
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3850
f_charbig = 'updated by trigger'
 
3851
      WHERE f_int1 = new.f_int1;
 
3852
END|
 
3853
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3854
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3855
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3856
        
 
3857
# check trigger-2 success:      1
 
3858
DROP TRIGGER trg_1;
 
3859
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3860
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3861
f_charbig = 'just inserted'
 
3862
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3863
DELETE FROM t0_aux
 
3864
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3865
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3866
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3867
'just inserted' FROM t0_template
 
3868
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3869
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3870
BEGIN
 
3871
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3872
f_charbig = 'updated by trigger'
 
3873
      WHERE f_int1 = new.f_int1;
 
3874
END|
 
3875
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3876
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3877
        
 
3878
# check trigger-3 success:      1
 
3879
DROP TRIGGER trg_1;
 
3880
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3881
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3882
f_charbig = 'just inserted'
 
3883
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3884
DELETE FROM t0_aux
 
3885
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3886
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3887
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3888
'just inserted' FROM t0_template
 
3889
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3890
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3891
BEGIN
 
3892
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3893
f_charbig = 'updated by trigger'
 
3894
      WHERE f_int1 = - old.f_int1;
 
3895
END|
 
3896
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3897
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3898
        
 
3899
# check trigger-4 success:      1
 
3900
DROP TRIGGER trg_1;
 
3901
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3902
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3903
f_charbig = 'just inserted'
 
3904
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3905
DELETE FROM t0_aux
 
3906
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3907
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3908
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3909
'just inserted' FROM t0_template
 
3910
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3911
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3912
BEGIN
 
3913
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3914
f_charbig = 'updated by trigger'
 
3915
      WHERE f_int1 = new.f_int1;
 
3916
END|
 
3917
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3918
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3919
        
 
3920
# check trigger-5 success:      1
 
3921
DROP TRIGGER trg_1;
 
3922
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3923
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3924
f_charbig = 'just inserted'
 
3925
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3926
DELETE FROM t0_aux
 
3927
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3928
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3929
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3930
'just inserted' FROM t0_template
 
3931
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3932
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3933
BEGIN
 
3934
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3935
f_charbig = 'updated by trigger'
 
3936
      WHERE f_int1 = - old.f_int1;
 
3937
END|
 
3938
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3939
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3940
        
 
3941
# check trigger-6 success:      1
 
3942
DROP TRIGGER trg_1;
 
3943
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3944
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3945
f_charbig = 'just inserted'
 
3946
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3947
DELETE FROM t0_aux
 
3948
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3949
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3950
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3951
'just inserted' FROM t0_template
 
3952
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3953
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3954
BEGIN
 
3955
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3956
f_charbig = 'updated by trigger'
 
3957
      WHERE f_int1 = - old.f_int1;
 
3958
END|
 
3959
DELETE FROM t0_aux
 
3960
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3961
        
 
3962
# check trigger-7 success:      1
 
3963
DROP TRIGGER trg_1;
 
3964
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3965
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3966
f_charbig = 'just inserted'
 
3967
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3968
DELETE FROM t0_aux
 
3969
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3970
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3971
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3972
'just inserted' FROM t0_template
 
3973
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3974
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3975
BEGIN
 
3976
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3977
f_charbig = 'updated by trigger'
 
3978
      WHERE f_int1 = - old.f_int1;
 
3979
END|
 
3980
DELETE FROM t0_aux
 
3981
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3982
        
 
3983
# check trigger-8 success:      1
 
3984
DROP TRIGGER trg_1;
 
3985
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3986
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3987
f_charbig = 'just inserted'
 
3988
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3989
DELETE FROM t0_aux
 
3990
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3991
DELETE FROM t1
 
3992
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3993
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3994
BEGIN
 
3995
SET new.f_int1 = old.f_int1 + @max_row,
 
3996
new.f_int2 = old.f_int2 - @max_row,
 
3997
new.f_charbig = '####updated per update trigger####';
 
3998
END|
 
3999
UPDATE t1
 
4000
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4001
f_charbig = '####updated per update statement itself####';
 
4002
        
 
4003
# check trigger-9 success:      1
 
4004
DROP TRIGGER trg_2;
 
4005
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4006
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4007
f_charbig = CONCAT('===',f_char1,'===');
 
4008
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4009
BEGIN
 
4010
SET new.f_int1 = new.f_int1 + @max_row,
 
4011
new.f_int2 = new.f_int2 - @max_row,
 
4012
new.f_charbig = '####updated per update trigger####';
 
4013
END|
 
4014
UPDATE t1
 
4015
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4016
f_charbig = '####updated per update statement itself####';
 
4017
        
 
4018
# check trigger-10 success:     1
 
4019
DROP TRIGGER trg_2;
 
4020
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4021
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4022
f_charbig = CONCAT('===',f_char1,'===');
 
4023
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4024
BEGIN
 
4025
SET new.f_int1 = @my_max1 + @counter,
 
4026
new.f_int2 = @my_min2 - @counter,
 
4027
new.f_charbig = '####updated per insert trigger####';
 
4028
SET @counter = @counter + 1;
 
4029
END|
 
4030
SET @counter = 1;
 
4031
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4032
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4033
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4034
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4035
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4036
ORDER BY f_int1;
 
4037
DROP TRIGGER trg_3;
 
4038
        
 
4039
# check trigger-11 success:     1
 
4040
DELETE FROM t1
 
4041
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4042
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4043
AND f_charbig = '####updated per insert trigger####';
 
4044
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4045
BEGIN
 
4046
SET new.f_int1 = @my_max1 + @counter,
 
4047
new.f_int2 = @my_min2 - @counter,
 
4048
new.f_charbig = '####updated per insert trigger####';
 
4049
SET @counter = @counter + 1;
 
4050
END|
 
4051
SET @counter = 1;
 
4052
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4053
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4054
SELECT CAST(f_int1 AS CHAR),
 
4055
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4056
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4057
ORDER BY f_int1;
 
4058
DROP TRIGGER trg_3;
 
4059
        
 
4060
# check trigger-12 success:     1
 
4061
DELETE FROM t1
 
4062
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4063
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4064
AND f_charbig = '####updated per insert trigger####';
 
4065
ANALYZE  TABLE t1;
 
4066
Table   Op      Msg_type        Msg_text
 
4067
test.t1 analyze status  OK
 
4068
CHECK    TABLE t1 EXTENDED;
 
4069
Table   Op      Msg_type        Msg_text
 
4070
test.t1 check   status  OK
 
4071
CHECKSUM TABLE t1 EXTENDED;
 
4072
Table   Checksum
 
4073
test.t1 <some_value>
 
4074
OPTIMIZE TABLE t1;
 
4075
Table   Op      Msg_type        Msg_text
 
4076
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
4077
test.t1 optimize        status  OK
 
4078
# check layout success:    1
 
4079
REPAIR   TABLE t1 EXTENDED;
 
4080
Table   Op      Msg_type        Msg_text
 
4081
test.t1 repair  note    The storage engine for the table doesn't support repair
 
4082
# check layout success:    1
 
4083
TRUNCATE t1;
 
4084
        
 
4085
# check TRUNCATE success:       1
 
4086
# check layout success:    1
 
4087
# End usability test (inc/partition_check.inc)
 
4088
DROP TABLE t1;
 
4089
CREATE TABLE t1 (
 
4090
f_int1 INTEGER,
 
4091
f_int2 INTEGER,
 
4092
f_char1 CHAR(20),
 
4093
f_char2 CHAR(20),
 
4094
f_charbig VARCHAR(1000)
 
4095
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
4096
)
 
4097
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
4098
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4099
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4100
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
4101
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
4102
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4103
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4104
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4105
# Start usability test (inc/partition_check.inc)
 
4106
create_command
 
4107
SHOW CREATE TABLE t1;
 
4108
Table   Create Table
 
4109
t1      CREATE TABLE `t1` (
 
4110
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
4111
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
4112
  `f_char1` char(20) DEFAULT NULL,
 
4113
  `f_char2` char(20) DEFAULT NULL,
 
4114
  `f_charbig` varchar(1000) DEFAULT NULL
 
4115
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
4116
/*!50100 PARTITION BY KEY (f_int1)
 
4117
PARTITIONS 5 */
 
4118
 
 
4119
# check prerequisites-1 success:    1
 
4120
# check COUNT(*) success:    1
 
4121
# check MIN/MAX(f_int1) success:    1
 
4122
# check MIN/MAX(f_int2) success:    1
 
4123
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4124
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4125
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
4126
WHERE f_int1 IN (2,3);
 
4127
# check prerequisites-3 success:    1
 
4128
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4129
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
4130
# check read via f_int1 success: 1
 
4131
# check read via f_int2 success: 1
 
4132
        
 
4133
# check multiple-1 success:     1
 
4134
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
4135
        
 
4136
# check multiple-2 success:     1
 
4137
INSERT INTO t1 SELECT * FROM t0_template
 
4138
WHERE MOD(f_int1,3) = 0;
 
4139
        
 
4140
# check multiple-3 success:     1
 
4141
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
4142
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
4143
AND @max_row_div2 + @max_row_div4;
 
4144
        
 
4145
# check multiple-4 success:     1
 
4146
DELETE FROM t1
 
4147
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4148
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4149
        
 
4150
# check multiple-5 success:     1
 
4151
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4152
INSERT INTO t1
 
4153
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4154
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4155
f_charbig = '#SINGLE#';
 
4156
        
 
4157
# check single-1 success:       1
 
4158
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4159
INSERT INTO t1
 
4160
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4161
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4162
f_charbig = '#SINGLE#';
 
4163
        
 
4164
# check single-2 success:       1
 
4165
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4166
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4167
UPDATE t1 SET f_int1 = @cur_value2
 
4168
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4169
        
 
4170
# check single-3 success:       1
 
4171
SET @cur_value1= -1;
 
4172
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4173
UPDATE t1 SET f_int1 = @cur_value1
 
4174
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4175
        
 
4176
# check single-4 success:       1
 
4177
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4178
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4179
        
 
4180
# check single-5 success:       1
 
4181
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4182
        
 
4183
# check single-6 success:       1
 
4184
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4185
        
 
4186
# check single-7 success:       1
 
4187
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4188
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4189
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4190
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4191
f_charbig = '#NULL#';
 
4192
INSERT INTO t1
 
4193
SET f_int1 = NULL , f_int2 = -@max_row,
 
4194
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4195
f_charbig = '#NULL#';
 
4196
ERROR 23000: Column 'f_int1' cannot be null
 
4197
# check null success:    1
 
4198
DELETE FROM t1
 
4199
WHERE f_int1 = 0 AND f_int2 = 0
 
4200
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4201
AND f_charbig = '#NULL#';
 
4202
SET AUTOCOMMIT= 0;
 
4203
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4204
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4205
FROM t0_template source_tab
 
4206
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4207
        
 
4208
# check transactions-1 success:         1
 
4209
COMMIT WORK;
 
4210
        
 
4211
# check transactions-2 success:         1
 
4212
ROLLBACK WORK;
 
4213
        
 
4214
# check transactions-3 success:         1
 
4215
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4216
COMMIT WORK;
 
4217
ROLLBACK WORK;
 
4218
        
 
4219
# check transactions-4 success:         1
 
4220
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4221
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4222
FROM t0_template source_tab
 
4223
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4224
        
 
4225
# check transactions-5 success:         1
 
4226
ROLLBACK WORK;
 
4227
        
 
4228
# check transactions-6 success:         1
 
4229
# INFO: Storage engine used for t1 seems to be transactional.
 
4230
COMMIT;
 
4231
        
 
4232
# check transactions-7 success:         1
 
4233
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4234
COMMIT WORK;
 
4235
SET @@session.sql_mode = 'traditional';
 
4236
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4237
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4238
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4239
'', '', 'was inserted' FROM t0_template
 
4240
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4241
ERROR 22012: Division by 0
 
4242
COMMIT;
 
4243
        
 
4244
# check transactions-8 success:         1
 
4245
# INFO: Storage engine used for t1 seems to be able to revert
 
4246
#       changes made by the failing statement.
 
4247
SET @@session.sql_mode = '';
 
4248
SET AUTOCOMMIT= 1;
 
4249
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4250
COMMIT WORK;
 
4251
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4252
        
 
4253
# check special-1 success:      1
 
4254
UPDATE t1 SET f_charbig = '';
 
4255
        
 
4256
# check special-2 success:      1
 
4257
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4258
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4259
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4260
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4261
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4262
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4263
'just inserted' FROM t0_template
 
4264
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4265
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4266
BEGIN
 
4267
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4268
f_charbig = 'updated by trigger'
 
4269
      WHERE f_int1 = new.f_int1;
 
4270
END|
 
4271
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4272
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4273
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4274
        
 
4275
# check trigger-1 success:      1
 
4276
DROP TRIGGER trg_1;
 
4277
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4278
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4279
f_charbig = 'just inserted'
 
4280
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4281
DELETE FROM t0_aux
 
4282
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4283
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4284
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4285
'just inserted' FROM t0_template
 
4286
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4287
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4288
BEGIN
 
4289
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4290
f_charbig = 'updated by trigger'
 
4291
      WHERE f_int1 = new.f_int1;
 
4292
END|
 
4293
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4294
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4295
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4296
        
 
4297
# check trigger-2 success:      1
 
4298
DROP TRIGGER trg_1;
 
4299
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4300
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4301
f_charbig = 'just inserted'
 
4302
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4303
DELETE FROM t0_aux
 
4304
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4305
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4306
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4307
'just inserted' FROM t0_template
 
4308
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4309
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4310
BEGIN
 
4311
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4312
f_charbig = 'updated by trigger'
 
4313
      WHERE f_int1 = new.f_int1;
 
4314
END|
 
4315
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4316
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4317
        
 
4318
# check trigger-3 success:      1
 
4319
DROP TRIGGER trg_1;
 
4320
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4321
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4322
f_charbig = 'just inserted'
 
4323
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4324
DELETE FROM t0_aux
 
4325
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4326
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4327
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4328
'just inserted' FROM t0_template
 
4329
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4330
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4331
BEGIN
 
4332
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4333
f_charbig = 'updated by trigger'
 
4334
      WHERE f_int1 = - old.f_int1;
 
4335
END|
 
4336
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4337
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4338
        
 
4339
# check trigger-4 success:      1
 
4340
DROP TRIGGER trg_1;
 
4341
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4342
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4343
f_charbig = 'just inserted'
 
4344
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4345
DELETE FROM t0_aux
 
4346
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4347
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4348
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4349
'just inserted' FROM t0_template
 
4350
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4351
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4352
BEGIN
 
4353
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4354
f_charbig = 'updated by trigger'
 
4355
      WHERE f_int1 = new.f_int1;
 
4356
END|
 
4357
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4358
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4359
        
 
4360
# check trigger-5 success:      1
 
4361
DROP TRIGGER trg_1;
 
4362
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4363
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4364
f_charbig = 'just inserted'
 
4365
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4366
DELETE FROM t0_aux
 
4367
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4368
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4369
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4370
'just inserted' FROM t0_template
 
4371
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4372
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4373
BEGIN
 
4374
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4375
f_charbig = 'updated by trigger'
 
4376
      WHERE f_int1 = - old.f_int1;
 
4377
END|
 
4378
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4379
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4380
        
 
4381
# check trigger-6 success:      1
 
4382
DROP TRIGGER trg_1;
 
4383
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4384
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4385
f_charbig = 'just inserted'
 
4386
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4387
DELETE FROM t0_aux
 
4388
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4389
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4390
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4391
'just inserted' FROM t0_template
 
4392
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4393
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4394
BEGIN
 
4395
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4396
f_charbig = 'updated by trigger'
 
4397
      WHERE f_int1 = - old.f_int1;
 
4398
END|
 
4399
DELETE FROM t0_aux
 
4400
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4401
        
 
4402
# check trigger-7 success:      1
 
4403
DROP TRIGGER trg_1;
 
4404
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4405
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4406
f_charbig = 'just inserted'
 
4407
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4408
DELETE FROM t0_aux
 
4409
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4410
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4411
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4412
'just inserted' FROM t0_template
 
4413
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4414
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4415
BEGIN
 
4416
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4417
f_charbig = 'updated by trigger'
 
4418
      WHERE f_int1 = - old.f_int1;
 
4419
END|
 
4420
DELETE FROM t0_aux
 
4421
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4422
        
 
4423
# check trigger-8 success:      1
 
4424
DROP TRIGGER trg_1;
 
4425
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4426
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4427
f_charbig = 'just inserted'
 
4428
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4429
DELETE FROM t0_aux
 
4430
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4431
DELETE FROM t1
 
4432
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4433
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4434
BEGIN
 
4435
SET new.f_int1 = old.f_int1 + @max_row,
 
4436
new.f_int2 = old.f_int2 - @max_row,
 
4437
new.f_charbig = '####updated per update trigger####';
 
4438
END|
 
4439
UPDATE t1
 
4440
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4441
f_charbig = '####updated per update statement itself####';
 
4442
        
 
4443
# check trigger-9 success:      1
 
4444
DROP TRIGGER trg_2;
 
4445
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4446
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4447
f_charbig = CONCAT('===',f_char1,'===');
 
4448
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4449
BEGIN
 
4450
SET new.f_int1 = new.f_int1 + @max_row,
 
4451
new.f_int2 = new.f_int2 - @max_row,
 
4452
new.f_charbig = '####updated per update trigger####';
 
4453
END|
 
4454
UPDATE t1
 
4455
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4456
f_charbig = '####updated per update statement itself####';
 
4457
        
 
4458
# check trigger-10 success:     1
 
4459
DROP TRIGGER trg_2;
 
4460
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4461
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4462
f_charbig = CONCAT('===',f_char1,'===');
 
4463
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4464
BEGIN
 
4465
SET new.f_int1 = @my_max1 + @counter,
 
4466
new.f_int2 = @my_min2 - @counter,
 
4467
new.f_charbig = '####updated per insert trigger####';
 
4468
SET @counter = @counter + 1;
 
4469
END|
 
4470
SET @counter = 1;
 
4471
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4472
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4473
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4474
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4475
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4476
ORDER BY f_int1;
 
4477
DROP TRIGGER trg_3;
 
4478
        
 
4479
# check trigger-11 success:     1
 
4480
DELETE FROM t1
 
4481
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4482
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4483
AND f_charbig = '####updated per insert trigger####';
 
4484
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4485
BEGIN
 
4486
SET new.f_int1 = @my_max1 + @counter,
 
4487
new.f_int2 = @my_min2 - @counter,
 
4488
new.f_charbig = '####updated per insert trigger####';
 
4489
SET @counter = @counter + 1;
 
4490
END|
 
4491
SET @counter = 1;
 
4492
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4493
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4494
SELECT CAST(f_int1 AS CHAR),
 
4495
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4496
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4497
ORDER BY f_int1;
 
4498
DROP TRIGGER trg_3;
 
4499
        
 
4500
# check trigger-12 success:     1
 
4501
DELETE FROM t1
 
4502
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4503
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4504
AND f_charbig = '####updated per insert trigger####';
 
4505
ANALYZE  TABLE t1;
 
4506
Table   Op      Msg_type        Msg_text
 
4507
test.t1 analyze status  OK
 
4508
CHECK    TABLE t1 EXTENDED;
 
4509
Table   Op      Msg_type        Msg_text
 
4510
test.t1 check   status  OK
 
4511
CHECKSUM TABLE t1 EXTENDED;
 
4512
Table   Checksum
 
4513
test.t1 <some_value>
 
4514
OPTIMIZE TABLE t1;
 
4515
Table   Op      Msg_type        Msg_text
 
4516
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
4517
test.t1 optimize        status  OK
 
4518
# check layout success:    1
 
4519
REPAIR   TABLE t1 EXTENDED;
 
4520
Table   Op      Msg_type        Msg_text
 
4521
test.t1 repair  note    The storage engine for the table doesn't support repair
 
4522
# check layout success:    1
 
4523
TRUNCATE t1;
 
4524
        
 
4525
# check TRUNCATE success:       1
 
4526
# check layout success:    1
 
4527
# End usability test (inc/partition_check.inc)
 
4528
DROP TABLE t1;
 
4529
CREATE TABLE t1 (
 
4530
f_int1 INTEGER,
 
4531
f_int2 INTEGER,
 
4532
f_char1 CHAR(20),
 
4533
f_char2 CHAR(20),
 
4534
f_charbig VARCHAR(1000)
 
4535
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
4536
)
 
4537
PARTITION BY LIST(MOD(f_int1,4))
 
4538
(PARTITION part_3 VALUES IN (-3),
 
4539
PARTITION part_2 VALUES IN (-2),
 
4540
PARTITION part_1 VALUES IN (-1),
 
4541
PARTITION part_N VALUES IN (NULL),
 
4542
PARTITION part0 VALUES IN (0),
 
4543
PARTITION part1 VALUES IN (1),
 
4544
PARTITION part2 VALUES IN (2),
 
4545
PARTITION part3 VALUES IN (3));
 
4546
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4547
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4548
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
4549
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
4550
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4551
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4552
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4553
# Start usability test (inc/partition_check.inc)
 
4554
create_command
 
4555
SHOW CREATE TABLE t1;
 
4556
Table   Create Table
 
4557
t1      CREATE TABLE `t1` (
 
4558
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
4559
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
4560
  `f_char1` char(20) DEFAULT NULL,
 
4561
  `f_char2` char(20) DEFAULT NULL,
 
4562
  `f_charbig` varchar(1000) DEFAULT NULL
 
4563
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
4564
/*!50100 PARTITION BY LIST (MOD(f_int1,4))
 
4565
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
4566
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
4567
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
4568
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
4569
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
4570
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
4571
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
4572
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
4573
 
 
4574
# check prerequisites-1 success:    1
 
4575
# check COUNT(*) success:    1
 
4576
# check MIN/MAX(f_int1) success:    1
 
4577
# check MIN/MAX(f_int2) success:    1
 
4578
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4579
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4580
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
4581
WHERE f_int1 IN (2,3);
 
4582
# check prerequisites-3 success:    1
 
4583
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4584
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
4585
# check read via f_int1 success: 1
 
4586
# check read via f_int2 success: 1
 
4587
        
 
4588
# check multiple-1 success:     1
 
4589
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
4590
        
 
4591
# check multiple-2 success:     1
 
4592
INSERT INTO t1 SELECT * FROM t0_template
 
4593
WHERE MOD(f_int1,3) = 0;
 
4594
        
 
4595
# check multiple-3 success:     1
 
4596
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
4597
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
4598
AND @max_row_div2 + @max_row_div4;
 
4599
        
 
4600
# check multiple-4 success:     1
 
4601
DELETE FROM t1
 
4602
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4603
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4604
        
 
4605
# check multiple-5 success:     1
 
4606
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4607
INSERT INTO t1
 
4608
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4609
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4610
f_charbig = '#SINGLE#';
 
4611
        
 
4612
# check single-1 success:       1
 
4613
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4614
INSERT INTO t1
 
4615
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4616
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4617
f_charbig = '#SINGLE#';
 
4618
        
 
4619
# check single-2 success:       1
 
4620
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4621
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4622
UPDATE t1 SET f_int1 = @cur_value2
 
4623
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4624
        
 
4625
# check single-3 success:       1
 
4626
SET @cur_value1= -1;
 
4627
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4628
UPDATE t1 SET f_int1 = @cur_value1
 
4629
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4630
        
 
4631
# check single-4 success:       1
 
4632
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4633
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4634
        
 
4635
# check single-5 success:       1
 
4636
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4637
        
 
4638
# check single-6 success:       1
 
4639
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4640
        
 
4641
# check single-7 success:       1
 
4642
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4643
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4644
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4645
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4646
f_charbig = '#NULL#';
 
4647
INSERT INTO t1
 
4648
SET f_int1 = NULL , f_int2 = -@max_row,
 
4649
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4650
f_charbig = '#NULL#';
 
4651
ERROR 23000: Column 'f_int1' cannot be null
 
4652
# check null success:    1
 
4653
DELETE FROM t1
 
4654
WHERE f_int1 = 0 AND f_int2 = 0
 
4655
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4656
AND f_charbig = '#NULL#';
 
4657
SET AUTOCOMMIT= 0;
 
4658
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4659
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4660
FROM t0_template source_tab
 
4661
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4662
        
 
4663
# check transactions-1 success:         1
 
4664
COMMIT WORK;
 
4665
        
 
4666
# check transactions-2 success:         1
 
4667
ROLLBACK WORK;
 
4668
        
 
4669
# check transactions-3 success:         1
 
4670
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4671
COMMIT WORK;
 
4672
ROLLBACK WORK;
 
4673
        
 
4674
# check transactions-4 success:         1
 
4675
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4676
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4677
FROM t0_template source_tab
 
4678
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4679
        
 
4680
# check transactions-5 success:         1
 
4681
ROLLBACK WORK;
 
4682
        
 
4683
# check transactions-6 success:         1
 
4684
# INFO: Storage engine used for t1 seems to be transactional.
 
4685
COMMIT;
 
4686
        
 
4687
# check transactions-7 success:         1
 
4688
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4689
COMMIT WORK;
 
4690
SET @@session.sql_mode = 'traditional';
 
4691
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4692
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4693
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4694
'', '', 'was inserted' FROM t0_template
 
4695
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4696
ERROR 22012: Division by 0
 
4697
COMMIT;
 
4698
        
 
4699
# check transactions-8 success:         1
 
4700
# INFO: Storage engine used for t1 seems to be able to revert
 
4701
#       changes made by the failing statement.
 
4702
SET @@session.sql_mode = '';
 
4703
SET AUTOCOMMIT= 1;
 
4704
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4705
COMMIT WORK;
 
4706
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4707
        
 
4708
# check special-1 success:      1
 
4709
UPDATE t1 SET f_charbig = '';
 
4710
        
 
4711
# check special-2 success:      1
 
4712
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4713
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4714
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4715
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4716
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4717
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4718
'just inserted' FROM t0_template
 
4719
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4720
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4721
BEGIN
 
4722
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4723
f_charbig = 'updated by trigger'
 
4724
      WHERE f_int1 = new.f_int1;
 
4725
END|
 
4726
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4727
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4728
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4729
        
 
4730
# check trigger-1 success:      1
 
4731
DROP TRIGGER trg_1;
 
4732
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4733
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4734
f_charbig = 'just inserted'
 
4735
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4736
DELETE FROM t0_aux
 
4737
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4738
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4739
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4740
'just inserted' FROM t0_template
 
4741
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4742
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4743
BEGIN
 
4744
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4745
f_charbig = 'updated by trigger'
 
4746
      WHERE f_int1 = new.f_int1;
 
4747
END|
 
4748
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4749
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4750
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4751
        
 
4752
# check trigger-2 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
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4761
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4762
'just inserted' FROM t0_template
 
4763
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4764
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4765
BEGIN
 
4766
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4767
f_charbig = 'updated by trigger'
 
4768
      WHERE f_int1 = new.f_int1;
 
4769
END|
 
4770
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4771
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4772
        
 
4773
# check trigger-3 success:      1
 
4774
DROP TRIGGER trg_1;
 
4775
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4776
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4777
f_charbig = 'just inserted'
 
4778
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4779
DELETE FROM t0_aux
 
4780
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4781
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4782
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4783
'just inserted' FROM t0_template
 
4784
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4785
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4786
BEGIN
 
4787
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4788
f_charbig = 'updated by trigger'
 
4789
      WHERE f_int1 = - old.f_int1;
 
4790
END|
 
4791
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4792
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4793
        
 
4794
# check trigger-4 success:      1
 
4795
DROP TRIGGER trg_1;
 
4796
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4797
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4798
f_charbig = 'just inserted'
 
4799
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4800
DELETE FROM t0_aux
 
4801
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4802
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4803
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4804
'just inserted' FROM t0_template
 
4805
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4806
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4807
BEGIN
 
4808
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4809
f_charbig = 'updated by trigger'
 
4810
      WHERE f_int1 = new.f_int1;
 
4811
END|
 
4812
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4813
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4814
        
 
4815
# check trigger-5 success:      1
 
4816
DROP TRIGGER trg_1;
 
4817
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4818
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4819
f_charbig = 'just inserted'
 
4820
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4821
DELETE FROM t0_aux
 
4822
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4823
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4824
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4825
'just inserted' FROM t0_template
 
4826
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4827
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4828
BEGIN
 
4829
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4830
f_charbig = 'updated by trigger'
 
4831
      WHERE f_int1 = - old.f_int1;
 
4832
END|
 
4833
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4834
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4835
        
 
4836
# check trigger-6 success:      1
 
4837
DROP TRIGGER trg_1;
 
4838
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4839
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4840
f_charbig = 'just inserted'
 
4841
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4842
DELETE FROM t0_aux
 
4843
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4844
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4845
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4846
'just inserted' FROM t0_template
 
4847
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4848
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4849
BEGIN
 
4850
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4851
f_charbig = 'updated by trigger'
 
4852
      WHERE f_int1 = - old.f_int1;
 
4853
END|
 
4854
DELETE FROM t0_aux
 
4855
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4856
        
 
4857
# check trigger-7 success:      1
 
4858
DROP TRIGGER trg_1;
 
4859
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4860
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4861
f_charbig = 'just inserted'
 
4862
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4863
DELETE FROM t0_aux
 
4864
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4865
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4866
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4867
'just inserted' FROM t0_template
 
4868
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4869
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4870
BEGIN
 
4871
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4872
f_charbig = 'updated by trigger'
 
4873
      WHERE f_int1 = - old.f_int1;
 
4874
END|
 
4875
DELETE FROM t0_aux
 
4876
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4877
        
 
4878
# check trigger-8 success:      1
 
4879
DROP TRIGGER trg_1;
 
4880
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4881
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4882
f_charbig = 'just inserted'
 
4883
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4884
DELETE FROM t0_aux
 
4885
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4886
DELETE FROM t1
 
4887
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4888
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4889
BEGIN
 
4890
SET new.f_int1 = old.f_int1 + @max_row,
 
4891
new.f_int2 = old.f_int2 - @max_row,
 
4892
new.f_charbig = '####updated per update trigger####';
 
4893
END|
 
4894
UPDATE t1
 
4895
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4896
f_charbig = '####updated per update statement itself####';
 
4897
        
 
4898
# check trigger-9 success:      1
 
4899
DROP TRIGGER trg_2;
 
4900
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4901
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4902
f_charbig = CONCAT('===',f_char1,'===');
 
4903
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4904
BEGIN
 
4905
SET new.f_int1 = new.f_int1 + @max_row,
 
4906
new.f_int2 = new.f_int2 - @max_row,
 
4907
new.f_charbig = '####updated per update trigger####';
 
4908
END|
 
4909
UPDATE t1
 
4910
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4911
f_charbig = '####updated per update statement itself####';
 
4912
        
 
4913
# check trigger-10 success:     1
 
4914
DROP TRIGGER trg_2;
 
4915
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4916
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4917
f_charbig = CONCAT('===',f_char1,'===');
 
4918
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4919
BEGIN
 
4920
SET new.f_int1 = @my_max1 + @counter,
 
4921
new.f_int2 = @my_min2 - @counter,
 
4922
new.f_charbig = '####updated per insert trigger####';
 
4923
SET @counter = @counter + 1;
 
4924
END|
 
4925
SET @counter = 1;
 
4926
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4927
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4928
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4929
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4930
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4931
ORDER BY f_int1;
 
4932
DROP TRIGGER trg_3;
 
4933
        
 
4934
# check trigger-11 success:     1
 
4935
DELETE FROM t1
 
4936
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4937
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4938
AND f_charbig = '####updated per insert trigger####';
 
4939
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4940
BEGIN
 
4941
SET new.f_int1 = @my_max1 + @counter,
 
4942
new.f_int2 = @my_min2 - @counter,
 
4943
new.f_charbig = '####updated per insert trigger####';
 
4944
SET @counter = @counter + 1;
 
4945
END|
 
4946
SET @counter = 1;
 
4947
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4948
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4949
SELECT CAST(f_int1 AS CHAR),
 
4950
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4951
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4952
ORDER BY f_int1;
 
4953
DROP TRIGGER trg_3;
 
4954
        
 
4955
# check trigger-12 success:     1
 
4956
DELETE FROM t1
 
4957
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4958
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4959
AND f_charbig = '####updated per insert trigger####';
 
4960
ANALYZE  TABLE t1;
 
4961
Table   Op      Msg_type        Msg_text
 
4962
test.t1 analyze status  OK
 
4963
CHECK    TABLE t1 EXTENDED;
 
4964
Table   Op      Msg_type        Msg_text
 
4965
test.t1 check   status  OK
 
4966
CHECKSUM TABLE t1 EXTENDED;
 
4967
Table   Checksum
 
4968
test.t1 <some_value>
 
4969
OPTIMIZE TABLE t1;
 
4970
Table   Op      Msg_type        Msg_text
 
4971
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
4972
test.t1 optimize        status  OK
 
4973
# check layout success:    1
 
4974
REPAIR   TABLE t1 EXTENDED;
 
4975
Table   Op      Msg_type        Msg_text
 
4976
test.t1 repair  note    The storage engine for the table doesn't support repair
 
4977
# check layout success:    1
 
4978
TRUNCATE t1;
 
4979
        
 
4980
# check TRUNCATE success:       1
 
4981
# check layout success:    1
 
4982
# End usability test (inc/partition_check.inc)
 
4983
DROP TABLE t1;
 
4984
CREATE TABLE t1 (
 
4985
f_int1 INTEGER,
 
4986
f_int2 INTEGER,
 
4987
f_char1 CHAR(20),
 
4988
f_char2 CHAR(20),
 
4989
f_charbig VARCHAR(1000)
 
4990
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
4991
)
 
4992
PARTITION BY RANGE(f_int1)
 
4993
(PARTITION parta VALUES LESS THAN (0),
 
4994
PARTITION partb VALUES LESS THAN (5),
 
4995
PARTITION partc VALUES LESS THAN (10),
 
4996
PARTITION partd VALUES LESS THAN (10 + 5),
 
4997
PARTITION parte VALUES LESS THAN (20),
 
4998
PARTITION partf VALUES LESS THAN (2147483646));
 
4999
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5000
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5001
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
5002
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
5003
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5004
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5005
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5006
# Start usability test (inc/partition_check.inc)
 
5007
create_command
 
5008
SHOW CREATE TABLE t1;
 
5009
Table   Create Table
 
5010
t1      CREATE TABLE `t1` (
 
5011
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
5012
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
5013
  `f_char1` char(20) DEFAULT NULL,
 
5014
  `f_char2` char(20) DEFAULT NULL,
 
5015
  `f_charbig` varchar(1000) DEFAULT NULL
 
5016
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
5017
/*!50100 PARTITION BY RANGE (f_int1)
 
5018
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
5019
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
5020
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
5021
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
5022
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
5023
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
5024
 
 
5025
# check prerequisites-1 success:    1
 
5026
# check COUNT(*) success:    1
 
5027
# check MIN/MAX(f_int1) success:    1
 
5028
# check MIN/MAX(f_int2) success:    1
 
5029
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5030
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5031
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5032
WHERE f_int1 IN (2,3);
 
5033
# check prerequisites-3 success:    1
 
5034
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5035
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
5036
# check read via f_int1 success: 1
 
5037
# check read via f_int2 success: 1
 
5038
        
 
5039
# check multiple-1 success:     1
 
5040
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5041
        
 
5042
# check multiple-2 success:     1
 
5043
INSERT INTO t1 SELECT * FROM t0_template
 
5044
WHERE MOD(f_int1,3) = 0;
 
5045
        
 
5046
# check multiple-3 success:     1
 
5047
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5048
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5049
AND @max_row_div2 + @max_row_div4;
 
5050
        
 
5051
# check multiple-4 success:     1
 
5052
DELETE FROM t1
 
5053
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5054
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5055
        
 
5056
# check multiple-5 success:     1
 
5057
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5058
INSERT INTO t1
 
5059
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5060
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5061
f_charbig = '#SINGLE#';
 
5062
        
 
5063
# check single-1 success:       1
 
5064
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5065
INSERT INTO t1
 
5066
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5067
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5068
f_charbig = '#SINGLE#';
 
5069
        
 
5070
# check single-2 success:       1
 
5071
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5072
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5073
UPDATE t1 SET f_int1 = @cur_value2
 
5074
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5075
        
 
5076
# check single-3 success:       1
 
5077
SET @cur_value1= -1;
 
5078
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5079
UPDATE t1 SET f_int1 = @cur_value1
 
5080
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5081
        
 
5082
# check single-4 success:       1
 
5083
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5084
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5085
        
 
5086
# check single-5 success:       1
 
5087
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5088
        
 
5089
# check single-6 success:       1
 
5090
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5091
ERROR HY000: Table has no partition for value 2147483647
 
5092
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5093
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5094
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5095
f_charbig = '#NULL#';
 
5096
INSERT INTO t1
 
5097
SET f_int1 = NULL , f_int2 = -@max_row,
 
5098
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5099
f_charbig = '#NULL#';
 
5100
ERROR 23000: Column 'f_int1' cannot be null
 
5101
# check null success:    1
 
5102
DELETE FROM t1
 
5103
WHERE f_int1 = 0 AND f_int2 = 0
 
5104
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5105
AND f_charbig = '#NULL#';
 
5106
SET AUTOCOMMIT= 0;
 
5107
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5108
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5109
FROM t0_template source_tab
 
5110
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5111
        
 
5112
# check transactions-1 success:         1
 
5113
COMMIT WORK;
 
5114
        
 
5115
# check transactions-2 success:         1
 
5116
ROLLBACK WORK;
 
5117
        
 
5118
# check transactions-3 success:         1
 
5119
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5120
COMMIT WORK;
 
5121
ROLLBACK WORK;
 
5122
        
 
5123
# check transactions-4 success:         1
 
5124
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5125
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5126
FROM t0_template source_tab
 
5127
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5128
        
 
5129
# check transactions-5 success:         1
 
5130
ROLLBACK WORK;
 
5131
        
 
5132
# check transactions-6 success:         1
 
5133
# INFO: Storage engine used for t1 seems to be transactional.
 
5134
COMMIT;
 
5135
        
 
5136
# check transactions-7 success:         1
 
5137
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5138
COMMIT WORK;
 
5139
SET @@session.sql_mode = 'traditional';
 
5140
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5141
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5142
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5143
'', '', 'was inserted' FROM t0_template
 
5144
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5145
ERROR 22012: Division by 0
 
5146
COMMIT;
 
5147
        
 
5148
# check transactions-8 success:         1
 
5149
# INFO: Storage engine used for t1 seems to be able to revert
 
5150
#       changes made by the failing statement.
 
5151
SET @@session.sql_mode = '';
 
5152
SET AUTOCOMMIT= 1;
 
5153
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5154
COMMIT WORK;
 
5155
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5156
        
 
5157
# check special-1 success:      1
 
5158
UPDATE t1 SET f_charbig = '';
 
5159
        
 
5160
# check special-2 success:      1
 
5161
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5162
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5163
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5164
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5165
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5166
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5167
'just inserted' FROM t0_template
 
5168
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5169
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5170
BEGIN
 
5171
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5172
f_charbig = 'updated by trigger'
 
5173
      WHERE f_int1 = new.f_int1;
 
5174
END|
 
5175
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5176
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5177
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5178
        
 
5179
# check trigger-1 success:      1
 
5180
DROP TRIGGER trg_1;
 
5181
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5182
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5183
f_charbig = 'just inserted'
 
5184
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5185
DELETE FROM t0_aux
 
5186
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5187
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5188
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5189
'just inserted' FROM t0_template
 
5190
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5191
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5192
BEGIN
 
5193
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5194
f_charbig = 'updated by trigger'
 
5195
      WHERE f_int1 = new.f_int1;
 
5196
END|
 
5197
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5198
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5199
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5200
        
 
5201
# check trigger-2 success:      1
 
5202
DROP TRIGGER trg_1;
 
5203
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5204
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5205
f_charbig = 'just inserted'
 
5206
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5207
DELETE FROM t0_aux
 
5208
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5209
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5210
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5211
'just inserted' FROM t0_template
 
5212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5213
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5214
BEGIN
 
5215
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5216
f_charbig = 'updated by trigger'
 
5217
      WHERE f_int1 = new.f_int1;
 
5218
END|
 
5219
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5220
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5221
        
 
5222
# check trigger-3 success:      1
 
5223
DROP TRIGGER trg_1;
 
5224
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5225
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5226
f_charbig = 'just inserted'
 
5227
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5228
DELETE FROM t0_aux
 
5229
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5230
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5231
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5232
'just inserted' FROM t0_template
 
5233
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5234
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5235
BEGIN
 
5236
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5237
f_charbig = 'updated by trigger'
 
5238
      WHERE f_int1 = - old.f_int1;
 
5239
END|
 
5240
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5241
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5242
        
 
5243
# check trigger-4 success:      1
 
5244
DROP TRIGGER trg_1;
 
5245
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5246
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5247
f_charbig = 'just inserted'
 
5248
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5249
DELETE FROM t0_aux
 
5250
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5251
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5252
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5253
'just inserted' FROM t0_template
 
5254
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5255
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5256
BEGIN
 
5257
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5258
f_charbig = 'updated by trigger'
 
5259
      WHERE f_int1 = new.f_int1;
 
5260
END|
 
5261
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5262
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5263
        
 
5264
# check trigger-5 success:      1
 
5265
DROP TRIGGER trg_1;
 
5266
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5267
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5268
f_charbig = 'just inserted'
 
5269
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5270
DELETE FROM t0_aux
 
5271
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5272
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5273
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5274
'just inserted' FROM t0_template
 
5275
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5276
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5277
BEGIN
 
5278
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5279
f_charbig = 'updated by trigger'
 
5280
      WHERE f_int1 = - old.f_int1;
 
5281
END|
 
5282
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5283
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5284
        
 
5285
# check trigger-6 success:      1
 
5286
DROP TRIGGER trg_1;
 
5287
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5288
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5289
f_charbig = 'just inserted'
 
5290
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5291
DELETE FROM t0_aux
 
5292
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5293
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5294
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5295
'just inserted' FROM t0_template
 
5296
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5297
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5298
BEGIN
 
5299
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5300
f_charbig = 'updated by trigger'
 
5301
      WHERE f_int1 = - old.f_int1;
 
5302
END|
 
5303
DELETE FROM t0_aux
 
5304
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5305
        
 
5306
# check trigger-7 success:      1
 
5307
DROP TRIGGER trg_1;
 
5308
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5309
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5310
f_charbig = 'just inserted'
 
5311
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5312
DELETE FROM t0_aux
 
5313
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5314
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5315
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5316
'just inserted' FROM t0_template
 
5317
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5318
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5319
BEGIN
 
5320
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5321
f_charbig = 'updated by trigger'
 
5322
      WHERE f_int1 = - old.f_int1;
 
5323
END|
 
5324
DELETE FROM t0_aux
 
5325
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5326
        
 
5327
# check trigger-8 success:      1
 
5328
DROP TRIGGER trg_1;
 
5329
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5330
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5331
f_charbig = 'just inserted'
 
5332
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5333
DELETE FROM t0_aux
 
5334
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5335
DELETE FROM t1
 
5336
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5337
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5338
BEGIN
 
5339
SET new.f_int1 = old.f_int1 + @max_row,
 
5340
new.f_int2 = old.f_int2 - @max_row,
 
5341
new.f_charbig = '####updated per update trigger####';
 
5342
END|
 
5343
UPDATE t1
 
5344
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5345
f_charbig = '####updated per update statement itself####';
 
5346
        
 
5347
# check trigger-9 success:      1
 
5348
DROP TRIGGER trg_2;
 
5349
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5350
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5351
f_charbig = CONCAT('===',f_char1,'===');
 
5352
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5353
BEGIN
 
5354
SET new.f_int1 = new.f_int1 + @max_row,
 
5355
new.f_int2 = new.f_int2 - @max_row,
 
5356
new.f_charbig = '####updated per update trigger####';
 
5357
END|
 
5358
UPDATE t1
 
5359
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5360
f_charbig = '####updated per update statement itself####';
 
5361
        
 
5362
# check trigger-10 success:     1
 
5363
DROP TRIGGER trg_2;
 
5364
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5365
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5366
f_charbig = CONCAT('===',f_char1,'===');
 
5367
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5368
BEGIN
 
5369
SET new.f_int1 = @my_max1 + @counter,
 
5370
new.f_int2 = @my_min2 - @counter,
 
5371
new.f_charbig = '####updated per insert trigger####';
 
5372
SET @counter = @counter + 1;
 
5373
END|
 
5374
SET @counter = 1;
 
5375
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5376
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5377
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5378
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5379
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5380
ORDER BY f_int1;
 
5381
DROP TRIGGER trg_3;
 
5382
        
 
5383
# check trigger-11 success:     1
 
5384
DELETE FROM t1
 
5385
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5386
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5387
AND f_charbig = '####updated per insert trigger####';
 
5388
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5389
BEGIN
 
5390
SET new.f_int1 = @my_max1 + @counter,
 
5391
new.f_int2 = @my_min2 - @counter,
 
5392
new.f_charbig = '####updated per insert trigger####';
 
5393
SET @counter = @counter + 1;
 
5394
END|
 
5395
SET @counter = 1;
 
5396
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5397
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5398
SELECT CAST(f_int1 AS CHAR),
 
5399
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5400
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5401
ORDER BY f_int1;
 
5402
DROP TRIGGER trg_3;
 
5403
        
 
5404
# check trigger-12 success:     1
 
5405
DELETE FROM t1
 
5406
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5407
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5408
AND f_charbig = '####updated per insert trigger####';
 
5409
ANALYZE  TABLE t1;
 
5410
Table   Op      Msg_type        Msg_text
 
5411
test.t1 analyze status  OK
 
5412
CHECK    TABLE t1 EXTENDED;
 
5413
Table   Op      Msg_type        Msg_text
 
5414
test.t1 check   status  OK
 
5415
CHECKSUM TABLE t1 EXTENDED;
 
5416
Table   Checksum
 
5417
test.t1 <some_value>
 
5418
OPTIMIZE TABLE t1;
 
5419
Table   Op      Msg_type        Msg_text
 
5420
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
5421
test.t1 optimize        status  OK
 
5422
# check layout success:    1
 
5423
REPAIR   TABLE t1 EXTENDED;
 
5424
Table   Op      Msg_type        Msg_text
 
5425
test.t1 repair  note    The storage engine for the table doesn't support repair
 
5426
# check layout success:    1
 
5427
TRUNCATE t1;
 
5428
        
 
5429
# check TRUNCATE success:       1
 
5430
# check layout success:    1
 
5431
# End usability test (inc/partition_check.inc)
 
5432
DROP TABLE t1;
 
5433
CREATE TABLE t1 (
 
5434
f_int1 INTEGER,
 
5435
f_int2 INTEGER,
 
5436
f_char1 CHAR(20),
 
5437
f_char2 CHAR(20),
 
5438
f_charbig VARCHAR(1000)
 
5439
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
5440
)
 
5441
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
5442
(PARTITION parta VALUES LESS THAN (0),
 
5443
PARTITION partb VALUES LESS THAN (5),
 
5444
PARTITION partc VALUES LESS THAN (10),
 
5445
PARTITION partd VALUES LESS THAN (2147483646));
 
5446
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5447
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5448
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
5449
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
5450
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5451
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5452
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5453
# Start usability test (inc/partition_check.inc)
 
5454
create_command
 
5455
SHOW CREATE TABLE t1;
 
5456
Table   Create Table
 
5457
t1      CREATE TABLE `t1` (
 
5458
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
5459
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
5460
  `f_char1` char(20) DEFAULT NULL,
 
5461
  `f_char2` char(20) DEFAULT NULL,
 
5462
  `f_charbig` varchar(1000) DEFAULT NULL
 
5463
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
5464
/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
 
5465
SUBPARTITION BY HASH (f_int1)
 
5466
SUBPARTITIONS 2
 
5467
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
5468
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
5469
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
5470
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
5471
 
 
5472
# check prerequisites-1 success:    1
 
5473
# check COUNT(*) success:    1
 
5474
# check MIN/MAX(f_int1) success:    1
 
5475
# check MIN/MAX(f_int2) success:    1
 
5476
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5477
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5478
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5479
WHERE f_int1 IN (2,3);
 
5480
# check prerequisites-3 success:    1
 
5481
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5482
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
5483
# check read via f_int1 success: 1
 
5484
# check read via f_int2 success: 1
 
5485
        
 
5486
# check multiple-1 success:     1
 
5487
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5488
        
 
5489
# check multiple-2 success:     1
 
5490
INSERT INTO t1 SELECT * FROM t0_template
 
5491
WHERE MOD(f_int1,3) = 0;
 
5492
        
 
5493
# check multiple-3 success:     1
 
5494
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5495
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5496
AND @max_row_div2 + @max_row_div4;
 
5497
        
 
5498
# check multiple-4 success:     1
 
5499
DELETE FROM t1
 
5500
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5501
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5502
        
 
5503
# check multiple-5 success:     1
 
5504
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5505
INSERT INTO t1
 
5506
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5507
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5508
f_charbig = '#SINGLE#';
 
5509
        
 
5510
# check single-1 success:       1
 
5511
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5512
INSERT INTO t1
 
5513
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5514
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5515
f_charbig = '#SINGLE#';
 
5516
        
 
5517
# check single-2 success:       1
 
5518
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5519
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5520
UPDATE t1 SET f_int1 = @cur_value2
 
5521
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5522
        
 
5523
# check single-3 success:       1
 
5524
SET @cur_value1= -1;
 
5525
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5526
UPDATE t1 SET f_int1 = @cur_value1
 
5527
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5528
        
 
5529
# check single-4 success:       1
 
5530
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5531
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5532
        
 
5533
# check single-5 success:       1
 
5534
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5535
        
 
5536
# check single-6 success:       1
 
5537
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5538
        
 
5539
# check single-7 success:       1
 
5540
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
5541
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5542
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5543
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5544
f_charbig = '#NULL#';
 
5545
INSERT INTO t1
 
5546
SET f_int1 = NULL , f_int2 = -@max_row,
 
5547
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5548
f_charbig = '#NULL#';
 
5549
ERROR 23000: Column 'f_int1' cannot be null
 
5550
# check null success:    1
 
5551
DELETE FROM t1
 
5552
WHERE f_int1 = 0 AND f_int2 = 0
 
5553
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5554
AND f_charbig = '#NULL#';
 
5555
SET AUTOCOMMIT= 0;
 
5556
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5557
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5558
FROM t0_template source_tab
 
5559
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5560
        
 
5561
# check transactions-1 success:         1
 
5562
COMMIT WORK;
 
5563
        
 
5564
# check transactions-2 success:         1
 
5565
ROLLBACK WORK;
 
5566
        
 
5567
# check transactions-3 success:         1
 
5568
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5569
COMMIT WORK;
 
5570
ROLLBACK WORK;
 
5571
        
 
5572
# check transactions-4 success:         1
 
5573
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5574
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5575
FROM t0_template source_tab
 
5576
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5577
        
 
5578
# check transactions-5 success:         1
 
5579
ROLLBACK WORK;
 
5580
        
 
5581
# check transactions-6 success:         1
 
5582
# INFO: Storage engine used for t1 seems to be transactional.
 
5583
COMMIT;
 
5584
        
 
5585
# check transactions-7 success:         1
 
5586
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5587
COMMIT WORK;
 
5588
SET @@session.sql_mode = 'traditional';
 
5589
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5590
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5591
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5592
'', '', 'was inserted' FROM t0_template
 
5593
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5594
ERROR 22012: Division by 0
 
5595
COMMIT;
 
5596
        
 
5597
# check transactions-8 success:         1
 
5598
# INFO: Storage engine used for t1 seems to be able to revert
 
5599
#       changes made by the failing statement.
 
5600
SET @@session.sql_mode = '';
 
5601
SET AUTOCOMMIT= 1;
 
5602
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5603
COMMIT WORK;
 
5604
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5605
        
 
5606
# check special-1 success:      1
 
5607
UPDATE t1 SET f_charbig = '';
 
5608
        
 
5609
# check special-2 success:      1
 
5610
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5611
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5612
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5613
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5614
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5615
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5616
'just inserted' FROM t0_template
 
5617
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5618
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5619
BEGIN
 
5620
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5621
f_charbig = 'updated by trigger'
 
5622
      WHERE f_int1 = new.f_int1;
 
5623
END|
 
5624
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5625
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5626
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5627
        
 
5628
# check trigger-1 success:      1
 
5629
DROP TRIGGER trg_1;
 
5630
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5631
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5632
f_charbig = 'just inserted'
 
5633
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5634
DELETE FROM t0_aux
 
5635
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5636
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5637
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5638
'just inserted' FROM t0_template
 
5639
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5640
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5641
BEGIN
 
5642
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5643
f_charbig = 'updated by trigger'
 
5644
      WHERE f_int1 = new.f_int1;
 
5645
END|
 
5646
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5647
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5648
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5649
        
 
5650
# check trigger-2 success:      1
 
5651
DROP TRIGGER trg_1;
 
5652
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5653
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5654
f_charbig = 'just inserted'
 
5655
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5656
DELETE FROM t0_aux
 
5657
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5658
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5659
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5660
'just inserted' FROM t0_template
 
5661
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5662
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5663
BEGIN
 
5664
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5665
f_charbig = 'updated by trigger'
 
5666
      WHERE f_int1 = new.f_int1;
 
5667
END|
 
5668
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5669
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5670
        
 
5671
# check trigger-3 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 BEFORE UPDATE 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 = - old.f_int1;
 
5688
END|
 
5689
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5690
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5691
        
 
5692
# check trigger-4 success:      1
 
5693
DROP TRIGGER trg_1;
 
5694
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5695
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5696
f_charbig = 'just inserted'
 
5697
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5698
DELETE FROM t0_aux
 
5699
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5700
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5701
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5702
'just inserted' FROM t0_template
 
5703
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5704
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5705
BEGIN
 
5706
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5707
f_charbig = 'updated by trigger'
 
5708
      WHERE f_int1 = new.f_int1;
 
5709
END|
 
5710
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5711
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5712
        
 
5713
# check trigger-5 success:      1
 
5714
DROP TRIGGER trg_1;
 
5715
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5716
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5717
f_charbig = 'just inserted'
 
5718
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5719
DELETE FROM t0_aux
 
5720
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5721
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5722
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5723
'just inserted' FROM t0_template
 
5724
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5725
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5726
BEGIN
 
5727
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5728
f_charbig = 'updated by trigger'
 
5729
      WHERE f_int1 = - old.f_int1;
 
5730
END|
 
5731
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5732
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5733
        
 
5734
# check trigger-6 success:      1
 
5735
DROP TRIGGER trg_1;
 
5736
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5737
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5738
f_charbig = 'just inserted'
 
5739
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5740
DELETE FROM t0_aux
 
5741
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5742
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5743
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5744
'just inserted' FROM t0_template
 
5745
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5746
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5747
BEGIN
 
5748
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5749
f_charbig = 'updated by trigger'
 
5750
      WHERE f_int1 = - old.f_int1;
 
5751
END|
 
5752
DELETE FROM t0_aux
 
5753
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5754
        
 
5755
# check trigger-7 success:      1
 
5756
DROP TRIGGER trg_1;
 
5757
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5758
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5759
f_charbig = 'just inserted'
 
5760
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5761
DELETE FROM t0_aux
 
5762
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5763
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5764
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5765
'just inserted' FROM t0_template
 
5766
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5767
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5768
BEGIN
 
5769
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5770
f_charbig = 'updated by trigger'
 
5771
      WHERE f_int1 = - old.f_int1;
 
5772
END|
 
5773
DELETE FROM t0_aux
 
5774
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5775
        
 
5776
# check trigger-8 success:      1
 
5777
DROP TRIGGER trg_1;
 
5778
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5779
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5780
f_charbig = 'just inserted'
 
5781
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5782
DELETE FROM t0_aux
 
5783
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5784
DELETE FROM t1
 
5785
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5786
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5787
BEGIN
 
5788
SET new.f_int1 = old.f_int1 + @max_row,
 
5789
new.f_int2 = old.f_int2 - @max_row,
 
5790
new.f_charbig = '####updated per update trigger####';
 
5791
END|
 
5792
UPDATE t1
 
5793
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5794
f_charbig = '####updated per update statement itself####';
 
5795
        
 
5796
# check trigger-9 success:      1
 
5797
DROP TRIGGER trg_2;
 
5798
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5799
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5800
f_charbig = CONCAT('===',f_char1,'===');
 
5801
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5802
BEGIN
 
5803
SET new.f_int1 = new.f_int1 + @max_row,
 
5804
new.f_int2 = new.f_int2 - @max_row,
 
5805
new.f_charbig = '####updated per update trigger####';
 
5806
END|
 
5807
UPDATE t1
 
5808
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5809
f_charbig = '####updated per update statement itself####';
 
5810
        
 
5811
# check trigger-10 success:     1
 
5812
DROP TRIGGER trg_2;
 
5813
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5814
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5815
f_charbig = CONCAT('===',f_char1,'===');
 
5816
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5817
BEGIN
 
5818
SET new.f_int1 = @my_max1 + @counter,
 
5819
new.f_int2 = @my_min2 - @counter,
 
5820
new.f_charbig = '####updated per insert trigger####';
 
5821
SET @counter = @counter + 1;
 
5822
END|
 
5823
SET @counter = 1;
 
5824
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5825
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5826
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5827
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5828
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5829
ORDER BY f_int1;
 
5830
DROP TRIGGER trg_3;
 
5831
        
 
5832
# check trigger-11 success:     1
 
5833
DELETE FROM t1
 
5834
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5835
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5836
AND f_charbig = '####updated per insert trigger####';
 
5837
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5838
BEGIN
 
5839
SET new.f_int1 = @my_max1 + @counter,
 
5840
new.f_int2 = @my_min2 - @counter,
 
5841
new.f_charbig = '####updated per insert trigger####';
 
5842
SET @counter = @counter + 1;
 
5843
END|
 
5844
SET @counter = 1;
 
5845
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5846
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5847
SELECT CAST(f_int1 AS CHAR),
 
5848
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5849
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5850
ORDER BY f_int1;
 
5851
DROP TRIGGER trg_3;
 
5852
        
 
5853
# check trigger-12 success:     1
 
5854
DELETE FROM t1
 
5855
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5856
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5857
AND f_charbig = '####updated per insert trigger####';
 
5858
ANALYZE  TABLE t1;
 
5859
Table   Op      Msg_type        Msg_text
 
5860
test.t1 analyze status  OK
 
5861
CHECK    TABLE t1 EXTENDED;
 
5862
Table   Op      Msg_type        Msg_text
 
5863
test.t1 check   status  OK
 
5864
CHECKSUM TABLE t1 EXTENDED;
 
5865
Table   Checksum
 
5866
test.t1 <some_value>
 
5867
OPTIMIZE TABLE t1;
 
5868
Table   Op      Msg_type        Msg_text
 
5869
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
5870
test.t1 optimize        status  OK
 
5871
# check layout success:    1
 
5872
REPAIR   TABLE t1 EXTENDED;
 
5873
Table   Op      Msg_type        Msg_text
 
5874
test.t1 repair  note    The storage engine for the table doesn't support repair
 
5875
# check layout success:    1
 
5876
TRUNCATE t1;
 
5877
        
 
5878
# check TRUNCATE success:       1
 
5879
# check layout success:    1
 
5880
# End usability test (inc/partition_check.inc)
 
5881
DROP TABLE t1;
 
5882
CREATE TABLE t1 (
 
5883
f_int1 INTEGER,
 
5884
f_int2 INTEGER,
 
5885
f_char1 CHAR(20),
 
5886
f_char2 CHAR(20),
 
5887
f_charbig VARCHAR(1000)
 
5888
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
5889
)
 
5890
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
5891
(PARTITION part1 VALUES LESS THAN (0)
 
5892
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
5893
PARTITION part2 VALUES LESS THAN (5)
 
5894
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
5895
PARTITION part3 VALUES LESS THAN (10)
 
5896
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
5897
PARTITION part4 VALUES LESS THAN (2147483646)
 
5898
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
5899
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5900
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5901
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
5902
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
5903
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5904
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5905
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5906
# Start usability test (inc/partition_check.inc)
 
5907
create_command
 
5908
SHOW CREATE TABLE t1;
 
5909
Table   Create Table
 
5910
t1      CREATE TABLE `t1` (
 
5911
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
5912
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
5913
  `f_char1` char(20) DEFAULT NULL,
 
5914
  `f_char2` char(20) DEFAULT NULL,
 
5915
  `f_charbig` varchar(1000) DEFAULT NULL
 
5916
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
5917
/*!50100 PARTITION BY RANGE (f_int1)
 
5918
SUBPARTITION BY KEY (f_int1)
 
5919
(PARTITION part1 VALUES LESS THAN (0)
 
5920
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
5921
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
5922
 PARTITION part2 VALUES LESS THAN (5)
 
5923
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
5924
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
5925
 PARTITION part3 VALUES LESS THAN (10)
 
5926
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
5927
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
5928
 PARTITION part4 VALUES LESS THAN (2147483646)
 
5929
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
5930
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
5931
 
 
5932
# check prerequisites-1 success:    1
 
5933
# check COUNT(*) success:    1
 
5934
# check MIN/MAX(f_int1) success:    1
 
5935
# check MIN/MAX(f_int2) success:    1
 
5936
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5937
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5938
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5939
WHERE f_int1 IN (2,3);
 
5940
# check prerequisites-3 success:    1
 
5941
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5942
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
5943
# check read via f_int1 success: 1
 
5944
# check read via f_int2 success: 1
 
5945
        
 
5946
# check multiple-1 success:     1
 
5947
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5948
        
 
5949
# check multiple-2 success:     1
 
5950
INSERT INTO t1 SELECT * FROM t0_template
 
5951
WHERE MOD(f_int1,3) = 0;
 
5952
        
 
5953
# check multiple-3 success:     1
 
5954
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5955
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5956
AND @max_row_div2 + @max_row_div4;
 
5957
        
 
5958
# check multiple-4 success:     1
 
5959
DELETE FROM t1
 
5960
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5961
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5962
        
 
5963
# check multiple-5 success:     1
 
5964
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5965
INSERT INTO t1
 
5966
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5967
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5968
f_charbig = '#SINGLE#';
 
5969
        
 
5970
# check single-1 success:       1
 
5971
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5972
INSERT INTO t1
 
5973
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5974
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5975
f_charbig = '#SINGLE#';
 
5976
        
 
5977
# check single-2 success:       1
 
5978
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5979
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5980
UPDATE t1 SET f_int1 = @cur_value2
 
5981
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5982
        
 
5983
# check single-3 success:       1
 
5984
SET @cur_value1= -1;
 
5985
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5986
UPDATE t1 SET f_int1 = @cur_value1
 
5987
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5988
        
 
5989
# check single-4 success:       1
 
5990
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5991
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5992
        
 
5993
# check single-5 success:       1
 
5994
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5995
        
 
5996
# check single-6 success:       1
 
5997
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5998
ERROR HY000: Table has no partition for value 2147483647
 
5999
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6000
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6001
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6002
f_charbig = '#NULL#';
 
6003
INSERT INTO t1
 
6004
SET f_int1 = NULL , f_int2 = -@max_row,
 
6005
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6006
f_charbig = '#NULL#';
 
6007
ERROR 23000: Column 'f_int1' cannot be null
 
6008
# check null success:    1
 
6009
DELETE FROM t1
 
6010
WHERE f_int1 = 0 AND f_int2 = 0
 
6011
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6012
AND f_charbig = '#NULL#';
 
6013
SET AUTOCOMMIT= 0;
 
6014
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6015
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6016
FROM t0_template source_tab
 
6017
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6018
        
 
6019
# check transactions-1 success:         1
 
6020
COMMIT WORK;
 
6021
        
 
6022
# check transactions-2 success:         1
 
6023
ROLLBACK WORK;
 
6024
        
 
6025
# check transactions-3 success:         1
 
6026
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6027
COMMIT WORK;
 
6028
ROLLBACK WORK;
 
6029
        
 
6030
# check transactions-4 success:         1
 
6031
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6032
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6033
FROM t0_template source_tab
 
6034
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6035
        
 
6036
# check transactions-5 success:         1
 
6037
ROLLBACK WORK;
 
6038
        
 
6039
# check transactions-6 success:         1
 
6040
# INFO: Storage engine used for t1 seems to be transactional.
 
6041
COMMIT;
 
6042
        
 
6043
# check transactions-7 success:         1
 
6044
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6045
COMMIT WORK;
 
6046
SET @@session.sql_mode = 'traditional';
 
6047
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6048
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6049
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6050
'', '', 'was inserted' FROM t0_template
 
6051
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6052
ERROR 22012: Division by 0
 
6053
COMMIT;
 
6054
        
 
6055
# check transactions-8 success:         1
 
6056
# INFO: Storage engine used for t1 seems to be able to revert
 
6057
#       changes made by the failing statement.
 
6058
SET @@session.sql_mode = '';
 
6059
SET AUTOCOMMIT= 1;
 
6060
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6061
COMMIT WORK;
 
6062
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6063
        
 
6064
# check special-1 success:      1
 
6065
UPDATE t1 SET f_charbig = '';
 
6066
        
 
6067
# check special-2 success:      1
 
6068
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6069
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6070
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6071
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6072
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6073
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6074
'just inserted' FROM t0_template
 
6075
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6076
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6077
BEGIN
 
6078
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6079
f_charbig = 'updated by trigger'
 
6080
      WHERE f_int1 = new.f_int1;
 
6081
END|
 
6082
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6083
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6084
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6085
        
 
6086
# check trigger-1 success:      1
 
6087
DROP TRIGGER trg_1;
 
6088
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6089
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6090
f_charbig = 'just inserted'
 
6091
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6092
DELETE FROM t0_aux
 
6093
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6094
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6095
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6096
'just inserted' FROM t0_template
 
6097
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6098
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6099
BEGIN
 
6100
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6101
f_charbig = 'updated by trigger'
 
6102
      WHERE f_int1 = new.f_int1;
 
6103
END|
 
6104
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6105
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6106
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6107
        
 
6108
# check trigger-2 success:      1
 
6109
DROP TRIGGER trg_1;
 
6110
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6111
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6112
f_charbig = 'just inserted'
 
6113
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6114
DELETE FROM t0_aux
 
6115
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6116
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6117
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6118
'just inserted' FROM t0_template
 
6119
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6120
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6121
BEGIN
 
6122
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6123
f_charbig = 'updated by trigger'
 
6124
      WHERE f_int1 = new.f_int1;
 
6125
END|
 
6126
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6127
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6128
        
 
6129
# check trigger-3 success:      1
 
6130
DROP TRIGGER trg_1;
 
6131
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6132
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6133
f_charbig = 'just inserted'
 
6134
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6135
DELETE FROM t0_aux
 
6136
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6137
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6138
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6139
'just inserted' FROM t0_template
 
6140
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6141
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6142
BEGIN
 
6143
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6144
f_charbig = 'updated by trigger'
 
6145
      WHERE f_int1 = - old.f_int1;
 
6146
END|
 
6147
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6148
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6149
        
 
6150
# check trigger-4 success:      1
 
6151
DROP TRIGGER trg_1;
 
6152
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6153
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6154
f_charbig = 'just inserted'
 
6155
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6156
DELETE FROM t0_aux
 
6157
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6158
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6159
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6160
'just inserted' FROM t0_template
 
6161
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6162
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6163
BEGIN
 
6164
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6165
f_charbig = 'updated by trigger'
 
6166
      WHERE f_int1 = new.f_int1;
 
6167
END|
 
6168
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6169
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6170
        
 
6171
# check trigger-5 success:      1
 
6172
DROP TRIGGER trg_1;
 
6173
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6174
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6175
f_charbig = 'just inserted'
 
6176
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6177
DELETE FROM t0_aux
 
6178
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6179
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6180
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6181
'just inserted' FROM t0_template
 
6182
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6183
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6184
BEGIN
 
6185
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6186
f_charbig = 'updated by trigger'
 
6187
      WHERE f_int1 = - old.f_int1;
 
6188
END|
 
6189
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6190
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6191
        
 
6192
# check trigger-6 success:      1
 
6193
DROP TRIGGER trg_1;
 
6194
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6195
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6196
f_charbig = 'just inserted'
 
6197
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6198
DELETE FROM t0_aux
 
6199
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6200
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6201
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6202
'just inserted' FROM t0_template
 
6203
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6204
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
6205
BEGIN
 
6206
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6207
f_charbig = 'updated by trigger'
 
6208
      WHERE f_int1 = - old.f_int1;
 
6209
END|
 
6210
DELETE FROM t0_aux
 
6211
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6212
        
 
6213
# check trigger-7 success:      1
 
6214
DROP TRIGGER trg_1;
 
6215
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6216
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6217
f_charbig = 'just inserted'
 
6218
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6219
DELETE FROM t0_aux
 
6220
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6221
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6222
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6223
'just inserted' FROM t0_template
 
6224
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6225
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
6226
BEGIN
 
6227
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6228
f_charbig = 'updated by trigger'
 
6229
      WHERE f_int1 = - old.f_int1;
 
6230
END|
 
6231
DELETE FROM t0_aux
 
6232
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6233
        
 
6234
# check trigger-8 success:      1
 
6235
DROP TRIGGER trg_1;
 
6236
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6237
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6238
f_charbig = 'just inserted'
 
6239
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6240
DELETE FROM t0_aux
 
6241
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6242
DELETE FROM t1
 
6243
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6244
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6245
BEGIN
 
6246
SET new.f_int1 = old.f_int1 + @max_row,
 
6247
new.f_int2 = old.f_int2 - @max_row,
 
6248
new.f_charbig = '####updated per update trigger####';
 
6249
END|
 
6250
UPDATE t1
 
6251
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6252
f_charbig = '####updated per update statement itself####';
 
6253
        
 
6254
# check trigger-9 success:      1
 
6255
DROP TRIGGER trg_2;
 
6256
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6257
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6258
f_charbig = CONCAT('===',f_char1,'===');
 
6259
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6260
BEGIN
 
6261
SET new.f_int1 = new.f_int1 + @max_row,
 
6262
new.f_int2 = new.f_int2 - @max_row,
 
6263
new.f_charbig = '####updated per update trigger####';
 
6264
END|
 
6265
UPDATE t1
 
6266
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6267
f_charbig = '####updated per update statement itself####';
 
6268
        
 
6269
# check trigger-10 success:     1
 
6270
DROP TRIGGER trg_2;
 
6271
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6272
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6273
f_charbig = CONCAT('===',f_char1,'===');
 
6274
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6275
BEGIN
 
6276
SET new.f_int1 = @my_max1 + @counter,
 
6277
new.f_int2 = @my_min2 - @counter,
 
6278
new.f_charbig = '####updated per insert trigger####';
 
6279
SET @counter = @counter + 1;
 
6280
END|
 
6281
SET @counter = 1;
 
6282
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6283
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6284
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6285
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6286
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6287
ORDER BY f_int1;
 
6288
DROP TRIGGER trg_3;
 
6289
        
 
6290
# check trigger-11 success:     1
 
6291
DELETE FROM t1
 
6292
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6293
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6294
AND f_charbig = '####updated per insert trigger####';
 
6295
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6296
BEGIN
 
6297
SET new.f_int1 = @my_max1 + @counter,
 
6298
new.f_int2 = @my_min2 - @counter,
 
6299
new.f_charbig = '####updated per insert trigger####';
 
6300
SET @counter = @counter + 1;
 
6301
END|
 
6302
SET @counter = 1;
 
6303
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6304
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
6305
SELECT CAST(f_int1 AS CHAR),
 
6306
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6307
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6308
ORDER BY f_int1;
 
6309
DROP TRIGGER trg_3;
 
6310
        
 
6311
# check trigger-12 success:     1
 
6312
DELETE FROM t1
 
6313
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6314
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6315
AND f_charbig = '####updated per insert trigger####';
 
6316
ANALYZE  TABLE t1;
 
6317
Table   Op      Msg_type        Msg_text
 
6318
test.t1 analyze status  OK
 
6319
CHECK    TABLE t1 EXTENDED;
 
6320
Table   Op      Msg_type        Msg_text
 
6321
test.t1 check   status  OK
 
6322
CHECKSUM TABLE t1 EXTENDED;
 
6323
Table   Checksum
 
6324
test.t1 <some_value>
 
6325
OPTIMIZE TABLE t1;
 
6326
Table   Op      Msg_type        Msg_text
 
6327
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
6328
test.t1 optimize        status  OK
 
6329
# check layout success:    1
 
6330
REPAIR   TABLE t1 EXTENDED;
 
6331
Table   Op      Msg_type        Msg_text
 
6332
test.t1 repair  note    The storage engine for the table doesn't support repair
 
6333
# check layout success:    1
 
6334
TRUNCATE t1;
 
6335
        
 
6336
# check TRUNCATE success:       1
 
6337
# check layout success:    1
 
6338
# End usability test (inc/partition_check.inc)
 
6339
DROP TABLE t1;
 
6340
CREATE TABLE t1 (
 
6341
f_int1 INTEGER,
 
6342
f_int2 INTEGER,
 
6343
f_char1 CHAR(20),
 
6344
f_char2 CHAR(20),
 
6345
f_charbig VARCHAR(1000)
 
6346
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
6347
)
 
6348
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
6349
(PARTITION part1 VALUES IN (0)
 
6350
(SUBPARTITION sp11, SUBPARTITION sp12),
 
6351
PARTITION part2 VALUES IN (1)
 
6352
(SUBPARTITION sp21, SUBPARTITION sp22),
 
6353
PARTITION part3 VALUES IN (2)
 
6354
(SUBPARTITION sp31, SUBPARTITION sp32),
 
6355
PARTITION part4 VALUES IN (NULL)
 
6356
(SUBPARTITION sp41, SUBPARTITION sp42));
 
6357
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6358
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6359
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
6360
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
6361
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6362
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6363
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6364
# Start usability test (inc/partition_check.inc)
 
6365
create_command
 
6366
SHOW CREATE TABLE t1;
 
6367
Table   Create Table
 
6368
t1      CREATE TABLE `t1` (
 
6369
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
6370
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
6371
  `f_char1` char(20) DEFAULT NULL,
 
6372
  `f_char2` char(20) DEFAULT NULL,
 
6373
  `f_charbig` varchar(1000) DEFAULT NULL
 
6374
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
6375
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
6376
SUBPARTITION BY HASH (f_int1 + 1)
 
6377
(PARTITION part1 VALUES IN (0)
 
6378
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
6379
  SUBPARTITION sp12 ENGINE = InnoDB),
 
6380
 PARTITION part2 VALUES IN (1)
 
6381
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
6382
  SUBPARTITION sp22 ENGINE = InnoDB),
 
6383
 PARTITION part3 VALUES IN (2)
 
6384
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
6385
  SUBPARTITION sp32 ENGINE = InnoDB),
 
6386
 PARTITION part4 VALUES IN (NULL)
 
6387
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
6388
  SUBPARTITION sp42 ENGINE = InnoDB)) */
 
6389
 
 
6390
# check prerequisites-1 success:    1
 
6391
# check COUNT(*) success:    1
 
6392
# check MIN/MAX(f_int1) success:    1
 
6393
# check MIN/MAX(f_int2) success:    1
 
6394
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6395
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6396
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6397
WHERE f_int1 IN (2,3);
 
6398
# check prerequisites-3 success:    1
 
6399
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6400
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
6401
# check read via f_int1 success: 1
 
6402
# check read via f_int2 success: 1
 
6403
        
 
6404
# check multiple-1 success:     1
 
6405
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6406
        
 
6407
# check multiple-2 success:     1
 
6408
INSERT INTO t1 SELECT * FROM t0_template
 
6409
WHERE MOD(f_int1,3) = 0;
 
6410
        
 
6411
# check multiple-3 success:     1
 
6412
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6413
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6414
AND @max_row_div2 + @max_row_div4;
 
6415
        
 
6416
# check multiple-4 success:     1
 
6417
DELETE FROM t1
 
6418
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6419
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6420
        
 
6421
# check multiple-5 success:     1
 
6422
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6423
INSERT INTO t1
 
6424
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6425
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6426
f_charbig = '#SINGLE#';
 
6427
        
 
6428
# check single-1 success:       1
 
6429
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6430
INSERT INTO t1
 
6431
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6432
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6433
f_charbig = '#SINGLE#';
 
6434
        
 
6435
# check single-2 success:       1
 
6436
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6437
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6438
UPDATE t1 SET f_int1 = @cur_value2
 
6439
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6440
        
 
6441
# check single-3 success:       1
 
6442
SET @cur_value1= -1;
 
6443
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6444
UPDATE t1 SET f_int1 = @cur_value1
 
6445
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6446
        
 
6447
# check single-4 success:       1
 
6448
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6449
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6450
        
 
6451
# check single-5 success:       1
 
6452
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6453
        
 
6454
# check single-6 success:       1
 
6455
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6456
        
 
6457
# check single-7 success:       1
 
6458
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
6459
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6460
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6461
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6462
f_charbig = '#NULL#';
 
6463
INSERT INTO t1
 
6464
SET f_int1 = NULL , f_int2 = -@max_row,
 
6465
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6466
f_charbig = '#NULL#';
 
6467
ERROR 23000: Column 'f_int1' cannot be null
 
6468
# check null success:    1
 
6469
DELETE FROM t1
 
6470
WHERE f_int1 = 0 AND f_int2 = 0
 
6471
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6472
AND f_charbig = '#NULL#';
 
6473
SET AUTOCOMMIT= 0;
 
6474
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6475
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6476
FROM t0_template source_tab
 
6477
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6478
        
 
6479
# check transactions-1 success:         1
 
6480
COMMIT WORK;
 
6481
        
 
6482
# check transactions-2 success:         1
 
6483
ROLLBACK WORK;
 
6484
        
 
6485
# check transactions-3 success:         1
 
6486
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6487
COMMIT WORK;
 
6488
ROLLBACK WORK;
 
6489
        
 
6490
# check transactions-4 success:         1
 
6491
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6492
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6493
FROM t0_template source_tab
 
6494
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6495
        
 
6496
# check transactions-5 success:         1
 
6497
ROLLBACK WORK;
 
6498
        
 
6499
# check transactions-6 success:         1
 
6500
# INFO: Storage engine used for t1 seems to be transactional.
 
6501
COMMIT;
 
6502
        
 
6503
# check transactions-7 success:         1
 
6504
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6505
COMMIT WORK;
 
6506
SET @@session.sql_mode = 'traditional';
 
6507
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6508
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6509
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6510
'', '', 'was inserted' FROM t0_template
 
6511
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6512
ERROR 22012: Division by 0
 
6513
COMMIT;
 
6514
        
 
6515
# check transactions-8 success:         1
 
6516
# INFO: Storage engine used for t1 seems to be able to revert
 
6517
#       changes made by the failing statement.
 
6518
SET @@session.sql_mode = '';
 
6519
SET AUTOCOMMIT= 1;
 
6520
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6521
COMMIT WORK;
 
6522
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6523
        
 
6524
# check special-1 success:      1
 
6525
UPDATE t1 SET f_charbig = '';
 
6526
        
 
6527
# check special-2 success:      1
 
6528
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6529
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6530
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6531
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6532
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6533
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6534
'just inserted' FROM t0_template
 
6535
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6536
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6537
BEGIN
 
6538
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6539
f_charbig = 'updated by trigger'
 
6540
      WHERE f_int1 = new.f_int1;
 
6541
END|
 
6542
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6543
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6544
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6545
        
 
6546
# check trigger-1 success:      1
 
6547
DROP TRIGGER trg_1;
 
6548
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6549
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6550
f_charbig = 'just inserted'
 
6551
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6552
DELETE FROM t0_aux
 
6553
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6554
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6555
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6556
'just inserted' FROM t0_template
 
6557
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6558
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6559
BEGIN
 
6560
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6561
f_charbig = 'updated by trigger'
 
6562
      WHERE f_int1 = new.f_int1;
 
6563
END|
 
6564
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6565
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6566
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6567
        
 
6568
# check trigger-2 success:      1
 
6569
DROP TRIGGER trg_1;
 
6570
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6571
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6572
f_charbig = 'just inserted'
 
6573
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6574
DELETE FROM t0_aux
 
6575
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6576
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6577
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6578
'just inserted' FROM t0_template
 
6579
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6580
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6581
BEGIN
 
6582
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6583
f_charbig = 'updated by trigger'
 
6584
      WHERE f_int1 = new.f_int1;
 
6585
END|
 
6586
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6587
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6588
        
 
6589
# check trigger-3 success:      1
 
6590
DROP TRIGGER trg_1;
 
6591
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6592
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6593
f_charbig = 'just inserted'
 
6594
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6595
DELETE FROM t0_aux
 
6596
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6597
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6598
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6599
'just inserted' FROM t0_template
 
6600
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6601
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6602
BEGIN
 
6603
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6604
f_charbig = 'updated by trigger'
 
6605
      WHERE f_int1 = - old.f_int1;
 
6606
END|
 
6607
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6608
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6609
        
 
6610
# check trigger-4 success:      1
 
6611
DROP TRIGGER trg_1;
 
6612
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6613
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6614
f_charbig = 'just inserted'
 
6615
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6616
DELETE FROM t0_aux
 
6617
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6618
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6619
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6620
'just inserted' FROM t0_template
 
6621
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6622
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6623
BEGIN
 
6624
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6625
f_charbig = 'updated by trigger'
 
6626
      WHERE f_int1 = new.f_int1;
 
6627
END|
 
6628
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6629
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6630
        
 
6631
# check trigger-5 success:      1
 
6632
DROP TRIGGER trg_1;
 
6633
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6634
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6635
f_charbig = 'just inserted'
 
6636
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6637
DELETE FROM t0_aux
 
6638
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6639
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6640
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6641
'just inserted' FROM t0_template
 
6642
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6643
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6644
BEGIN
 
6645
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6646
f_charbig = 'updated by trigger'
 
6647
      WHERE f_int1 = - old.f_int1;
 
6648
END|
 
6649
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6650
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6651
        
 
6652
# check trigger-6 success:      1
 
6653
DROP TRIGGER trg_1;
 
6654
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6655
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6656
f_charbig = 'just inserted'
 
6657
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6658
DELETE FROM t0_aux
 
6659
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6660
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6661
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6662
'just inserted' FROM t0_template
 
6663
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6664
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
6665
BEGIN
 
6666
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6667
f_charbig = 'updated by trigger'
 
6668
      WHERE f_int1 = - old.f_int1;
 
6669
END|
 
6670
DELETE FROM t0_aux
 
6671
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6672
        
 
6673
# check trigger-7 success:      1
 
6674
DROP TRIGGER trg_1;
 
6675
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6676
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6677
f_charbig = 'just inserted'
 
6678
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6679
DELETE FROM t0_aux
 
6680
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6681
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6682
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6683
'just inserted' FROM t0_template
 
6684
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6685
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
6686
BEGIN
 
6687
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6688
f_charbig = 'updated by trigger'
 
6689
      WHERE f_int1 = - old.f_int1;
 
6690
END|
 
6691
DELETE FROM t0_aux
 
6692
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6693
        
 
6694
# check trigger-8 success:      1
 
6695
DROP TRIGGER trg_1;
 
6696
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6697
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6698
f_charbig = 'just inserted'
 
6699
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6700
DELETE FROM t0_aux
 
6701
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6702
DELETE FROM t1
 
6703
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6704
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6705
BEGIN
 
6706
SET new.f_int1 = old.f_int1 + @max_row,
 
6707
new.f_int2 = old.f_int2 - @max_row,
 
6708
new.f_charbig = '####updated per update trigger####';
 
6709
END|
 
6710
UPDATE t1
 
6711
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6712
f_charbig = '####updated per update statement itself####';
 
6713
        
 
6714
# check trigger-9 success:      1
 
6715
DROP TRIGGER trg_2;
 
6716
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6717
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6718
f_charbig = CONCAT('===',f_char1,'===');
 
6719
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6720
BEGIN
 
6721
SET new.f_int1 = new.f_int1 + @max_row,
 
6722
new.f_int2 = new.f_int2 - @max_row,
 
6723
new.f_charbig = '####updated per update trigger####';
 
6724
END|
 
6725
UPDATE t1
 
6726
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6727
f_charbig = '####updated per update statement itself####';
 
6728
        
 
6729
# check trigger-10 success:     1
 
6730
DROP TRIGGER trg_2;
 
6731
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6732
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6733
f_charbig = CONCAT('===',f_char1,'===');
 
6734
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6735
BEGIN
 
6736
SET new.f_int1 = @my_max1 + @counter,
 
6737
new.f_int2 = @my_min2 - @counter,
 
6738
new.f_charbig = '####updated per insert trigger####';
 
6739
SET @counter = @counter + 1;
 
6740
END|
 
6741
SET @counter = 1;
 
6742
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6743
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6744
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6745
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6746
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6747
ORDER BY f_int1;
 
6748
DROP TRIGGER trg_3;
 
6749
        
 
6750
# check trigger-11 success:     1
 
6751
DELETE FROM t1
 
6752
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6753
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6754
AND f_charbig = '####updated per insert trigger####';
 
6755
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6756
BEGIN
 
6757
SET new.f_int1 = @my_max1 + @counter,
 
6758
new.f_int2 = @my_min2 - @counter,
 
6759
new.f_charbig = '####updated per insert trigger####';
 
6760
SET @counter = @counter + 1;
 
6761
END|
 
6762
SET @counter = 1;
 
6763
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6764
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
6765
SELECT CAST(f_int1 AS CHAR),
 
6766
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6767
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6768
ORDER BY f_int1;
 
6769
DROP TRIGGER trg_3;
 
6770
        
 
6771
# check trigger-12 success:     1
 
6772
DELETE FROM t1
 
6773
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6774
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6775
AND f_charbig = '####updated per insert trigger####';
 
6776
ANALYZE  TABLE t1;
 
6777
Table   Op      Msg_type        Msg_text
 
6778
test.t1 analyze status  OK
 
6779
CHECK    TABLE t1 EXTENDED;
 
6780
Table   Op      Msg_type        Msg_text
 
6781
test.t1 check   status  OK
 
6782
CHECKSUM TABLE t1 EXTENDED;
 
6783
Table   Checksum
 
6784
test.t1 <some_value>
 
6785
OPTIMIZE TABLE t1;
 
6786
Table   Op      Msg_type        Msg_text
 
6787
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
6788
test.t1 optimize        status  OK
 
6789
# check layout success:    1
 
6790
REPAIR   TABLE t1 EXTENDED;
 
6791
Table   Op      Msg_type        Msg_text
 
6792
test.t1 repair  note    The storage engine for the table doesn't support repair
 
6793
# check layout success:    1
 
6794
TRUNCATE t1;
 
6795
        
 
6796
# check TRUNCATE success:       1
 
6797
# check layout success:    1
 
6798
# End usability test (inc/partition_check.inc)
 
6799
DROP TABLE t1;
 
6800
CREATE TABLE t1 (
 
6801
f_int1 INTEGER,
 
6802
f_int2 INTEGER,
 
6803
f_char1 CHAR(20),
 
6804
f_char2 CHAR(20),
 
6805
f_charbig VARCHAR(1000)
 
6806
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
6807
)
 
6808
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
6809
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
6810
(PARTITION part1 VALUES IN (0),
 
6811
PARTITION part2 VALUES IN (1),
 
6812
PARTITION part3 VALUES IN (NULL));
 
6813
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6814
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6815
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
6816
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
6817
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6818
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6819
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6820
# Start usability test (inc/partition_check.inc)
 
6821
create_command
 
6822
SHOW CREATE TABLE t1;
 
6823
Table   Create Table
 
6824
t1      CREATE TABLE `t1` (
 
6825
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
6826
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
6827
  `f_char1` char(20) DEFAULT NULL,
 
6828
  `f_char2` char(20) DEFAULT NULL,
 
6829
  `f_charbig` varchar(1000) DEFAULT NULL
 
6830
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
6831
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
6832
SUBPARTITION BY KEY (f_int1)
 
6833
SUBPARTITIONS 3
 
6834
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
6835
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
6836
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
6837
 
 
6838
# check prerequisites-1 success:    1
 
6839
# check COUNT(*) success:    1
 
6840
# check MIN/MAX(f_int1) success:    1
 
6841
# check MIN/MAX(f_int2) success:    1
 
6842
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6843
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6844
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6845
WHERE f_int1 IN (2,3);
 
6846
# check prerequisites-3 success:    1
 
6847
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6848
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
6849
# check read via f_int1 success: 1
 
6850
# check read via f_int2 success: 1
 
6851
        
 
6852
# check multiple-1 success:     1
 
6853
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6854
        
 
6855
# check multiple-2 success:     1
 
6856
INSERT INTO t1 SELECT * FROM t0_template
 
6857
WHERE MOD(f_int1,3) = 0;
 
6858
        
 
6859
# check multiple-3 success:     1
 
6860
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6861
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6862
AND @max_row_div2 + @max_row_div4;
 
6863
        
 
6864
# check multiple-4 success:     1
 
6865
DELETE FROM t1
 
6866
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6867
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6868
        
 
6869
# check multiple-5 success:     1
 
6870
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6871
INSERT INTO t1
 
6872
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6873
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6874
f_charbig = '#SINGLE#';
 
6875
        
 
6876
# check single-1 success:       1
 
6877
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6878
INSERT INTO t1
 
6879
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6880
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6881
f_charbig = '#SINGLE#';
 
6882
        
 
6883
# check single-2 success:       1
 
6884
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6885
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6886
UPDATE t1 SET f_int1 = @cur_value2
 
6887
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6888
        
 
6889
# check single-3 success:       1
 
6890
SET @cur_value1= -1;
 
6891
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6892
UPDATE t1 SET f_int1 = @cur_value1
 
6893
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6894
        
 
6895
# check single-4 success:       1
 
6896
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6897
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6898
        
 
6899
# check single-5 success:       1
 
6900
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6901
        
 
6902
# check single-6 success:       1
 
6903
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6904
        
 
6905
# check single-7 success:       1
 
6906
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
6907
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6908
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6909
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6910
f_charbig = '#NULL#';
 
6911
INSERT INTO t1
 
6912
SET f_int1 = NULL , f_int2 = -@max_row,
 
6913
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6914
f_charbig = '#NULL#';
 
6915
ERROR 23000: Column 'f_int1' cannot be null
 
6916
# check null success:    1
 
6917
DELETE FROM t1
 
6918
WHERE f_int1 = 0 AND f_int2 = 0
 
6919
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6920
AND f_charbig = '#NULL#';
 
6921
SET AUTOCOMMIT= 0;
 
6922
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6923
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6924
FROM t0_template source_tab
 
6925
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6926
        
 
6927
# check transactions-1 success:         1
 
6928
COMMIT WORK;
 
6929
        
 
6930
# check transactions-2 success:         1
 
6931
ROLLBACK WORK;
 
6932
        
 
6933
# check transactions-3 success:         1
 
6934
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6935
COMMIT WORK;
 
6936
ROLLBACK WORK;
 
6937
        
 
6938
# check transactions-4 success:         1
 
6939
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6940
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6941
FROM t0_template source_tab
 
6942
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6943
        
 
6944
# check transactions-5 success:         1
 
6945
ROLLBACK WORK;
 
6946
        
 
6947
# check transactions-6 success:         1
 
6948
# INFO: Storage engine used for t1 seems to be transactional.
 
6949
COMMIT;
 
6950
        
 
6951
# check transactions-7 success:         1
 
6952
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6953
COMMIT WORK;
 
6954
SET @@session.sql_mode = 'traditional';
 
6955
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6956
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6957
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6958
'', '', 'was inserted' FROM t0_template
 
6959
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6960
ERROR 22012: Division by 0
 
6961
COMMIT;
 
6962
        
 
6963
# check transactions-8 success:         1
 
6964
# INFO: Storage engine used for t1 seems to be able to revert
 
6965
#       changes made by the failing statement.
 
6966
SET @@session.sql_mode = '';
 
6967
SET AUTOCOMMIT= 1;
 
6968
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6969
COMMIT WORK;
 
6970
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6971
        
 
6972
# check special-1 success:      1
 
6973
UPDATE t1 SET f_charbig = '';
 
6974
        
 
6975
# check special-2 success:      1
 
6976
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6977
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6978
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6979
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6980
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6981
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6982
'just inserted' FROM t0_template
 
6983
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6984
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6985
BEGIN
 
6986
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6987
f_charbig = 'updated by trigger'
 
6988
      WHERE f_int1 = new.f_int1;
 
6989
END|
 
6990
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6991
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6992
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6993
        
 
6994
# check trigger-1 success:      1
 
6995
DROP TRIGGER trg_1;
 
6996
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6997
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6998
f_charbig = 'just inserted'
 
6999
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7000
DELETE FROM t0_aux
 
7001
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7002
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7003
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7004
'just inserted' FROM t0_template
 
7005
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7006
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7007
BEGIN
 
7008
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7009
f_charbig = 'updated by trigger'
 
7010
      WHERE f_int1 = new.f_int1;
 
7011
END|
 
7012
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7013
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7014
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7015
        
 
7016
# check trigger-2 success:      1
 
7017
DROP TRIGGER trg_1;
 
7018
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7019
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7020
f_charbig = 'just inserted'
 
7021
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7022
DELETE FROM t0_aux
 
7023
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7024
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7025
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7026
'just inserted' FROM t0_template
 
7027
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7028
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7029
BEGIN
 
7030
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7031
f_charbig = 'updated by trigger'
 
7032
      WHERE f_int1 = new.f_int1;
 
7033
END|
 
7034
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7035
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7036
        
 
7037
# check trigger-3 success:      1
 
7038
DROP TRIGGER trg_1;
 
7039
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7040
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7041
f_charbig = 'just inserted'
 
7042
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7043
DELETE FROM t0_aux
 
7044
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7045
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7046
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7047
'just inserted' FROM t0_template
 
7048
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7049
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7050
BEGIN
 
7051
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7052
f_charbig = 'updated by trigger'
 
7053
      WHERE f_int1 = - old.f_int1;
 
7054
END|
 
7055
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7056
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7057
        
 
7058
# check trigger-4 success:      1
 
7059
DROP TRIGGER trg_1;
 
7060
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7061
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7062
f_charbig = 'just inserted'
 
7063
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7064
DELETE FROM t0_aux
 
7065
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7066
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7067
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7068
'just inserted' FROM t0_template
 
7069
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7070
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7071
BEGIN
 
7072
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7073
f_charbig = 'updated by trigger'
 
7074
      WHERE f_int1 = new.f_int1;
 
7075
END|
 
7076
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7077
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7078
        
 
7079
# check trigger-5 success:      1
 
7080
DROP TRIGGER trg_1;
 
7081
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7082
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7083
f_charbig = 'just inserted'
 
7084
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7085
DELETE FROM t0_aux
 
7086
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7087
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7088
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7089
'just inserted' FROM t0_template
 
7090
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7091
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7092
BEGIN
 
7093
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7094
f_charbig = 'updated by trigger'
 
7095
      WHERE f_int1 = - old.f_int1;
 
7096
END|
 
7097
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7098
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7099
        
 
7100
# check trigger-6 success:      1
 
7101
DROP TRIGGER trg_1;
 
7102
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7103
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7104
f_charbig = 'just inserted'
 
7105
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7106
DELETE FROM t0_aux
 
7107
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7108
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7109
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7110
'just inserted' FROM t0_template
 
7111
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7112
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
7113
BEGIN
 
7114
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7115
f_charbig = 'updated by trigger'
 
7116
      WHERE f_int1 = - old.f_int1;
 
7117
END|
 
7118
DELETE FROM t0_aux
 
7119
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7120
        
 
7121
# check trigger-7 success:      1
 
7122
DROP TRIGGER trg_1;
 
7123
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7124
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7125
f_charbig = 'just inserted'
 
7126
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7127
DELETE FROM t0_aux
 
7128
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7129
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7130
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7131
'just inserted' FROM t0_template
 
7132
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7133
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
7134
BEGIN
 
7135
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7136
f_charbig = 'updated by trigger'
 
7137
      WHERE f_int1 = - old.f_int1;
 
7138
END|
 
7139
DELETE FROM t0_aux
 
7140
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7141
        
 
7142
# check trigger-8 success:      1
 
7143
DROP TRIGGER trg_1;
 
7144
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7145
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7146
f_charbig = 'just inserted'
 
7147
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7148
DELETE FROM t0_aux
 
7149
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7150
DELETE FROM t1
 
7151
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7152
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7153
BEGIN
 
7154
SET new.f_int1 = old.f_int1 + @max_row,
 
7155
new.f_int2 = old.f_int2 - @max_row,
 
7156
new.f_charbig = '####updated per update trigger####';
 
7157
END|
 
7158
UPDATE t1
 
7159
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7160
f_charbig = '####updated per update statement itself####';
 
7161
        
 
7162
# check trigger-9 success:      1
 
7163
DROP TRIGGER trg_2;
 
7164
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7165
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7166
f_charbig = CONCAT('===',f_char1,'===');
 
7167
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7168
BEGIN
 
7169
SET new.f_int1 = new.f_int1 + @max_row,
 
7170
new.f_int2 = new.f_int2 - @max_row,
 
7171
new.f_charbig = '####updated per update trigger####';
 
7172
END|
 
7173
UPDATE t1
 
7174
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7175
f_charbig = '####updated per update statement itself####';
 
7176
        
 
7177
# check trigger-10 success:     1
 
7178
DROP TRIGGER trg_2;
 
7179
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7180
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7181
f_charbig = CONCAT('===',f_char1,'===');
 
7182
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7183
BEGIN
 
7184
SET new.f_int1 = @my_max1 + @counter,
 
7185
new.f_int2 = @my_min2 - @counter,
 
7186
new.f_charbig = '####updated per insert trigger####';
 
7187
SET @counter = @counter + 1;
 
7188
END|
 
7189
SET @counter = 1;
 
7190
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7191
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7192
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7193
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7195
ORDER BY f_int1;
 
7196
DROP TRIGGER trg_3;
 
7197
        
 
7198
# check trigger-11 success:     1
 
7199
DELETE FROM t1
 
7200
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7201
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7202
AND f_charbig = '####updated per insert trigger####';
 
7203
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7204
BEGIN
 
7205
SET new.f_int1 = @my_max1 + @counter,
 
7206
new.f_int2 = @my_min2 - @counter,
 
7207
new.f_charbig = '####updated per insert trigger####';
 
7208
SET @counter = @counter + 1;
 
7209
END|
 
7210
SET @counter = 1;
 
7211
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7212
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
7213
SELECT CAST(f_int1 AS CHAR),
 
7214
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7215
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7216
ORDER BY f_int1;
 
7217
DROP TRIGGER trg_3;
 
7218
        
 
7219
# check trigger-12 success:     1
 
7220
DELETE FROM t1
 
7221
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7222
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7223
AND f_charbig = '####updated per insert trigger####';
 
7224
ANALYZE  TABLE t1;
 
7225
Table   Op      Msg_type        Msg_text
 
7226
test.t1 analyze status  OK
 
7227
CHECK    TABLE t1 EXTENDED;
 
7228
Table   Op      Msg_type        Msg_text
 
7229
test.t1 check   status  OK
 
7230
CHECKSUM TABLE t1 EXTENDED;
 
7231
Table   Checksum
 
7232
test.t1 <some_value>
 
7233
OPTIMIZE TABLE t1;
 
7234
Table   Op      Msg_type        Msg_text
 
7235
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
7236
test.t1 optimize        status  OK
 
7237
# check layout success:    1
 
7238
REPAIR   TABLE t1 EXTENDED;
 
7239
Table   Op      Msg_type        Msg_text
 
7240
test.t1 repair  note    The storage engine for the table doesn't support repair
 
7241
# check layout success:    1
 
7242
TRUNCATE t1;
 
7243
        
 
7244
# check TRUNCATE success:       1
 
7245
# check layout success:    1
 
7246
# End usability test (inc/partition_check.inc)
 
7247
DROP TABLE t1;
 
7248
DROP TABLE IF EXISTS t1;
 
7249
CREATE TABLE t1 (
 
7250
f_int1 INTEGER,
 
7251
f_int2 INTEGER,
 
7252
f_char1 CHAR(20),
 
7253
f_char2 CHAR(20),
 
7254
f_charbig VARCHAR(1000)
 
7255
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
7256
)
 
7257
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
7258
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7259
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7260
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7261
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
7262
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7263
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7264
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7265
# Start usability test (inc/partition_check.inc)
 
7266
create_command
 
7267
SHOW CREATE TABLE t1;
 
7268
Table   Create Table
 
7269
t1      CREATE TABLE `t1` (
 
7270
  `f_int1` int(11) DEFAULT NULL,
 
7271
  `f_int2` int(11) DEFAULT NULL,
 
7272
  `f_char1` char(20) DEFAULT NULL,
 
7273
  `f_char2` char(20) DEFAULT NULL,
 
7274
  `f_charbig` varchar(1000) DEFAULT NULL
 
7275
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
7276
/*!50100 PARTITION BY HASH (f_int1)
 
7277
PARTITIONS 2 */
 
7278
 
 
7279
# check prerequisites-1 success:    1
 
7280
# check COUNT(*) success:    1
 
7281
# check MIN/MAX(f_int1) success:    1
 
7282
# check MIN/MAX(f_int2) success:    1
 
7283
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7284
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7285
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
7286
WHERE f_int1 IN (2,3);
 
7287
# check prerequisites-3 success:    1
 
7288
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7289
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
7290
# check read via f_int1 success: 1
 
7291
# check read via f_int2 success: 1
 
7292
        
 
7293
# check multiple-1 success:     1
 
7294
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
7295
        
 
7296
# check multiple-2 success:     1
 
7297
INSERT INTO t1 SELECT * FROM t0_template
 
7298
WHERE MOD(f_int1,3) = 0;
 
7299
        
 
7300
# check multiple-3 success:     1
 
7301
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
7302
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
7303
AND @max_row_div2 + @max_row_div4;
 
7304
        
 
7305
# check multiple-4 success:     1
 
7306
DELETE FROM t1
 
7307
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
7308
AND @max_row_div2 + @max_row_div4 + @max_row;
 
7309
        
 
7310
# check multiple-5 success:     1
 
7311
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
7312
INSERT INTO t1
 
7313
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7314
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7315
f_charbig = '#SINGLE#';
 
7316
        
 
7317
# check single-1 success:       1
 
7318
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
7319
INSERT INTO t1
 
7320
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7321
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7322
f_charbig = '#SINGLE#';
 
7323
        
 
7324
# check single-2 success:       1
 
7325
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
7326
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
7327
UPDATE t1 SET f_int1 = @cur_value2
 
7328
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
7329
        
 
7330
# check single-3 success:       1
 
7331
SET @cur_value1= -1;
 
7332
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
7333
UPDATE t1 SET f_int1 = @cur_value1
 
7334
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
7335
        
 
7336
# check single-4 success:       1
 
7337
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
7338
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
7339
        
 
7340
# check single-5 success:       1
 
7341
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
7342
        
 
7343
# check single-6 success:       1
 
7344
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
7345
        
 
7346
# check single-7 success:       1
 
7347
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
7348
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
7349
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
7350
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
7351
f_charbig = '#NULL#';
 
7352
INSERT INTO t1
 
7353
SET f_int1 = NULL , f_int2 = -@max_row,
 
7354
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
7355
f_charbig = '#NULL#';
 
7356
# check null success:    1
 
7357
        
 
7358
# check null-1 success:         1
 
7359
UPDATE t1 SET f_int1 = -@max_row
 
7360
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7361
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7362
        
 
7363
# check null-2 success:         1
 
7364
UPDATE t1 SET f_int1 = NULL
 
7365
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7366
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7367
        
 
7368
# check null-3 success:         1
 
7369
DELETE FROM t1
 
7370
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7371
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7372
        
 
7373
# check null-4 success:         1
 
7374
DELETE FROM t1
 
7375
WHERE f_int1 = 0 AND f_int2 = 0
 
7376
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
7377
AND f_charbig = '#NULL#';
 
7378
SET AUTOCOMMIT= 0;
 
7379
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7380
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7381
FROM t0_template source_tab
 
7382
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7383
        
 
7384
# check transactions-1 success:         1
 
7385
COMMIT WORK;
 
7386
        
 
7387
# check transactions-2 success:         1
 
7388
ROLLBACK WORK;
 
7389
        
 
7390
# check transactions-3 success:         1
 
7391
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7392
COMMIT WORK;
 
7393
ROLLBACK WORK;
 
7394
        
 
7395
# check transactions-4 success:         1
 
7396
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7397
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7398
FROM t0_template source_tab
 
7399
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7400
        
 
7401
# check transactions-5 success:         1
 
7402
ROLLBACK WORK;
 
7403
        
 
7404
# check transactions-6 success:         1
 
7405
# INFO: Storage engine used for t1 seems to be transactional.
 
7406
COMMIT;
 
7407
        
 
7408
# check transactions-7 success:         1
 
7409
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7410
COMMIT WORK;
 
7411
SET @@session.sql_mode = 'traditional';
 
7412
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7413
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7414
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7415
'', '', 'was inserted' FROM t0_template
 
7416
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7417
ERROR 22012: Division by 0
 
7418
COMMIT;
 
7419
        
 
7420
# check transactions-8 success:         1
 
7421
# INFO: Storage engine used for t1 seems to be able to revert
 
7422
#       changes made by the failing statement.
 
7423
SET @@session.sql_mode = '';
 
7424
SET AUTOCOMMIT= 1;
 
7425
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7426
COMMIT WORK;
 
7427
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7428
        
 
7429
# check special-1 success:      1
 
7430
UPDATE t1 SET f_charbig = '';
 
7431
        
 
7432
# check special-2 success:      1
 
7433
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7434
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7435
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7436
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7437
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7438
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7439
'just inserted' FROM t0_template
 
7440
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7441
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7442
BEGIN
 
7443
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7444
f_charbig = 'updated by trigger'
 
7445
      WHERE f_int1 = new.f_int1;
 
7446
END|
 
7447
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7448
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7449
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7450
        
 
7451
# check trigger-1 success:      1
 
7452
DROP TRIGGER trg_1;
 
7453
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7454
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7455
f_charbig = 'just inserted'
 
7456
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7457
DELETE FROM t0_aux
 
7458
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7459
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7460
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7461
'just inserted' FROM t0_template
 
7462
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7463
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7464
BEGIN
 
7465
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7466
f_charbig = 'updated by trigger'
 
7467
      WHERE f_int1 = new.f_int1;
 
7468
END|
 
7469
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7470
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7471
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7472
        
 
7473
# check trigger-2 success:      1
 
7474
DROP TRIGGER trg_1;
 
7475
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7476
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7477
f_charbig = 'just inserted'
 
7478
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7479
DELETE FROM t0_aux
 
7480
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7481
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7482
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7483
'just inserted' FROM t0_template
 
7484
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7485
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7486
BEGIN
 
7487
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7488
f_charbig = 'updated by trigger'
 
7489
      WHERE f_int1 = new.f_int1;
 
7490
END|
 
7491
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7492
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7493
        
 
7494
# check trigger-3 success:      1
 
7495
DROP TRIGGER trg_1;
 
7496
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7497
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7498
f_charbig = 'just inserted'
 
7499
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7500
DELETE FROM t0_aux
 
7501
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7502
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7503
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7504
'just inserted' FROM t0_template
 
7505
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7506
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7507
BEGIN
 
7508
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7509
f_charbig = 'updated by trigger'
 
7510
      WHERE f_int1 = - old.f_int1;
 
7511
END|
 
7512
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7513
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7514
        
 
7515
# check trigger-4 success:      1
 
7516
DROP TRIGGER trg_1;
 
7517
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7518
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7519
f_charbig = 'just inserted'
 
7520
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7521
DELETE FROM t0_aux
 
7522
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7523
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7524
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7525
'just inserted' FROM t0_template
 
7526
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7527
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7528
BEGIN
 
7529
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7530
f_charbig = 'updated by trigger'
 
7531
      WHERE f_int1 = new.f_int1;
 
7532
END|
 
7533
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7534
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7535
        
 
7536
# check trigger-5 success:      1
 
7537
DROP TRIGGER trg_1;
 
7538
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7539
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7540
f_charbig = 'just inserted'
 
7541
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7542
DELETE FROM t0_aux
 
7543
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7544
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7545
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7546
'just inserted' FROM t0_template
 
7547
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7548
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7549
BEGIN
 
7550
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7551
f_charbig = 'updated by trigger'
 
7552
      WHERE f_int1 = - old.f_int1;
 
7553
END|
 
7554
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7555
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7556
        
 
7557
# check trigger-6 success:      1
 
7558
DROP TRIGGER trg_1;
 
7559
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7560
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7561
f_charbig = 'just inserted'
 
7562
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7563
DELETE FROM t0_aux
 
7564
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7565
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7566
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7567
'just inserted' FROM t0_template
 
7568
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7569
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
7570
BEGIN
 
7571
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7572
f_charbig = 'updated by trigger'
 
7573
      WHERE f_int1 = - old.f_int1;
 
7574
END|
 
7575
DELETE FROM t0_aux
 
7576
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7577
        
 
7578
# check trigger-7 success:      1
 
7579
DROP TRIGGER trg_1;
 
7580
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7581
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7582
f_charbig = 'just inserted'
 
7583
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7584
DELETE FROM t0_aux
 
7585
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7586
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7587
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7588
'just inserted' FROM t0_template
 
7589
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7590
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
7591
BEGIN
 
7592
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7593
f_charbig = 'updated by trigger'
 
7594
      WHERE f_int1 = - old.f_int1;
 
7595
END|
 
7596
DELETE FROM t0_aux
 
7597
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7598
        
 
7599
# check trigger-8 success:      1
 
7600
DROP TRIGGER trg_1;
 
7601
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7602
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7603
f_charbig = 'just inserted'
 
7604
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7605
DELETE FROM t0_aux
 
7606
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7607
DELETE FROM t1
 
7608
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7609
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7610
BEGIN
 
7611
SET new.f_int1 = old.f_int1 + @max_row,
 
7612
new.f_int2 = old.f_int2 - @max_row,
 
7613
new.f_charbig = '####updated per update trigger####';
 
7614
END|
 
7615
UPDATE t1
 
7616
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7617
f_charbig = '####updated per update statement itself####';
 
7618
        
 
7619
# check trigger-9 success:      1
 
7620
DROP TRIGGER trg_2;
 
7621
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7622
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7623
f_charbig = CONCAT('===',f_char1,'===');
 
7624
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7625
BEGIN
 
7626
SET new.f_int1 = new.f_int1 + @max_row,
 
7627
new.f_int2 = new.f_int2 - @max_row,
 
7628
new.f_charbig = '####updated per update trigger####';
 
7629
END|
 
7630
UPDATE t1
 
7631
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7632
f_charbig = '####updated per update statement itself####';
 
7633
        
 
7634
# check trigger-10 success:     1
 
7635
DROP TRIGGER trg_2;
 
7636
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7637
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7638
f_charbig = CONCAT('===',f_char1,'===');
 
7639
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7640
BEGIN
 
7641
SET new.f_int1 = @my_max1 + @counter,
 
7642
new.f_int2 = @my_min2 - @counter,
 
7643
new.f_charbig = '####updated per insert trigger####';
 
7644
SET @counter = @counter + 1;
 
7645
END|
 
7646
SET @counter = 1;
 
7647
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7648
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7649
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7650
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7651
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7652
ORDER BY f_int1;
 
7653
DROP TRIGGER trg_3;
 
7654
        
 
7655
# check trigger-11 success:     1
 
7656
DELETE FROM t1
 
7657
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7658
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7659
AND f_charbig = '####updated per insert trigger####';
 
7660
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7661
BEGIN
 
7662
SET new.f_int1 = @my_max1 + @counter,
 
7663
new.f_int2 = @my_min2 - @counter,
 
7664
new.f_charbig = '####updated per insert trigger####';
 
7665
SET @counter = @counter + 1;
 
7666
END|
 
7667
SET @counter = 1;
 
7668
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7669
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
7670
SELECT CAST(f_int1 AS CHAR),
 
7671
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7672
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7673
ORDER BY f_int1;
 
7674
DROP TRIGGER trg_3;
 
7675
        
 
7676
# check trigger-12 success:     1
 
7677
DELETE FROM t1
 
7678
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7679
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7680
AND f_charbig = '####updated per insert trigger####';
 
7681
ANALYZE  TABLE t1;
 
7682
Table   Op      Msg_type        Msg_text
 
7683
test.t1 analyze status  OK
 
7684
CHECK    TABLE t1 EXTENDED;
 
7685
Table   Op      Msg_type        Msg_text
 
7686
test.t1 check   status  OK
 
7687
CHECKSUM TABLE t1 EXTENDED;
 
7688
Table   Checksum
 
7689
test.t1 <some_value>
 
7690
OPTIMIZE TABLE t1;
 
7691
Table   Op      Msg_type        Msg_text
 
7692
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
7693
test.t1 optimize        status  OK
 
7694
# check layout success:    1
 
7695
REPAIR   TABLE t1 EXTENDED;
 
7696
Table   Op      Msg_type        Msg_text
 
7697
test.t1 repair  note    The storage engine for the table doesn't support repair
 
7698
# check layout success:    1
 
7699
TRUNCATE t1;
 
7700
        
 
7701
# check TRUNCATE success:       1
 
7702
# check layout success:    1
 
7703
# End usability test (inc/partition_check.inc)
 
7704
DROP TABLE t1;
 
7705
CREATE TABLE t1 (
 
7706
f_int1 INTEGER,
 
7707
f_int2 INTEGER,
 
7708
f_char1 CHAR(20),
 
7709
f_char2 CHAR(20),
 
7710
f_charbig VARCHAR(1000)
 
7711
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
7712
)
 
7713
PARTITION BY KEY(f_int1) PARTITIONS 5;
 
7714
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7715
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7716
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7717
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
7718
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7719
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7720
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7721
# Start usability test (inc/partition_check.inc)
 
7722
create_command
 
7723
SHOW CREATE TABLE t1;
 
7724
Table   Create Table
 
7725
t1      CREATE TABLE `t1` (
 
7726
  `f_int1` int(11) DEFAULT NULL,
 
7727
  `f_int2` int(11) DEFAULT NULL,
 
7728
  `f_char1` char(20) DEFAULT NULL,
 
7729
  `f_char2` char(20) DEFAULT NULL,
 
7730
  `f_charbig` varchar(1000) DEFAULT NULL
 
7731
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
7732
/*!50100 PARTITION BY KEY (f_int1)
 
7733
PARTITIONS 5 */
 
7734
 
 
7735
# check prerequisites-1 success:    1
 
7736
# check COUNT(*) success:    1
 
7737
# check MIN/MAX(f_int1) success:    1
 
7738
# check MIN/MAX(f_int2) success:    1
 
7739
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7740
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7741
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
7742
WHERE f_int1 IN (2,3);
 
7743
# check prerequisites-3 success:    1
 
7744
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7745
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
7746
# check read via f_int1 success: 1
 
7747
# check read via f_int2 success: 1
 
7748
        
 
7749
# check multiple-1 success:     1
 
7750
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
7751
        
 
7752
# check multiple-2 success:     1
 
7753
INSERT INTO t1 SELECT * FROM t0_template
 
7754
WHERE MOD(f_int1,3) = 0;
 
7755
        
 
7756
# check multiple-3 success:     1
 
7757
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
7758
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
7759
AND @max_row_div2 + @max_row_div4;
 
7760
        
 
7761
# check multiple-4 success:     1
 
7762
DELETE FROM t1
 
7763
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
7764
AND @max_row_div2 + @max_row_div4 + @max_row;
 
7765
        
 
7766
# check multiple-5 success:     1
 
7767
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
7768
INSERT INTO t1
 
7769
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7770
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7771
f_charbig = '#SINGLE#';
 
7772
        
 
7773
# check single-1 success:       1
 
7774
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
7775
INSERT INTO t1
 
7776
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7777
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7778
f_charbig = '#SINGLE#';
 
7779
        
 
7780
# check single-2 success:       1
 
7781
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
7782
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
7783
UPDATE t1 SET f_int1 = @cur_value2
 
7784
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
7785
        
 
7786
# check single-3 success:       1
 
7787
SET @cur_value1= -1;
 
7788
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
7789
UPDATE t1 SET f_int1 = @cur_value1
 
7790
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
7791
        
 
7792
# check single-4 success:       1
 
7793
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
7794
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
7795
        
 
7796
# check single-5 success:       1
 
7797
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
7798
        
 
7799
# check single-6 success:       1
 
7800
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
7801
        
 
7802
# check single-7 success:       1
 
7803
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
7804
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
7805
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
7806
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
7807
f_charbig = '#NULL#';
 
7808
INSERT INTO t1
 
7809
SET f_int1 = NULL , f_int2 = -@max_row,
 
7810
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
7811
f_charbig = '#NULL#';
 
7812
# check null success:    1
 
7813
        
 
7814
# check null-1 success:         1
 
7815
UPDATE t1 SET f_int1 = -@max_row
 
7816
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7817
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7818
        
 
7819
# check null-2 success:         1
 
7820
UPDATE t1 SET f_int1 = NULL
 
7821
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7822
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7823
        
 
7824
# check null-3 success:         1
 
7825
DELETE FROM t1
 
7826
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7827
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7828
        
 
7829
# check null-4 success:         1
 
7830
DELETE FROM t1
 
7831
WHERE f_int1 = 0 AND f_int2 = 0
 
7832
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
7833
AND f_charbig = '#NULL#';
 
7834
SET AUTOCOMMIT= 0;
 
7835
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7836
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7837
FROM t0_template source_tab
 
7838
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7839
        
 
7840
# check transactions-1 success:         1
 
7841
COMMIT WORK;
 
7842
        
 
7843
# check transactions-2 success:         1
 
7844
ROLLBACK WORK;
 
7845
        
 
7846
# check transactions-3 success:         1
 
7847
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7848
COMMIT WORK;
 
7849
ROLLBACK WORK;
 
7850
        
 
7851
# check transactions-4 success:         1
 
7852
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7853
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7854
FROM t0_template source_tab
 
7855
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7856
        
 
7857
# check transactions-5 success:         1
 
7858
ROLLBACK WORK;
 
7859
        
 
7860
# check transactions-6 success:         1
 
7861
# INFO: Storage engine used for t1 seems to be transactional.
 
7862
COMMIT;
 
7863
        
 
7864
# check transactions-7 success:         1
 
7865
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7866
COMMIT WORK;
 
7867
SET @@session.sql_mode = 'traditional';
 
7868
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7869
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7870
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7871
'', '', 'was inserted' FROM t0_template
 
7872
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7873
ERROR 22012: Division by 0
 
7874
COMMIT;
 
7875
        
 
7876
# check transactions-8 success:         1
 
7877
# INFO: Storage engine used for t1 seems to be able to revert
 
7878
#       changes made by the failing statement.
 
7879
SET @@session.sql_mode = '';
 
7880
SET AUTOCOMMIT= 1;
 
7881
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7882
COMMIT WORK;
 
7883
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7884
        
 
7885
# check special-1 success:      1
 
7886
UPDATE t1 SET f_charbig = '';
 
7887
        
 
7888
# check special-2 success:      1
 
7889
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7890
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7891
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7892
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7893
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7894
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7895
'just inserted' FROM t0_template
 
7896
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7897
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7898
BEGIN
 
7899
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7900
f_charbig = 'updated by trigger'
 
7901
      WHERE f_int1 = new.f_int1;
 
7902
END|
 
7903
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7904
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7905
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7906
        
 
7907
# check trigger-1 success:      1
 
7908
DROP TRIGGER trg_1;
 
7909
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7910
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7911
f_charbig = 'just inserted'
 
7912
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7913
DELETE FROM t0_aux
 
7914
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7915
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7916
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7917
'just inserted' FROM t0_template
 
7918
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7919
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7920
BEGIN
 
7921
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7922
f_charbig = 'updated by trigger'
 
7923
      WHERE f_int1 = new.f_int1;
 
7924
END|
 
7925
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7926
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7927
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7928
        
 
7929
# check trigger-2 success:      1
 
7930
DROP TRIGGER trg_1;
 
7931
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7932
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7933
f_charbig = 'just inserted'
 
7934
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7935
DELETE FROM t0_aux
 
7936
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7937
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7938
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7939
'just inserted' FROM t0_template
 
7940
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7941
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7942
BEGIN
 
7943
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7944
f_charbig = 'updated by trigger'
 
7945
      WHERE f_int1 = new.f_int1;
 
7946
END|
 
7947
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7948
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7949
        
 
7950
# check trigger-3 success:      1
 
7951
DROP TRIGGER trg_1;
 
7952
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7953
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7954
f_charbig = 'just inserted'
 
7955
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7956
DELETE FROM t0_aux
 
7957
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7958
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7959
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7960
'just inserted' FROM t0_template
 
7961
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7962
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7963
BEGIN
 
7964
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7965
f_charbig = 'updated by trigger'
 
7966
      WHERE f_int1 = - old.f_int1;
 
7967
END|
 
7968
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7969
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7970
        
 
7971
# check trigger-4 success:      1
 
7972
DROP TRIGGER trg_1;
 
7973
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7974
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7975
f_charbig = 'just inserted'
 
7976
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7977
DELETE FROM t0_aux
 
7978
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7979
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7980
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7981
'just inserted' FROM t0_template
 
7982
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7983
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7984
BEGIN
 
7985
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7986
f_charbig = 'updated by trigger'
 
7987
      WHERE f_int1 = new.f_int1;
 
7988
END|
 
7989
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7990
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7991
        
 
7992
# check trigger-5 success:      1
 
7993
DROP TRIGGER trg_1;
 
7994
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7995
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7996
f_charbig = 'just inserted'
 
7997
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7998
DELETE FROM t0_aux
 
7999
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8000
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8001
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8002
'just inserted' FROM t0_template
 
8003
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8004
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8005
BEGIN
 
8006
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8007
f_charbig = 'updated by trigger'
 
8008
      WHERE f_int1 = - old.f_int1;
 
8009
END|
 
8010
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8011
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8012
        
 
8013
# check trigger-6 success:      1
 
8014
DROP TRIGGER trg_1;
 
8015
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8016
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8017
f_charbig = 'just inserted'
 
8018
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8019
DELETE FROM t0_aux
 
8020
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8021
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8022
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8023
'just inserted' FROM t0_template
 
8024
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8025
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8026
BEGIN
 
8027
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8028
f_charbig = 'updated by trigger'
 
8029
      WHERE f_int1 = - old.f_int1;
 
8030
END|
 
8031
DELETE FROM t0_aux
 
8032
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8033
        
 
8034
# check trigger-7 success:      1
 
8035
DROP TRIGGER trg_1;
 
8036
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8037
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8038
f_charbig = 'just inserted'
 
8039
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8040
DELETE FROM t0_aux
 
8041
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8042
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8043
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8044
'just inserted' FROM t0_template
 
8045
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8046
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8047
BEGIN
 
8048
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8049
f_charbig = 'updated by trigger'
 
8050
      WHERE f_int1 = - old.f_int1;
 
8051
END|
 
8052
DELETE FROM t0_aux
 
8053
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8054
        
 
8055
# check trigger-8 success:      1
 
8056
DROP TRIGGER trg_1;
 
8057
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8058
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8059
f_charbig = 'just inserted'
 
8060
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8061
DELETE FROM t0_aux
 
8062
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8063
DELETE FROM t1
 
8064
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8065
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8066
BEGIN
 
8067
SET new.f_int1 = old.f_int1 + @max_row,
 
8068
new.f_int2 = old.f_int2 - @max_row,
 
8069
new.f_charbig = '####updated per update trigger####';
 
8070
END|
 
8071
UPDATE t1
 
8072
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8073
f_charbig = '####updated per update statement itself####';
 
8074
        
 
8075
# check trigger-9 success:      1
 
8076
DROP TRIGGER trg_2;
 
8077
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8078
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8079
f_charbig = CONCAT('===',f_char1,'===');
 
8080
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8081
BEGIN
 
8082
SET new.f_int1 = new.f_int1 + @max_row,
 
8083
new.f_int2 = new.f_int2 - @max_row,
 
8084
new.f_charbig = '####updated per update trigger####';
 
8085
END|
 
8086
UPDATE t1
 
8087
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8088
f_charbig = '####updated per update statement itself####';
 
8089
        
 
8090
# check trigger-10 success:     1
 
8091
DROP TRIGGER trg_2;
 
8092
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8093
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8094
f_charbig = CONCAT('===',f_char1,'===');
 
8095
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8096
BEGIN
 
8097
SET new.f_int1 = @my_max1 + @counter,
 
8098
new.f_int2 = @my_min2 - @counter,
 
8099
new.f_charbig = '####updated per insert trigger####';
 
8100
SET @counter = @counter + 1;
 
8101
END|
 
8102
SET @counter = 1;
 
8103
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8104
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8105
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8106
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8107
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8108
ORDER BY f_int1;
 
8109
DROP TRIGGER trg_3;
 
8110
        
 
8111
# check trigger-11 success:     1
 
8112
DELETE FROM t1
 
8113
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8114
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8115
AND f_charbig = '####updated per insert trigger####';
 
8116
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8117
BEGIN
 
8118
SET new.f_int1 = @my_max1 + @counter,
 
8119
new.f_int2 = @my_min2 - @counter,
 
8120
new.f_charbig = '####updated per insert trigger####';
 
8121
SET @counter = @counter + 1;
 
8122
END|
 
8123
SET @counter = 1;
 
8124
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8125
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8126
SELECT CAST(f_int1 AS CHAR),
 
8127
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8128
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8129
ORDER BY f_int1;
 
8130
DROP TRIGGER trg_3;
 
8131
        
 
8132
# check trigger-12 success:     1
 
8133
DELETE FROM t1
 
8134
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8135
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8136
AND f_charbig = '####updated per insert trigger####';
 
8137
ANALYZE  TABLE t1;
 
8138
Table   Op      Msg_type        Msg_text
 
8139
test.t1 analyze status  OK
 
8140
CHECK    TABLE t1 EXTENDED;
 
8141
Table   Op      Msg_type        Msg_text
 
8142
test.t1 check   status  OK
 
8143
CHECKSUM TABLE t1 EXTENDED;
 
8144
Table   Checksum
 
8145
test.t1 <some_value>
 
8146
OPTIMIZE TABLE t1;
 
8147
Table   Op      Msg_type        Msg_text
 
8148
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
8149
test.t1 optimize        status  OK
 
8150
# check layout success:    1
 
8151
REPAIR   TABLE t1 EXTENDED;
 
8152
Table   Op      Msg_type        Msg_text
 
8153
test.t1 repair  note    The storage engine for the table doesn't support repair
 
8154
# check layout success:    1
 
8155
TRUNCATE t1;
 
8156
        
 
8157
# check TRUNCATE success:       1
 
8158
# check layout success:    1
 
8159
# End usability test (inc/partition_check.inc)
 
8160
DROP TABLE t1;
 
8161
CREATE TABLE t1 (
 
8162
f_int1 INTEGER,
 
8163
f_int2 INTEGER,
 
8164
f_char1 CHAR(20),
 
8165
f_char2 CHAR(20),
 
8166
f_charbig VARCHAR(1000)
 
8167
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
8168
)
 
8169
PARTITION BY LIST(MOD(f_int1,4))
 
8170
(PARTITION part_3 VALUES IN (-3),
 
8171
PARTITION part_2 VALUES IN (-2),
 
8172
PARTITION part_1 VALUES IN (-1),
 
8173
PARTITION part_N VALUES IN (NULL),
 
8174
PARTITION part0 VALUES IN (0),
 
8175
PARTITION part1 VALUES IN (1),
 
8176
PARTITION part2 VALUES IN (2),
 
8177
PARTITION part3 VALUES IN (3));
 
8178
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8179
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8180
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
8181
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
8182
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8183
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8184
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8185
# Start usability test (inc/partition_check.inc)
 
8186
create_command
 
8187
SHOW CREATE TABLE t1;
 
8188
Table   Create Table
 
8189
t1      CREATE TABLE `t1` (
 
8190
  `f_int1` int(11) DEFAULT NULL,
 
8191
  `f_int2` int(11) DEFAULT NULL,
 
8192
  `f_char1` char(20) DEFAULT NULL,
 
8193
  `f_char2` char(20) DEFAULT NULL,
 
8194
  `f_charbig` varchar(1000) DEFAULT NULL
 
8195
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
8196
/*!50100 PARTITION BY LIST (MOD(f_int1,4))
 
8197
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
8198
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
8199
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
8200
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
8201
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
8202
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
8203
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
8204
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
8205
 
 
8206
# check prerequisites-1 success:    1
 
8207
# check COUNT(*) success:    1
 
8208
# check MIN/MAX(f_int1) success:    1
 
8209
# check MIN/MAX(f_int2) success:    1
 
8210
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8211
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8212
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8213
WHERE f_int1 IN (2,3);
 
8214
# check prerequisites-3 success:    1
 
8215
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8216
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
8217
# check read via f_int1 success: 1
 
8218
# check read via f_int2 success: 1
 
8219
        
 
8220
# check multiple-1 success:     1
 
8221
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8222
        
 
8223
# check multiple-2 success:     1
 
8224
INSERT INTO t1 SELECT * FROM t0_template
 
8225
WHERE MOD(f_int1,3) = 0;
 
8226
        
 
8227
# check multiple-3 success:     1
 
8228
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8229
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8230
AND @max_row_div2 + @max_row_div4;
 
8231
        
 
8232
# check multiple-4 success:     1
 
8233
DELETE FROM t1
 
8234
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8235
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8236
        
 
8237
# check multiple-5 success:     1
 
8238
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8239
INSERT INTO t1
 
8240
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8241
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8242
f_charbig = '#SINGLE#';
 
8243
        
 
8244
# check single-1 success:       1
 
8245
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8246
INSERT INTO t1
 
8247
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8248
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8249
f_charbig = '#SINGLE#';
 
8250
        
 
8251
# check single-2 success:       1
 
8252
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8253
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8254
UPDATE t1 SET f_int1 = @cur_value2
 
8255
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8256
        
 
8257
# check single-3 success:       1
 
8258
SET @cur_value1= -1;
 
8259
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8260
UPDATE t1 SET f_int1 = @cur_value1
 
8261
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8262
        
 
8263
# check single-4 success:       1
 
8264
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8265
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8266
        
 
8267
# check single-5 success:       1
 
8268
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8269
        
 
8270
# check single-6 success:       1
 
8271
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8272
        
 
8273
# check single-7 success:       1
 
8274
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
8275
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8276
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8277
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8278
f_charbig = '#NULL#';
 
8279
INSERT INTO t1
 
8280
SET f_int1 = NULL , f_int2 = -@max_row,
 
8281
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8282
f_charbig = '#NULL#';
 
8283
# check null success:    1
 
8284
        
 
8285
# check null-1 success:         1
 
8286
UPDATE t1 SET f_int1 = -@max_row
 
8287
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8288
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8289
        
 
8290
# check null-2 success:         1
 
8291
UPDATE t1 SET f_int1 = NULL
 
8292
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8293
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8294
        
 
8295
# check null-3 success:         1
 
8296
DELETE FROM t1
 
8297
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8298
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8299
        
 
8300
# check null-4 success:         1
 
8301
DELETE FROM t1
 
8302
WHERE f_int1 = 0 AND f_int2 = 0
 
8303
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8304
AND f_charbig = '#NULL#';
 
8305
SET AUTOCOMMIT= 0;
 
8306
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8307
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8308
FROM t0_template source_tab
 
8309
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8310
        
 
8311
# check transactions-1 success:         1
 
8312
COMMIT WORK;
 
8313
        
 
8314
# check transactions-2 success:         1
 
8315
ROLLBACK WORK;
 
8316
        
 
8317
# check transactions-3 success:         1
 
8318
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8319
COMMIT WORK;
 
8320
ROLLBACK WORK;
 
8321
        
 
8322
# check transactions-4 success:         1
 
8323
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8324
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8325
FROM t0_template source_tab
 
8326
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8327
        
 
8328
# check transactions-5 success:         1
 
8329
ROLLBACK WORK;
 
8330
        
 
8331
# check transactions-6 success:         1
 
8332
# INFO: Storage engine used for t1 seems to be transactional.
 
8333
COMMIT;
 
8334
        
 
8335
# check transactions-7 success:         1
 
8336
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8337
COMMIT WORK;
 
8338
SET @@session.sql_mode = 'traditional';
 
8339
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
8340
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8341
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
8342
'', '', 'was inserted' FROM t0_template
 
8343
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8344
ERROR 22012: Division by 0
 
8345
COMMIT;
 
8346
        
 
8347
# check transactions-8 success:         1
 
8348
# INFO: Storage engine used for t1 seems to be able to revert
 
8349
#       changes made by the failing statement.
 
8350
SET @@session.sql_mode = '';
 
8351
SET AUTOCOMMIT= 1;
 
8352
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8353
COMMIT WORK;
 
8354
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
8355
        
 
8356
# check special-1 success:      1
 
8357
UPDATE t1 SET f_charbig = '';
 
8358
        
 
8359
# check special-2 success:      1
 
8360
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
8361
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8362
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
8363
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8364
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8365
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8366
'just inserted' FROM t0_template
 
8367
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8368
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
8369
BEGIN
 
8370
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8371
f_charbig = 'updated by trigger'
 
8372
      WHERE f_int1 = new.f_int1;
 
8373
END|
 
8374
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8375
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8376
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8377
        
 
8378
# check trigger-1 success:      1
 
8379
DROP TRIGGER trg_1;
 
8380
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8381
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8382
f_charbig = 'just inserted'
 
8383
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8384
DELETE FROM t0_aux
 
8385
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8386
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8387
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8388
'just inserted' FROM t0_template
 
8389
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8390
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8391
BEGIN
 
8392
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8393
f_charbig = 'updated by trigger'
 
8394
      WHERE f_int1 = new.f_int1;
 
8395
END|
 
8396
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8397
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8398
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8399
        
 
8400
# check trigger-2 success:      1
 
8401
DROP TRIGGER trg_1;
 
8402
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8403
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8404
f_charbig = 'just inserted'
 
8405
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8406
DELETE FROM t0_aux
 
8407
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8408
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8409
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8410
'just inserted' FROM t0_template
 
8411
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8412
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8413
BEGIN
 
8414
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8415
f_charbig = 'updated by trigger'
 
8416
      WHERE f_int1 = new.f_int1;
 
8417
END|
 
8418
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8419
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8420
        
 
8421
# check trigger-3 success:      1
 
8422
DROP TRIGGER trg_1;
 
8423
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8424
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8425
f_charbig = 'just inserted'
 
8426
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8427
DELETE FROM t0_aux
 
8428
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8429
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8430
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8431
'just inserted' FROM t0_template
 
8432
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8433
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8434
BEGIN
 
8435
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8436
f_charbig = 'updated by trigger'
 
8437
      WHERE f_int1 = - old.f_int1;
 
8438
END|
 
8439
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8440
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8441
        
 
8442
# check trigger-4 success:      1
 
8443
DROP TRIGGER trg_1;
 
8444
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8445
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8446
f_charbig = 'just inserted'
 
8447
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8448
DELETE FROM t0_aux
 
8449
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8450
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8451
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8452
'just inserted' FROM t0_template
 
8453
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8454
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8455
BEGIN
 
8456
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8457
f_charbig = 'updated by trigger'
 
8458
      WHERE f_int1 = new.f_int1;
 
8459
END|
 
8460
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8461
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8462
        
 
8463
# check trigger-5 success:      1
 
8464
DROP TRIGGER trg_1;
 
8465
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8466
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8467
f_charbig = 'just inserted'
 
8468
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8469
DELETE FROM t0_aux
 
8470
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8471
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8472
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8473
'just inserted' FROM t0_template
 
8474
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8475
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8476
BEGIN
 
8477
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8478
f_charbig = 'updated by trigger'
 
8479
      WHERE f_int1 = - old.f_int1;
 
8480
END|
 
8481
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8482
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8483
        
 
8484
# check trigger-6 success:      1
 
8485
DROP TRIGGER trg_1;
 
8486
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8487
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8488
f_charbig = 'just inserted'
 
8489
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8490
DELETE FROM t0_aux
 
8491
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8492
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8493
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8494
'just inserted' FROM t0_template
 
8495
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8496
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8497
BEGIN
 
8498
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8499
f_charbig = 'updated by trigger'
 
8500
      WHERE f_int1 = - old.f_int1;
 
8501
END|
 
8502
DELETE FROM t0_aux
 
8503
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8504
        
 
8505
# check trigger-7 success:      1
 
8506
DROP TRIGGER trg_1;
 
8507
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8508
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8509
f_charbig = 'just inserted'
 
8510
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8511
DELETE FROM t0_aux
 
8512
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8513
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8514
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8515
'just inserted' FROM t0_template
 
8516
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8517
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8518
BEGIN
 
8519
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8520
f_charbig = 'updated by trigger'
 
8521
      WHERE f_int1 = - old.f_int1;
 
8522
END|
 
8523
DELETE FROM t0_aux
 
8524
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8525
        
 
8526
# check trigger-8 success:      1
 
8527
DROP TRIGGER trg_1;
 
8528
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8529
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8530
f_charbig = 'just inserted'
 
8531
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8532
DELETE FROM t0_aux
 
8533
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8534
DELETE FROM t1
 
8535
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8536
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8537
BEGIN
 
8538
SET new.f_int1 = old.f_int1 + @max_row,
 
8539
new.f_int2 = old.f_int2 - @max_row,
 
8540
new.f_charbig = '####updated per update trigger####';
 
8541
END|
 
8542
UPDATE t1
 
8543
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8544
f_charbig = '####updated per update statement itself####';
 
8545
        
 
8546
# check trigger-9 success:      1
 
8547
DROP TRIGGER trg_2;
 
8548
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8549
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8550
f_charbig = CONCAT('===',f_char1,'===');
 
8551
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8552
BEGIN
 
8553
SET new.f_int1 = new.f_int1 + @max_row,
 
8554
new.f_int2 = new.f_int2 - @max_row,
 
8555
new.f_charbig = '####updated per update trigger####';
 
8556
END|
 
8557
UPDATE t1
 
8558
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8559
f_charbig = '####updated per update statement itself####';
 
8560
        
 
8561
# check trigger-10 success:     1
 
8562
DROP TRIGGER trg_2;
 
8563
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8564
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8565
f_charbig = CONCAT('===',f_char1,'===');
 
8566
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8567
BEGIN
 
8568
SET new.f_int1 = @my_max1 + @counter,
 
8569
new.f_int2 = @my_min2 - @counter,
 
8570
new.f_charbig = '####updated per insert trigger####';
 
8571
SET @counter = @counter + 1;
 
8572
END|
 
8573
SET @counter = 1;
 
8574
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8575
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8576
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8577
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8578
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8579
ORDER BY f_int1;
 
8580
DROP TRIGGER trg_3;
 
8581
        
 
8582
# check trigger-11 success:     1
 
8583
DELETE FROM t1
 
8584
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8585
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8586
AND f_charbig = '####updated per insert trigger####';
 
8587
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8588
BEGIN
 
8589
SET new.f_int1 = @my_max1 + @counter,
 
8590
new.f_int2 = @my_min2 - @counter,
 
8591
new.f_charbig = '####updated per insert trigger####';
 
8592
SET @counter = @counter + 1;
 
8593
END|
 
8594
SET @counter = 1;
 
8595
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8596
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8597
SELECT CAST(f_int1 AS CHAR),
 
8598
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8599
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8600
ORDER BY f_int1;
 
8601
DROP TRIGGER trg_3;
 
8602
        
 
8603
# check trigger-12 success:     1
 
8604
DELETE FROM t1
 
8605
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8606
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8607
AND f_charbig = '####updated per insert trigger####';
 
8608
ANALYZE  TABLE t1;
 
8609
Table   Op      Msg_type        Msg_text
 
8610
test.t1 analyze status  OK
 
8611
CHECK    TABLE t1 EXTENDED;
 
8612
Table   Op      Msg_type        Msg_text
 
8613
test.t1 check   status  OK
 
8614
CHECKSUM TABLE t1 EXTENDED;
 
8615
Table   Checksum
 
8616
test.t1 <some_value>
 
8617
OPTIMIZE TABLE t1;
 
8618
Table   Op      Msg_type        Msg_text
 
8619
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
8620
test.t1 optimize        status  OK
 
8621
# check layout success:    1
 
8622
REPAIR   TABLE t1 EXTENDED;
 
8623
Table   Op      Msg_type        Msg_text
 
8624
test.t1 repair  note    The storage engine for the table doesn't support repair
 
8625
# check layout success:    1
 
8626
TRUNCATE t1;
 
8627
        
 
8628
# check TRUNCATE success:       1
 
8629
# check layout success:    1
 
8630
# End usability test (inc/partition_check.inc)
 
8631
DROP TABLE t1;
 
8632
CREATE TABLE t1 (
 
8633
f_int1 INTEGER,
 
8634
f_int2 INTEGER,
 
8635
f_char1 CHAR(20),
 
8636
f_char2 CHAR(20),
 
8637
f_charbig VARCHAR(1000)
 
8638
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
8639
)
 
8640
PARTITION BY RANGE(f_int1)
 
8641
(PARTITION parta VALUES LESS THAN (0),
 
8642
PARTITION partb VALUES LESS THAN (5),
 
8643
PARTITION partc VALUES LESS THAN (10),
 
8644
PARTITION partd VALUES LESS THAN (10 + 5),
 
8645
PARTITION parte VALUES LESS THAN (20),
 
8646
PARTITION partf VALUES LESS THAN (2147483646));
 
8647
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8648
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8649
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
8650
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
8651
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8652
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8653
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8654
# Start usability test (inc/partition_check.inc)
 
8655
create_command
 
8656
SHOW CREATE TABLE t1;
 
8657
Table   Create Table
 
8658
t1      CREATE TABLE `t1` (
 
8659
  `f_int1` int(11) DEFAULT NULL,
 
8660
  `f_int2` int(11) DEFAULT NULL,
 
8661
  `f_char1` char(20) DEFAULT NULL,
 
8662
  `f_char2` char(20) DEFAULT NULL,
 
8663
  `f_charbig` varchar(1000) DEFAULT NULL
 
8664
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
8665
/*!50100 PARTITION BY RANGE (f_int1)
 
8666
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
8667
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
8668
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
8669
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
8670
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
8671
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
8672
 
 
8673
# check prerequisites-1 success:    1
 
8674
# check COUNT(*) success:    1
 
8675
# check MIN/MAX(f_int1) success:    1
 
8676
# check MIN/MAX(f_int2) success:    1
 
8677
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8678
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8679
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8680
WHERE f_int1 IN (2,3);
 
8681
# check prerequisites-3 success:    1
 
8682
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8683
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
8684
# check read via f_int1 success: 1
 
8685
# check read via f_int2 success: 1
 
8686
        
 
8687
# check multiple-1 success:     1
 
8688
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8689
        
 
8690
# check multiple-2 success:     1
 
8691
INSERT INTO t1 SELECT * FROM t0_template
 
8692
WHERE MOD(f_int1,3) = 0;
 
8693
        
 
8694
# check multiple-3 success:     1
 
8695
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8696
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8697
AND @max_row_div2 + @max_row_div4;
 
8698
        
 
8699
# check multiple-4 success:     1
 
8700
DELETE FROM t1
 
8701
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8702
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8703
        
 
8704
# check multiple-5 success:     1
 
8705
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8706
INSERT INTO t1
 
8707
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8708
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8709
f_charbig = '#SINGLE#';
 
8710
        
 
8711
# check single-1 success:       1
 
8712
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8713
INSERT INTO t1
 
8714
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8715
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8716
f_charbig = '#SINGLE#';
 
8717
        
 
8718
# check single-2 success:       1
 
8719
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8720
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8721
UPDATE t1 SET f_int1 = @cur_value2
 
8722
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8723
        
 
8724
# check single-3 success:       1
 
8725
SET @cur_value1= -1;
 
8726
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8727
UPDATE t1 SET f_int1 = @cur_value1
 
8728
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8729
        
 
8730
# check single-4 success:       1
 
8731
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8732
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8733
        
 
8734
# check single-5 success:       1
 
8735
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8736
        
 
8737
# check single-6 success:       1
 
8738
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8739
ERROR HY000: Table has no partition for value 2147483647
 
8740
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8741
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8742
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8743
f_charbig = '#NULL#';
 
8744
INSERT INTO t1
 
8745
SET f_int1 = NULL , f_int2 = -@max_row,
 
8746
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8747
f_charbig = '#NULL#';
 
8748
# check null success:    1
 
8749
        
 
8750
# check null-1 success:         1
 
8751
UPDATE t1 SET f_int1 = -@max_row
 
8752
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8753
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8754
        
 
8755
# check null-2 success:         1
 
8756
UPDATE t1 SET f_int1 = NULL
 
8757
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8758
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8759
        
 
8760
# check null-3 success:         1
 
8761
DELETE FROM t1
 
8762
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8763
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8764
        
 
8765
# check null-4 success:         1
 
8766
DELETE FROM t1
 
8767
WHERE f_int1 = 0 AND f_int2 = 0
 
8768
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8769
AND f_charbig = '#NULL#';
 
8770
SET AUTOCOMMIT= 0;
 
8771
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8772
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8773
FROM t0_template source_tab
 
8774
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8775
        
 
8776
# check transactions-1 success:         1
 
8777
COMMIT WORK;
 
8778
        
 
8779
# check transactions-2 success:         1
 
8780
ROLLBACK WORK;
 
8781
        
 
8782
# check transactions-3 success:         1
 
8783
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8784
COMMIT WORK;
 
8785
ROLLBACK WORK;
 
8786
        
 
8787
# check transactions-4 success:         1
 
8788
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8789
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8790
FROM t0_template source_tab
 
8791
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8792
        
 
8793
# check transactions-5 success:         1
 
8794
ROLLBACK WORK;
 
8795
        
 
8796
# check transactions-6 success:         1
 
8797
# INFO: Storage engine used for t1 seems to be transactional.
 
8798
COMMIT;
 
8799
        
 
8800
# check transactions-7 success:         1
 
8801
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8802
COMMIT WORK;
 
8803
SET @@session.sql_mode = 'traditional';
 
8804
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
8805
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8806
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
8807
'', '', 'was inserted' FROM t0_template
 
8808
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8809
ERROR 22012: Division by 0
 
8810
COMMIT;
 
8811
        
 
8812
# check transactions-8 success:         1
 
8813
# INFO: Storage engine used for t1 seems to be able to revert
 
8814
#       changes made by the failing statement.
 
8815
SET @@session.sql_mode = '';
 
8816
SET AUTOCOMMIT= 1;
 
8817
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8818
COMMIT WORK;
 
8819
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
8820
        
 
8821
# check special-1 success:      1
 
8822
UPDATE t1 SET f_charbig = '';
 
8823
        
 
8824
# check special-2 success:      1
 
8825
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
8826
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8827
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
8828
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8829
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8830
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8831
'just inserted' FROM t0_template
 
8832
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8833
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
8834
BEGIN
 
8835
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8836
f_charbig = 'updated by trigger'
 
8837
      WHERE f_int1 = new.f_int1;
 
8838
END|
 
8839
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8840
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8841
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8842
        
 
8843
# check trigger-1 success:      1
 
8844
DROP TRIGGER trg_1;
 
8845
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8846
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8847
f_charbig = 'just inserted'
 
8848
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8849
DELETE FROM t0_aux
 
8850
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8851
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8852
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8853
'just inserted' FROM t0_template
 
8854
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8855
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8856
BEGIN
 
8857
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8858
f_charbig = 'updated by trigger'
 
8859
      WHERE f_int1 = new.f_int1;
 
8860
END|
 
8861
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8862
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8863
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8864
        
 
8865
# check trigger-2 success:      1
 
8866
DROP TRIGGER trg_1;
 
8867
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8868
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8869
f_charbig = 'just inserted'
 
8870
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8871
DELETE FROM t0_aux
 
8872
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8873
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8874
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8875
'just inserted' FROM t0_template
 
8876
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8877
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8878
BEGIN
 
8879
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8880
f_charbig = 'updated by trigger'
 
8881
      WHERE f_int1 = new.f_int1;
 
8882
END|
 
8883
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8884
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8885
        
 
8886
# check trigger-3 success:      1
 
8887
DROP TRIGGER trg_1;
 
8888
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8889
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8890
f_charbig = 'just inserted'
 
8891
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8892
DELETE FROM t0_aux
 
8893
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8894
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8895
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8896
'just inserted' FROM t0_template
 
8897
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8898
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8899
BEGIN
 
8900
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8901
f_charbig = 'updated by trigger'
 
8902
      WHERE f_int1 = - old.f_int1;
 
8903
END|
 
8904
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8905
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8906
        
 
8907
# check trigger-4 success:      1
 
8908
DROP TRIGGER trg_1;
 
8909
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8910
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8911
f_charbig = 'just inserted'
 
8912
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8913
DELETE FROM t0_aux
 
8914
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8915
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8916
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8917
'just inserted' FROM t0_template
 
8918
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8919
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8920
BEGIN
 
8921
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8922
f_charbig = 'updated by trigger'
 
8923
      WHERE f_int1 = new.f_int1;
 
8924
END|
 
8925
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8926
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8927
        
 
8928
# check trigger-5 success:      1
 
8929
DROP TRIGGER trg_1;
 
8930
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8931
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8932
f_charbig = 'just inserted'
 
8933
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8934
DELETE FROM t0_aux
 
8935
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8936
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8937
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8938
'just inserted' FROM t0_template
 
8939
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8940
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8941
BEGIN
 
8942
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8943
f_charbig = 'updated by trigger'
 
8944
      WHERE f_int1 = - old.f_int1;
 
8945
END|
 
8946
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8947
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8948
        
 
8949
# check trigger-6 success:      1
 
8950
DROP TRIGGER trg_1;
 
8951
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8952
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8953
f_charbig = 'just inserted'
 
8954
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8955
DELETE FROM t0_aux
 
8956
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8957
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8958
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8959
'just inserted' FROM t0_template
 
8960
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8961
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8962
BEGIN
 
8963
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8964
f_charbig = 'updated by trigger'
 
8965
      WHERE f_int1 = - old.f_int1;
 
8966
END|
 
8967
DELETE FROM t0_aux
 
8968
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8969
        
 
8970
# check trigger-7 success:      1
 
8971
DROP TRIGGER trg_1;
 
8972
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8973
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8974
f_charbig = 'just inserted'
 
8975
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8976
DELETE FROM t0_aux
 
8977
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8978
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8979
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8980
'just inserted' FROM t0_template
 
8981
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8982
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8983
BEGIN
 
8984
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8985
f_charbig = 'updated by trigger'
 
8986
      WHERE f_int1 = - old.f_int1;
 
8987
END|
 
8988
DELETE FROM t0_aux
 
8989
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8990
        
 
8991
# check trigger-8 success:      1
 
8992
DROP TRIGGER trg_1;
 
8993
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8994
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8995
f_charbig = 'just inserted'
 
8996
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8997
DELETE FROM t0_aux
 
8998
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8999
DELETE FROM t1
 
9000
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9001
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9002
BEGIN
 
9003
SET new.f_int1 = old.f_int1 + @max_row,
 
9004
new.f_int2 = old.f_int2 - @max_row,
 
9005
new.f_charbig = '####updated per update trigger####';
 
9006
END|
 
9007
UPDATE t1
 
9008
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9009
f_charbig = '####updated per update statement itself####';
 
9010
        
 
9011
# check trigger-9 success:      1
 
9012
DROP TRIGGER trg_2;
 
9013
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9014
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9015
f_charbig = CONCAT('===',f_char1,'===');
 
9016
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9017
BEGIN
 
9018
SET new.f_int1 = new.f_int1 + @max_row,
 
9019
new.f_int2 = new.f_int2 - @max_row,
 
9020
new.f_charbig = '####updated per update trigger####';
 
9021
END|
 
9022
UPDATE t1
 
9023
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9024
f_charbig = '####updated per update statement itself####';
 
9025
        
 
9026
# check trigger-10 success:     1
 
9027
DROP TRIGGER trg_2;
 
9028
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9029
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9030
f_charbig = CONCAT('===',f_char1,'===');
 
9031
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9032
BEGIN
 
9033
SET new.f_int1 = @my_max1 + @counter,
 
9034
new.f_int2 = @my_min2 - @counter,
 
9035
new.f_charbig = '####updated per insert trigger####';
 
9036
SET @counter = @counter + 1;
 
9037
END|
 
9038
SET @counter = 1;
 
9039
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9040
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9041
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9042
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9043
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9044
ORDER BY f_int1;
 
9045
DROP TRIGGER trg_3;
 
9046
        
 
9047
# check trigger-11 success:     1
 
9048
DELETE FROM t1
 
9049
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9050
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9051
AND f_charbig = '####updated per insert trigger####';
 
9052
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9053
BEGIN
 
9054
SET new.f_int1 = @my_max1 + @counter,
 
9055
new.f_int2 = @my_min2 - @counter,
 
9056
new.f_charbig = '####updated per insert trigger####';
 
9057
SET @counter = @counter + 1;
 
9058
END|
 
9059
SET @counter = 1;
 
9060
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9061
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
9062
SELECT CAST(f_int1 AS CHAR),
 
9063
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9064
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9065
ORDER BY f_int1;
 
9066
DROP TRIGGER trg_3;
 
9067
        
 
9068
# check trigger-12 success:     1
 
9069
DELETE FROM t1
 
9070
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9071
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9072
AND f_charbig = '####updated per insert trigger####';
 
9073
ANALYZE  TABLE t1;
 
9074
Table   Op      Msg_type        Msg_text
 
9075
test.t1 analyze status  OK
 
9076
CHECK    TABLE t1 EXTENDED;
 
9077
Table   Op      Msg_type        Msg_text
 
9078
test.t1 check   status  OK
 
9079
CHECKSUM TABLE t1 EXTENDED;
 
9080
Table   Checksum
 
9081
test.t1 <some_value>
 
9082
OPTIMIZE TABLE t1;
 
9083
Table   Op      Msg_type        Msg_text
 
9084
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
9085
test.t1 optimize        status  OK
 
9086
# check layout success:    1
 
9087
REPAIR   TABLE t1 EXTENDED;
 
9088
Table   Op      Msg_type        Msg_text
 
9089
test.t1 repair  note    The storage engine for the table doesn't support repair
 
9090
# check layout success:    1
 
9091
TRUNCATE t1;
 
9092
        
 
9093
# check TRUNCATE success:       1
 
9094
# check layout success:    1
 
9095
# End usability test (inc/partition_check.inc)
 
9096
DROP TABLE t1;
 
9097
CREATE TABLE t1 (
 
9098
f_int1 INTEGER,
 
9099
f_int2 INTEGER,
 
9100
f_char1 CHAR(20),
 
9101
f_char2 CHAR(20),
 
9102
f_charbig VARCHAR(1000)
 
9103
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
9104
)
 
9105
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
9106
(PARTITION parta VALUES LESS THAN (0),
 
9107
PARTITION partb VALUES LESS THAN (5),
 
9108
PARTITION partc VALUES LESS THAN (10),
 
9109
PARTITION partd VALUES LESS THAN (2147483646));
 
9110
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9111
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9112
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
9113
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
9114
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9115
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9116
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9117
# Start usability test (inc/partition_check.inc)
 
9118
create_command
 
9119
SHOW CREATE TABLE t1;
 
9120
Table   Create Table
 
9121
t1      CREATE TABLE `t1` (
 
9122
  `f_int1` int(11) DEFAULT NULL,
 
9123
  `f_int2` int(11) DEFAULT NULL,
 
9124
  `f_char1` char(20) DEFAULT NULL,
 
9125
  `f_char2` char(20) DEFAULT NULL,
 
9126
  `f_charbig` varchar(1000) DEFAULT NULL
 
9127
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
9128
/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
 
9129
SUBPARTITION BY HASH (f_int1)
 
9130
SUBPARTITIONS 2
 
9131
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
9132
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
9133
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
9134
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
9135
 
 
9136
# check prerequisites-1 success:    1
 
9137
# check COUNT(*) success:    1
 
9138
# check MIN/MAX(f_int1) success:    1
 
9139
# check MIN/MAX(f_int2) success:    1
 
9140
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9141
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9142
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
9143
WHERE f_int1 IN (2,3);
 
9144
# check prerequisites-3 success:    1
 
9145
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9146
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
9147
# check read via f_int1 success: 1
 
9148
# check read via f_int2 success: 1
 
9149
        
 
9150
# check multiple-1 success:     1
 
9151
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9152
        
 
9153
# check multiple-2 success:     1
 
9154
INSERT INTO t1 SELECT * FROM t0_template
 
9155
WHERE MOD(f_int1,3) = 0;
 
9156
        
 
9157
# check multiple-3 success:     1
 
9158
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9159
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9160
AND @max_row_div2 + @max_row_div4;
 
9161
        
 
9162
# check multiple-4 success:     1
 
9163
DELETE FROM t1
 
9164
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9165
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9166
        
 
9167
# check multiple-5 success:     1
 
9168
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9169
INSERT INTO t1
 
9170
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9171
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9172
f_charbig = '#SINGLE#';
 
9173
        
 
9174
# check single-1 success:       1
 
9175
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9176
INSERT INTO t1
 
9177
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9178
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9179
f_charbig = '#SINGLE#';
 
9180
        
 
9181
# check single-2 success:       1
 
9182
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9183
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9184
UPDATE t1 SET f_int1 = @cur_value2
 
9185
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9186
        
 
9187
# check single-3 success:       1
 
9188
SET @cur_value1= -1;
 
9189
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
9190
UPDATE t1 SET f_int1 = @cur_value1
 
9191
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
9192
        
 
9193
# check single-4 success:       1
 
9194
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
9195
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
9196
        
 
9197
# check single-5 success:       1
 
9198
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
9199
        
 
9200
# check single-6 success:       1
 
9201
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
9202
        
 
9203
# check single-7 success:       1
 
9204
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
9205
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
9206
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
9207
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
9208
f_charbig = '#NULL#';
 
9209
INSERT INTO t1
 
9210
SET f_int1 = NULL , f_int2 = -@max_row,
 
9211
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
9212
f_charbig = '#NULL#';
 
9213
# check null success:    1
 
9214
        
 
9215
# check null-1 success:         1
 
9216
UPDATE t1 SET f_int1 = -@max_row
 
9217
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9218
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9219
        
 
9220
# check null-2 success:         1
 
9221
UPDATE t1 SET f_int1 = NULL
 
9222
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9223
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9224
        
 
9225
# check null-3 success:         1
 
9226
DELETE FROM t1
 
9227
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9228
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9229
        
 
9230
# check null-4 success:         1
 
9231
DELETE FROM t1
 
9232
WHERE f_int1 = 0 AND f_int2 = 0
 
9233
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
9234
AND f_charbig = '#NULL#';
 
9235
SET AUTOCOMMIT= 0;
 
9236
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9237
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9238
FROM t0_template source_tab
 
9239
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9240
        
 
9241
# check transactions-1 success:         1
 
9242
COMMIT WORK;
 
9243
        
 
9244
# check transactions-2 success:         1
 
9245
ROLLBACK WORK;
 
9246
        
 
9247
# check transactions-3 success:         1
 
9248
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9249
COMMIT WORK;
 
9250
ROLLBACK WORK;
 
9251
        
 
9252
# check transactions-4 success:         1
 
9253
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9254
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9255
FROM t0_template source_tab
 
9256
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9257
        
 
9258
# check transactions-5 success:         1
 
9259
ROLLBACK WORK;
 
9260
        
 
9261
# check transactions-6 success:         1
 
9262
# INFO: Storage engine used for t1 seems to be transactional.
 
9263
COMMIT;
 
9264
        
 
9265
# check transactions-7 success:         1
 
9266
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9267
COMMIT WORK;
 
9268
SET @@session.sql_mode = 'traditional';
 
9269
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
9270
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9271
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
9272
'', '', 'was inserted' FROM t0_template
 
9273
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9274
ERROR 22012: Division by 0
 
9275
COMMIT;
 
9276
        
 
9277
# check transactions-8 success:         1
 
9278
# INFO: Storage engine used for t1 seems to be able to revert
 
9279
#       changes made by the failing statement.
 
9280
SET @@session.sql_mode = '';
 
9281
SET AUTOCOMMIT= 1;
 
9282
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9283
COMMIT WORK;
 
9284
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
9285
        
 
9286
# check special-1 success:      1
 
9287
UPDATE t1 SET f_charbig = '';
 
9288
        
 
9289
# check special-2 success:      1
 
9290
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
9291
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9292
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
9293
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9294
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9295
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9296
'just inserted' FROM t0_template
 
9297
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9298
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
9299
BEGIN
 
9300
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9301
f_charbig = 'updated by trigger'
 
9302
      WHERE f_int1 = new.f_int1;
 
9303
END|
 
9304
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9305
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9306
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9307
        
 
9308
# check trigger-1 success:      1
 
9309
DROP TRIGGER trg_1;
 
9310
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9311
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9312
f_charbig = 'just inserted'
 
9313
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9314
DELETE FROM t0_aux
 
9315
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9316
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9317
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9318
'just inserted' FROM t0_template
 
9319
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9320
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
9321
BEGIN
 
9322
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9323
f_charbig = 'updated by trigger'
 
9324
      WHERE f_int1 = new.f_int1;
 
9325
END|
 
9326
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9327
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9328
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9329
        
 
9330
# check trigger-2 success:      1
 
9331
DROP TRIGGER trg_1;
 
9332
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9333
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9334
f_charbig = 'just inserted'
 
9335
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9336
DELETE FROM t0_aux
 
9337
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9338
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9339
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9340
'just inserted' FROM t0_template
 
9341
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9342
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9343
BEGIN
 
9344
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9345
f_charbig = 'updated by trigger'
 
9346
      WHERE f_int1 = new.f_int1;
 
9347
END|
 
9348
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9349
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9350
        
 
9351
# check trigger-3 success:      1
 
9352
DROP TRIGGER trg_1;
 
9353
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9354
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9355
f_charbig = 'just inserted'
 
9356
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9357
DELETE FROM t0_aux
 
9358
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9359
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9360
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9361
'just inserted' FROM t0_template
 
9362
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9363
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9364
BEGIN
 
9365
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9366
f_charbig = 'updated by trigger'
 
9367
      WHERE f_int1 = - old.f_int1;
 
9368
END|
 
9369
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9370
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9371
        
 
9372
# check trigger-4 success:      1
 
9373
DROP TRIGGER trg_1;
 
9374
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9375
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9376
f_charbig = 'just inserted'
 
9377
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9378
DELETE FROM t0_aux
 
9379
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9380
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9381
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9382
'just inserted' FROM t0_template
 
9383
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9384
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9385
BEGIN
 
9386
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9387
f_charbig = 'updated by trigger'
 
9388
      WHERE f_int1 = new.f_int1;
 
9389
END|
 
9390
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9391
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9392
        
 
9393
# check trigger-5 success:      1
 
9394
DROP TRIGGER trg_1;
 
9395
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9396
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9397
f_charbig = 'just inserted'
 
9398
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9399
DELETE FROM t0_aux
 
9400
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9401
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9402
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9403
'just inserted' FROM t0_template
 
9404
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9405
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9406
BEGIN
 
9407
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9408
f_charbig = 'updated by trigger'
 
9409
      WHERE f_int1 = - old.f_int1;
 
9410
END|
 
9411
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9412
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9413
        
 
9414
# check trigger-6 success:      1
 
9415
DROP TRIGGER trg_1;
 
9416
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9417
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9418
f_charbig = 'just inserted'
 
9419
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9420
DELETE FROM t0_aux
 
9421
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9422
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9423
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9424
'just inserted' FROM t0_template
 
9425
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9426
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
9427
BEGIN
 
9428
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9429
f_charbig = 'updated by trigger'
 
9430
      WHERE f_int1 = - old.f_int1;
 
9431
END|
 
9432
DELETE FROM t0_aux
 
9433
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9434
        
 
9435
# check trigger-7 success:      1
 
9436
DROP TRIGGER trg_1;
 
9437
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9438
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9439
f_charbig = 'just inserted'
 
9440
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9441
DELETE FROM t0_aux
 
9442
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9443
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9444
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9445
'just inserted' FROM t0_template
 
9446
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9447
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
9448
BEGIN
 
9449
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9450
f_charbig = 'updated by trigger'
 
9451
      WHERE f_int1 = - old.f_int1;
 
9452
END|
 
9453
DELETE FROM t0_aux
 
9454
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9455
        
 
9456
# check trigger-8 success:      1
 
9457
DROP TRIGGER trg_1;
 
9458
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9459
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9460
f_charbig = 'just inserted'
 
9461
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9462
DELETE FROM t0_aux
 
9463
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9464
DELETE FROM t1
 
9465
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9466
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9467
BEGIN
 
9468
SET new.f_int1 = old.f_int1 + @max_row,
 
9469
new.f_int2 = old.f_int2 - @max_row,
 
9470
new.f_charbig = '####updated per update trigger####';
 
9471
END|
 
9472
UPDATE t1
 
9473
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9474
f_charbig = '####updated per update statement itself####';
 
9475
        
 
9476
# check trigger-9 success:      1
 
9477
DROP TRIGGER trg_2;
 
9478
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9479
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9480
f_charbig = CONCAT('===',f_char1,'===');
 
9481
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9482
BEGIN
 
9483
SET new.f_int1 = new.f_int1 + @max_row,
 
9484
new.f_int2 = new.f_int2 - @max_row,
 
9485
new.f_charbig = '####updated per update trigger####';
 
9486
END|
 
9487
UPDATE t1
 
9488
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9489
f_charbig = '####updated per update statement itself####';
 
9490
        
 
9491
# check trigger-10 success:     1
 
9492
DROP TRIGGER trg_2;
 
9493
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9494
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9495
f_charbig = CONCAT('===',f_char1,'===');
 
9496
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9497
BEGIN
 
9498
SET new.f_int1 = @my_max1 + @counter,
 
9499
new.f_int2 = @my_min2 - @counter,
 
9500
new.f_charbig = '####updated per insert trigger####';
 
9501
SET @counter = @counter + 1;
 
9502
END|
 
9503
SET @counter = 1;
 
9504
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9505
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9506
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9507
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9508
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9509
ORDER BY f_int1;
 
9510
DROP TRIGGER trg_3;
 
9511
        
 
9512
# check trigger-11 success:     1
 
9513
DELETE FROM t1
 
9514
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9515
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9516
AND f_charbig = '####updated per insert trigger####';
 
9517
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9518
BEGIN
 
9519
SET new.f_int1 = @my_max1 + @counter,
 
9520
new.f_int2 = @my_min2 - @counter,
 
9521
new.f_charbig = '####updated per insert trigger####';
 
9522
SET @counter = @counter + 1;
 
9523
END|
 
9524
SET @counter = 1;
 
9525
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9526
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
9527
SELECT CAST(f_int1 AS CHAR),
 
9528
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9529
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9530
ORDER BY f_int1;
 
9531
DROP TRIGGER trg_3;
 
9532
        
 
9533
# check trigger-12 success:     1
 
9534
DELETE FROM t1
 
9535
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9536
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9537
AND f_charbig = '####updated per insert trigger####';
 
9538
ANALYZE  TABLE t1;
 
9539
Table   Op      Msg_type        Msg_text
 
9540
test.t1 analyze status  OK
 
9541
CHECK    TABLE t1 EXTENDED;
 
9542
Table   Op      Msg_type        Msg_text
 
9543
test.t1 check   status  OK
 
9544
CHECKSUM TABLE t1 EXTENDED;
 
9545
Table   Checksum
 
9546
test.t1 <some_value>
 
9547
OPTIMIZE TABLE t1;
 
9548
Table   Op      Msg_type        Msg_text
 
9549
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
9550
test.t1 optimize        status  OK
 
9551
# check layout success:    1
 
9552
REPAIR   TABLE t1 EXTENDED;
 
9553
Table   Op      Msg_type        Msg_text
 
9554
test.t1 repair  note    The storage engine for the table doesn't support repair
 
9555
# check layout success:    1
 
9556
TRUNCATE t1;
 
9557
        
 
9558
# check TRUNCATE success:       1
 
9559
# check layout success:    1
 
9560
# End usability test (inc/partition_check.inc)
 
9561
DROP TABLE t1;
 
9562
CREATE TABLE t1 (
 
9563
f_int1 INTEGER,
 
9564
f_int2 INTEGER,
 
9565
f_char1 CHAR(20),
 
9566
f_char2 CHAR(20),
 
9567
f_charbig VARCHAR(1000)
 
9568
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
9569
)
 
9570
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
9571
(PARTITION part1 VALUES LESS THAN (0)
 
9572
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
9573
PARTITION part2 VALUES LESS THAN (5)
 
9574
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
9575
PARTITION part3 VALUES LESS THAN (10)
 
9576
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
9577
PARTITION part4 VALUES LESS THAN (2147483646)
 
9578
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
9579
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9580
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9581
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
9582
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
9583
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9584
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9585
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9586
# Start usability test (inc/partition_check.inc)
 
9587
create_command
 
9588
SHOW CREATE TABLE t1;
 
9589
Table   Create Table
 
9590
t1      CREATE TABLE `t1` (
 
9591
  `f_int1` int(11) DEFAULT NULL,
 
9592
  `f_int2` int(11) DEFAULT NULL,
 
9593
  `f_char1` char(20) DEFAULT NULL,
 
9594
  `f_char2` char(20) DEFAULT NULL,
 
9595
  `f_charbig` varchar(1000) DEFAULT NULL
 
9596
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
9597
/*!50100 PARTITION BY RANGE (f_int1)
 
9598
SUBPARTITION BY KEY (f_int1)
 
9599
(PARTITION part1 VALUES LESS THAN (0)
 
9600
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
9601
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
9602
 PARTITION part2 VALUES LESS THAN (5)
 
9603
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
9604
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
9605
 PARTITION part3 VALUES LESS THAN (10)
 
9606
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
9607
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
9608
 PARTITION part4 VALUES LESS THAN (2147483646)
 
9609
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
9610
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
9611
 
 
9612
# check prerequisites-1 success:    1
 
9613
# check COUNT(*) success:    1
 
9614
# check MIN/MAX(f_int1) success:    1
 
9615
# check MIN/MAX(f_int2) success:    1
 
9616
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9617
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9618
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
9619
WHERE f_int1 IN (2,3);
 
9620
# check prerequisites-3 success:    1
 
9621
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9622
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
9623
# check read via f_int1 success: 1
 
9624
# check read via f_int2 success: 1
 
9625
        
 
9626
# check multiple-1 success:     1
 
9627
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9628
        
 
9629
# check multiple-2 success:     1
 
9630
INSERT INTO t1 SELECT * FROM t0_template
 
9631
WHERE MOD(f_int1,3) = 0;
 
9632
        
 
9633
# check multiple-3 success:     1
 
9634
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9635
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9636
AND @max_row_div2 + @max_row_div4;
 
9637
        
 
9638
# check multiple-4 success:     1
 
9639
DELETE FROM t1
 
9640
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9641
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9642
        
 
9643
# check multiple-5 success:     1
 
9644
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9645
INSERT INTO t1
 
9646
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9647
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9648
f_charbig = '#SINGLE#';
 
9649
        
 
9650
# check single-1 success:       1
 
9651
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9652
INSERT INTO t1
 
9653
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9654
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9655
f_charbig = '#SINGLE#';
 
9656
        
 
9657
# check single-2 success:       1
 
9658
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9659
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9660
UPDATE t1 SET f_int1 = @cur_value2
 
9661
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9662
        
 
9663
# check single-3 success:       1
 
9664
SET @cur_value1= -1;
 
9665
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
9666
UPDATE t1 SET f_int1 = @cur_value1
 
9667
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
9668
        
 
9669
# check single-4 success:       1
 
9670
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
9671
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
9672
        
 
9673
# check single-5 success:       1
 
9674
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
9675
        
 
9676
# check single-6 success:       1
 
9677
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
9678
ERROR HY000: Table has no partition for value 2147483647
 
9679
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
9680
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
9681
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
9682
f_charbig = '#NULL#';
 
9683
INSERT INTO t1
 
9684
SET f_int1 = NULL , f_int2 = -@max_row,
 
9685
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
9686
f_charbig = '#NULL#';
 
9687
# check null success:    1
 
9688
        
 
9689
# check null-1 success:         1
 
9690
UPDATE t1 SET f_int1 = -@max_row
 
9691
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9692
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9693
        
 
9694
# check null-2 success:         1
 
9695
UPDATE t1 SET f_int1 = NULL
 
9696
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9697
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9698
        
 
9699
# check null-3 success:         1
 
9700
DELETE FROM t1
 
9701
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9702
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9703
        
 
9704
# check null-4 success:         1
 
9705
DELETE FROM t1
 
9706
WHERE f_int1 = 0 AND f_int2 = 0
 
9707
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
9708
AND f_charbig = '#NULL#';
 
9709
SET AUTOCOMMIT= 0;
 
9710
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9711
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9712
FROM t0_template source_tab
 
9713
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9714
        
 
9715
# check transactions-1 success:         1
 
9716
COMMIT WORK;
 
9717
        
 
9718
# check transactions-2 success:         1
 
9719
ROLLBACK WORK;
 
9720
        
 
9721
# check transactions-3 success:         1
 
9722
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9723
COMMIT WORK;
 
9724
ROLLBACK WORK;
 
9725
        
 
9726
# check transactions-4 success:         1
 
9727
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9728
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9729
FROM t0_template source_tab
 
9730
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9731
        
 
9732
# check transactions-5 success:         1
 
9733
ROLLBACK WORK;
 
9734
        
 
9735
# check transactions-6 success:         1
 
9736
# INFO: Storage engine used for t1 seems to be transactional.
 
9737
COMMIT;
 
9738
        
 
9739
# check transactions-7 success:         1
 
9740
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9741
COMMIT WORK;
 
9742
SET @@session.sql_mode = 'traditional';
 
9743
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
9744
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9745
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
9746
'', '', 'was inserted' FROM t0_template
 
9747
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9748
ERROR 22012: Division by 0
 
9749
COMMIT;
 
9750
        
 
9751
# check transactions-8 success:         1
 
9752
# INFO: Storage engine used for t1 seems to be able to revert
 
9753
#       changes made by the failing statement.
 
9754
SET @@session.sql_mode = '';
 
9755
SET AUTOCOMMIT= 1;
 
9756
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9757
COMMIT WORK;
 
9758
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
9759
        
 
9760
# check special-1 success:      1
 
9761
UPDATE t1 SET f_charbig = '';
 
9762
        
 
9763
# check special-2 success:      1
 
9764
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
9765
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9766
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
9767
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9768
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9769
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9770
'just inserted' FROM t0_template
 
9771
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9772
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
9773
BEGIN
 
9774
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9775
f_charbig = 'updated by trigger'
 
9776
      WHERE f_int1 = new.f_int1;
 
9777
END|
 
9778
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9779
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9780
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9781
        
 
9782
# check trigger-1 success:      1
 
9783
DROP TRIGGER trg_1;
 
9784
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9785
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9786
f_charbig = 'just inserted'
 
9787
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9788
DELETE FROM t0_aux
 
9789
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9790
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9791
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9792
'just inserted' FROM t0_template
 
9793
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9794
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
9795
BEGIN
 
9796
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9797
f_charbig = 'updated by trigger'
 
9798
      WHERE f_int1 = new.f_int1;
 
9799
END|
 
9800
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9801
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9802
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9803
        
 
9804
# check trigger-2 success:      1
 
9805
DROP TRIGGER trg_1;
 
9806
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9807
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9808
f_charbig = 'just inserted'
 
9809
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9810
DELETE FROM t0_aux
 
9811
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9812
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9813
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9814
'just inserted' FROM t0_template
 
9815
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9816
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9817
BEGIN
 
9818
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9819
f_charbig = 'updated by trigger'
 
9820
      WHERE f_int1 = new.f_int1;
 
9821
END|
 
9822
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9823
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9824
        
 
9825
# check trigger-3 success:      1
 
9826
DROP TRIGGER trg_1;
 
9827
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9828
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9829
f_charbig = 'just inserted'
 
9830
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9831
DELETE FROM t0_aux
 
9832
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9833
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9834
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9835
'just inserted' FROM t0_template
 
9836
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9837
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9838
BEGIN
 
9839
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9840
f_charbig = 'updated by trigger'
 
9841
      WHERE f_int1 = - old.f_int1;
 
9842
END|
 
9843
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9844
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9845
        
 
9846
# check trigger-4 success:      1
 
9847
DROP TRIGGER trg_1;
 
9848
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9849
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9850
f_charbig = 'just inserted'
 
9851
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9852
DELETE FROM t0_aux
 
9853
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9854
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9855
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9856
'just inserted' FROM t0_template
 
9857
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9858
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9859
BEGIN
 
9860
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9861
f_charbig = 'updated by trigger'
 
9862
      WHERE f_int1 = new.f_int1;
 
9863
END|
 
9864
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9865
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9866
        
 
9867
# check trigger-5 success:      1
 
9868
DROP TRIGGER trg_1;
 
9869
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9870
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9871
f_charbig = 'just inserted'
 
9872
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9873
DELETE FROM t0_aux
 
9874
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9875
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9876
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9877
'just inserted' FROM t0_template
 
9878
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9879
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9880
BEGIN
 
9881
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9882
f_charbig = 'updated by trigger'
 
9883
      WHERE f_int1 = - old.f_int1;
 
9884
END|
 
9885
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9886
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9887
        
 
9888
# check trigger-6 success:      1
 
9889
DROP TRIGGER trg_1;
 
9890
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9891
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9892
f_charbig = 'just inserted'
 
9893
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9894
DELETE FROM t0_aux
 
9895
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9896
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9897
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9898
'just inserted' FROM t0_template
 
9899
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9900
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
9901
BEGIN
 
9902
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9903
f_charbig = 'updated by trigger'
 
9904
      WHERE f_int1 = - old.f_int1;
 
9905
END|
 
9906
DELETE FROM t0_aux
 
9907
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9908
        
 
9909
# check trigger-7 success:      1
 
9910
DROP TRIGGER trg_1;
 
9911
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9912
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9913
f_charbig = 'just inserted'
 
9914
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9915
DELETE FROM t0_aux
 
9916
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9917
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9918
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9919
'just inserted' FROM t0_template
 
9920
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9921
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
9922
BEGIN
 
9923
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9924
f_charbig = 'updated by trigger'
 
9925
      WHERE f_int1 = - old.f_int1;
 
9926
END|
 
9927
DELETE FROM t0_aux
 
9928
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9929
        
 
9930
# check trigger-8 success:      1
 
9931
DROP TRIGGER trg_1;
 
9932
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9933
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9934
f_charbig = 'just inserted'
 
9935
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9936
DELETE FROM t0_aux
 
9937
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9938
DELETE FROM t1
 
9939
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9940
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9941
BEGIN
 
9942
SET new.f_int1 = old.f_int1 + @max_row,
 
9943
new.f_int2 = old.f_int2 - @max_row,
 
9944
new.f_charbig = '####updated per update trigger####';
 
9945
END|
 
9946
UPDATE t1
 
9947
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9948
f_charbig = '####updated per update statement itself####';
 
9949
        
 
9950
# check trigger-9 success:      1
 
9951
DROP TRIGGER trg_2;
 
9952
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9953
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9954
f_charbig = CONCAT('===',f_char1,'===');
 
9955
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9956
BEGIN
 
9957
SET new.f_int1 = new.f_int1 + @max_row,
 
9958
new.f_int2 = new.f_int2 - @max_row,
 
9959
new.f_charbig = '####updated per update trigger####';
 
9960
END|
 
9961
UPDATE t1
 
9962
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9963
f_charbig = '####updated per update statement itself####';
 
9964
        
 
9965
# check trigger-10 success:     1
 
9966
DROP TRIGGER trg_2;
 
9967
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9968
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9969
f_charbig = CONCAT('===',f_char1,'===');
 
9970
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9971
BEGIN
 
9972
SET new.f_int1 = @my_max1 + @counter,
 
9973
new.f_int2 = @my_min2 - @counter,
 
9974
new.f_charbig = '####updated per insert trigger####';
 
9975
SET @counter = @counter + 1;
 
9976
END|
 
9977
SET @counter = 1;
 
9978
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9979
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9980
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9981
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9982
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9983
ORDER BY f_int1;
 
9984
DROP TRIGGER trg_3;
 
9985
        
 
9986
# check trigger-11 success:     1
 
9987
DELETE FROM t1
 
9988
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9989
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9990
AND f_charbig = '####updated per insert trigger####';
 
9991
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9992
BEGIN
 
9993
SET new.f_int1 = @my_max1 + @counter,
 
9994
new.f_int2 = @my_min2 - @counter,
 
9995
new.f_charbig = '####updated per insert trigger####';
 
9996
SET @counter = @counter + 1;
 
9997
END|
 
9998
SET @counter = 1;
 
9999
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10000
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10001
SELECT CAST(f_int1 AS CHAR),
 
10002
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10003
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10004
ORDER BY f_int1;
 
10005
DROP TRIGGER trg_3;
 
10006
        
 
10007
# check trigger-12 success:     1
 
10008
DELETE FROM t1
 
10009
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10010
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10011
AND f_charbig = '####updated per insert trigger####';
 
10012
ANALYZE  TABLE t1;
 
10013
Table   Op      Msg_type        Msg_text
 
10014
test.t1 analyze status  OK
 
10015
CHECK    TABLE t1 EXTENDED;
 
10016
Table   Op      Msg_type        Msg_text
 
10017
test.t1 check   status  OK
 
10018
CHECKSUM TABLE t1 EXTENDED;
 
10019
Table   Checksum
 
10020
test.t1 <some_value>
 
10021
OPTIMIZE TABLE t1;
 
10022
Table   Op      Msg_type        Msg_text
 
10023
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
10024
test.t1 optimize        status  OK
 
10025
# check layout success:    1
 
10026
REPAIR   TABLE t1 EXTENDED;
 
10027
Table   Op      Msg_type        Msg_text
 
10028
test.t1 repair  note    The storage engine for the table doesn't support repair
 
10029
# check layout success:    1
 
10030
TRUNCATE t1;
 
10031
        
 
10032
# check TRUNCATE success:       1
 
10033
# check layout success:    1
 
10034
# End usability test (inc/partition_check.inc)
 
10035
DROP TABLE t1;
 
10036
CREATE TABLE t1 (
 
10037
f_int1 INTEGER,
 
10038
f_int2 INTEGER,
 
10039
f_char1 CHAR(20),
 
10040
f_char2 CHAR(20),
 
10041
f_charbig VARCHAR(1000)
 
10042
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
10043
)
 
10044
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
10045
(PARTITION part1 VALUES IN (0)
 
10046
(SUBPARTITION sp11, SUBPARTITION sp12),
 
10047
PARTITION part2 VALUES IN (1)
 
10048
(SUBPARTITION sp21, SUBPARTITION sp22),
 
10049
PARTITION part3 VALUES IN (2)
 
10050
(SUBPARTITION sp31, SUBPARTITION sp32),
 
10051
PARTITION part4 VALUES IN (NULL)
 
10052
(SUBPARTITION sp41, SUBPARTITION sp42));
 
10053
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10054
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10055
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
10056
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
10057
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10058
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10059
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10060
# Start usability test (inc/partition_check.inc)
 
10061
create_command
 
10062
SHOW CREATE TABLE t1;
 
10063
Table   Create Table
 
10064
t1      CREATE TABLE `t1` (
 
10065
  `f_int1` int(11) DEFAULT NULL,
 
10066
  `f_int2` int(11) DEFAULT NULL,
 
10067
  `f_char1` char(20) DEFAULT NULL,
 
10068
  `f_char2` char(20) DEFAULT NULL,
 
10069
  `f_charbig` varchar(1000) DEFAULT NULL
 
10070
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
10071
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
10072
SUBPARTITION BY HASH (f_int1 + 1)
 
10073
(PARTITION part1 VALUES IN (0)
 
10074
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
10075
  SUBPARTITION sp12 ENGINE = InnoDB),
 
10076
 PARTITION part2 VALUES IN (1)
 
10077
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
10078
  SUBPARTITION sp22 ENGINE = InnoDB),
 
10079
 PARTITION part3 VALUES IN (2)
 
10080
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
10081
  SUBPARTITION sp32 ENGINE = InnoDB),
 
10082
 PARTITION part4 VALUES IN (NULL)
 
10083
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
10084
  SUBPARTITION sp42 ENGINE = InnoDB)) */
 
10085
 
 
10086
# check prerequisites-1 success:    1
 
10087
# check COUNT(*) success:    1
 
10088
# check MIN/MAX(f_int1) success:    1
 
10089
# check MIN/MAX(f_int2) success:    1
 
10090
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10091
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10092
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10093
WHERE f_int1 IN (2,3);
 
10094
# check prerequisites-3 success:    1
 
10095
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10096
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
10097
# check read via f_int1 success: 1
 
10098
# check read via f_int2 success: 1
 
10099
        
 
10100
# check multiple-1 success:     1
 
10101
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
10102
        
 
10103
# check multiple-2 success:     1
 
10104
INSERT INTO t1 SELECT * FROM t0_template
 
10105
WHERE MOD(f_int1,3) = 0;
 
10106
        
 
10107
# check multiple-3 success:     1
 
10108
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
10109
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
10110
AND @max_row_div2 + @max_row_div4;
 
10111
        
 
10112
# check multiple-4 success:     1
 
10113
DELETE FROM t1
 
10114
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
10115
AND @max_row_div2 + @max_row_div4 + @max_row;
 
10116
        
 
10117
# check multiple-5 success:     1
 
10118
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
10119
INSERT INTO t1
 
10120
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10121
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10122
f_charbig = '#SINGLE#';
 
10123
        
 
10124
# check single-1 success:       1
 
10125
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
10126
INSERT INTO t1
 
10127
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10128
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10129
f_charbig = '#SINGLE#';
 
10130
        
 
10131
# check single-2 success:       1
 
10132
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
10133
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
10134
UPDATE t1 SET f_int1 = @cur_value2
 
10135
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
10136
        
 
10137
# check single-3 success:       1
 
10138
SET @cur_value1= -1;
 
10139
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10140
UPDATE t1 SET f_int1 = @cur_value1
 
10141
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10142
        
 
10143
# check single-4 success:       1
 
10144
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10145
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10146
        
 
10147
# check single-5 success:       1
 
10148
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10149
        
 
10150
# check single-6 success:       1
 
10151
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10152
        
 
10153
# check single-7 success:       1
 
10154
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
10155
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10156
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10157
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10158
f_charbig = '#NULL#';
 
10159
INSERT INTO t1
 
10160
SET f_int1 = NULL , f_int2 = -@max_row,
 
10161
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
10162
f_charbig = '#NULL#';
 
10163
# check null success:    1
 
10164
        
 
10165
# check null-1 success:         1
 
10166
UPDATE t1 SET f_int1 = -@max_row
 
10167
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10168
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10169
        
 
10170
# check null-2 success:         1
 
10171
UPDATE t1 SET f_int1 = NULL
 
10172
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10173
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10174
        
 
10175
# check null-3 success:         1
 
10176
DELETE FROM t1
 
10177
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10178
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10179
        
 
10180
# check null-4 success:         1
 
10181
DELETE FROM t1
 
10182
WHERE f_int1 = 0 AND f_int2 = 0
 
10183
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
10184
AND f_charbig = '#NULL#';
 
10185
SET AUTOCOMMIT= 0;
 
10186
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10187
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10188
FROM t0_template source_tab
 
10189
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10190
        
 
10191
# check transactions-1 success:         1
 
10192
COMMIT WORK;
 
10193
        
 
10194
# check transactions-2 success:         1
 
10195
ROLLBACK WORK;
 
10196
        
 
10197
# check transactions-3 success:         1
 
10198
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10199
COMMIT WORK;
 
10200
ROLLBACK WORK;
 
10201
        
 
10202
# check transactions-4 success:         1
 
10203
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10204
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10205
FROM t0_template source_tab
 
10206
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10207
        
 
10208
# check transactions-5 success:         1
 
10209
ROLLBACK WORK;
 
10210
        
 
10211
# check transactions-6 success:         1
 
10212
# INFO: Storage engine used for t1 seems to be transactional.
 
10213
COMMIT;
 
10214
        
 
10215
# check transactions-7 success:         1
 
10216
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10217
COMMIT WORK;
 
10218
SET @@session.sql_mode = 'traditional';
 
10219
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
10220
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10221
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
10222
'', '', 'was inserted' FROM t0_template
 
10223
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10224
ERROR 22012: Division by 0
 
10225
COMMIT;
 
10226
        
 
10227
# check transactions-8 success:         1
 
10228
# INFO: Storage engine used for t1 seems to be able to revert
 
10229
#       changes made by the failing statement.
 
10230
SET @@session.sql_mode = '';
 
10231
SET AUTOCOMMIT= 1;
 
10232
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10233
COMMIT WORK;
 
10234
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
10235
        
 
10236
# check special-1 success:      1
 
10237
UPDATE t1 SET f_charbig = '';
 
10238
        
 
10239
# check special-2 success:      1
 
10240
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
10241
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10242
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
10243
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10244
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10245
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10246
'just inserted' FROM t0_template
 
10247
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10248
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
10249
BEGIN
 
10250
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10251
f_charbig = 'updated by trigger'
 
10252
      WHERE f_int1 = new.f_int1;
 
10253
END|
 
10254
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10255
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10256
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10257
        
 
10258
# check trigger-1 success:      1
 
10259
DROP TRIGGER trg_1;
 
10260
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10261
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10262
f_charbig = 'just inserted'
 
10263
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10264
DELETE FROM t0_aux
 
10265
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10266
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10267
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10268
'just inserted' FROM t0_template
 
10269
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10270
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
10271
BEGIN
 
10272
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10273
f_charbig = 'updated by trigger'
 
10274
      WHERE f_int1 = new.f_int1;
 
10275
END|
 
10276
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10277
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10278
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10279
        
 
10280
# check trigger-2 success:      1
 
10281
DROP TRIGGER trg_1;
 
10282
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10283
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10284
f_charbig = 'just inserted'
 
10285
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10286
DELETE FROM t0_aux
 
10287
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10288
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10289
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10290
'just inserted' FROM t0_template
 
10291
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10292
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10293
BEGIN
 
10294
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10295
f_charbig = 'updated by trigger'
 
10296
      WHERE f_int1 = new.f_int1;
 
10297
END|
 
10298
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10299
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10300
        
 
10301
# check trigger-3 success:      1
 
10302
DROP TRIGGER trg_1;
 
10303
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10304
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10305
f_charbig = 'just inserted'
 
10306
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10307
DELETE FROM t0_aux
 
10308
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10309
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10310
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10311
'just inserted' FROM t0_template
 
10312
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10313
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10314
BEGIN
 
10315
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10316
f_charbig = 'updated by trigger'
 
10317
      WHERE f_int1 = - old.f_int1;
 
10318
END|
 
10319
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10320
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10321
        
 
10322
# check trigger-4 success:      1
 
10323
DROP TRIGGER trg_1;
 
10324
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10325
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10326
f_charbig = 'just inserted'
 
10327
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10328
DELETE FROM t0_aux
 
10329
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10330
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10331
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10332
'just inserted' FROM t0_template
 
10333
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10334
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10335
BEGIN
 
10336
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10337
f_charbig = 'updated by trigger'
 
10338
      WHERE f_int1 = new.f_int1;
 
10339
END|
 
10340
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10341
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10342
        
 
10343
# check trigger-5 success:      1
 
10344
DROP TRIGGER trg_1;
 
10345
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10346
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10347
f_charbig = 'just inserted'
 
10348
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10349
DELETE FROM t0_aux
 
10350
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10351
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10352
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10353
'just inserted' FROM t0_template
 
10354
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10355
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10356
BEGIN
 
10357
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10358
f_charbig = 'updated by trigger'
 
10359
      WHERE f_int1 = - old.f_int1;
 
10360
END|
 
10361
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10362
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10363
        
 
10364
# check trigger-6 success:      1
 
10365
DROP TRIGGER trg_1;
 
10366
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10367
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10368
f_charbig = 'just inserted'
 
10369
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10370
DELETE FROM t0_aux
 
10371
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10372
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10373
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10374
'just inserted' FROM t0_template
 
10375
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10376
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
10377
BEGIN
 
10378
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10379
f_charbig = 'updated by trigger'
 
10380
      WHERE f_int1 = - old.f_int1;
 
10381
END|
 
10382
DELETE FROM t0_aux
 
10383
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10384
        
 
10385
# check trigger-7 success:      1
 
10386
DROP TRIGGER trg_1;
 
10387
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10388
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10389
f_charbig = 'just inserted'
 
10390
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10391
DELETE FROM t0_aux
 
10392
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10393
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10394
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10395
'just inserted' FROM t0_template
 
10396
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10397
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
10398
BEGIN
 
10399
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10400
f_charbig = 'updated by trigger'
 
10401
      WHERE f_int1 = - old.f_int1;
 
10402
END|
 
10403
DELETE FROM t0_aux
 
10404
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10405
        
 
10406
# check trigger-8 success:      1
 
10407
DROP TRIGGER trg_1;
 
10408
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10409
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10410
f_charbig = 'just inserted'
 
10411
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10412
DELETE FROM t0_aux
 
10413
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10414
DELETE FROM t1
 
10415
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10416
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10417
BEGIN
 
10418
SET new.f_int1 = old.f_int1 + @max_row,
 
10419
new.f_int2 = old.f_int2 - @max_row,
 
10420
new.f_charbig = '####updated per update trigger####';
 
10421
END|
 
10422
UPDATE t1
 
10423
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10424
f_charbig = '####updated per update statement itself####';
 
10425
        
 
10426
# check trigger-9 success:      1
 
10427
DROP TRIGGER trg_2;
 
10428
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10429
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10430
f_charbig = CONCAT('===',f_char1,'===');
 
10431
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10432
BEGIN
 
10433
SET new.f_int1 = new.f_int1 + @max_row,
 
10434
new.f_int2 = new.f_int2 - @max_row,
 
10435
new.f_charbig = '####updated per update trigger####';
 
10436
END|
 
10437
UPDATE t1
 
10438
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10439
f_charbig = '####updated per update statement itself####';
 
10440
        
 
10441
# check trigger-10 success:     1
 
10442
DROP TRIGGER trg_2;
 
10443
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10444
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10445
f_charbig = CONCAT('===',f_char1,'===');
 
10446
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10447
BEGIN
 
10448
SET new.f_int1 = @my_max1 + @counter,
 
10449
new.f_int2 = @my_min2 - @counter,
 
10450
new.f_charbig = '####updated per insert trigger####';
 
10451
SET @counter = @counter + 1;
 
10452
END|
 
10453
SET @counter = 1;
 
10454
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10455
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10456
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10457
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10458
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10459
ORDER BY f_int1;
 
10460
DROP TRIGGER trg_3;
 
10461
        
 
10462
# check trigger-11 success:     1
 
10463
DELETE FROM t1
 
10464
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10465
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10466
AND f_charbig = '####updated per insert trigger####';
 
10467
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10468
BEGIN
 
10469
SET new.f_int1 = @my_max1 + @counter,
 
10470
new.f_int2 = @my_min2 - @counter,
 
10471
new.f_charbig = '####updated per insert trigger####';
 
10472
SET @counter = @counter + 1;
 
10473
END|
 
10474
SET @counter = 1;
 
10475
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10476
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10477
SELECT CAST(f_int1 AS CHAR),
 
10478
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10479
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10480
ORDER BY f_int1;
 
10481
DROP TRIGGER trg_3;
 
10482
        
 
10483
# check trigger-12 success:     1
 
10484
DELETE FROM t1
 
10485
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10486
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10487
AND f_charbig = '####updated per insert trigger####';
 
10488
ANALYZE  TABLE t1;
 
10489
Table   Op      Msg_type        Msg_text
 
10490
test.t1 analyze status  OK
 
10491
CHECK    TABLE t1 EXTENDED;
 
10492
Table   Op      Msg_type        Msg_text
 
10493
test.t1 check   status  OK
 
10494
CHECKSUM TABLE t1 EXTENDED;
 
10495
Table   Checksum
 
10496
test.t1 <some_value>
 
10497
OPTIMIZE TABLE t1;
 
10498
Table   Op      Msg_type        Msg_text
 
10499
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
10500
test.t1 optimize        status  OK
 
10501
# check layout success:    1
 
10502
REPAIR   TABLE t1 EXTENDED;
 
10503
Table   Op      Msg_type        Msg_text
 
10504
test.t1 repair  note    The storage engine for the table doesn't support repair
 
10505
# check layout success:    1
 
10506
TRUNCATE t1;
 
10507
        
 
10508
# check TRUNCATE success:       1
 
10509
# check layout success:    1
 
10510
# End usability test (inc/partition_check.inc)
 
10511
DROP TABLE t1;
 
10512
CREATE TABLE t1 (
 
10513
f_int1 INTEGER,
 
10514
f_int2 INTEGER,
 
10515
f_char1 CHAR(20),
 
10516
f_char2 CHAR(20),
 
10517
f_charbig VARCHAR(1000)
 
10518
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
10519
)
 
10520
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
10521
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
10522
(PARTITION part1 VALUES IN (0),
 
10523
PARTITION part2 VALUES IN (1),
 
10524
PARTITION part3 VALUES IN (NULL));
 
10525
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10526
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10527
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
10528
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
10529
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10530
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10531
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10532
# Start usability test (inc/partition_check.inc)
 
10533
create_command
 
10534
SHOW CREATE TABLE t1;
 
10535
Table   Create Table
 
10536
t1      CREATE TABLE `t1` (
 
10537
  `f_int1` int(11) DEFAULT NULL,
 
10538
  `f_int2` int(11) DEFAULT NULL,
 
10539
  `f_char1` char(20) DEFAULT NULL,
 
10540
  `f_char2` char(20) DEFAULT NULL,
 
10541
  `f_charbig` varchar(1000) DEFAULT NULL
 
10542
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
10543
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
10544
SUBPARTITION BY KEY (f_int1)
 
10545
SUBPARTITIONS 3
 
10546
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
10547
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
10548
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
10549
 
 
10550
# check prerequisites-1 success:    1
 
10551
# check COUNT(*) success:    1
 
10552
# check MIN/MAX(f_int1) success:    1
 
10553
# check MIN/MAX(f_int2) success:    1
 
10554
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10555
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10556
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10557
WHERE f_int1 IN (2,3);
 
10558
# check prerequisites-3 success:    1
 
10559
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10560
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
10561
# check read via f_int1 success: 1
 
10562
# check read via f_int2 success: 1
 
10563
        
 
10564
# check multiple-1 success:     1
 
10565
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
10566
        
 
10567
# check multiple-2 success:     1
 
10568
INSERT INTO t1 SELECT * FROM t0_template
 
10569
WHERE MOD(f_int1,3) = 0;
 
10570
        
 
10571
# check multiple-3 success:     1
 
10572
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
10573
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
10574
AND @max_row_div2 + @max_row_div4;
 
10575
        
 
10576
# check multiple-4 success:     1
 
10577
DELETE FROM t1
 
10578
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
10579
AND @max_row_div2 + @max_row_div4 + @max_row;
 
10580
        
 
10581
# check multiple-5 success:     1
 
10582
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
10583
INSERT INTO t1
 
10584
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10585
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10586
f_charbig = '#SINGLE#';
 
10587
        
 
10588
# check single-1 success:       1
 
10589
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
10590
INSERT INTO t1
 
10591
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10592
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10593
f_charbig = '#SINGLE#';
 
10594
        
 
10595
# check single-2 success:       1
 
10596
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
10597
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
10598
UPDATE t1 SET f_int1 = @cur_value2
 
10599
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
10600
        
 
10601
# check single-3 success:       1
 
10602
SET @cur_value1= -1;
 
10603
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10604
UPDATE t1 SET f_int1 = @cur_value1
 
10605
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10606
        
 
10607
# check single-4 success:       1
 
10608
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10609
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10610
        
 
10611
# check single-5 success:       1
 
10612
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10613
        
 
10614
# check single-6 success:       1
 
10615
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10616
        
 
10617
# check single-7 success:       1
 
10618
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
10619
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10620
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10621
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10622
f_charbig = '#NULL#';
 
10623
INSERT INTO t1
 
10624
SET f_int1 = NULL , f_int2 = -@max_row,
 
10625
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
10626
f_charbig = '#NULL#';
 
10627
# check null success:    1
 
10628
        
 
10629
# check null-1 success:         1
 
10630
UPDATE t1 SET f_int1 = -@max_row
 
10631
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10632
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10633
        
 
10634
# check null-2 success:         1
 
10635
UPDATE t1 SET f_int1 = NULL
 
10636
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10637
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10638
        
 
10639
# check null-3 success:         1
 
10640
DELETE FROM t1
 
10641
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10642
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10643
        
 
10644
# check null-4 success:         1
 
10645
DELETE FROM t1
 
10646
WHERE f_int1 = 0 AND f_int2 = 0
 
10647
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
10648
AND f_charbig = '#NULL#';
 
10649
SET AUTOCOMMIT= 0;
 
10650
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10651
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10652
FROM t0_template source_tab
 
10653
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10654
        
 
10655
# check transactions-1 success:         1
 
10656
COMMIT WORK;
 
10657
        
 
10658
# check transactions-2 success:         1
 
10659
ROLLBACK WORK;
 
10660
        
 
10661
# check transactions-3 success:         1
 
10662
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10663
COMMIT WORK;
 
10664
ROLLBACK WORK;
 
10665
        
 
10666
# check transactions-4 success:         1
 
10667
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10668
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10669
FROM t0_template source_tab
 
10670
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10671
        
 
10672
# check transactions-5 success:         1
 
10673
ROLLBACK WORK;
 
10674
        
 
10675
# check transactions-6 success:         1
 
10676
# INFO: Storage engine used for t1 seems to be transactional.
 
10677
COMMIT;
 
10678
        
 
10679
# check transactions-7 success:         1
 
10680
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10681
COMMIT WORK;
 
10682
SET @@session.sql_mode = 'traditional';
 
10683
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
10684
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10685
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
10686
'', '', 'was inserted' FROM t0_template
 
10687
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10688
ERROR 22012: Division by 0
 
10689
COMMIT;
 
10690
        
 
10691
# check transactions-8 success:         1
 
10692
# INFO: Storage engine used for t1 seems to be able to revert
 
10693
#       changes made by the failing statement.
 
10694
SET @@session.sql_mode = '';
 
10695
SET AUTOCOMMIT= 1;
 
10696
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10697
COMMIT WORK;
 
10698
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
10699
        
 
10700
# check special-1 success:      1
 
10701
UPDATE t1 SET f_charbig = '';
 
10702
        
 
10703
# check special-2 success:      1
 
10704
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
10705
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10706
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
10707
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10708
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10709
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10710
'just inserted' FROM t0_template
 
10711
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10712
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
10713
BEGIN
 
10714
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10715
f_charbig = 'updated by trigger'
 
10716
      WHERE f_int1 = new.f_int1;
 
10717
END|
 
10718
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10719
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10720
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10721
        
 
10722
# check trigger-1 success:      1
 
10723
DROP TRIGGER trg_1;
 
10724
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10725
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10726
f_charbig = 'just inserted'
 
10727
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10728
DELETE FROM t0_aux
 
10729
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10730
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10731
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10732
'just inserted' FROM t0_template
 
10733
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10734
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
10735
BEGIN
 
10736
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10737
f_charbig = 'updated by trigger'
 
10738
      WHERE f_int1 = new.f_int1;
 
10739
END|
 
10740
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10741
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10743
        
 
10744
# check trigger-2 success:      1
 
10745
DROP TRIGGER trg_1;
 
10746
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10747
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10748
f_charbig = 'just inserted'
 
10749
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10750
DELETE FROM t0_aux
 
10751
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10752
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10753
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10754
'just inserted' FROM t0_template
 
10755
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10756
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10757
BEGIN
 
10758
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10759
f_charbig = 'updated by trigger'
 
10760
      WHERE f_int1 = new.f_int1;
 
10761
END|
 
10762
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10763
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10764
        
 
10765
# check trigger-3 success:      1
 
10766
DROP TRIGGER trg_1;
 
10767
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10768
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10769
f_charbig = 'just inserted'
 
10770
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10771
DELETE FROM t0_aux
 
10772
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10773
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10774
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10775
'just inserted' FROM t0_template
 
10776
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10777
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10778
BEGIN
 
10779
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10780
f_charbig = 'updated by trigger'
 
10781
      WHERE f_int1 = - old.f_int1;
 
10782
END|
 
10783
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10784
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10785
        
 
10786
# check trigger-4 success:      1
 
10787
DROP TRIGGER trg_1;
 
10788
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10789
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10790
f_charbig = 'just inserted'
 
10791
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10792
DELETE FROM t0_aux
 
10793
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10794
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10795
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10796
'just inserted' FROM t0_template
 
10797
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10798
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10799
BEGIN
 
10800
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10801
f_charbig = 'updated by trigger'
 
10802
      WHERE f_int1 = new.f_int1;
 
10803
END|
 
10804
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10805
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10806
        
 
10807
# check trigger-5 success:      1
 
10808
DROP TRIGGER trg_1;
 
10809
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10810
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10811
f_charbig = 'just inserted'
 
10812
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10813
DELETE FROM t0_aux
 
10814
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10815
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10816
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10817
'just inserted' FROM t0_template
 
10818
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10819
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10820
BEGIN
 
10821
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10822
f_charbig = 'updated by trigger'
 
10823
      WHERE f_int1 = - old.f_int1;
 
10824
END|
 
10825
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10826
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10827
        
 
10828
# check trigger-6 success:      1
 
10829
DROP TRIGGER trg_1;
 
10830
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10831
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10832
f_charbig = 'just inserted'
 
10833
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10834
DELETE FROM t0_aux
 
10835
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10836
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10837
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10838
'just inserted' FROM t0_template
 
10839
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10840
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
10841
BEGIN
 
10842
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10843
f_charbig = 'updated by trigger'
 
10844
      WHERE f_int1 = - old.f_int1;
 
10845
END|
 
10846
DELETE FROM t0_aux
 
10847
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10848
        
 
10849
# check trigger-7 success:      1
 
10850
DROP TRIGGER trg_1;
 
10851
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10852
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10853
f_charbig = 'just inserted'
 
10854
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10855
DELETE FROM t0_aux
 
10856
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10857
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10858
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10859
'just inserted' FROM t0_template
 
10860
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10861
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
10862
BEGIN
 
10863
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10864
f_charbig = 'updated by trigger'
 
10865
      WHERE f_int1 = - old.f_int1;
 
10866
END|
 
10867
DELETE FROM t0_aux
 
10868
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10869
        
 
10870
# check trigger-8 success:      1
 
10871
DROP TRIGGER trg_1;
 
10872
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10873
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10874
f_charbig = 'just inserted'
 
10875
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10876
DELETE FROM t0_aux
 
10877
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10878
DELETE FROM t1
 
10879
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10880
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10881
BEGIN
 
10882
SET new.f_int1 = old.f_int1 + @max_row,
 
10883
new.f_int2 = old.f_int2 - @max_row,
 
10884
new.f_charbig = '####updated per update trigger####';
 
10885
END|
 
10886
UPDATE t1
 
10887
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10888
f_charbig = '####updated per update statement itself####';
 
10889
        
 
10890
# check trigger-9 success:      1
 
10891
DROP TRIGGER trg_2;
 
10892
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10893
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10894
f_charbig = CONCAT('===',f_char1,'===');
 
10895
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10896
BEGIN
 
10897
SET new.f_int1 = new.f_int1 + @max_row,
 
10898
new.f_int2 = new.f_int2 - @max_row,
 
10899
new.f_charbig = '####updated per update trigger####';
 
10900
END|
 
10901
UPDATE t1
 
10902
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10903
f_charbig = '####updated per update statement itself####';
 
10904
        
 
10905
# check trigger-10 success:     1
 
10906
DROP TRIGGER trg_2;
 
10907
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10908
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10909
f_charbig = CONCAT('===',f_char1,'===');
 
10910
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10911
BEGIN
 
10912
SET new.f_int1 = @my_max1 + @counter,
 
10913
new.f_int2 = @my_min2 - @counter,
 
10914
new.f_charbig = '####updated per insert trigger####';
 
10915
SET @counter = @counter + 1;
 
10916
END|
 
10917
SET @counter = 1;
 
10918
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10919
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10920
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10921
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10922
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10923
ORDER BY f_int1;
 
10924
DROP TRIGGER trg_3;
 
10925
        
 
10926
# check trigger-11 success:     1
 
10927
DELETE FROM t1
 
10928
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10929
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10930
AND f_charbig = '####updated per insert trigger####';
 
10931
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10932
BEGIN
 
10933
SET new.f_int1 = @my_max1 + @counter,
 
10934
new.f_int2 = @my_min2 - @counter,
 
10935
new.f_charbig = '####updated per insert trigger####';
 
10936
SET @counter = @counter + 1;
 
10937
END|
 
10938
SET @counter = 1;
 
10939
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10940
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10941
SELECT CAST(f_int1 AS CHAR),
 
10942
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10943
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10944
ORDER BY f_int1;
 
10945
DROP TRIGGER trg_3;
 
10946
        
 
10947
# check trigger-12 success:     1
 
10948
DELETE FROM t1
 
10949
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10950
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10951
AND f_charbig = '####updated per insert trigger####';
 
10952
ANALYZE  TABLE t1;
 
10953
Table   Op      Msg_type        Msg_text
 
10954
test.t1 analyze status  OK
 
10955
CHECK    TABLE t1 EXTENDED;
 
10956
Table   Op      Msg_type        Msg_text
 
10957
test.t1 check   status  OK
 
10958
CHECKSUM TABLE t1 EXTENDED;
 
10959
Table   Checksum
 
10960
test.t1 <some_value>
 
10961
OPTIMIZE TABLE t1;
 
10962
Table   Op      Msg_type        Msg_text
 
10963
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
10964
test.t1 optimize        status  OK
 
10965
# check layout success:    1
 
10966
REPAIR   TABLE t1 EXTENDED;
 
10967
Table   Op      Msg_type        Msg_text
 
10968
test.t1 repair  note    The storage engine for the table doesn't support repair
 
10969
# check layout success:    1
 
10970
TRUNCATE t1;
 
10971
        
 
10972
# check TRUNCATE success:       1
 
10973
# check layout success:    1
 
10974
# End usability test (inc/partition_check.inc)
 
10975
DROP TABLE t1;
 
10976
#------------------------------------------------------------------------
 
10977
#  2.2   Partitioning function contains two columns (f_int1,f_int2)
 
10978
#------------------------------------------------------------------------
 
10979
#  2.2.1 DROP PRIMARY KEY consisting of two columns
 
10980
DROP TABLE IF EXISTS t1;
 
10981
CREATE TABLE t1 (
 
10982
f_int1 INTEGER,
 
10983
f_int2 INTEGER,
 
10984
f_char1 CHAR(20),
 
10985
f_char2 CHAR(20),
 
10986
f_charbig VARCHAR(1000)
 
10987
, PRIMARY KEY(f_int1,f_int2)
 
10988
)
 
10989
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
10990
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10991
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10992
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
10993
ALTER TABLE t1 DROP PRIMARY KEY;
 
10994
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10995
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10996
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10997
# Start usability test (inc/partition_check.inc)
 
10998
create_command
 
10999
SHOW CREATE TABLE t1;
 
11000
Table   Create Table
 
11001
t1      CREATE TABLE `t1` (
 
11002
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
11003
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
11004
  `f_char1` char(20) DEFAULT NULL,
 
11005
  `f_char2` char(20) DEFAULT NULL,
 
11006
  `f_charbig` varchar(1000) DEFAULT NULL
 
11007
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
11008
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
 
11009
PARTITIONS 2 */
 
11010
 
 
11011
# check prerequisites-1 success:    1
 
11012
# check COUNT(*) success:    1
 
11013
# check MIN/MAX(f_int1) success:    1
 
11014
# check MIN/MAX(f_int2) success:    1
 
11015
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11016
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11017
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
11018
WHERE f_int1 IN (2,3);
 
11019
# check prerequisites-3 success:    1
 
11020
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11021
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
11022
# check read via f_int1 success: 1
 
11023
# check read via f_int2 success: 1
 
11024
        
 
11025
# check multiple-1 success:     1
 
11026
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11027
        
 
11028
# check multiple-2 success:     1
 
11029
INSERT INTO t1 SELECT * FROM t0_template
 
11030
WHERE MOD(f_int1,3) = 0;
 
11031
        
 
11032
# check multiple-3 success:     1
 
11033
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11034
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11035
AND @max_row_div2 + @max_row_div4;
 
11036
        
 
11037
# check multiple-4 success:     1
 
11038
DELETE FROM t1
 
11039
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11040
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11041
        
 
11042
# check multiple-5 success:     1
 
11043
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11044
INSERT INTO t1
 
11045
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11046
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11047
f_charbig = '#SINGLE#';
 
11048
        
 
11049
# check single-1 success:       1
 
11050
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11051
INSERT INTO t1
 
11052
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11053
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11054
f_charbig = '#SINGLE#';
 
11055
        
 
11056
# check single-2 success:       1
 
11057
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11058
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11059
UPDATE t1 SET f_int1 = @cur_value2
 
11060
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11061
        
 
11062
# check single-3 success:       1
 
11063
SET @cur_value1= -1;
 
11064
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11065
UPDATE t1 SET f_int1 = @cur_value1
 
11066
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11067
        
 
11068
# check single-4 success:       1
 
11069
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11070
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11071
        
 
11072
# check single-5 success:       1
 
11073
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11074
        
 
11075
# check single-6 success:       1
 
11076
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11077
        
 
11078
# check single-7 success:       1
 
11079
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
11080
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11081
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11082
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11083
f_charbig = '#NULL#';
 
11084
INSERT INTO t1
 
11085
SET f_int1 = NULL , f_int2 = -@max_row,
 
11086
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11087
f_charbig = '#NULL#';
 
11088
ERROR 23000: Column 'f_int1' cannot be null
 
11089
# check null success:    1
 
11090
DELETE FROM t1
 
11091
WHERE f_int1 = 0 AND f_int2 = 0
 
11092
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11093
AND f_charbig = '#NULL#';
 
11094
SET AUTOCOMMIT= 0;
 
11095
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11096
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11097
FROM t0_template source_tab
 
11098
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11099
        
 
11100
# check transactions-1 success:         1
 
11101
COMMIT WORK;
 
11102
        
 
11103
# check transactions-2 success:         1
 
11104
ROLLBACK WORK;
 
11105
        
 
11106
# check transactions-3 success:         1
 
11107
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11108
COMMIT WORK;
 
11109
ROLLBACK WORK;
 
11110
        
 
11111
# check transactions-4 success:         1
 
11112
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11113
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11114
FROM t0_template source_tab
 
11115
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11116
        
 
11117
# check transactions-5 success:         1
 
11118
ROLLBACK WORK;
 
11119
        
 
11120
# check transactions-6 success:         1
 
11121
# INFO: Storage engine used for t1 seems to be transactional.
 
11122
COMMIT;
 
11123
        
 
11124
# check transactions-7 success:         1
 
11125
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11126
COMMIT WORK;
 
11127
SET @@session.sql_mode = 'traditional';
 
11128
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11129
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11130
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11131
'', '', 'was inserted' FROM t0_template
 
11132
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11133
ERROR 22012: Division by 0
 
11134
COMMIT;
 
11135
        
 
11136
# check transactions-8 success:         1
 
11137
# INFO: Storage engine used for t1 seems to be able to revert
 
11138
#       changes made by the failing statement.
 
11139
SET @@session.sql_mode = '';
 
11140
SET AUTOCOMMIT= 1;
 
11141
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11142
COMMIT WORK;
 
11143
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11144
        
 
11145
# check special-1 success:      1
 
11146
UPDATE t1 SET f_charbig = '';
 
11147
        
 
11148
# check special-2 success:      1
 
11149
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11150
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11151
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11152
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11153
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11154
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11155
'just inserted' FROM t0_template
 
11156
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11157
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11158
BEGIN
 
11159
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11160
f_charbig = 'updated by trigger'
 
11161
      WHERE f_int1 = new.f_int1;
 
11162
END|
 
11163
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11164
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11165
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11166
        
 
11167
# check trigger-1 success:      1
 
11168
DROP TRIGGER trg_1;
 
11169
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11170
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11171
f_charbig = 'just inserted'
 
11172
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11173
DELETE FROM t0_aux
 
11174
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11175
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11176
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11177
'just inserted' FROM t0_template
 
11178
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11179
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
11180
BEGIN
 
11181
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11182
f_charbig = 'updated by trigger'
 
11183
      WHERE f_int1 = new.f_int1;
 
11184
END|
 
11185
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11186
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11187
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11188
        
 
11189
# check trigger-2 success:      1
 
11190
DROP TRIGGER trg_1;
 
11191
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11192
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11193
f_charbig = 'just inserted'
 
11194
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11195
DELETE FROM t0_aux
 
11196
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11197
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11198
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11199
'just inserted' FROM t0_template
 
11200
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11201
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11202
BEGIN
 
11203
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11204
f_charbig = 'updated by trigger'
 
11205
      WHERE f_int1 = new.f_int1;
 
11206
END|
 
11207
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11208
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11209
        
 
11210
# check trigger-3 success:      1
 
11211
DROP TRIGGER trg_1;
 
11212
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11213
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11214
f_charbig = 'just inserted'
 
11215
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11216
DELETE FROM t0_aux
 
11217
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11218
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11219
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11220
'just inserted' FROM t0_template
 
11221
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11222
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11223
BEGIN
 
11224
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11225
f_charbig = 'updated by trigger'
 
11226
      WHERE f_int1 = - old.f_int1;
 
11227
END|
 
11228
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11229
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11230
        
 
11231
# check trigger-4 success:      1
 
11232
DROP TRIGGER trg_1;
 
11233
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11234
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11235
f_charbig = 'just inserted'
 
11236
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11237
DELETE FROM t0_aux
 
11238
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11239
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11240
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11241
'just inserted' FROM t0_template
 
11242
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11243
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11244
BEGIN
 
11245
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11246
f_charbig = 'updated by trigger'
 
11247
      WHERE f_int1 = new.f_int1;
 
11248
END|
 
11249
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11250
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11251
        
 
11252
# check trigger-5 success:      1
 
11253
DROP TRIGGER trg_1;
 
11254
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11255
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11256
f_charbig = 'just inserted'
 
11257
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11258
DELETE FROM t0_aux
 
11259
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11260
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11261
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11262
'just inserted' FROM t0_template
 
11263
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11264
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11265
BEGIN
 
11266
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11267
f_charbig = 'updated by trigger'
 
11268
      WHERE f_int1 = - old.f_int1;
 
11269
END|
 
11270
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11271
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11272
        
 
11273
# check trigger-6 success:      1
 
11274
DROP TRIGGER trg_1;
 
11275
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11276
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11277
f_charbig = 'just inserted'
 
11278
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11279
DELETE FROM t0_aux
 
11280
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11281
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11282
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11283
'just inserted' FROM t0_template
 
11284
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11285
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
11286
BEGIN
 
11287
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11288
f_charbig = 'updated by trigger'
 
11289
      WHERE f_int1 = - old.f_int1;
 
11290
END|
 
11291
DELETE FROM t0_aux
 
11292
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11293
        
 
11294
# check trigger-7 success:      1
 
11295
DROP TRIGGER trg_1;
 
11296
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11297
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11298
f_charbig = 'just inserted'
 
11299
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11300
DELETE FROM t0_aux
 
11301
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11302
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11303
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11304
'just inserted' FROM t0_template
 
11305
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11306
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
11307
BEGIN
 
11308
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11309
f_charbig = 'updated by trigger'
 
11310
      WHERE f_int1 = - old.f_int1;
 
11311
END|
 
11312
DELETE FROM t0_aux
 
11313
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11314
        
 
11315
# check trigger-8 success:      1
 
11316
DROP TRIGGER trg_1;
 
11317
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11318
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11319
f_charbig = 'just inserted'
 
11320
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11321
DELETE FROM t0_aux
 
11322
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11323
DELETE FROM t1
 
11324
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11325
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11326
BEGIN
 
11327
SET new.f_int1 = old.f_int1 + @max_row,
 
11328
new.f_int2 = old.f_int2 - @max_row,
 
11329
new.f_charbig = '####updated per update trigger####';
 
11330
END|
 
11331
UPDATE t1
 
11332
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11333
f_charbig = '####updated per update statement itself####';
 
11334
        
 
11335
# check trigger-9 success:      1
 
11336
DROP TRIGGER trg_2;
 
11337
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11338
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11339
f_charbig = CONCAT('===',f_char1,'===');
 
11340
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11341
BEGIN
 
11342
SET new.f_int1 = new.f_int1 + @max_row,
 
11343
new.f_int2 = new.f_int2 - @max_row,
 
11344
new.f_charbig = '####updated per update trigger####';
 
11345
END|
 
11346
UPDATE t1
 
11347
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11348
f_charbig = '####updated per update statement itself####';
 
11349
        
 
11350
# check trigger-10 success:     1
 
11351
DROP TRIGGER trg_2;
 
11352
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11353
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11354
f_charbig = CONCAT('===',f_char1,'===');
 
11355
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11356
BEGIN
 
11357
SET new.f_int1 = @my_max1 + @counter,
 
11358
new.f_int2 = @my_min2 - @counter,
 
11359
new.f_charbig = '####updated per insert trigger####';
 
11360
SET @counter = @counter + 1;
 
11361
END|
 
11362
SET @counter = 1;
 
11363
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11364
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11365
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11366
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11367
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11368
ORDER BY f_int1;
 
11369
DROP TRIGGER trg_3;
 
11370
        
 
11371
# check trigger-11 success:     1
 
11372
DELETE FROM t1
 
11373
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11374
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11375
AND f_charbig = '####updated per insert trigger####';
 
11376
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11377
BEGIN
 
11378
SET new.f_int1 = @my_max1 + @counter,
 
11379
new.f_int2 = @my_min2 - @counter,
 
11380
new.f_charbig = '####updated per insert trigger####';
 
11381
SET @counter = @counter + 1;
 
11382
END|
 
11383
SET @counter = 1;
 
11384
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11385
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
11386
SELECT CAST(f_int1 AS CHAR),
 
11387
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11388
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11389
ORDER BY f_int1;
 
11390
DROP TRIGGER trg_3;
 
11391
        
 
11392
# check trigger-12 success:     1
 
11393
DELETE FROM t1
 
11394
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11395
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11396
AND f_charbig = '####updated per insert trigger####';
 
11397
ANALYZE  TABLE t1;
 
11398
Table   Op      Msg_type        Msg_text
 
11399
test.t1 analyze status  OK
 
11400
CHECK    TABLE t1 EXTENDED;
 
11401
Table   Op      Msg_type        Msg_text
 
11402
test.t1 check   status  OK
 
11403
CHECKSUM TABLE t1 EXTENDED;
 
11404
Table   Checksum
 
11405
test.t1 <some_value>
 
11406
OPTIMIZE TABLE t1;
 
11407
Table   Op      Msg_type        Msg_text
 
11408
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
11409
test.t1 optimize        status  OK
 
11410
# check layout success:    1
 
11411
REPAIR   TABLE t1 EXTENDED;
 
11412
Table   Op      Msg_type        Msg_text
 
11413
test.t1 repair  note    The storage engine for the table doesn't support repair
 
11414
# check layout success:    1
 
11415
TRUNCATE t1;
 
11416
        
 
11417
# check TRUNCATE success:       1
 
11418
# check layout success:    1
 
11419
# End usability test (inc/partition_check.inc)
 
11420
DROP TABLE t1;
 
11421
CREATE TABLE t1 (
 
11422
f_int1 INTEGER,
 
11423
f_int2 INTEGER,
 
11424
f_char1 CHAR(20),
 
11425
f_char2 CHAR(20),
 
11426
f_charbig VARCHAR(1000)
 
11427
, PRIMARY KEY(f_int1,f_int2)
 
11428
)
 
11429
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
11430
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11431
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11432
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
11433
ALTER TABLE t1 DROP PRIMARY KEY;
 
11434
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11435
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11436
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11437
# Start usability test (inc/partition_check.inc)
 
11438
create_command
 
11439
SHOW CREATE TABLE t1;
 
11440
Table   Create Table
 
11441
t1      CREATE TABLE `t1` (
 
11442
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
11443
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
11444
  `f_char1` char(20) DEFAULT NULL,
 
11445
  `f_char2` char(20) DEFAULT NULL,
 
11446
  `f_charbig` varchar(1000) DEFAULT NULL
 
11447
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
11448
/*!50100 PARTITION BY KEY (f_int1,f_int2)
 
11449
PARTITIONS 5 */
 
11450
 
 
11451
# check prerequisites-1 success:    1
 
11452
# check COUNT(*) success:    1
 
11453
# check MIN/MAX(f_int1) success:    1
 
11454
# check MIN/MAX(f_int2) success:    1
 
11455
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11456
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11457
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
11458
WHERE f_int1 IN (2,3);
 
11459
# check prerequisites-3 success:    1
 
11460
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11461
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
11462
# check read via f_int1 success: 1
 
11463
# check read via f_int2 success: 1
 
11464
        
 
11465
# check multiple-1 success:     1
 
11466
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11467
        
 
11468
# check multiple-2 success:     1
 
11469
INSERT INTO t1 SELECT * FROM t0_template
 
11470
WHERE MOD(f_int1,3) = 0;
 
11471
        
 
11472
# check multiple-3 success:     1
 
11473
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11474
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11475
AND @max_row_div2 + @max_row_div4;
 
11476
        
 
11477
# check multiple-4 success:     1
 
11478
DELETE FROM t1
 
11479
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11480
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11481
        
 
11482
# check multiple-5 success:     1
 
11483
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11484
INSERT INTO t1
 
11485
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11486
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11487
f_charbig = '#SINGLE#';
 
11488
        
 
11489
# check single-1 success:       1
 
11490
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11491
INSERT INTO t1
 
11492
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11493
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11494
f_charbig = '#SINGLE#';
 
11495
        
 
11496
# check single-2 success:       1
 
11497
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11498
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11499
UPDATE t1 SET f_int1 = @cur_value2
 
11500
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11501
        
 
11502
# check single-3 success:       1
 
11503
SET @cur_value1= -1;
 
11504
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11505
UPDATE t1 SET f_int1 = @cur_value1
 
11506
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11507
        
 
11508
# check single-4 success:       1
 
11509
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11510
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11511
        
 
11512
# check single-5 success:       1
 
11513
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11514
        
 
11515
# check single-6 success:       1
 
11516
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11517
        
 
11518
# check single-7 success:       1
 
11519
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
11520
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11521
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11522
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11523
f_charbig = '#NULL#';
 
11524
INSERT INTO t1
 
11525
SET f_int1 = NULL , f_int2 = -@max_row,
 
11526
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11527
f_charbig = '#NULL#';
 
11528
ERROR 23000: Column 'f_int1' cannot be null
 
11529
# check null success:    1
 
11530
DELETE FROM t1
 
11531
WHERE f_int1 = 0 AND f_int2 = 0
 
11532
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11533
AND f_charbig = '#NULL#';
 
11534
SET AUTOCOMMIT= 0;
 
11535
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11536
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11537
FROM t0_template source_tab
 
11538
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11539
        
 
11540
# check transactions-1 success:         1
 
11541
COMMIT WORK;
 
11542
        
 
11543
# check transactions-2 success:         1
 
11544
ROLLBACK WORK;
 
11545
        
 
11546
# check transactions-3 success:         1
 
11547
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11548
COMMIT WORK;
 
11549
ROLLBACK WORK;
 
11550
        
 
11551
# check transactions-4 success:         1
 
11552
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11553
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11554
FROM t0_template source_tab
 
11555
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11556
        
 
11557
# check transactions-5 success:         1
 
11558
ROLLBACK WORK;
 
11559
        
 
11560
# check transactions-6 success:         1
 
11561
# INFO: Storage engine used for t1 seems to be transactional.
 
11562
COMMIT;
 
11563
        
 
11564
# check transactions-7 success:         1
 
11565
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11566
COMMIT WORK;
 
11567
SET @@session.sql_mode = 'traditional';
 
11568
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11569
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11570
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11571
'', '', 'was inserted' FROM t0_template
 
11572
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11573
ERROR 22012: Division by 0
 
11574
COMMIT;
 
11575
        
 
11576
# check transactions-8 success:         1
 
11577
# INFO: Storage engine used for t1 seems to be able to revert
 
11578
#       changes made by the failing statement.
 
11579
SET @@session.sql_mode = '';
 
11580
SET AUTOCOMMIT= 1;
 
11581
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11582
COMMIT WORK;
 
11583
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11584
        
 
11585
# check special-1 success:      1
 
11586
UPDATE t1 SET f_charbig = '';
 
11587
        
 
11588
# check special-2 success:      1
 
11589
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11590
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11591
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11592
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11593
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11594
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11595
'just inserted' FROM t0_template
 
11596
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11597
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11598
BEGIN
 
11599
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11600
f_charbig = 'updated by trigger'
 
11601
      WHERE f_int1 = new.f_int1;
 
11602
END|
 
11603
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11604
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11606
        
 
11607
# check trigger-1 success:      1
 
11608
DROP TRIGGER trg_1;
 
11609
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11610
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11611
f_charbig = 'just inserted'
 
11612
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11613
DELETE FROM t0_aux
 
11614
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11615
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11616
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11617
'just inserted' FROM t0_template
 
11618
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11619
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
11620
BEGIN
 
11621
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11622
f_charbig = 'updated by trigger'
 
11623
      WHERE f_int1 = new.f_int1;
 
11624
END|
 
11625
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11626
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11627
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11628
        
 
11629
# check trigger-2 success:      1
 
11630
DROP TRIGGER trg_1;
 
11631
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11632
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11633
f_charbig = 'just inserted'
 
11634
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11635
DELETE FROM t0_aux
 
11636
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11637
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11638
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11639
'just inserted' FROM t0_template
 
11640
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11641
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11642
BEGIN
 
11643
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11644
f_charbig = 'updated by trigger'
 
11645
      WHERE f_int1 = new.f_int1;
 
11646
END|
 
11647
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11648
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11649
        
 
11650
# check trigger-3 success:      1
 
11651
DROP TRIGGER trg_1;
 
11652
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11653
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11654
f_charbig = 'just inserted'
 
11655
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11656
DELETE FROM t0_aux
 
11657
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11658
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11659
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11660
'just inserted' FROM t0_template
 
11661
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11662
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11663
BEGIN
 
11664
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11665
f_charbig = 'updated by trigger'
 
11666
      WHERE f_int1 = - old.f_int1;
 
11667
END|
 
11668
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11669
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11670
        
 
11671
# check trigger-4 success:      1
 
11672
DROP TRIGGER trg_1;
 
11673
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11674
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11675
f_charbig = 'just inserted'
 
11676
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11677
DELETE FROM t0_aux
 
11678
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11679
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11680
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11681
'just inserted' FROM t0_template
 
11682
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11683
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11684
BEGIN
 
11685
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11686
f_charbig = 'updated by trigger'
 
11687
      WHERE f_int1 = new.f_int1;
 
11688
END|
 
11689
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11690
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11691
        
 
11692
# check trigger-5 success:      1
 
11693
DROP TRIGGER trg_1;
 
11694
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11695
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11696
f_charbig = 'just inserted'
 
11697
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11698
DELETE FROM t0_aux
 
11699
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11700
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11701
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11702
'just inserted' FROM t0_template
 
11703
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11704
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11705
BEGIN
 
11706
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11707
f_charbig = 'updated by trigger'
 
11708
      WHERE f_int1 = - old.f_int1;
 
11709
END|
 
11710
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11711
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11712
        
 
11713
# check trigger-6 success:      1
 
11714
DROP TRIGGER trg_1;
 
11715
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11716
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11717
f_charbig = 'just inserted'
 
11718
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11719
DELETE FROM t0_aux
 
11720
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11721
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11722
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11723
'just inserted' FROM t0_template
 
11724
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11725
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
11726
BEGIN
 
11727
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11728
f_charbig = 'updated by trigger'
 
11729
      WHERE f_int1 = - old.f_int1;
 
11730
END|
 
11731
DELETE FROM t0_aux
 
11732
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11733
        
 
11734
# check trigger-7 success:      1
 
11735
DROP TRIGGER trg_1;
 
11736
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11737
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11738
f_charbig = 'just inserted'
 
11739
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11740
DELETE FROM t0_aux
 
11741
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11742
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11743
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11744
'just inserted' FROM t0_template
 
11745
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11746
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
11747
BEGIN
 
11748
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11749
f_charbig = 'updated by trigger'
 
11750
      WHERE f_int1 = - old.f_int1;
 
11751
END|
 
11752
DELETE FROM t0_aux
 
11753
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11754
        
 
11755
# check trigger-8 success:      1
 
11756
DROP TRIGGER trg_1;
 
11757
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11758
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11759
f_charbig = 'just inserted'
 
11760
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11761
DELETE FROM t0_aux
 
11762
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11763
DELETE FROM t1
 
11764
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11765
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11766
BEGIN
 
11767
SET new.f_int1 = old.f_int1 + @max_row,
 
11768
new.f_int2 = old.f_int2 - @max_row,
 
11769
new.f_charbig = '####updated per update trigger####';
 
11770
END|
 
11771
UPDATE t1
 
11772
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11773
f_charbig = '####updated per update statement itself####';
 
11774
        
 
11775
# check trigger-9 success:      1
 
11776
DROP TRIGGER trg_2;
 
11777
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11778
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11779
f_charbig = CONCAT('===',f_char1,'===');
 
11780
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11781
BEGIN
 
11782
SET new.f_int1 = new.f_int1 + @max_row,
 
11783
new.f_int2 = new.f_int2 - @max_row,
 
11784
new.f_charbig = '####updated per update trigger####';
 
11785
END|
 
11786
UPDATE t1
 
11787
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11788
f_charbig = '####updated per update statement itself####';
 
11789
        
 
11790
# check trigger-10 success:     1
 
11791
DROP TRIGGER trg_2;
 
11792
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11793
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11794
f_charbig = CONCAT('===',f_char1,'===');
 
11795
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11796
BEGIN
 
11797
SET new.f_int1 = @my_max1 + @counter,
 
11798
new.f_int2 = @my_min2 - @counter,
 
11799
new.f_charbig = '####updated per insert trigger####';
 
11800
SET @counter = @counter + 1;
 
11801
END|
 
11802
SET @counter = 1;
 
11803
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11804
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11805
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11806
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11807
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11808
ORDER BY f_int1;
 
11809
DROP TRIGGER trg_3;
 
11810
        
 
11811
# check trigger-11 success:     1
 
11812
DELETE FROM t1
 
11813
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11814
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11815
AND f_charbig = '####updated per insert trigger####';
 
11816
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11817
BEGIN
 
11818
SET new.f_int1 = @my_max1 + @counter,
 
11819
new.f_int2 = @my_min2 - @counter,
 
11820
new.f_charbig = '####updated per insert trigger####';
 
11821
SET @counter = @counter + 1;
 
11822
END|
 
11823
SET @counter = 1;
 
11824
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11825
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
11826
SELECT CAST(f_int1 AS CHAR),
 
11827
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11828
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11829
ORDER BY f_int1;
 
11830
DROP TRIGGER trg_3;
 
11831
        
 
11832
# check trigger-12 success:     1
 
11833
DELETE FROM t1
 
11834
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11835
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11836
AND f_charbig = '####updated per insert trigger####';
 
11837
ANALYZE  TABLE t1;
 
11838
Table   Op      Msg_type        Msg_text
 
11839
test.t1 analyze status  OK
 
11840
CHECK    TABLE t1 EXTENDED;
 
11841
Table   Op      Msg_type        Msg_text
 
11842
test.t1 check   status  OK
 
11843
CHECKSUM TABLE t1 EXTENDED;
 
11844
Table   Checksum
 
11845
test.t1 <some_value>
 
11846
OPTIMIZE TABLE t1;
 
11847
Table   Op      Msg_type        Msg_text
 
11848
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
11849
test.t1 optimize        status  OK
 
11850
# check layout success:    1
 
11851
REPAIR   TABLE t1 EXTENDED;
 
11852
Table   Op      Msg_type        Msg_text
 
11853
test.t1 repair  note    The storage engine for the table doesn't support repair
 
11854
# check layout success:    1
 
11855
TRUNCATE t1;
 
11856
        
 
11857
# check TRUNCATE success:       1
 
11858
# check layout success:    1
 
11859
# End usability test (inc/partition_check.inc)
 
11860
DROP TABLE t1;
 
11861
CREATE TABLE t1 (
 
11862
f_int1 INTEGER,
 
11863
f_int2 INTEGER,
 
11864
f_char1 CHAR(20),
 
11865
f_char2 CHAR(20),
 
11866
f_charbig VARCHAR(1000)
 
11867
, PRIMARY KEY(f_int1,f_int2)
 
11868
)
 
11869
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
11870
(PARTITION part_3 VALUES IN (-3),
 
11871
PARTITION part_2 VALUES IN (-2),
 
11872
PARTITION part_1 VALUES IN (-1),
 
11873
PARTITION part_N VALUES IN (NULL),
 
11874
PARTITION part0 VALUES IN (0),
 
11875
PARTITION part1 VALUES IN (1),
 
11876
PARTITION part2 VALUES IN (2),
 
11877
PARTITION part3 VALUES IN (3));
 
11878
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11879
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11880
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
11881
ALTER TABLE t1 DROP PRIMARY KEY;
 
11882
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11883
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11884
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11885
# Start usability test (inc/partition_check.inc)
 
11886
create_command
 
11887
SHOW CREATE TABLE t1;
 
11888
Table   Create Table
 
11889
t1      CREATE TABLE `t1` (
 
11890
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
11891
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
11892
  `f_char1` char(20) DEFAULT NULL,
 
11893
  `f_char2` char(20) DEFAULT NULL,
 
11894
  `f_charbig` varchar(1000) DEFAULT NULL
 
11895
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
11896
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
 
11897
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
11898
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
11899
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
11900
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
11901
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
11902
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
11903
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
11904
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
11905
 
 
11906
# check prerequisites-1 success:    1
 
11907
# check COUNT(*) success:    1
 
11908
# check MIN/MAX(f_int1) success:    1
 
11909
# check MIN/MAX(f_int2) success:    1
 
11910
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11911
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11912
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
11913
WHERE f_int1 IN (2,3);
 
11914
# check prerequisites-3 success:    1
 
11915
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11916
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
11917
# check read via f_int1 success: 1
 
11918
# check read via f_int2 success: 1
 
11919
        
 
11920
# check multiple-1 success:     1
 
11921
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11922
        
 
11923
# check multiple-2 success:     1
 
11924
INSERT INTO t1 SELECT * FROM t0_template
 
11925
WHERE MOD(f_int1,3) = 0;
 
11926
        
 
11927
# check multiple-3 success:     1
 
11928
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11929
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11930
AND @max_row_div2 + @max_row_div4;
 
11931
        
 
11932
# check multiple-4 success:     1
 
11933
DELETE FROM t1
 
11934
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11935
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11936
        
 
11937
# check multiple-5 success:     1
 
11938
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11939
INSERT INTO t1
 
11940
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11941
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11942
f_charbig = '#SINGLE#';
 
11943
        
 
11944
# check single-1 success:       1
 
11945
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11946
INSERT INTO t1
 
11947
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11948
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11949
f_charbig = '#SINGLE#';
 
11950
        
 
11951
# check single-2 success:       1
 
11952
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11953
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11954
UPDATE t1 SET f_int1 = @cur_value2
 
11955
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11956
        
 
11957
# check single-3 success:       1
 
11958
SET @cur_value1= -1;
 
11959
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11960
UPDATE t1 SET f_int1 = @cur_value1
 
11961
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11962
        
 
11963
# check single-4 success:       1
 
11964
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11965
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11966
        
 
11967
# check single-5 success:       1
 
11968
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11969
        
 
11970
# check single-6 success:       1
 
11971
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11972
        
 
11973
# check single-7 success:       1
 
11974
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
11975
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11976
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11977
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11978
f_charbig = '#NULL#';
 
11979
INSERT INTO t1
 
11980
SET f_int1 = NULL , f_int2 = -@max_row,
 
11981
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11982
f_charbig = '#NULL#';
 
11983
ERROR 23000: Column 'f_int1' cannot be null
 
11984
# check null success:    1
 
11985
DELETE FROM t1
 
11986
WHERE f_int1 = 0 AND f_int2 = 0
 
11987
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11988
AND f_charbig = '#NULL#';
 
11989
SET AUTOCOMMIT= 0;
 
11990
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11991
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11992
FROM t0_template source_tab
 
11993
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11994
        
 
11995
# check transactions-1 success:         1
 
11996
COMMIT WORK;
 
11997
        
 
11998
# check transactions-2 success:         1
 
11999
ROLLBACK WORK;
 
12000
        
 
12001
# check transactions-3 success:         1
 
12002
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12003
COMMIT WORK;
 
12004
ROLLBACK WORK;
 
12005
        
 
12006
# check transactions-4 success:         1
 
12007
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12008
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12009
FROM t0_template source_tab
 
12010
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12011
        
 
12012
# check transactions-5 success:         1
 
12013
ROLLBACK WORK;
 
12014
        
 
12015
# check transactions-6 success:         1
 
12016
# INFO: Storage engine used for t1 seems to be transactional.
 
12017
COMMIT;
 
12018
        
 
12019
# check transactions-7 success:         1
 
12020
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12021
COMMIT WORK;
 
12022
SET @@session.sql_mode = 'traditional';
 
12023
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12024
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12025
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12026
'', '', 'was inserted' FROM t0_template
 
12027
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12028
ERROR 22012: Division by 0
 
12029
COMMIT;
 
12030
        
 
12031
# check transactions-8 success:         1
 
12032
# INFO: Storage engine used for t1 seems to be able to revert
 
12033
#       changes made by the failing statement.
 
12034
SET @@session.sql_mode = '';
 
12035
SET AUTOCOMMIT= 1;
 
12036
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12037
COMMIT WORK;
 
12038
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12039
        
 
12040
# check special-1 success:      1
 
12041
UPDATE t1 SET f_charbig = '';
 
12042
        
 
12043
# check special-2 success:      1
 
12044
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12045
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12046
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12047
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12048
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12049
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12050
'just inserted' FROM t0_template
 
12051
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12052
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12053
BEGIN
 
12054
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12055
f_charbig = 'updated by trigger'
 
12056
      WHERE f_int1 = new.f_int1;
 
12057
END|
 
12058
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12059
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12060
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12061
        
 
12062
# check trigger-1 success:      1
 
12063
DROP TRIGGER trg_1;
 
12064
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12065
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12066
f_charbig = 'just inserted'
 
12067
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12068
DELETE FROM t0_aux
 
12069
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12070
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12071
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12072
'just inserted' FROM t0_template
 
12073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12074
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12075
BEGIN
 
12076
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12077
f_charbig = 'updated by trigger'
 
12078
      WHERE f_int1 = new.f_int1;
 
12079
END|
 
12080
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12081
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12082
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12083
        
 
12084
# check trigger-2 success:      1
 
12085
DROP TRIGGER trg_1;
 
12086
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12087
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12088
f_charbig = 'just inserted'
 
12089
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12090
DELETE FROM t0_aux
 
12091
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12092
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12093
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12094
'just inserted' FROM t0_template
 
12095
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12096
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12097
BEGIN
 
12098
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12099
f_charbig = 'updated by trigger'
 
12100
      WHERE f_int1 = new.f_int1;
 
12101
END|
 
12102
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12103
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12104
        
 
12105
# check trigger-3 success:      1
 
12106
DROP TRIGGER trg_1;
 
12107
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12108
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12109
f_charbig = 'just inserted'
 
12110
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12111
DELETE FROM t0_aux
 
12112
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12113
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12114
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12115
'just inserted' FROM t0_template
 
12116
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12117
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12118
BEGIN
 
12119
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12120
f_charbig = 'updated by trigger'
 
12121
      WHERE f_int1 = - old.f_int1;
 
12122
END|
 
12123
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12124
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12125
        
 
12126
# check trigger-4 success:      1
 
12127
DROP TRIGGER trg_1;
 
12128
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12129
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12130
f_charbig = 'just inserted'
 
12131
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12132
DELETE FROM t0_aux
 
12133
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12134
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12135
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12136
'just inserted' FROM t0_template
 
12137
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12138
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12139
BEGIN
 
12140
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12141
f_charbig = 'updated by trigger'
 
12142
      WHERE f_int1 = new.f_int1;
 
12143
END|
 
12144
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12145
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12146
        
 
12147
# check trigger-5 success:      1
 
12148
DROP TRIGGER trg_1;
 
12149
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12150
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12151
f_charbig = 'just inserted'
 
12152
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12153
DELETE FROM t0_aux
 
12154
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12155
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12156
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12157
'just inserted' FROM t0_template
 
12158
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12159
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12160
BEGIN
 
12161
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12162
f_charbig = 'updated by trigger'
 
12163
      WHERE f_int1 = - old.f_int1;
 
12164
END|
 
12165
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12166
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12167
        
 
12168
# check trigger-6 success:      1
 
12169
DROP TRIGGER trg_1;
 
12170
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12171
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12172
f_charbig = 'just inserted'
 
12173
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12174
DELETE FROM t0_aux
 
12175
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12176
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12177
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12178
'just inserted' FROM t0_template
 
12179
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12180
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12181
BEGIN
 
12182
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12183
f_charbig = 'updated by trigger'
 
12184
      WHERE f_int1 = - old.f_int1;
 
12185
END|
 
12186
DELETE FROM t0_aux
 
12187
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12188
        
 
12189
# check trigger-7 success:      1
 
12190
DROP TRIGGER trg_1;
 
12191
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12192
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12193
f_charbig = 'just inserted'
 
12194
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12195
DELETE FROM t0_aux
 
12196
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12197
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12198
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12199
'just inserted' FROM t0_template
 
12200
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12201
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12202
BEGIN
 
12203
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12204
f_charbig = 'updated by trigger'
 
12205
      WHERE f_int1 = - old.f_int1;
 
12206
END|
 
12207
DELETE FROM t0_aux
 
12208
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12209
        
 
12210
# check trigger-8 success:      1
 
12211
DROP TRIGGER trg_1;
 
12212
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12213
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12214
f_charbig = 'just inserted'
 
12215
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12216
DELETE FROM t0_aux
 
12217
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12218
DELETE FROM t1
 
12219
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12220
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12221
BEGIN
 
12222
SET new.f_int1 = old.f_int1 + @max_row,
 
12223
new.f_int2 = old.f_int2 - @max_row,
 
12224
new.f_charbig = '####updated per update trigger####';
 
12225
END|
 
12226
UPDATE t1
 
12227
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12228
f_charbig = '####updated per update statement itself####';
 
12229
        
 
12230
# check trigger-9 success:      1
 
12231
DROP TRIGGER trg_2;
 
12232
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12233
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12234
f_charbig = CONCAT('===',f_char1,'===');
 
12235
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12236
BEGIN
 
12237
SET new.f_int1 = new.f_int1 + @max_row,
 
12238
new.f_int2 = new.f_int2 - @max_row,
 
12239
new.f_charbig = '####updated per update trigger####';
 
12240
END|
 
12241
UPDATE t1
 
12242
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12243
f_charbig = '####updated per update statement itself####';
 
12244
        
 
12245
# check trigger-10 success:     1
 
12246
DROP TRIGGER trg_2;
 
12247
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12248
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12249
f_charbig = CONCAT('===',f_char1,'===');
 
12250
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12251
BEGIN
 
12252
SET new.f_int1 = @my_max1 + @counter,
 
12253
new.f_int2 = @my_min2 - @counter,
 
12254
new.f_charbig = '####updated per insert trigger####';
 
12255
SET @counter = @counter + 1;
 
12256
END|
 
12257
SET @counter = 1;
 
12258
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12259
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12260
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12261
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12262
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12263
ORDER BY f_int1;
 
12264
DROP TRIGGER trg_3;
 
12265
        
 
12266
# check trigger-11 success:     1
 
12267
DELETE FROM t1
 
12268
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12269
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12270
AND f_charbig = '####updated per insert trigger####';
 
12271
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12272
BEGIN
 
12273
SET new.f_int1 = @my_max1 + @counter,
 
12274
new.f_int2 = @my_min2 - @counter,
 
12275
new.f_charbig = '####updated per insert trigger####';
 
12276
SET @counter = @counter + 1;
 
12277
END|
 
12278
SET @counter = 1;
 
12279
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12280
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
12281
SELECT CAST(f_int1 AS CHAR),
 
12282
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12283
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12284
ORDER BY f_int1;
 
12285
DROP TRIGGER trg_3;
 
12286
        
 
12287
# check trigger-12 success:     1
 
12288
DELETE FROM t1
 
12289
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12290
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12291
AND f_charbig = '####updated per insert trigger####';
 
12292
ANALYZE  TABLE t1;
 
12293
Table   Op      Msg_type        Msg_text
 
12294
test.t1 analyze status  OK
 
12295
CHECK    TABLE t1 EXTENDED;
 
12296
Table   Op      Msg_type        Msg_text
 
12297
test.t1 check   status  OK
 
12298
CHECKSUM TABLE t1 EXTENDED;
 
12299
Table   Checksum
 
12300
test.t1 <some_value>
 
12301
OPTIMIZE TABLE t1;
 
12302
Table   Op      Msg_type        Msg_text
 
12303
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
12304
test.t1 optimize        status  OK
 
12305
# check layout success:    1
 
12306
REPAIR   TABLE t1 EXTENDED;
 
12307
Table   Op      Msg_type        Msg_text
 
12308
test.t1 repair  note    The storage engine for the table doesn't support repair
 
12309
# check layout success:    1
 
12310
TRUNCATE t1;
 
12311
        
 
12312
# check TRUNCATE success:       1
 
12313
# check layout success:    1
 
12314
# End usability test (inc/partition_check.inc)
 
12315
DROP TABLE t1;
 
12316
CREATE TABLE t1 (
 
12317
f_int1 INTEGER,
 
12318
f_int2 INTEGER,
 
12319
f_char1 CHAR(20),
 
12320
f_char2 CHAR(20),
 
12321
f_charbig VARCHAR(1000)
 
12322
, PRIMARY KEY(f_int1,f_int2)
 
12323
)
 
12324
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
12325
(PARTITION parta VALUES LESS THAN (0),
 
12326
PARTITION partb VALUES LESS THAN (5),
 
12327
PARTITION partc VALUES LESS THAN (10),
 
12328
PARTITION partd VALUES LESS THAN (10 + 5),
 
12329
PARTITION parte VALUES LESS THAN (20),
 
12330
PARTITION partf VALUES LESS THAN (2147483646));
 
12331
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12332
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12333
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
12334
ALTER TABLE t1 DROP PRIMARY KEY;
 
12335
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12336
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12337
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12338
# Start usability test (inc/partition_check.inc)
 
12339
create_command
 
12340
SHOW CREATE TABLE t1;
 
12341
Table   Create Table
 
12342
t1      CREATE TABLE `t1` (
 
12343
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
12344
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
12345
  `f_char1` char(20) DEFAULT NULL,
 
12346
  `f_char2` char(20) DEFAULT NULL,
 
12347
  `f_charbig` varchar(1000) DEFAULT NULL
 
12348
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
12349
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
 
12350
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
12351
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
12352
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
12353
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
12354
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
12355
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
12356
 
 
12357
# check prerequisites-1 success:    1
 
12358
# check COUNT(*) success:    1
 
12359
# check MIN/MAX(f_int1) success:    1
 
12360
# check MIN/MAX(f_int2) success:    1
 
12361
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12362
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12363
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
12364
WHERE f_int1 IN (2,3);
 
12365
# check prerequisites-3 success:    1
 
12366
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12367
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
12368
# check read via f_int1 success: 1
 
12369
# check read via f_int2 success: 1
 
12370
        
 
12371
# check multiple-1 success:     1
 
12372
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
12373
        
 
12374
# check multiple-2 success:     1
 
12375
INSERT INTO t1 SELECT * FROM t0_template
 
12376
WHERE MOD(f_int1,3) = 0;
 
12377
        
 
12378
# check multiple-3 success:     1
 
12379
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
12380
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
12381
AND @max_row_div2 + @max_row_div4;
 
12382
        
 
12383
# check multiple-4 success:     1
 
12384
DELETE FROM t1
 
12385
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
12386
AND @max_row_div2 + @max_row_div4 + @max_row;
 
12387
        
 
12388
# check multiple-5 success:     1
 
12389
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
12390
INSERT INTO t1
 
12391
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12392
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12393
f_charbig = '#SINGLE#';
 
12394
        
 
12395
# check single-1 success:       1
 
12396
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
12397
INSERT INTO t1
 
12398
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12399
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12400
f_charbig = '#SINGLE#';
 
12401
        
 
12402
# check single-2 success:       1
 
12403
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
12404
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
12405
UPDATE t1 SET f_int1 = @cur_value2
 
12406
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
12407
        
 
12408
# check single-3 success:       1
 
12409
SET @cur_value1= -1;
 
12410
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
12411
UPDATE t1 SET f_int1 = @cur_value1
 
12412
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
12413
        
 
12414
# check single-4 success:       1
 
12415
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
12416
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
12417
        
 
12418
# check single-5 success:       1
 
12419
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
12420
        
 
12421
# check single-6 success:       1
 
12422
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
12423
ERROR HY000: Table has no partition for value 2147483647
 
12424
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
12425
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
12426
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
12427
f_charbig = '#NULL#';
 
12428
INSERT INTO t1
 
12429
SET f_int1 = NULL , f_int2 = -@max_row,
 
12430
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
12431
f_charbig = '#NULL#';
 
12432
ERROR 23000: Column 'f_int1' cannot be null
 
12433
# check null success:    1
 
12434
DELETE FROM t1
 
12435
WHERE f_int1 = 0 AND f_int2 = 0
 
12436
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
12437
AND f_charbig = '#NULL#';
 
12438
SET AUTOCOMMIT= 0;
 
12439
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12440
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12441
FROM t0_template source_tab
 
12442
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12443
        
 
12444
# check transactions-1 success:         1
 
12445
COMMIT WORK;
 
12446
        
 
12447
# check transactions-2 success:         1
 
12448
ROLLBACK WORK;
 
12449
        
 
12450
# check transactions-3 success:         1
 
12451
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12452
COMMIT WORK;
 
12453
ROLLBACK WORK;
 
12454
        
 
12455
# check transactions-4 success:         1
 
12456
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12457
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12458
FROM t0_template source_tab
 
12459
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12460
        
 
12461
# check transactions-5 success:         1
 
12462
ROLLBACK WORK;
 
12463
        
 
12464
# check transactions-6 success:         1
 
12465
# INFO: Storage engine used for t1 seems to be transactional.
 
12466
COMMIT;
 
12467
        
 
12468
# check transactions-7 success:         1
 
12469
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12470
COMMIT WORK;
 
12471
SET @@session.sql_mode = 'traditional';
 
12472
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12473
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12474
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12475
'', '', 'was inserted' FROM t0_template
 
12476
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12477
ERROR 22012: Division by 0
 
12478
COMMIT;
 
12479
        
 
12480
# check transactions-8 success:         1
 
12481
# INFO: Storage engine used for t1 seems to be able to revert
 
12482
#       changes made by the failing statement.
 
12483
SET @@session.sql_mode = '';
 
12484
SET AUTOCOMMIT= 1;
 
12485
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12486
COMMIT WORK;
 
12487
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12488
        
 
12489
# check special-1 success:      1
 
12490
UPDATE t1 SET f_charbig = '';
 
12491
        
 
12492
# check special-2 success:      1
 
12493
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12494
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12495
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12496
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12497
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12498
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12499
'just inserted' FROM t0_template
 
12500
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12501
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12502
BEGIN
 
12503
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12504
f_charbig = 'updated by trigger'
 
12505
      WHERE f_int1 = new.f_int1;
 
12506
END|
 
12507
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12508
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12509
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12510
        
 
12511
# check trigger-1 success:      1
 
12512
DROP TRIGGER trg_1;
 
12513
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12514
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12515
f_charbig = 'just inserted'
 
12516
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12517
DELETE FROM t0_aux
 
12518
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12519
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12520
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12521
'just inserted' FROM t0_template
 
12522
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12523
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12524
BEGIN
 
12525
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12526
f_charbig = 'updated by trigger'
 
12527
      WHERE f_int1 = new.f_int1;
 
12528
END|
 
12529
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12530
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12531
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12532
        
 
12533
# check trigger-2 success:      1
 
12534
DROP TRIGGER trg_1;
 
12535
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12536
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12537
f_charbig = 'just inserted'
 
12538
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12539
DELETE FROM t0_aux
 
12540
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12541
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12542
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12543
'just inserted' FROM t0_template
 
12544
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12545
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12546
BEGIN
 
12547
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12548
f_charbig = 'updated by trigger'
 
12549
      WHERE f_int1 = new.f_int1;
 
12550
END|
 
12551
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12552
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12553
        
 
12554
# check trigger-3 success:      1
 
12555
DROP TRIGGER trg_1;
 
12556
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12557
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12558
f_charbig = 'just inserted'
 
12559
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12560
DELETE FROM t0_aux
 
12561
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12562
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12563
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12564
'just inserted' FROM t0_template
 
12565
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12566
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12567
BEGIN
 
12568
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12569
f_charbig = 'updated by trigger'
 
12570
      WHERE f_int1 = - old.f_int1;
 
12571
END|
 
12572
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12573
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12574
        
 
12575
# check trigger-4 success:      1
 
12576
DROP TRIGGER trg_1;
 
12577
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12578
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12579
f_charbig = 'just inserted'
 
12580
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12581
DELETE FROM t0_aux
 
12582
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12583
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12584
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12585
'just inserted' FROM t0_template
 
12586
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12587
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12588
BEGIN
 
12589
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12590
f_charbig = 'updated by trigger'
 
12591
      WHERE f_int1 = new.f_int1;
 
12592
END|
 
12593
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12594
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12595
        
 
12596
# check trigger-5 success:      1
 
12597
DROP TRIGGER trg_1;
 
12598
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12599
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12600
f_charbig = 'just inserted'
 
12601
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12602
DELETE FROM t0_aux
 
12603
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12604
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12605
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12606
'just inserted' FROM t0_template
 
12607
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12608
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12609
BEGIN
 
12610
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12611
f_charbig = 'updated by trigger'
 
12612
      WHERE f_int1 = - old.f_int1;
 
12613
END|
 
12614
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12615
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12616
        
 
12617
# check trigger-6 success:      1
 
12618
DROP TRIGGER trg_1;
 
12619
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12620
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12621
f_charbig = 'just inserted'
 
12622
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12623
DELETE FROM t0_aux
 
12624
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12625
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12626
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12627
'just inserted' FROM t0_template
 
12628
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12629
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12630
BEGIN
 
12631
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12632
f_charbig = 'updated by trigger'
 
12633
      WHERE f_int1 = - old.f_int1;
 
12634
END|
 
12635
DELETE FROM t0_aux
 
12636
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12637
        
 
12638
# check trigger-7 success:      1
 
12639
DROP TRIGGER trg_1;
 
12640
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12641
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12642
f_charbig = 'just inserted'
 
12643
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12644
DELETE FROM t0_aux
 
12645
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12646
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12647
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12648
'just inserted' FROM t0_template
 
12649
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12650
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12651
BEGIN
 
12652
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12653
f_charbig = 'updated by trigger'
 
12654
      WHERE f_int1 = - old.f_int1;
 
12655
END|
 
12656
DELETE FROM t0_aux
 
12657
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12658
        
 
12659
# check trigger-8 success:      1
 
12660
DROP TRIGGER trg_1;
 
12661
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12662
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12663
f_charbig = 'just inserted'
 
12664
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12665
DELETE FROM t0_aux
 
12666
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12667
DELETE FROM t1
 
12668
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12669
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12670
BEGIN
 
12671
SET new.f_int1 = old.f_int1 + @max_row,
 
12672
new.f_int2 = old.f_int2 - @max_row,
 
12673
new.f_charbig = '####updated per update trigger####';
 
12674
END|
 
12675
UPDATE t1
 
12676
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12677
f_charbig = '####updated per update statement itself####';
 
12678
        
 
12679
# check trigger-9 success:      1
 
12680
DROP TRIGGER trg_2;
 
12681
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12682
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12683
f_charbig = CONCAT('===',f_char1,'===');
 
12684
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12685
BEGIN
 
12686
SET new.f_int1 = new.f_int1 + @max_row,
 
12687
new.f_int2 = new.f_int2 - @max_row,
 
12688
new.f_charbig = '####updated per update trigger####';
 
12689
END|
 
12690
UPDATE t1
 
12691
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12692
f_charbig = '####updated per update statement itself####';
 
12693
        
 
12694
# check trigger-10 success:     1
 
12695
DROP TRIGGER trg_2;
 
12696
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12697
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12698
f_charbig = CONCAT('===',f_char1,'===');
 
12699
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12700
BEGIN
 
12701
SET new.f_int1 = @my_max1 + @counter,
 
12702
new.f_int2 = @my_min2 - @counter,
 
12703
new.f_charbig = '####updated per insert trigger####';
 
12704
SET @counter = @counter + 1;
 
12705
END|
 
12706
SET @counter = 1;
 
12707
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12708
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12709
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12710
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12711
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12712
ORDER BY f_int1;
 
12713
DROP TRIGGER trg_3;
 
12714
        
 
12715
# check trigger-11 success:     1
 
12716
DELETE FROM t1
 
12717
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12718
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12719
AND f_charbig = '####updated per insert trigger####';
 
12720
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12721
BEGIN
 
12722
SET new.f_int1 = @my_max1 + @counter,
 
12723
new.f_int2 = @my_min2 - @counter,
 
12724
new.f_charbig = '####updated per insert trigger####';
 
12725
SET @counter = @counter + 1;
 
12726
END|
 
12727
SET @counter = 1;
 
12728
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12729
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
12730
SELECT CAST(f_int1 AS CHAR),
 
12731
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12732
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12733
ORDER BY f_int1;
 
12734
DROP TRIGGER trg_3;
 
12735
        
 
12736
# check trigger-12 success:     1
 
12737
DELETE FROM t1
 
12738
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12739
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12740
AND f_charbig = '####updated per insert trigger####';
 
12741
ANALYZE  TABLE t1;
 
12742
Table   Op      Msg_type        Msg_text
 
12743
test.t1 analyze status  OK
 
12744
CHECK    TABLE t1 EXTENDED;
 
12745
Table   Op      Msg_type        Msg_text
 
12746
test.t1 check   status  OK
 
12747
CHECKSUM TABLE t1 EXTENDED;
 
12748
Table   Checksum
 
12749
test.t1 <some_value>
 
12750
OPTIMIZE TABLE t1;
 
12751
Table   Op      Msg_type        Msg_text
 
12752
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
12753
test.t1 optimize        status  OK
 
12754
# check layout success:    1
 
12755
REPAIR   TABLE t1 EXTENDED;
 
12756
Table   Op      Msg_type        Msg_text
 
12757
test.t1 repair  note    The storage engine for the table doesn't support repair
 
12758
# check layout success:    1
 
12759
TRUNCATE t1;
 
12760
        
 
12761
# check TRUNCATE success:       1
 
12762
# check layout success:    1
 
12763
# End usability test (inc/partition_check.inc)
 
12764
DROP TABLE t1;
 
12765
CREATE TABLE t1 (
 
12766
f_int1 INTEGER,
 
12767
f_int2 INTEGER,
 
12768
f_char1 CHAR(20),
 
12769
f_char2 CHAR(20),
 
12770
f_charbig VARCHAR(1000)
 
12771
, PRIMARY KEY(f_int1,f_int2)
 
12772
)
 
12773
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
12774
(PARTITION parta VALUES LESS THAN (0),
 
12775
PARTITION partb VALUES LESS THAN (5),
 
12776
PARTITION partc VALUES LESS THAN (10),
 
12777
PARTITION partd VALUES LESS THAN (2147483646));
 
12778
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12779
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12780
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
12781
ALTER TABLE t1 DROP PRIMARY KEY;
 
12782
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12783
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12784
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12785
# Start usability test (inc/partition_check.inc)
 
12786
create_command
 
12787
SHOW CREATE TABLE t1;
 
12788
Table   Create Table
 
12789
t1      CREATE TABLE `t1` (
 
12790
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
12791
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
12792
  `f_char1` char(20) DEFAULT NULL,
 
12793
  `f_char2` char(20) DEFAULT NULL,
 
12794
  `f_charbig` varchar(1000) DEFAULT NULL
 
12795
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
12796
/*!50100 PARTITION BY RANGE (f_int1)
 
12797
SUBPARTITION BY HASH (f_int2)
 
12798
SUBPARTITIONS 2
 
12799
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
12800
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
12801
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
12802
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
12803
 
 
12804
# check prerequisites-1 success:    1
 
12805
# check COUNT(*) success:    1
 
12806
# check MIN/MAX(f_int1) success:    1
 
12807
# check MIN/MAX(f_int2) success:    1
 
12808
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12809
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12810
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
12811
WHERE f_int1 IN (2,3);
 
12812
# check prerequisites-3 success:    1
 
12813
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12814
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
12815
# check read via f_int1 success: 1
 
12816
# check read via f_int2 success: 1
 
12817
        
 
12818
# check multiple-1 success:     1
 
12819
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
12820
        
 
12821
# check multiple-2 success:     1
 
12822
INSERT INTO t1 SELECT * FROM t0_template
 
12823
WHERE MOD(f_int1,3) = 0;
 
12824
        
 
12825
# check multiple-3 success:     1
 
12826
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
12827
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
12828
AND @max_row_div2 + @max_row_div4;
 
12829
        
 
12830
# check multiple-4 success:     1
 
12831
DELETE FROM t1
 
12832
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
12833
AND @max_row_div2 + @max_row_div4 + @max_row;
 
12834
        
 
12835
# check multiple-5 success:     1
 
12836
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
12837
INSERT INTO t1
 
12838
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12839
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12840
f_charbig = '#SINGLE#';
 
12841
        
 
12842
# check single-1 success:       1
 
12843
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
12844
INSERT INTO t1
 
12845
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12846
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12847
f_charbig = '#SINGLE#';
 
12848
        
 
12849
# check single-2 success:       1
 
12850
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
12851
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
12852
UPDATE t1 SET f_int1 = @cur_value2
 
12853
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
12854
        
 
12855
# check single-3 success:       1
 
12856
SET @cur_value1= -1;
 
12857
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
12858
UPDATE t1 SET f_int1 = @cur_value1
 
12859
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
12860
        
 
12861
# check single-4 success:       1
 
12862
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
12863
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
12864
        
 
12865
# check single-5 success:       1
 
12866
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
12867
        
 
12868
# check single-6 success:       1
 
12869
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
12870
ERROR HY000: Table has no partition for value 2147483647
 
12871
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
12872
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
12873
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
12874
f_charbig = '#NULL#';
 
12875
INSERT INTO t1
 
12876
SET f_int1 = NULL , f_int2 = -@max_row,
 
12877
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
12878
f_charbig = '#NULL#';
 
12879
ERROR 23000: Column 'f_int1' cannot be null
 
12880
# check null success:    1
 
12881
DELETE FROM t1
 
12882
WHERE f_int1 = 0 AND f_int2 = 0
 
12883
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
12884
AND f_charbig = '#NULL#';
 
12885
SET AUTOCOMMIT= 0;
 
12886
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12887
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12888
FROM t0_template source_tab
 
12889
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12890
        
 
12891
# check transactions-1 success:         1
 
12892
COMMIT WORK;
 
12893
        
 
12894
# check transactions-2 success:         1
 
12895
ROLLBACK WORK;
 
12896
        
 
12897
# check transactions-3 success:         1
 
12898
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12899
COMMIT WORK;
 
12900
ROLLBACK WORK;
 
12901
        
 
12902
# check transactions-4 success:         1
 
12903
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12904
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12905
FROM t0_template source_tab
 
12906
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12907
        
 
12908
# check transactions-5 success:         1
 
12909
ROLLBACK WORK;
 
12910
        
 
12911
# check transactions-6 success:         1
 
12912
# INFO: Storage engine used for t1 seems to be transactional.
 
12913
COMMIT;
 
12914
        
 
12915
# check transactions-7 success:         1
 
12916
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12917
COMMIT WORK;
 
12918
SET @@session.sql_mode = 'traditional';
 
12919
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12920
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12921
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12922
'', '', 'was inserted' FROM t0_template
 
12923
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12924
ERROR 22012: Division by 0
 
12925
COMMIT;
 
12926
        
 
12927
# check transactions-8 success:         1
 
12928
# INFO: Storage engine used for t1 seems to be able to revert
 
12929
#       changes made by the failing statement.
 
12930
SET @@session.sql_mode = '';
 
12931
SET AUTOCOMMIT= 1;
 
12932
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12933
COMMIT WORK;
 
12934
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12935
        
 
12936
# check special-1 success:      1
 
12937
UPDATE t1 SET f_charbig = '';
 
12938
        
 
12939
# check special-2 success:      1
 
12940
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12941
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12942
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12943
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12944
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12945
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12946
'just inserted' FROM t0_template
 
12947
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12948
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12949
BEGIN
 
12950
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12951
f_charbig = 'updated by trigger'
 
12952
      WHERE f_int1 = new.f_int1;
 
12953
END|
 
12954
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12955
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12956
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12957
        
 
12958
# check trigger-1 success:      1
 
12959
DROP TRIGGER trg_1;
 
12960
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12961
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12962
f_charbig = 'just inserted'
 
12963
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12964
DELETE FROM t0_aux
 
12965
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12966
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12967
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12968
'just inserted' FROM t0_template
 
12969
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12970
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12971
BEGIN
 
12972
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12973
f_charbig = 'updated by trigger'
 
12974
      WHERE f_int1 = new.f_int1;
 
12975
END|
 
12976
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12977
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12978
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12979
        
 
12980
# check trigger-2 success:      1
 
12981
DROP TRIGGER trg_1;
 
12982
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12983
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12984
f_charbig = 'just inserted'
 
12985
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12986
DELETE FROM t0_aux
 
12987
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12988
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12989
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12990
'just inserted' FROM t0_template
 
12991
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12992
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12993
BEGIN
 
12994
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12995
f_charbig = 'updated by trigger'
 
12996
      WHERE f_int1 = new.f_int1;
 
12997
END|
 
12998
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12999
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13000
        
 
13001
# check trigger-3 success:      1
 
13002
DROP TRIGGER trg_1;
 
13003
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13004
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13005
f_charbig = 'just inserted'
 
13006
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13007
DELETE FROM t0_aux
 
13008
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13009
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13010
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13011
'just inserted' FROM t0_template
 
13012
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13013
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13014
BEGIN
 
13015
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13016
f_charbig = 'updated by trigger'
 
13017
      WHERE f_int1 = - old.f_int1;
 
13018
END|
 
13019
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13020
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13021
        
 
13022
# check trigger-4 success:      1
 
13023
DROP TRIGGER trg_1;
 
13024
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13025
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13026
f_charbig = 'just inserted'
 
13027
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13028
DELETE FROM t0_aux
 
13029
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13030
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13031
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13032
'just inserted' FROM t0_template
 
13033
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13034
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13035
BEGIN
 
13036
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13037
f_charbig = 'updated by trigger'
 
13038
      WHERE f_int1 = new.f_int1;
 
13039
END|
 
13040
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13041
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13042
        
 
13043
# check trigger-5 success:      1
 
13044
DROP TRIGGER trg_1;
 
13045
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13046
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13047
f_charbig = 'just inserted'
 
13048
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13049
DELETE FROM t0_aux
 
13050
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13051
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13052
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13053
'just inserted' FROM t0_template
 
13054
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13055
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13056
BEGIN
 
13057
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13058
f_charbig = 'updated by trigger'
 
13059
      WHERE f_int1 = - old.f_int1;
 
13060
END|
 
13061
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13062
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13063
        
 
13064
# check trigger-6 success:      1
 
13065
DROP TRIGGER trg_1;
 
13066
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13067
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13068
f_charbig = 'just inserted'
 
13069
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13070
DELETE FROM t0_aux
 
13071
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13072
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13073
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13074
'just inserted' FROM t0_template
 
13075
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13076
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13077
BEGIN
 
13078
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13079
f_charbig = 'updated by trigger'
 
13080
      WHERE f_int1 = - old.f_int1;
 
13081
END|
 
13082
DELETE FROM t0_aux
 
13083
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13084
        
 
13085
# check trigger-7 success:      1
 
13086
DROP TRIGGER trg_1;
 
13087
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13088
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13089
f_charbig = 'just inserted'
 
13090
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13091
DELETE FROM t0_aux
 
13092
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13093
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13094
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13095
'just inserted' FROM t0_template
 
13096
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13097
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13098
BEGIN
 
13099
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13100
f_charbig = 'updated by trigger'
 
13101
      WHERE f_int1 = - old.f_int1;
 
13102
END|
 
13103
DELETE FROM t0_aux
 
13104
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13105
        
 
13106
# check trigger-8 success:      1
 
13107
DROP TRIGGER trg_1;
 
13108
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13109
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13110
f_charbig = 'just inserted'
 
13111
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13112
DELETE FROM t0_aux
 
13113
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13114
DELETE FROM t1
 
13115
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13116
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13117
BEGIN
 
13118
SET new.f_int1 = old.f_int1 + @max_row,
 
13119
new.f_int2 = old.f_int2 - @max_row,
 
13120
new.f_charbig = '####updated per update trigger####';
 
13121
END|
 
13122
UPDATE t1
 
13123
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13124
f_charbig = '####updated per update statement itself####';
 
13125
        
 
13126
# check trigger-9 success:      1
 
13127
DROP TRIGGER trg_2;
 
13128
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13129
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13130
f_charbig = CONCAT('===',f_char1,'===');
 
13131
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13132
BEGIN
 
13133
SET new.f_int1 = new.f_int1 + @max_row,
 
13134
new.f_int2 = new.f_int2 - @max_row,
 
13135
new.f_charbig = '####updated per update trigger####';
 
13136
END|
 
13137
UPDATE t1
 
13138
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13139
f_charbig = '####updated per update statement itself####';
 
13140
        
 
13141
# check trigger-10 success:     1
 
13142
DROP TRIGGER trg_2;
 
13143
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13144
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13145
f_charbig = CONCAT('===',f_char1,'===');
 
13146
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13147
BEGIN
 
13148
SET new.f_int1 = @my_max1 + @counter,
 
13149
new.f_int2 = @my_min2 - @counter,
 
13150
new.f_charbig = '####updated per insert trigger####';
 
13151
SET @counter = @counter + 1;
 
13152
END|
 
13153
SET @counter = 1;
 
13154
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13155
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13156
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13157
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13158
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13159
ORDER BY f_int1;
 
13160
DROP TRIGGER trg_3;
 
13161
        
 
13162
# check trigger-11 success:     1
 
13163
DELETE FROM t1
 
13164
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13165
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13166
AND f_charbig = '####updated per insert trigger####';
 
13167
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13168
BEGIN
 
13169
SET new.f_int1 = @my_max1 + @counter,
 
13170
new.f_int2 = @my_min2 - @counter,
 
13171
new.f_charbig = '####updated per insert trigger####';
 
13172
SET @counter = @counter + 1;
 
13173
END|
 
13174
SET @counter = 1;
 
13175
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13176
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
13177
SELECT CAST(f_int1 AS CHAR),
 
13178
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13179
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13180
ORDER BY f_int1;
 
13181
DROP TRIGGER trg_3;
 
13182
        
 
13183
# check trigger-12 success:     1
 
13184
DELETE FROM t1
 
13185
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13186
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13187
AND f_charbig = '####updated per insert trigger####';
 
13188
ANALYZE  TABLE t1;
 
13189
Table   Op      Msg_type        Msg_text
 
13190
test.t1 analyze status  OK
 
13191
CHECK    TABLE t1 EXTENDED;
 
13192
Table   Op      Msg_type        Msg_text
 
13193
test.t1 check   status  OK
 
13194
CHECKSUM TABLE t1 EXTENDED;
 
13195
Table   Checksum
 
13196
test.t1 <some_value>
 
13197
OPTIMIZE TABLE t1;
 
13198
Table   Op      Msg_type        Msg_text
 
13199
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
13200
test.t1 optimize        status  OK
 
13201
# check layout success:    1
 
13202
REPAIR   TABLE t1 EXTENDED;
 
13203
Table   Op      Msg_type        Msg_text
 
13204
test.t1 repair  note    The storage engine for the table doesn't support repair
 
13205
# check layout success:    1
 
13206
TRUNCATE t1;
 
13207
        
 
13208
# check TRUNCATE success:       1
 
13209
# check layout success:    1
 
13210
# End usability test (inc/partition_check.inc)
 
13211
DROP TABLE t1;
 
13212
CREATE TABLE t1 (
 
13213
f_int1 INTEGER,
 
13214
f_int2 INTEGER,
 
13215
f_char1 CHAR(20),
 
13216
f_char2 CHAR(20),
 
13217
f_charbig VARCHAR(1000)
 
13218
, PRIMARY KEY(f_int1,f_int2)
 
13219
)
 
13220
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
13221
(PARTITION part1 VALUES LESS THAN (0)
 
13222
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
13223
PARTITION part2 VALUES LESS THAN (5)
 
13224
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
13225
PARTITION part3 VALUES LESS THAN (10)
 
13226
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
13227
PARTITION part4 VALUES LESS THAN (2147483646)
 
13228
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
13229
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13230
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13231
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
13232
ALTER TABLE t1 DROP PRIMARY KEY;
 
13233
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13234
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13235
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13236
# Start usability test (inc/partition_check.inc)
 
13237
create_command
 
13238
SHOW CREATE TABLE t1;
 
13239
Table   Create Table
 
13240
t1      CREATE TABLE `t1` (
 
13241
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
13242
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
13243
  `f_char1` char(20) DEFAULT NULL,
 
13244
  `f_char2` char(20) DEFAULT NULL,
 
13245
  `f_charbig` varchar(1000) DEFAULT NULL
 
13246
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
13247
/*!50100 PARTITION BY RANGE (f_int1)
 
13248
SUBPARTITION BY KEY (f_int2)
 
13249
(PARTITION part1 VALUES LESS THAN (0)
 
13250
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
13251
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
13252
 PARTITION part2 VALUES LESS THAN (5)
 
13253
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
13254
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
13255
 PARTITION part3 VALUES LESS THAN (10)
 
13256
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
13257
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
13258
 PARTITION part4 VALUES LESS THAN (2147483646)
 
13259
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
13260
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
13261
 
 
13262
# check prerequisites-1 success:    1
 
13263
# check COUNT(*) success:    1
 
13264
# check MIN/MAX(f_int1) success:    1
 
13265
# check MIN/MAX(f_int2) success:    1
 
13266
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13267
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13268
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
13269
WHERE f_int1 IN (2,3);
 
13270
# check prerequisites-3 success:    1
 
13271
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13272
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
13273
# check read via f_int1 success: 1
 
13274
# check read via f_int2 success: 1
 
13275
        
 
13276
# check multiple-1 success:     1
 
13277
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
13278
        
 
13279
# check multiple-2 success:     1
 
13280
INSERT INTO t1 SELECT * FROM t0_template
 
13281
WHERE MOD(f_int1,3) = 0;
 
13282
        
 
13283
# check multiple-3 success:     1
 
13284
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
13285
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
13286
AND @max_row_div2 + @max_row_div4;
 
13287
        
 
13288
# check multiple-4 success:     1
 
13289
DELETE FROM t1
 
13290
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
13291
AND @max_row_div2 + @max_row_div4 + @max_row;
 
13292
        
 
13293
# check multiple-5 success:     1
 
13294
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
13295
INSERT INTO t1
 
13296
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13297
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13298
f_charbig = '#SINGLE#';
 
13299
        
 
13300
# check single-1 success:       1
 
13301
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
13302
INSERT INTO t1
 
13303
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13304
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13305
f_charbig = '#SINGLE#';
 
13306
        
 
13307
# check single-2 success:       1
 
13308
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
13309
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
13310
UPDATE t1 SET f_int1 = @cur_value2
 
13311
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
13312
        
 
13313
# check single-3 success:       1
 
13314
SET @cur_value1= -1;
 
13315
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
13316
UPDATE t1 SET f_int1 = @cur_value1
 
13317
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
13318
        
 
13319
# check single-4 success:       1
 
13320
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
13321
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
13322
        
 
13323
# check single-5 success:       1
 
13324
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
13325
        
 
13326
# check single-6 success:       1
 
13327
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
13328
ERROR HY000: Table has no partition for value 2147483647
 
13329
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
13330
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
13331
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
13332
f_charbig = '#NULL#';
 
13333
INSERT INTO t1
 
13334
SET f_int1 = NULL , f_int2 = -@max_row,
 
13335
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
13336
f_charbig = '#NULL#';
 
13337
ERROR 23000: Column 'f_int1' cannot be null
 
13338
# check null success:    1
 
13339
DELETE FROM t1
 
13340
WHERE f_int1 = 0 AND f_int2 = 0
 
13341
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
13342
AND f_charbig = '#NULL#';
 
13343
SET AUTOCOMMIT= 0;
 
13344
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13345
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13346
FROM t0_template source_tab
 
13347
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13348
        
 
13349
# check transactions-1 success:         1
 
13350
COMMIT WORK;
 
13351
        
 
13352
# check transactions-2 success:         1
 
13353
ROLLBACK WORK;
 
13354
        
 
13355
# check transactions-3 success:         1
 
13356
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13357
COMMIT WORK;
 
13358
ROLLBACK WORK;
 
13359
        
 
13360
# check transactions-4 success:         1
 
13361
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13362
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13363
FROM t0_template source_tab
 
13364
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13365
        
 
13366
# check transactions-5 success:         1
 
13367
ROLLBACK WORK;
 
13368
        
 
13369
# check transactions-6 success:         1
 
13370
# INFO: Storage engine used for t1 seems to be transactional.
 
13371
COMMIT;
 
13372
        
 
13373
# check transactions-7 success:         1
 
13374
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13375
COMMIT WORK;
 
13376
SET @@session.sql_mode = 'traditional';
 
13377
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
13378
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13379
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
13380
'', '', 'was inserted' FROM t0_template
 
13381
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13382
ERROR 22012: Division by 0
 
13383
COMMIT;
 
13384
        
 
13385
# check transactions-8 success:         1
 
13386
# INFO: Storage engine used for t1 seems to be able to revert
 
13387
#       changes made by the failing statement.
 
13388
SET @@session.sql_mode = '';
 
13389
SET AUTOCOMMIT= 1;
 
13390
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13391
COMMIT WORK;
 
13392
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
13393
        
 
13394
# check special-1 success:      1
 
13395
UPDATE t1 SET f_charbig = '';
 
13396
        
 
13397
# check special-2 success:      1
 
13398
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
13399
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13400
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
13401
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13402
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13403
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13404
'just inserted' FROM t0_template
 
13405
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13406
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
13407
BEGIN
 
13408
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13409
f_charbig = 'updated by trigger'
 
13410
      WHERE f_int1 = new.f_int1;
 
13411
END|
 
13412
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13413
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13414
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13415
        
 
13416
# check trigger-1 success:      1
 
13417
DROP TRIGGER trg_1;
 
13418
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13419
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13420
f_charbig = 'just inserted'
 
13421
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13422
DELETE FROM t0_aux
 
13423
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13424
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13425
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13426
'just inserted' FROM t0_template
 
13427
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13428
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
13429
BEGIN
 
13430
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13431
f_charbig = 'updated by trigger'
 
13432
      WHERE f_int1 = new.f_int1;
 
13433
END|
 
13434
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13435
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13436
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13437
        
 
13438
# check trigger-2 success:      1
 
13439
DROP TRIGGER trg_1;
 
13440
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13441
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13442
f_charbig = 'just inserted'
 
13443
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13444
DELETE FROM t0_aux
 
13445
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13446
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13447
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13448
'just inserted' FROM t0_template
 
13449
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13450
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13451
BEGIN
 
13452
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13453
f_charbig = 'updated by trigger'
 
13454
      WHERE f_int1 = new.f_int1;
 
13455
END|
 
13456
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13457
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13458
        
 
13459
# check trigger-3 success:      1
 
13460
DROP TRIGGER trg_1;
 
13461
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13462
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13463
f_charbig = 'just inserted'
 
13464
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13465
DELETE FROM t0_aux
 
13466
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13467
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13468
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13469
'just inserted' FROM t0_template
 
13470
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13471
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13472
BEGIN
 
13473
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13474
f_charbig = 'updated by trigger'
 
13475
      WHERE f_int1 = - old.f_int1;
 
13476
END|
 
13477
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13478
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13479
        
 
13480
# check trigger-4 success:      1
 
13481
DROP TRIGGER trg_1;
 
13482
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13483
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13484
f_charbig = 'just inserted'
 
13485
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13486
DELETE FROM t0_aux
 
13487
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13488
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13489
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13490
'just inserted' FROM t0_template
 
13491
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13492
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13493
BEGIN
 
13494
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13495
f_charbig = 'updated by trigger'
 
13496
      WHERE f_int1 = new.f_int1;
 
13497
END|
 
13498
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13499
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13500
        
 
13501
# check trigger-5 success:      1
 
13502
DROP TRIGGER trg_1;
 
13503
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13504
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13505
f_charbig = 'just inserted'
 
13506
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13507
DELETE FROM t0_aux
 
13508
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13509
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13510
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13511
'just inserted' FROM t0_template
 
13512
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13513
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13514
BEGIN
 
13515
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13516
f_charbig = 'updated by trigger'
 
13517
      WHERE f_int1 = - old.f_int1;
 
13518
END|
 
13519
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13520
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13521
        
 
13522
# check trigger-6 success:      1
 
13523
DROP TRIGGER trg_1;
 
13524
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13525
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13526
f_charbig = 'just inserted'
 
13527
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13528
DELETE FROM t0_aux
 
13529
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13530
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13531
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13532
'just inserted' FROM t0_template
 
13533
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13534
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13535
BEGIN
 
13536
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13537
f_charbig = 'updated by trigger'
 
13538
      WHERE f_int1 = - old.f_int1;
 
13539
END|
 
13540
DELETE FROM t0_aux
 
13541
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13542
        
 
13543
# check trigger-7 success:      1
 
13544
DROP TRIGGER trg_1;
 
13545
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13546
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13547
f_charbig = 'just inserted'
 
13548
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13549
DELETE FROM t0_aux
 
13550
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13551
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13552
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13553
'just inserted' FROM t0_template
 
13554
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13555
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13556
BEGIN
 
13557
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13558
f_charbig = 'updated by trigger'
 
13559
      WHERE f_int1 = - old.f_int1;
 
13560
END|
 
13561
DELETE FROM t0_aux
 
13562
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13563
        
 
13564
# check trigger-8 success:      1
 
13565
DROP TRIGGER trg_1;
 
13566
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13567
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13568
f_charbig = 'just inserted'
 
13569
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13570
DELETE FROM t0_aux
 
13571
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13572
DELETE FROM t1
 
13573
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13574
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13575
BEGIN
 
13576
SET new.f_int1 = old.f_int1 + @max_row,
 
13577
new.f_int2 = old.f_int2 - @max_row,
 
13578
new.f_charbig = '####updated per update trigger####';
 
13579
END|
 
13580
UPDATE t1
 
13581
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13582
f_charbig = '####updated per update statement itself####';
 
13583
        
 
13584
# check trigger-9 success:      1
 
13585
DROP TRIGGER trg_2;
 
13586
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13587
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13588
f_charbig = CONCAT('===',f_char1,'===');
 
13589
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13590
BEGIN
 
13591
SET new.f_int1 = new.f_int1 + @max_row,
 
13592
new.f_int2 = new.f_int2 - @max_row,
 
13593
new.f_charbig = '####updated per update trigger####';
 
13594
END|
 
13595
UPDATE t1
 
13596
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13597
f_charbig = '####updated per update statement itself####';
 
13598
        
 
13599
# check trigger-10 success:     1
 
13600
DROP TRIGGER trg_2;
 
13601
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13602
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13603
f_charbig = CONCAT('===',f_char1,'===');
 
13604
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13605
BEGIN
 
13606
SET new.f_int1 = @my_max1 + @counter,
 
13607
new.f_int2 = @my_min2 - @counter,
 
13608
new.f_charbig = '####updated per insert trigger####';
 
13609
SET @counter = @counter + 1;
 
13610
END|
 
13611
SET @counter = 1;
 
13612
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13613
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13614
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13615
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13616
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13617
ORDER BY f_int1;
 
13618
DROP TRIGGER trg_3;
 
13619
        
 
13620
# check trigger-11 success:     1
 
13621
DELETE FROM t1
 
13622
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13623
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13624
AND f_charbig = '####updated per insert trigger####';
 
13625
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13626
BEGIN
 
13627
SET new.f_int1 = @my_max1 + @counter,
 
13628
new.f_int2 = @my_min2 - @counter,
 
13629
new.f_charbig = '####updated per insert trigger####';
 
13630
SET @counter = @counter + 1;
 
13631
END|
 
13632
SET @counter = 1;
 
13633
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13634
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
13635
SELECT CAST(f_int1 AS CHAR),
 
13636
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13637
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13638
ORDER BY f_int1;
 
13639
DROP TRIGGER trg_3;
 
13640
        
 
13641
# check trigger-12 success:     1
 
13642
DELETE FROM t1
 
13643
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13644
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13645
AND f_charbig = '####updated per insert trigger####';
 
13646
ANALYZE  TABLE t1;
 
13647
Table   Op      Msg_type        Msg_text
 
13648
test.t1 analyze status  OK
 
13649
CHECK    TABLE t1 EXTENDED;
 
13650
Table   Op      Msg_type        Msg_text
 
13651
test.t1 check   status  OK
 
13652
CHECKSUM TABLE t1 EXTENDED;
 
13653
Table   Checksum
 
13654
test.t1 <some_value>
 
13655
OPTIMIZE TABLE t1;
 
13656
Table   Op      Msg_type        Msg_text
 
13657
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
13658
test.t1 optimize        status  OK
 
13659
# check layout success:    1
 
13660
REPAIR   TABLE t1 EXTENDED;
 
13661
Table   Op      Msg_type        Msg_text
 
13662
test.t1 repair  note    The storage engine for the table doesn't support repair
 
13663
# check layout success:    1
 
13664
TRUNCATE t1;
 
13665
        
 
13666
# check TRUNCATE success:       1
 
13667
# check layout success:    1
 
13668
# End usability test (inc/partition_check.inc)
 
13669
DROP TABLE t1;
 
13670
CREATE TABLE t1 (
 
13671
f_int1 INTEGER,
 
13672
f_int2 INTEGER,
 
13673
f_char1 CHAR(20),
 
13674
f_char2 CHAR(20),
 
13675
f_charbig VARCHAR(1000)
 
13676
, PRIMARY KEY(f_int1,f_int2)
 
13677
)
 
13678
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
13679
(PARTITION part1 VALUES IN (0)
 
13680
(SUBPARTITION sp11, SUBPARTITION sp12),
 
13681
PARTITION part2 VALUES IN (1)
 
13682
(SUBPARTITION sp21, SUBPARTITION sp22),
 
13683
PARTITION part3 VALUES IN (2)
 
13684
(SUBPARTITION sp31, SUBPARTITION sp32),
 
13685
PARTITION part4 VALUES IN (NULL)
 
13686
(SUBPARTITION sp41, SUBPARTITION sp42));
 
13687
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13688
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13689
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
13690
ALTER TABLE t1 DROP PRIMARY KEY;
 
13691
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13692
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13693
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13694
# Start usability test (inc/partition_check.inc)
 
13695
create_command
 
13696
SHOW CREATE TABLE t1;
 
13697
Table   Create Table
 
13698
t1      CREATE TABLE `t1` (
 
13699
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
13700
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
13701
  `f_char1` char(20) DEFAULT NULL,
 
13702
  `f_char2` char(20) DEFAULT NULL,
 
13703
  `f_charbig` varchar(1000) DEFAULT NULL
 
13704
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
13705
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
13706
SUBPARTITION BY HASH (f_int2 + 1)
 
13707
(PARTITION part1 VALUES IN (0)
 
13708
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
13709
  SUBPARTITION sp12 ENGINE = InnoDB),
 
13710
 PARTITION part2 VALUES IN (1)
 
13711
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
13712
  SUBPARTITION sp22 ENGINE = InnoDB),
 
13713
 PARTITION part3 VALUES IN (2)
 
13714
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
13715
  SUBPARTITION sp32 ENGINE = InnoDB),
 
13716
 PARTITION part4 VALUES IN (NULL)
 
13717
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
13718
  SUBPARTITION sp42 ENGINE = InnoDB)) */
 
13719
 
 
13720
# check prerequisites-1 success:    1
 
13721
# check COUNT(*) success:    1
 
13722
# check MIN/MAX(f_int1) success:    1
 
13723
# check MIN/MAX(f_int2) success:    1
 
13724
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13725
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13726
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
13727
WHERE f_int1 IN (2,3);
 
13728
# check prerequisites-3 success:    1
 
13729
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13730
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
13731
# check read via f_int1 success: 1
 
13732
# check read via f_int2 success: 1
 
13733
        
 
13734
# check multiple-1 success:     1
 
13735
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
13736
        
 
13737
# check multiple-2 success:     1
 
13738
INSERT INTO t1 SELECT * FROM t0_template
 
13739
WHERE MOD(f_int1,3) = 0;
 
13740
        
 
13741
# check multiple-3 success:     1
 
13742
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
13743
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
13744
AND @max_row_div2 + @max_row_div4;
 
13745
        
 
13746
# check multiple-4 success:     1
 
13747
DELETE FROM t1
 
13748
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
13749
AND @max_row_div2 + @max_row_div4 + @max_row;
 
13750
        
 
13751
# check multiple-5 success:     1
 
13752
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
13753
INSERT INTO t1
 
13754
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13755
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13756
f_charbig = '#SINGLE#';
 
13757
        
 
13758
# check single-1 success:       1
 
13759
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
13760
INSERT INTO t1
 
13761
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13762
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13763
f_charbig = '#SINGLE#';
 
13764
        
 
13765
# check single-2 success:       1
 
13766
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
13767
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
13768
UPDATE t1 SET f_int1 = @cur_value2
 
13769
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
13770
        
 
13771
# check single-3 success:       1
 
13772
SET @cur_value1= -1;
 
13773
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
13774
UPDATE t1 SET f_int1 = @cur_value1
 
13775
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
13776
        
 
13777
# check single-4 success:       1
 
13778
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
13779
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
13780
        
 
13781
# check single-5 success:       1
 
13782
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
13783
        
 
13784
# check single-6 success:       1
 
13785
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
13786
        
 
13787
# check single-7 success:       1
 
13788
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
13789
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
13790
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
13791
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
13792
f_charbig = '#NULL#';
 
13793
INSERT INTO t1
 
13794
SET f_int1 = NULL , f_int2 = -@max_row,
 
13795
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
13796
f_charbig = '#NULL#';
 
13797
ERROR 23000: Column 'f_int1' cannot be null
 
13798
# check null success:    1
 
13799
DELETE FROM t1
 
13800
WHERE f_int1 = 0 AND f_int2 = 0
 
13801
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
13802
AND f_charbig = '#NULL#';
 
13803
SET AUTOCOMMIT= 0;
 
13804
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13805
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13806
FROM t0_template source_tab
 
13807
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13808
        
 
13809
# check transactions-1 success:         1
 
13810
COMMIT WORK;
 
13811
        
 
13812
# check transactions-2 success:         1
 
13813
ROLLBACK WORK;
 
13814
        
 
13815
# check transactions-3 success:         1
 
13816
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13817
COMMIT WORK;
 
13818
ROLLBACK WORK;
 
13819
        
 
13820
# check transactions-4 success:         1
 
13821
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13822
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13823
FROM t0_template source_tab
 
13824
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13825
        
 
13826
# check transactions-5 success:         1
 
13827
ROLLBACK WORK;
 
13828
        
 
13829
# check transactions-6 success:         1
 
13830
# INFO: Storage engine used for t1 seems to be transactional.
 
13831
COMMIT;
 
13832
        
 
13833
# check transactions-7 success:         1
 
13834
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13835
COMMIT WORK;
 
13836
SET @@session.sql_mode = 'traditional';
 
13837
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
13838
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13839
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
13840
'', '', 'was inserted' FROM t0_template
 
13841
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13842
ERROR 22012: Division by 0
 
13843
COMMIT;
 
13844
        
 
13845
# check transactions-8 success:         1
 
13846
# INFO: Storage engine used for t1 seems to be able to revert
 
13847
#       changes made by the failing statement.
 
13848
SET @@session.sql_mode = '';
 
13849
SET AUTOCOMMIT= 1;
 
13850
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13851
COMMIT WORK;
 
13852
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
13853
        
 
13854
# check special-1 success:      1
 
13855
UPDATE t1 SET f_charbig = '';
 
13856
        
 
13857
# check special-2 success:      1
 
13858
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
13859
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13860
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
13861
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13862
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13863
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13864
'just inserted' FROM t0_template
 
13865
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13866
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
13867
BEGIN
 
13868
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13869
f_charbig = 'updated by trigger'
 
13870
      WHERE f_int1 = new.f_int1;
 
13871
END|
 
13872
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13873
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13874
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13875
        
 
13876
# check trigger-1 success:      1
 
13877
DROP TRIGGER trg_1;
 
13878
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13879
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13880
f_charbig = 'just inserted'
 
13881
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13882
DELETE FROM t0_aux
 
13883
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13884
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13885
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13886
'just inserted' FROM t0_template
 
13887
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13888
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
13889
BEGIN
 
13890
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13891
f_charbig = 'updated by trigger'
 
13892
      WHERE f_int1 = new.f_int1;
 
13893
END|
 
13894
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13895
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13896
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13897
        
 
13898
# check trigger-2 success:      1
 
13899
DROP TRIGGER trg_1;
 
13900
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13901
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13902
f_charbig = 'just inserted'
 
13903
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13904
DELETE FROM t0_aux
 
13905
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13906
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13907
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13908
'just inserted' FROM t0_template
 
13909
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13910
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13911
BEGIN
 
13912
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13913
f_charbig = 'updated by trigger'
 
13914
      WHERE f_int1 = new.f_int1;
 
13915
END|
 
13916
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13917
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13918
        
 
13919
# check trigger-3 success:      1
 
13920
DROP TRIGGER trg_1;
 
13921
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13922
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13923
f_charbig = 'just inserted'
 
13924
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13925
DELETE FROM t0_aux
 
13926
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13927
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13928
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13929
'just inserted' FROM t0_template
 
13930
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13931
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13932
BEGIN
 
13933
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13934
f_charbig = 'updated by trigger'
 
13935
      WHERE f_int1 = - old.f_int1;
 
13936
END|
 
13937
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13938
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13939
        
 
13940
# check trigger-4 success:      1
 
13941
DROP TRIGGER trg_1;
 
13942
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13943
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13944
f_charbig = 'just inserted'
 
13945
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13946
DELETE FROM t0_aux
 
13947
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13948
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13949
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13950
'just inserted' FROM t0_template
 
13951
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13952
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13953
BEGIN
 
13954
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13955
f_charbig = 'updated by trigger'
 
13956
      WHERE f_int1 = new.f_int1;
 
13957
END|
 
13958
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13959
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13960
        
 
13961
# check trigger-5 success:      1
 
13962
DROP TRIGGER trg_1;
 
13963
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13964
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13965
f_charbig = 'just inserted'
 
13966
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13967
DELETE FROM t0_aux
 
13968
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13969
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13970
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13971
'just inserted' FROM t0_template
 
13972
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13973
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13974
BEGIN
 
13975
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13976
f_charbig = 'updated by trigger'
 
13977
      WHERE f_int1 = - old.f_int1;
 
13978
END|
 
13979
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13980
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13981
        
 
13982
# check trigger-6 success:      1
 
13983
DROP TRIGGER trg_1;
 
13984
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13985
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13986
f_charbig = 'just inserted'
 
13987
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13988
DELETE FROM t0_aux
 
13989
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13990
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13991
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13992
'just inserted' FROM t0_template
 
13993
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13994
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13995
BEGIN
 
13996
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13997
f_charbig = 'updated by trigger'
 
13998
      WHERE f_int1 = - old.f_int1;
 
13999
END|
 
14000
DELETE FROM t0_aux
 
14001
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14002
        
 
14003
# check trigger-7 success:      1
 
14004
DROP TRIGGER trg_1;
 
14005
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14006
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14007
f_charbig = 'just inserted'
 
14008
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14009
DELETE FROM t0_aux
 
14010
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14011
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14012
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14013
'just inserted' FROM t0_template
 
14014
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14015
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
14016
BEGIN
 
14017
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14018
f_charbig = 'updated by trigger'
 
14019
      WHERE f_int1 = - old.f_int1;
 
14020
END|
 
14021
DELETE FROM t0_aux
 
14022
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14023
        
 
14024
# check trigger-8 success:      1
 
14025
DROP TRIGGER trg_1;
 
14026
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14027
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14028
f_charbig = 'just inserted'
 
14029
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14030
DELETE FROM t0_aux
 
14031
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14032
DELETE FROM t1
 
14033
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14034
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14035
BEGIN
 
14036
SET new.f_int1 = old.f_int1 + @max_row,
 
14037
new.f_int2 = old.f_int2 - @max_row,
 
14038
new.f_charbig = '####updated per update trigger####';
 
14039
END|
 
14040
UPDATE t1
 
14041
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14042
f_charbig = '####updated per update statement itself####';
 
14043
        
 
14044
# check trigger-9 success:      1
 
14045
DROP TRIGGER trg_2;
 
14046
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14047
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14048
f_charbig = CONCAT('===',f_char1,'===');
 
14049
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14050
BEGIN
 
14051
SET new.f_int1 = new.f_int1 + @max_row,
 
14052
new.f_int2 = new.f_int2 - @max_row,
 
14053
new.f_charbig = '####updated per update trigger####';
 
14054
END|
 
14055
UPDATE t1
 
14056
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14057
f_charbig = '####updated per update statement itself####';
 
14058
        
 
14059
# check trigger-10 success:     1
 
14060
DROP TRIGGER trg_2;
 
14061
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14062
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14063
f_charbig = CONCAT('===',f_char1,'===');
 
14064
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14065
BEGIN
 
14066
SET new.f_int1 = @my_max1 + @counter,
 
14067
new.f_int2 = @my_min2 - @counter,
 
14068
new.f_charbig = '####updated per insert trigger####';
 
14069
SET @counter = @counter + 1;
 
14070
END|
 
14071
SET @counter = 1;
 
14072
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14073
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14074
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14075
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14076
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14077
ORDER BY f_int1;
 
14078
DROP TRIGGER trg_3;
 
14079
        
 
14080
# check trigger-11 success:     1
 
14081
DELETE FROM t1
 
14082
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14083
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14084
AND f_charbig = '####updated per insert trigger####';
 
14085
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14086
BEGIN
 
14087
SET new.f_int1 = @my_max1 + @counter,
 
14088
new.f_int2 = @my_min2 - @counter,
 
14089
new.f_charbig = '####updated per insert trigger####';
 
14090
SET @counter = @counter + 1;
 
14091
END|
 
14092
SET @counter = 1;
 
14093
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14094
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14095
SELECT CAST(f_int1 AS CHAR),
 
14096
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14097
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14098
ORDER BY f_int1;
 
14099
DROP TRIGGER trg_3;
 
14100
        
 
14101
# check trigger-12 success:     1
 
14102
DELETE FROM t1
 
14103
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14104
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14105
AND f_charbig = '####updated per insert trigger####';
 
14106
ANALYZE  TABLE t1;
 
14107
Table   Op      Msg_type        Msg_text
 
14108
test.t1 analyze status  OK
 
14109
CHECK    TABLE t1 EXTENDED;
 
14110
Table   Op      Msg_type        Msg_text
 
14111
test.t1 check   status  OK
 
14112
CHECKSUM TABLE t1 EXTENDED;
 
14113
Table   Checksum
 
14114
test.t1 <some_value>
 
14115
OPTIMIZE TABLE t1;
 
14116
Table   Op      Msg_type        Msg_text
 
14117
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
14118
test.t1 optimize        status  OK
 
14119
# check layout success:    1
 
14120
REPAIR   TABLE t1 EXTENDED;
 
14121
Table   Op      Msg_type        Msg_text
 
14122
test.t1 repair  note    The storage engine for the table doesn't support repair
 
14123
# check layout success:    1
 
14124
TRUNCATE t1;
 
14125
        
 
14126
# check TRUNCATE success:       1
 
14127
# check layout success:    1
 
14128
# End usability test (inc/partition_check.inc)
 
14129
DROP TABLE t1;
 
14130
CREATE TABLE t1 (
 
14131
f_int1 INTEGER,
 
14132
f_int2 INTEGER,
 
14133
f_char1 CHAR(20),
 
14134
f_char2 CHAR(20),
 
14135
f_charbig VARCHAR(1000)
 
14136
, PRIMARY KEY(f_int1,f_int2)
 
14137
)
 
14138
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
14139
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
14140
(PARTITION part1 VALUES IN (0),
 
14141
 PARTITION part2 VALUES IN (1),
 
14142
 PARTITION part3 VALUES IN (NULL));
 
14143
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14144
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14145
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
14146
ALTER TABLE t1 DROP PRIMARY KEY;
 
14147
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14148
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14149
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14150
# Start usability test (inc/partition_check.inc)
 
14151
create_command
 
14152
SHOW CREATE TABLE t1;
 
14153
Table   Create Table
 
14154
t1      CREATE TABLE `t1` (
 
14155
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
14156
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
14157
  `f_char1` char(20) DEFAULT NULL,
 
14158
  `f_char2` char(20) DEFAULT NULL,
 
14159
  `f_charbig` varchar(1000) DEFAULT NULL
 
14160
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
14161
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
14162
SUBPARTITION BY KEY (f_int2)
 
14163
SUBPARTITIONS 3
 
14164
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
14165
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
14166
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
14167
 
 
14168
# check prerequisites-1 success:    1
 
14169
# check COUNT(*) success:    1
 
14170
# check MIN/MAX(f_int1) success:    1
 
14171
# check MIN/MAX(f_int2) success:    1
 
14172
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14173
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14174
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
14175
WHERE f_int1 IN (2,3);
 
14176
# check prerequisites-3 success:    1
 
14177
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14178
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
14179
# check read via f_int1 success: 1
 
14180
# check read via f_int2 success: 1
 
14181
        
 
14182
# check multiple-1 success:     1
 
14183
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
14184
        
 
14185
# check multiple-2 success:     1
 
14186
INSERT INTO t1 SELECT * FROM t0_template
 
14187
WHERE MOD(f_int1,3) = 0;
 
14188
        
 
14189
# check multiple-3 success:     1
 
14190
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
14191
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
14192
AND @max_row_div2 + @max_row_div4;
 
14193
        
 
14194
# check multiple-4 success:     1
 
14195
DELETE FROM t1
 
14196
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
14197
AND @max_row_div2 + @max_row_div4 + @max_row;
 
14198
        
 
14199
# check multiple-5 success:     1
 
14200
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
14201
INSERT INTO t1
 
14202
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14203
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14204
f_charbig = '#SINGLE#';
 
14205
        
 
14206
# check single-1 success:       1
 
14207
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
14208
INSERT INTO t1
 
14209
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14210
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14211
f_charbig = '#SINGLE#';
 
14212
        
 
14213
# check single-2 success:       1
 
14214
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
14215
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
14216
UPDATE t1 SET f_int1 = @cur_value2
 
14217
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
14218
        
 
14219
# check single-3 success:       1
 
14220
SET @cur_value1= -1;
 
14221
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
14222
UPDATE t1 SET f_int1 = @cur_value1
 
14223
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
14224
        
 
14225
# check single-4 success:       1
 
14226
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
14227
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
14228
        
 
14229
# check single-5 success:       1
 
14230
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
14231
        
 
14232
# check single-6 success:       1
 
14233
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
14234
        
 
14235
# check single-7 success:       1
 
14236
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
14237
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
14238
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
14239
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
14240
f_charbig = '#NULL#';
 
14241
INSERT INTO t1
 
14242
SET f_int1 = NULL , f_int2 = -@max_row,
 
14243
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
14244
f_charbig = '#NULL#';
 
14245
ERROR 23000: Column 'f_int1' cannot be null
 
14246
# check null success:    1
 
14247
DELETE FROM t1
 
14248
WHERE f_int1 = 0 AND f_int2 = 0
 
14249
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
14250
AND f_charbig = '#NULL#';
 
14251
SET AUTOCOMMIT= 0;
 
14252
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14253
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14254
FROM t0_template source_tab
 
14255
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14256
        
 
14257
# check transactions-1 success:         1
 
14258
COMMIT WORK;
 
14259
        
 
14260
# check transactions-2 success:         1
 
14261
ROLLBACK WORK;
 
14262
        
 
14263
# check transactions-3 success:         1
 
14264
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14265
COMMIT WORK;
 
14266
ROLLBACK WORK;
 
14267
        
 
14268
# check transactions-4 success:         1
 
14269
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14270
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14271
FROM t0_template source_tab
 
14272
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14273
        
 
14274
# check transactions-5 success:         1
 
14275
ROLLBACK WORK;
 
14276
        
 
14277
# check transactions-6 success:         1
 
14278
# INFO: Storage engine used for t1 seems to be transactional.
 
14279
COMMIT;
 
14280
        
 
14281
# check transactions-7 success:         1
 
14282
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14283
COMMIT WORK;
 
14284
SET @@session.sql_mode = 'traditional';
 
14285
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
14286
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14287
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
14288
'', '', 'was inserted' FROM t0_template
 
14289
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14290
ERROR 22012: Division by 0
 
14291
COMMIT;
 
14292
        
 
14293
# check transactions-8 success:         1
 
14294
# INFO: Storage engine used for t1 seems to be able to revert
 
14295
#       changes made by the failing statement.
 
14296
SET @@session.sql_mode = '';
 
14297
SET AUTOCOMMIT= 1;
 
14298
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14299
COMMIT WORK;
 
14300
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
14301
        
 
14302
# check special-1 success:      1
 
14303
UPDATE t1 SET f_charbig = '';
 
14304
        
 
14305
# check special-2 success:      1
 
14306
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
14307
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14308
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
14309
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14310
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14311
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14312
'just inserted' FROM t0_template
 
14313
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14314
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
14315
BEGIN
 
14316
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14317
f_charbig = 'updated by trigger'
 
14318
      WHERE f_int1 = new.f_int1;
 
14319
END|
 
14320
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14321
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14322
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14323
        
 
14324
# check trigger-1 success:      1
 
14325
DROP TRIGGER trg_1;
 
14326
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14327
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14328
f_charbig = 'just inserted'
 
14329
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14330
DELETE FROM t0_aux
 
14331
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14332
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14333
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14334
'just inserted' FROM t0_template
 
14335
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14336
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
14337
BEGIN
 
14338
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14339
f_charbig = 'updated by trigger'
 
14340
      WHERE f_int1 = new.f_int1;
 
14341
END|
 
14342
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14343
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14344
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14345
        
 
14346
# check trigger-2 success:      1
 
14347
DROP TRIGGER trg_1;
 
14348
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14349
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14350
f_charbig = 'just inserted'
 
14351
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14352
DELETE FROM t0_aux
 
14353
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14354
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14355
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14356
'just inserted' FROM t0_template
 
14357
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14358
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14359
BEGIN
 
14360
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14361
f_charbig = 'updated by trigger'
 
14362
      WHERE f_int1 = new.f_int1;
 
14363
END|
 
14364
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14365
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14366
        
 
14367
# check trigger-3 success:      1
 
14368
DROP TRIGGER trg_1;
 
14369
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14370
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14371
f_charbig = 'just inserted'
 
14372
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14373
DELETE FROM t0_aux
 
14374
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14375
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14376
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14377
'just inserted' FROM t0_template
 
14378
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14379
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14380
BEGIN
 
14381
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14382
f_charbig = 'updated by trigger'
 
14383
      WHERE f_int1 = - old.f_int1;
 
14384
END|
 
14385
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14386
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14387
        
 
14388
# check trigger-4 success:      1
 
14389
DROP TRIGGER trg_1;
 
14390
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14391
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14392
f_charbig = 'just inserted'
 
14393
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14394
DELETE FROM t0_aux
 
14395
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14396
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14397
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14398
'just inserted' FROM t0_template
 
14399
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14400
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14401
BEGIN
 
14402
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14403
f_charbig = 'updated by trigger'
 
14404
      WHERE f_int1 = new.f_int1;
 
14405
END|
 
14406
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14407
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14408
        
 
14409
# check trigger-5 success:      1
 
14410
DROP TRIGGER trg_1;
 
14411
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14412
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14413
f_charbig = 'just inserted'
 
14414
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14415
DELETE FROM t0_aux
 
14416
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14417
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14418
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14419
'just inserted' FROM t0_template
 
14420
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14421
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14422
BEGIN
 
14423
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14424
f_charbig = 'updated by trigger'
 
14425
      WHERE f_int1 = - old.f_int1;
 
14426
END|
 
14427
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14428
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14429
        
 
14430
# check trigger-6 success:      1
 
14431
DROP TRIGGER trg_1;
 
14432
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14433
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14434
f_charbig = 'just inserted'
 
14435
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14436
DELETE FROM t0_aux
 
14437
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14438
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14439
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14440
'just inserted' FROM t0_template
 
14441
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14442
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
14443
BEGIN
 
14444
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14445
f_charbig = 'updated by trigger'
 
14446
      WHERE f_int1 = - old.f_int1;
 
14447
END|
 
14448
DELETE FROM t0_aux
 
14449
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14450
        
 
14451
# check trigger-7 success:      1
 
14452
DROP TRIGGER trg_1;
 
14453
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14454
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14455
f_charbig = 'just inserted'
 
14456
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14457
DELETE FROM t0_aux
 
14458
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14459
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14460
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14461
'just inserted' FROM t0_template
 
14462
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14463
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
14464
BEGIN
 
14465
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14466
f_charbig = 'updated by trigger'
 
14467
      WHERE f_int1 = - old.f_int1;
 
14468
END|
 
14469
DELETE FROM t0_aux
 
14470
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14471
        
 
14472
# check trigger-8 success:      1
 
14473
DROP TRIGGER trg_1;
 
14474
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14475
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14476
f_charbig = 'just inserted'
 
14477
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14478
DELETE FROM t0_aux
 
14479
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14480
DELETE FROM t1
 
14481
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14482
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14483
BEGIN
 
14484
SET new.f_int1 = old.f_int1 + @max_row,
 
14485
new.f_int2 = old.f_int2 - @max_row,
 
14486
new.f_charbig = '####updated per update trigger####';
 
14487
END|
 
14488
UPDATE t1
 
14489
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14490
f_charbig = '####updated per update statement itself####';
 
14491
        
 
14492
# check trigger-9 success:      1
 
14493
DROP TRIGGER trg_2;
 
14494
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14495
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14496
f_charbig = CONCAT('===',f_char1,'===');
 
14497
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14498
BEGIN
 
14499
SET new.f_int1 = new.f_int1 + @max_row,
 
14500
new.f_int2 = new.f_int2 - @max_row,
 
14501
new.f_charbig = '####updated per update trigger####';
 
14502
END|
 
14503
UPDATE t1
 
14504
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14505
f_charbig = '####updated per update statement itself####';
 
14506
        
 
14507
# check trigger-10 success:     1
 
14508
DROP TRIGGER trg_2;
 
14509
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14510
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14511
f_charbig = CONCAT('===',f_char1,'===');
 
14512
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14513
BEGIN
 
14514
SET new.f_int1 = @my_max1 + @counter,
 
14515
new.f_int2 = @my_min2 - @counter,
 
14516
new.f_charbig = '####updated per insert trigger####';
 
14517
SET @counter = @counter + 1;
 
14518
END|
 
14519
SET @counter = 1;
 
14520
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14521
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14522
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14523
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14524
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14525
ORDER BY f_int1;
 
14526
DROP TRIGGER trg_3;
 
14527
        
 
14528
# check trigger-11 success:     1
 
14529
DELETE FROM t1
 
14530
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14531
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14532
AND f_charbig = '####updated per insert trigger####';
 
14533
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14534
BEGIN
 
14535
SET new.f_int1 = @my_max1 + @counter,
 
14536
new.f_int2 = @my_min2 - @counter,
 
14537
new.f_charbig = '####updated per insert trigger####';
 
14538
SET @counter = @counter + 1;
 
14539
END|
 
14540
SET @counter = 1;
 
14541
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14542
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14543
SELECT CAST(f_int1 AS CHAR),
 
14544
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14545
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14546
ORDER BY f_int1;
 
14547
DROP TRIGGER trg_3;
 
14548
        
 
14549
# check trigger-12 success:     1
 
14550
DELETE FROM t1
 
14551
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14552
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14553
AND f_charbig = '####updated per insert trigger####';
 
14554
ANALYZE  TABLE t1;
 
14555
Table   Op      Msg_type        Msg_text
 
14556
test.t1 analyze status  OK
 
14557
CHECK    TABLE t1 EXTENDED;
 
14558
Table   Op      Msg_type        Msg_text
 
14559
test.t1 check   status  OK
 
14560
CHECKSUM TABLE t1 EXTENDED;
 
14561
Table   Checksum
 
14562
test.t1 <some_value>
 
14563
OPTIMIZE TABLE t1;
 
14564
Table   Op      Msg_type        Msg_text
 
14565
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
14566
test.t1 optimize        status  OK
 
14567
# check layout success:    1
 
14568
REPAIR   TABLE t1 EXTENDED;
 
14569
Table   Op      Msg_type        Msg_text
 
14570
test.t1 repair  note    The storage engine for the table doesn't support repair
 
14571
# check layout success:    1
 
14572
TRUNCATE t1;
 
14573
        
 
14574
# check TRUNCATE success:       1
 
14575
# check layout success:    1
 
14576
# End usability test (inc/partition_check.inc)
 
14577
DROP TABLE t1;
 
14578
DROP TABLE IF EXISTS t1;
 
14579
CREATE TABLE t1 (
 
14580
f_int1 INTEGER,
 
14581
f_int2 INTEGER,
 
14582
f_char1 CHAR(20),
 
14583
f_char2 CHAR(20),
 
14584
f_charbig VARCHAR(1000)
 
14585
, PRIMARY KEY(f_int2,f_int1)
 
14586
)
 
14587
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
14588
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14589
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14590
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
14591
ALTER TABLE t1 DROP PRIMARY KEY;
 
14592
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14593
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14594
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14595
# Start usability test (inc/partition_check.inc)
 
14596
create_command
 
14597
SHOW CREATE TABLE t1;
 
14598
Table   Create Table
 
14599
t1      CREATE TABLE `t1` (
 
14600
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
14601
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
14602
  `f_char1` char(20) DEFAULT NULL,
 
14603
  `f_char2` char(20) DEFAULT NULL,
 
14604
  `f_charbig` varchar(1000) DEFAULT NULL
 
14605
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
14606
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
 
14607
PARTITIONS 2 */
 
14608
 
 
14609
# check prerequisites-1 success:    1
 
14610
# check COUNT(*) success:    1
 
14611
# check MIN/MAX(f_int1) success:    1
 
14612
# check MIN/MAX(f_int2) success:    1
 
14613
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14614
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14615
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
14616
WHERE f_int1 IN (2,3);
 
14617
# check prerequisites-3 success:    1
 
14618
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14619
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
14620
# check read via f_int1 success: 1
 
14621
# check read via f_int2 success: 1
 
14622
        
 
14623
# check multiple-1 success:     1
 
14624
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
14625
        
 
14626
# check multiple-2 success:     1
 
14627
INSERT INTO t1 SELECT * FROM t0_template
 
14628
WHERE MOD(f_int1,3) = 0;
 
14629
        
 
14630
# check multiple-3 success:     1
 
14631
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
14632
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
14633
AND @max_row_div2 + @max_row_div4;
 
14634
        
 
14635
# check multiple-4 success:     1
 
14636
DELETE FROM t1
 
14637
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
14638
AND @max_row_div2 + @max_row_div4 + @max_row;
 
14639
        
 
14640
# check multiple-5 success:     1
 
14641
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
14642
INSERT INTO t1
 
14643
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14644
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14645
f_charbig = '#SINGLE#';
 
14646
        
 
14647
# check single-1 success:       1
 
14648
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
14649
INSERT INTO t1
 
14650
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14651
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14652
f_charbig = '#SINGLE#';
 
14653
        
 
14654
# check single-2 success:       1
 
14655
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
14656
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
14657
UPDATE t1 SET f_int1 = @cur_value2
 
14658
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
14659
        
 
14660
# check single-3 success:       1
 
14661
SET @cur_value1= -1;
 
14662
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
14663
UPDATE t1 SET f_int1 = @cur_value1
 
14664
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
14665
        
 
14666
# check single-4 success:       1
 
14667
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
14668
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
14669
        
 
14670
# check single-5 success:       1
 
14671
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
14672
        
 
14673
# check single-6 success:       1
 
14674
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
14675
        
 
14676
# check single-7 success:       1
 
14677
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
14678
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
14679
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
14680
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
14681
f_charbig = '#NULL#';
 
14682
INSERT INTO t1
 
14683
SET f_int1 = NULL , f_int2 = -@max_row,
 
14684
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
14685
f_charbig = '#NULL#';
 
14686
ERROR 23000: Column 'f_int1' cannot be null
 
14687
# check null success:    1
 
14688
DELETE FROM t1
 
14689
WHERE f_int1 = 0 AND f_int2 = 0
 
14690
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
14691
AND f_charbig = '#NULL#';
 
14692
SET AUTOCOMMIT= 0;
 
14693
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14694
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14695
FROM t0_template source_tab
 
14696
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14697
        
 
14698
# check transactions-1 success:         1
 
14699
COMMIT WORK;
 
14700
        
 
14701
# check transactions-2 success:         1
 
14702
ROLLBACK WORK;
 
14703
        
 
14704
# check transactions-3 success:         1
 
14705
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14706
COMMIT WORK;
 
14707
ROLLBACK WORK;
 
14708
        
 
14709
# check transactions-4 success:         1
 
14710
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14711
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14712
FROM t0_template source_tab
 
14713
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14714
        
 
14715
# check transactions-5 success:         1
 
14716
ROLLBACK WORK;
 
14717
        
 
14718
# check transactions-6 success:         1
 
14719
# INFO: Storage engine used for t1 seems to be transactional.
 
14720
COMMIT;
 
14721
        
 
14722
# check transactions-7 success:         1
 
14723
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14724
COMMIT WORK;
 
14725
SET @@session.sql_mode = 'traditional';
 
14726
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
14727
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14728
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
14729
'', '', 'was inserted' FROM t0_template
 
14730
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14731
ERROR 22012: Division by 0
 
14732
COMMIT;
 
14733
        
 
14734
# check transactions-8 success:         1
 
14735
# INFO: Storage engine used for t1 seems to be able to revert
 
14736
#       changes made by the failing statement.
 
14737
SET @@session.sql_mode = '';
 
14738
SET AUTOCOMMIT= 1;
 
14739
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14740
COMMIT WORK;
 
14741
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
14742
        
 
14743
# check special-1 success:      1
 
14744
UPDATE t1 SET f_charbig = '';
 
14745
        
 
14746
# check special-2 success:      1
 
14747
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
14748
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14749
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
14750
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14751
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14752
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14753
'just inserted' FROM t0_template
 
14754
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14755
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
14756
BEGIN
 
14757
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14758
f_charbig = 'updated by trigger'
 
14759
      WHERE f_int1 = new.f_int1;
 
14760
END|
 
14761
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14762
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14763
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14764
        
 
14765
# check trigger-1 success:      1
 
14766
DROP TRIGGER trg_1;
 
14767
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14768
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14769
f_charbig = 'just inserted'
 
14770
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14771
DELETE FROM t0_aux
 
14772
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14773
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14774
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14775
'just inserted' FROM t0_template
 
14776
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14777
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
14778
BEGIN
 
14779
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14780
f_charbig = 'updated by trigger'
 
14781
      WHERE f_int1 = new.f_int1;
 
14782
END|
 
14783
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14784
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14785
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14786
        
 
14787
# check trigger-2 success:      1
 
14788
DROP TRIGGER trg_1;
 
14789
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14790
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14791
f_charbig = 'just inserted'
 
14792
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14793
DELETE FROM t0_aux
 
14794
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14795
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14796
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14797
'just inserted' FROM t0_template
 
14798
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14799
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14800
BEGIN
 
14801
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14802
f_charbig = 'updated by trigger'
 
14803
      WHERE f_int1 = new.f_int1;
 
14804
END|
 
14805
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14806
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14807
        
 
14808
# check trigger-3 success:      1
 
14809
DROP TRIGGER trg_1;
 
14810
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14811
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14812
f_charbig = 'just inserted'
 
14813
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14814
DELETE FROM t0_aux
 
14815
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14816
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14817
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14818
'just inserted' FROM t0_template
 
14819
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14820
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14821
BEGIN
 
14822
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14823
f_charbig = 'updated by trigger'
 
14824
      WHERE f_int1 = - old.f_int1;
 
14825
END|
 
14826
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14827
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14828
        
 
14829
# check trigger-4 success:      1
 
14830
DROP TRIGGER trg_1;
 
14831
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14832
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14833
f_charbig = 'just inserted'
 
14834
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14835
DELETE FROM t0_aux
 
14836
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14837
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14838
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14839
'just inserted' FROM t0_template
 
14840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14841
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14842
BEGIN
 
14843
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14844
f_charbig = 'updated by trigger'
 
14845
      WHERE f_int1 = new.f_int1;
 
14846
END|
 
14847
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14848
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14849
        
 
14850
# check trigger-5 success:      1
 
14851
DROP TRIGGER trg_1;
 
14852
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14853
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14854
f_charbig = 'just inserted'
 
14855
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14856
DELETE FROM t0_aux
 
14857
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14858
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14859
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14860
'just inserted' FROM t0_template
 
14861
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14862
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14863
BEGIN
 
14864
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14865
f_charbig = 'updated by trigger'
 
14866
      WHERE f_int1 = - old.f_int1;
 
14867
END|
 
14868
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14869
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14870
        
 
14871
# check trigger-6 success:      1
 
14872
DROP TRIGGER trg_1;
 
14873
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14874
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14875
f_charbig = 'just inserted'
 
14876
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14877
DELETE FROM t0_aux
 
14878
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14879
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14880
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14881
'just inserted' FROM t0_template
 
14882
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14883
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
14884
BEGIN
 
14885
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14886
f_charbig = 'updated by trigger'
 
14887
      WHERE f_int1 = - old.f_int1;
 
14888
END|
 
14889
DELETE FROM t0_aux
 
14890
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14891
        
 
14892
# check trigger-7 success:      1
 
14893
DROP TRIGGER trg_1;
 
14894
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14895
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14896
f_charbig = 'just inserted'
 
14897
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14898
DELETE FROM t0_aux
 
14899
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14900
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14901
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14902
'just inserted' FROM t0_template
 
14903
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14904
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
14905
BEGIN
 
14906
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14907
f_charbig = 'updated by trigger'
 
14908
      WHERE f_int1 = - old.f_int1;
 
14909
END|
 
14910
DELETE FROM t0_aux
 
14911
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14912
        
 
14913
# check trigger-8 success:      1
 
14914
DROP TRIGGER trg_1;
 
14915
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14916
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14917
f_charbig = 'just inserted'
 
14918
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14919
DELETE FROM t0_aux
 
14920
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14921
DELETE FROM t1
 
14922
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14923
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14924
BEGIN
 
14925
SET new.f_int1 = old.f_int1 + @max_row,
 
14926
new.f_int2 = old.f_int2 - @max_row,
 
14927
new.f_charbig = '####updated per update trigger####';
 
14928
END|
 
14929
UPDATE t1
 
14930
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14931
f_charbig = '####updated per update statement itself####';
 
14932
        
 
14933
# check trigger-9 success:      1
 
14934
DROP TRIGGER trg_2;
 
14935
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14936
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14937
f_charbig = CONCAT('===',f_char1,'===');
 
14938
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14939
BEGIN
 
14940
SET new.f_int1 = new.f_int1 + @max_row,
 
14941
new.f_int2 = new.f_int2 - @max_row,
 
14942
new.f_charbig = '####updated per update trigger####';
 
14943
END|
 
14944
UPDATE t1
 
14945
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14946
f_charbig = '####updated per update statement itself####';
 
14947
        
 
14948
# check trigger-10 success:     1
 
14949
DROP TRIGGER trg_2;
 
14950
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14951
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14952
f_charbig = CONCAT('===',f_char1,'===');
 
14953
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14954
BEGIN
 
14955
SET new.f_int1 = @my_max1 + @counter,
 
14956
new.f_int2 = @my_min2 - @counter,
 
14957
new.f_charbig = '####updated per insert trigger####';
 
14958
SET @counter = @counter + 1;
 
14959
END|
 
14960
SET @counter = 1;
 
14961
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14962
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14963
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14964
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14965
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14966
ORDER BY f_int1;
 
14967
DROP TRIGGER trg_3;
 
14968
        
 
14969
# check trigger-11 success:     1
 
14970
DELETE FROM t1
 
14971
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14972
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14973
AND f_charbig = '####updated per insert trigger####';
 
14974
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14975
BEGIN
 
14976
SET new.f_int1 = @my_max1 + @counter,
 
14977
new.f_int2 = @my_min2 - @counter,
 
14978
new.f_charbig = '####updated per insert trigger####';
 
14979
SET @counter = @counter + 1;
 
14980
END|
 
14981
SET @counter = 1;
 
14982
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14983
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14984
SELECT CAST(f_int1 AS CHAR),
 
14985
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14986
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14987
ORDER BY f_int1;
 
14988
DROP TRIGGER trg_3;
 
14989
        
 
14990
# check trigger-12 success:     1
 
14991
DELETE FROM t1
 
14992
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14993
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14994
AND f_charbig = '####updated per insert trigger####';
 
14995
ANALYZE  TABLE t1;
 
14996
Table   Op      Msg_type        Msg_text
 
14997
test.t1 analyze status  OK
 
14998
CHECK    TABLE t1 EXTENDED;
 
14999
Table   Op      Msg_type        Msg_text
 
15000
test.t1 check   status  OK
 
15001
CHECKSUM TABLE t1 EXTENDED;
 
15002
Table   Checksum
 
15003
test.t1 <some_value>
 
15004
OPTIMIZE TABLE t1;
 
15005
Table   Op      Msg_type        Msg_text
 
15006
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
15007
test.t1 optimize        status  OK
 
15008
# check layout success:    1
 
15009
REPAIR   TABLE t1 EXTENDED;
 
15010
Table   Op      Msg_type        Msg_text
 
15011
test.t1 repair  note    The storage engine for the table doesn't support repair
 
15012
# check layout success:    1
 
15013
TRUNCATE t1;
 
15014
        
 
15015
# check TRUNCATE success:       1
 
15016
# check layout success:    1
 
15017
# End usability test (inc/partition_check.inc)
 
15018
DROP TABLE t1;
 
15019
CREATE TABLE t1 (
 
15020
f_int1 INTEGER,
 
15021
f_int2 INTEGER,
 
15022
f_char1 CHAR(20),
 
15023
f_char2 CHAR(20),
 
15024
f_charbig VARCHAR(1000)
 
15025
, PRIMARY KEY(f_int2,f_int1)
 
15026
)
 
15027
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
15028
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15029
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15030
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15031
ALTER TABLE t1 DROP PRIMARY KEY;
 
15032
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15033
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15034
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15035
# Start usability test (inc/partition_check.inc)
 
15036
create_command
 
15037
SHOW CREATE TABLE t1;
 
15038
Table   Create Table
 
15039
t1      CREATE TABLE `t1` (
 
15040
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
15041
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
15042
  `f_char1` char(20) DEFAULT NULL,
 
15043
  `f_char2` char(20) DEFAULT NULL,
 
15044
  `f_charbig` varchar(1000) DEFAULT NULL
 
15045
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
15046
/*!50100 PARTITION BY KEY (f_int1,f_int2)
 
15047
PARTITIONS 5 */
 
15048
 
 
15049
# check prerequisites-1 success:    1
 
15050
# check COUNT(*) success:    1
 
15051
# check MIN/MAX(f_int1) success:    1
 
15052
# check MIN/MAX(f_int2) success:    1
 
15053
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15054
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15055
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
15056
WHERE f_int1 IN (2,3);
 
15057
# check prerequisites-3 success:    1
 
15058
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15059
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
15060
# check read via f_int1 success: 1
 
15061
# check read via f_int2 success: 1
 
15062
        
 
15063
# check multiple-1 success:     1
 
15064
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
15065
        
 
15066
# check multiple-2 success:     1
 
15067
INSERT INTO t1 SELECT * FROM t0_template
 
15068
WHERE MOD(f_int1,3) = 0;
 
15069
        
 
15070
# check multiple-3 success:     1
 
15071
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
15072
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
15073
AND @max_row_div2 + @max_row_div4;
 
15074
        
 
15075
# check multiple-4 success:     1
 
15076
DELETE FROM t1
 
15077
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
15078
AND @max_row_div2 + @max_row_div4 + @max_row;
 
15079
        
 
15080
# check multiple-5 success:     1
 
15081
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
15082
INSERT INTO t1
 
15083
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15084
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15085
f_charbig = '#SINGLE#';
 
15086
        
 
15087
# check single-1 success:       1
 
15088
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
15089
INSERT INTO t1
 
15090
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15091
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15092
f_charbig = '#SINGLE#';
 
15093
        
 
15094
# check single-2 success:       1
 
15095
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
15096
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
15097
UPDATE t1 SET f_int1 = @cur_value2
 
15098
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
15099
        
 
15100
# check single-3 success:       1
 
15101
SET @cur_value1= -1;
 
15102
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
15103
UPDATE t1 SET f_int1 = @cur_value1
 
15104
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
15105
        
 
15106
# check single-4 success:       1
 
15107
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
15108
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
15109
        
 
15110
# check single-5 success:       1
 
15111
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
15112
        
 
15113
# check single-6 success:       1
 
15114
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
15115
        
 
15116
# check single-7 success:       1
 
15117
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
15118
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
15119
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
15120
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
15121
f_charbig = '#NULL#';
 
15122
INSERT INTO t1
 
15123
SET f_int1 = NULL , f_int2 = -@max_row,
 
15124
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
15125
f_charbig = '#NULL#';
 
15126
ERROR 23000: Column 'f_int1' cannot be null
 
15127
# check null success:    1
 
15128
DELETE FROM t1
 
15129
WHERE f_int1 = 0 AND f_int2 = 0
 
15130
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
15131
AND f_charbig = '#NULL#';
 
15132
SET AUTOCOMMIT= 0;
 
15133
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15134
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15135
FROM t0_template source_tab
 
15136
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15137
        
 
15138
# check transactions-1 success:         1
 
15139
COMMIT WORK;
 
15140
        
 
15141
# check transactions-2 success:         1
 
15142
ROLLBACK WORK;
 
15143
        
 
15144
# check transactions-3 success:         1
 
15145
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15146
COMMIT WORK;
 
15147
ROLLBACK WORK;
 
15148
        
 
15149
# check transactions-4 success:         1
 
15150
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15151
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15152
FROM t0_template source_tab
 
15153
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15154
        
 
15155
# check transactions-5 success:         1
 
15156
ROLLBACK WORK;
 
15157
        
 
15158
# check transactions-6 success:         1
 
15159
# INFO: Storage engine used for t1 seems to be transactional.
 
15160
COMMIT;
 
15161
        
 
15162
# check transactions-7 success:         1
 
15163
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15164
COMMIT WORK;
 
15165
SET @@session.sql_mode = 'traditional';
 
15166
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
15167
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15168
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
15169
'', '', 'was inserted' FROM t0_template
 
15170
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15171
ERROR 22012: Division by 0
 
15172
COMMIT;
 
15173
        
 
15174
# check transactions-8 success:         1
 
15175
# INFO: Storage engine used for t1 seems to be able to revert
 
15176
#       changes made by the failing statement.
 
15177
SET @@session.sql_mode = '';
 
15178
SET AUTOCOMMIT= 1;
 
15179
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15180
COMMIT WORK;
 
15181
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
15182
        
 
15183
# check special-1 success:      1
 
15184
UPDATE t1 SET f_charbig = '';
 
15185
        
 
15186
# check special-2 success:      1
 
15187
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
15188
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15189
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
15190
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15191
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15192
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15193
'just inserted' FROM t0_template
 
15194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15195
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
15196
BEGIN
 
15197
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15198
f_charbig = 'updated by trigger'
 
15199
      WHERE f_int1 = new.f_int1;
 
15200
END|
 
15201
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15202
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15203
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15204
        
 
15205
# check trigger-1 success:      1
 
15206
DROP TRIGGER trg_1;
 
15207
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15208
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15209
f_charbig = 'just inserted'
 
15210
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15211
DELETE FROM t0_aux
 
15212
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15213
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15214
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15215
'just inserted' FROM t0_template
 
15216
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15217
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
15218
BEGIN
 
15219
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15220
f_charbig = 'updated by trigger'
 
15221
      WHERE f_int1 = new.f_int1;
 
15222
END|
 
15223
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15224
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15225
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15226
        
 
15227
# check trigger-2 success:      1
 
15228
DROP TRIGGER trg_1;
 
15229
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15230
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15231
f_charbig = 'just inserted'
 
15232
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15233
DELETE FROM t0_aux
 
15234
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15235
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15236
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15237
'just inserted' FROM t0_template
 
15238
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15239
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15240
BEGIN
 
15241
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15242
f_charbig = 'updated by trigger'
 
15243
      WHERE f_int1 = new.f_int1;
 
15244
END|
 
15245
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15246
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15247
        
 
15248
# check trigger-3 success:      1
 
15249
DROP TRIGGER trg_1;
 
15250
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15251
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15252
f_charbig = 'just inserted'
 
15253
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15254
DELETE FROM t0_aux
 
15255
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15256
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15257
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15258
'just inserted' FROM t0_template
 
15259
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15260
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15261
BEGIN
 
15262
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15263
f_charbig = 'updated by trigger'
 
15264
      WHERE f_int1 = - old.f_int1;
 
15265
END|
 
15266
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15267
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15268
        
 
15269
# check trigger-4 success:      1
 
15270
DROP TRIGGER trg_1;
 
15271
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15272
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15273
f_charbig = 'just inserted'
 
15274
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15275
DELETE FROM t0_aux
 
15276
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15277
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15278
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15279
'just inserted' FROM t0_template
 
15280
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15281
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15282
BEGIN
 
15283
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15284
f_charbig = 'updated by trigger'
 
15285
      WHERE f_int1 = new.f_int1;
 
15286
END|
 
15287
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15288
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15289
        
 
15290
# check trigger-5 success:      1
 
15291
DROP TRIGGER trg_1;
 
15292
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15293
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15294
f_charbig = 'just inserted'
 
15295
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15296
DELETE FROM t0_aux
 
15297
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15298
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15299
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15300
'just inserted' FROM t0_template
 
15301
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15302
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15303
BEGIN
 
15304
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15305
f_charbig = 'updated by trigger'
 
15306
      WHERE f_int1 = - old.f_int1;
 
15307
END|
 
15308
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15309
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15310
        
 
15311
# check trigger-6 success:      1
 
15312
DROP TRIGGER trg_1;
 
15313
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15314
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15315
f_charbig = 'just inserted'
 
15316
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15317
DELETE FROM t0_aux
 
15318
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15319
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15320
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15321
'just inserted' FROM t0_template
 
15322
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15323
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
15324
BEGIN
 
15325
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15326
f_charbig = 'updated by trigger'
 
15327
      WHERE f_int1 = - old.f_int1;
 
15328
END|
 
15329
DELETE FROM t0_aux
 
15330
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15331
        
 
15332
# check trigger-7 success:      1
 
15333
DROP TRIGGER trg_1;
 
15334
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15335
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15336
f_charbig = 'just inserted'
 
15337
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15338
DELETE FROM t0_aux
 
15339
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15340
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15341
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15342
'just inserted' FROM t0_template
 
15343
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15344
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
15345
BEGIN
 
15346
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15347
f_charbig = 'updated by trigger'
 
15348
      WHERE f_int1 = - old.f_int1;
 
15349
END|
 
15350
DELETE FROM t0_aux
 
15351
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15352
        
 
15353
# check trigger-8 success:      1
 
15354
DROP TRIGGER trg_1;
 
15355
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15356
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15357
f_charbig = 'just inserted'
 
15358
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15359
DELETE FROM t0_aux
 
15360
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15361
DELETE FROM t1
 
15362
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15363
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15364
BEGIN
 
15365
SET new.f_int1 = old.f_int1 + @max_row,
 
15366
new.f_int2 = old.f_int2 - @max_row,
 
15367
new.f_charbig = '####updated per update trigger####';
 
15368
END|
 
15369
UPDATE t1
 
15370
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15371
f_charbig = '####updated per update statement itself####';
 
15372
        
 
15373
# check trigger-9 success:      1
 
15374
DROP TRIGGER trg_2;
 
15375
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15376
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15377
f_charbig = CONCAT('===',f_char1,'===');
 
15378
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15379
BEGIN
 
15380
SET new.f_int1 = new.f_int1 + @max_row,
 
15381
new.f_int2 = new.f_int2 - @max_row,
 
15382
new.f_charbig = '####updated per update trigger####';
 
15383
END|
 
15384
UPDATE t1
 
15385
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15386
f_charbig = '####updated per update statement itself####';
 
15387
        
 
15388
# check trigger-10 success:     1
 
15389
DROP TRIGGER trg_2;
 
15390
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15391
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15392
f_charbig = CONCAT('===',f_char1,'===');
 
15393
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15394
BEGIN
 
15395
SET new.f_int1 = @my_max1 + @counter,
 
15396
new.f_int2 = @my_min2 - @counter,
 
15397
new.f_charbig = '####updated per insert trigger####';
 
15398
SET @counter = @counter + 1;
 
15399
END|
 
15400
SET @counter = 1;
 
15401
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15402
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15403
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15404
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15405
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15406
ORDER BY f_int1;
 
15407
DROP TRIGGER trg_3;
 
15408
        
 
15409
# check trigger-11 success:     1
 
15410
DELETE FROM t1
 
15411
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15412
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15413
AND f_charbig = '####updated per insert trigger####';
 
15414
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15415
BEGIN
 
15416
SET new.f_int1 = @my_max1 + @counter,
 
15417
new.f_int2 = @my_min2 - @counter,
 
15418
new.f_charbig = '####updated per insert trigger####';
 
15419
SET @counter = @counter + 1;
 
15420
END|
 
15421
SET @counter = 1;
 
15422
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15423
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
15424
SELECT CAST(f_int1 AS CHAR),
 
15425
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15426
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15427
ORDER BY f_int1;
 
15428
DROP TRIGGER trg_3;
 
15429
        
 
15430
# check trigger-12 success:     1
 
15431
DELETE FROM t1
 
15432
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15433
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15434
AND f_charbig = '####updated per insert trigger####';
 
15435
ANALYZE  TABLE t1;
 
15436
Table   Op      Msg_type        Msg_text
 
15437
test.t1 analyze status  OK
 
15438
CHECK    TABLE t1 EXTENDED;
 
15439
Table   Op      Msg_type        Msg_text
 
15440
test.t1 check   status  OK
 
15441
CHECKSUM TABLE t1 EXTENDED;
 
15442
Table   Checksum
 
15443
test.t1 <some_value>
 
15444
OPTIMIZE TABLE t1;
 
15445
Table   Op      Msg_type        Msg_text
 
15446
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
15447
test.t1 optimize        status  OK
 
15448
# check layout success:    1
 
15449
REPAIR   TABLE t1 EXTENDED;
 
15450
Table   Op      Msg_type        Msg_text
 
15451
test.t1 repair  note    The storage engine for the table doesn't support repair
 
15452
# check layout success:    1
 
15453
TRUNCATE t1;
 
15454
        
 
15455
# check TRUNCATE success:       1
 
15456
# check layout success:    1
 
15457
# End usability test (inc/partition_check.inc)
 
15458
DROP TABLE t1;
 
15459
CREATE TABLE t1 (
 
15460
f_int1 INTEGER,
 
15461
f_int2 INTEGER,
 
15462
f_char1 CHAR(20),
 
15463
f_char2 CHAR(20),
 
15464
f_charbig VARCHAR(1000)
 
15465
, PRIMARY KEY(f_int2,f_int1)
 
15466
)
 
15467
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
15468
(PARTITION part_3 VALUES IN (-3),
 
15469
PARTITION part_2 VALUES IN (-2),
 
15470
PARTITION part_1 VALUES IN (-1),
 
15471
PARTITION part_N VALUES IN (NULL),
 
15472
PARTITION part0 VALUES IN (0),
 
15473
PARTITION part1 VALUES IN (1),
 
15474
PARTITION part2 VALUES IN (2),
 
15475
PARTITION part3 VALUES IN (3));
 
15476
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15477
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15478
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15479
ALTER TABLE t1 DROP PRIMARY KEY;
 
15480
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15481
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15482
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15483
# Start usability test (inc/partition_check.inc)
 
15484
create_command
 
15485
SHOW CREATE TABLE t1;
 
15486
Table   Create Table
 
15487
t1      CREATE TABLE `t1` (
 
15488
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
15489
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
15490
  `f_char1` char(20) DEFAULT NULL,
 
15491
  `f_char2` char(20) DEFAULT NULL,
 
15492
  `f_charbig` varchar(1000) DEFAULT NULL
 
15493
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
15494
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
 
15495
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
15496
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
15497
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
15498
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
15499
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
15500
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
15501
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
15502
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
15503
 
 
15504
# check prerequisites-1 success:    1
 
15505
# check COUNT(*) success:    1
 
15506
# check MIN/MAX(f_int1) success:    1
 
15507
# check MIN/MAX(f_int2) success:    1
 
15508
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15509
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15510
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
15511
WHERE f_int1 IN (2,3);
 
15512
# check prerequisites-3 success:    1
 
15513
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15514
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
15515
# check read via f_int1 success: 1
 
15516
# check read via f_int2 success: 1
 
15517
        
 
15518
# check multiple-1 success:     1
 
15519
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
15520
        
 
15521
# check multiple-2 success:     1
 
15522
INSERT INTO t1 SELECT * FROM t0_template
 
15523
WHERE MOD(f_int1,3) = 0;
 
15524
        
 
15525
# check multiple-3 success:     1
 
15526
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
15527
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
15528
AND @max_row_div2 + @max_row_div4;
 
15529
        
 
15530
# check multiple-4 success:     1
 
15531
DELETE FROM t1
 
15532
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
15533
AND @max_row_div2 + @max_row_div4 + @max_row;
 
15534
        
 
15535
# check multiple-5 success:     1
 
15536
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
15537
INSERT INTO t1
 
15538
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15539
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15540
f_charbig = '#SINGLE#';
 
15541
        
 
15542
# check single-1 success:       1
 
15543
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
15544
INSERT INTO t1
 
15545
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15546
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15547
f_charbig = '#SINGLE#';
 
15548
        
 
15549
# check single-2 success:       1
 
15550
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
15551
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
15552
UPDATE t1 SET f_int1 = @cur_value2
 
15553
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
15554
        
 
15555
# check single-3 success:       1
 
15556
SET @cur_value1= -1;
 
15557
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
15558
UPDATE t1 SET f_int1 = @cur_value1
 
15559
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
15560
        
 
15561
# check single-4 success:       1
 
15562
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
15563
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
15564
        
 
15565
# check single-5 success:       1
 
15566
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
15567
        
 
15568
# check single-6 success:       1
 
15569
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
15570
        
 
15571
# check single-7 success:       1
 
15572
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
15573
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
15574
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
15575
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
15576
f_charbig = '#NULL#';
 
15577
INSERT INTO t1
 
15578
SET f_int1 = NULL , f_int2 = -@max_row,
 
15579
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
15580
f_charbig = '#NULL#';
 
15581
ERROR 23000: Column 'f_int1' cannot be null
 
15582
# check null success:    1
 
15583
DELETE FROM t1
 
15584
WHERE f_int1 = 0 AND f_int2 = 0
 
15585
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
15586
AND f_charbig = '#NULL#';
 
15587
SET AUTOCOMMIT= 0;
 
15588
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15589
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15590
FROM t0_template source_tab
 
15591
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15592
        
 
15593
# check transactions-1 success:         1
 
15594
COMMIT WORK;
 
15595
        
 
15596
# check transactions-2 success:         1
 
15597
ROLLBACK WORK;
 
15598
        
 
15599
# check transactions-3 success:         1
 
15600
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15601
COMMIT WORK;
 
15602
ROLLBACK WORK;
 
15603
        
 
15604
# check transactions-4 success:         1
 
15605
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15606
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15607
FROM t0_template source_tab
 
15608
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15609
        
 
15610
# check transactions-5 success:         1
 
15611
ROLLBACK WORK;
 
15612
        
 
15613
# check transactions-6 success:         1
 
15614
# INFO: Storage engine used for t1 seems to be transactional.
 
15615
COMMIT;
 
15616
        
 
15617
# check transactions-7 success:         1
 
15618
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15619
COMMIT WORK;
 
15620
SET @@session.sql_mode = 'traditional';
 
15621
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
15622
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15623
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
15624
'', '', 'was inserted' FROM t0_template
 
15625
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15626
ERROR 22012: Division by 0
 
15627
COMMIT;
 
15628
        
 
15629
# check transactions-8 success:         1
 
15630
# INFO: Storage engine used for t1 seems to be able to revert
 
15631
#       changes made by the failing statement.
 
15632
SET @@session.sql_mode = '';
 
15633
SET AUTOCOMMIT= 1;
 
15634
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15635
COMMIT WORK;
 
15636
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
15637
        
 
15638
# check special-1 success:      1
 
15639
UPDATE t1 SET f_charbig = '';
 
15640
        
 
15641
# check special-2 success:      1
 
15642
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
15643
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15644
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
15645
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15646
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15647
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15648
'just inserted' FROM t0_template
 
15649
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15650
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
15651
BEGIN
 
15652
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15653
f_charbig = 'updated by trigger'
 
15654
      WHERE f_int1 = new.f_int1;
 
15655
END|
 
15656
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15657
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15658
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15659
        
 
15660
# check trigger-1 success:      1
 
15661
DROP TRIGGER trg_1;
 
15662
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15663
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15664
f_charbig = 'just inserted'
 
15665
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15666
DELETE FROM t0_aux
 
15667
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15668
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15669
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15670
'just inserted' FROM t0_template
 
15671
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15672
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
15673
BEGIN
 
15674
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15675
f_charbig = 'updated by trigger'
 
15676
      WHERE f_int1 = new.f_int1;
 
15677
END|
 
15678
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15679
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15680
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15681
        
 
15682
# check trigger-2 success:      1
 
15683
DROP TRIGGER trg_1;
 
15684
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15685
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15686
f_charbig = 'just inserted'
 
15687
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15688
DELETE FROM t0_aux
 
15689
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15690
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15691
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15692
'just inserted' FROM t0_template
 
15693
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15694
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15695
BEGIN
 
15696
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15697
f_charbig = 'updated by trigger'
 
15698
      WHERE f_int1 = new.f_int1;
 
15699
END|
 
15700
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15701
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15702
        
 
15703
# check trigger-3 success:      1
 
15704
DROP TRIGGER trg_1;
 
15705
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15706
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15707
f_charbig = 'just inserted'
 
15708
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15709
DELETE FROM t0_aux
 
15710
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15711
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15712
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15713
'just inserted' FROM t0_template
 
15714
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15715
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15716
BEGIN
 
15717
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15718
f_charbig = 'updated by trigger'
 
15719
      WHERE f_int1 = - old.f_int1;
 
15720
END|
 
15721
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15722
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15723
        
 
15724
# check trigger-4 success:      1
 
15725
DROP TRIGGER trg_1;
 
15726
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15727
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15728
f_charbig = 'just inserted'
 
15729
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15730
DELETE FROM t0_aux
 
15731
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15732
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15733
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15734
'just inserted' FROM t0_template
 
15735
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15736
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15737
BEGIN
 
15738
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15739
f_charbig = 'updated by trigger'
 
15740
      WHERE f_int1 = new.f_int1;
 
15741
END|
 
15742
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15743
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15744
        
 
15745
# check trigger-5 success:      1
 
15746
DROP TRIGGER trg_1;
 
15747
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15748
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15749
f_charbig = 'just inserted'
 
15750
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15751
DELETE FROM t0_aux
 
15752
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15753
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15754
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15755
'just inserted' FROM t0_template
 
15756
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15757
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15758
BEGIN
 
15759
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15760
f_charbig = 'updated by trigger'
 
15761
      WHERE f_int1 = - old.f_int1;
 
15762
END|
 
15763
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15764
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15765
        
 
15766
# check trigger-6 success:      1
 
15767
DROP TRIGGER trg_1;
 
15768
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15769
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15770
f_charbig = 'just inserted'
 
15771
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15772
DELETE FROM t0_aux
 
15773
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15774
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15775
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15776
'just inserted' FROM t0_template
 
15777
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15778
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
15779
BEGIN
 
15780
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15781
f_charbig = 'updated by trigger'
 
15782
      WHERE f_int1 = - old.f_int1;
 
15783
END|
 
15784
DELETE FROM t0_aux
 
15785
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15786
        
 
15787
# check trigger-7 success:      1
 
15788
DROP TRIGGER trg_1;
 
15789
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15790
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15791
f_charbig = 'just inserted'
 
15792
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15793
DELETE FROM t0_aux
 
15794
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15795
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15796
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15797
'just inserted' FROM t0_template
 
15798
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15799
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
15800
BEGIN
 
15801
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15802
f_charbig = 'updated by trigger'
 
15803
      WHERE f_int1 = - old.f_int1;
 
15804
END|
 
15805
DELETE FROM t0_aux
 
15806
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15807
        
 
15808
# check trigger-8 success:      1
 
15809
DROP TRIGGER trg_1;
 
15810
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15811
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15812
f_charbig = 'just inserted'
 
15813
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15814
DELETE FROM t0_aux
 
15815
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15816
DELETE FROM t1
 
15817
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15818
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15819
BEGIN
 
15820
SET new.f_int1 = old.f_int1 + @max_row,
 
15821
new.f_int2 = old.f_int2 - @max_row,
 
15822
new.f_charbig = '####updated per update trigger####';
 
15823
END|
 
15824
UPDATE t1
 
15825
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15826
f_charbig = '####updated per update statement itself####';
 
15827
        
 
15828
# check trigger-9 success:      1
 
15829
DROP TRIGGER trg_2;
 
15830
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15831
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15832
f_charbig = CONCAT('===',f_char1,'===');
 
15833
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15834
BEGIN
 
15835
SET new.f_int1 = new.f_int1 + @max_row,
 
15836
new.f_int2 = new.f_int2 - @max_row,
 
15837
new.f_charbig = '####updated per update trigger####';
 
15838
END|
 
15839
UPDATE t1
 
15840
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15841
f_charbig = '####updated per update statement itself####';
 
15842
        
 
15843
# check trigger-10 success:     1
 
15844
DROP TRIGGER trg_2;
 
15845
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15846
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15847
f_charbig = CONCAT('===',f_char1,'===');
 
15848
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15849
BEGIN
 
15850
SET new.f_int1 = @my_max1 + @counter,
 
15851
new.f_int2 = @my_min2 - @counter,
 
15852
new.f_charbig = '####updated per insert trigger####';
 
15853
SET @counter = @counter + 1;
 
15854
END|
 
15855
SET @counter = 1;
 
15856
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15857
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15858
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15859
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15860
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15861
ORDER BY f_int1;
 
15862
DROP TRIGGER trg_3;
 
15863
        
 
15864
# check trigger-11 success:     1
 
15865
DELETE FROM t1
 
15866
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15867
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15868
AND f_charbig = '####updated per insert trigger####';
 
15869
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15870
BEGIN
 
15871
SET new.f_int1 = @my_max1 + @counter,
 
15872
new.f_int2 = @my_min2 - @counter,
 
15873
new.f_charbig = '####updated per insert trigger####';
 
15874
SET @counter = @counter + 1;
 
15875
END|
 
15876
SET @counter = 1;
 
15877
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15878
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
15879
SELECT CAST(f_int1 AS CHAR),
 
15880
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15881
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15882
ORDER BY f_int1;
 
15883
DROP TRIGGER trg_3;
 
15884
        
 
15885
# check trigger-12 success:     1
 
15886
DELETE FROM t1
 
15887
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15888
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15889
AND f_charbig = '####updated per insert trigger####';
 
15890
ANALYZE  TABLE t1;
 
15891
Table   Op      Msg_type        Msg_text
 
15892
test.t1 analyze status  OK
 
15893
CHECK    TABLE t1 EXTENDED;
 
15894
Table   Op      Msg_type        Msg_text
 
15895
test.t1 check   status  OK
 
15896
CHECKSUM TABLE t1 EXTENDED;
 
15897
Table   Checksum
 
15898
test.t1 <some_value>
 
15899
OPTIMIZE TABLE t1;
 
15900
Table   Op      Msg_type        Msg_text
 
15901
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
15902
test.t1 optimize        status  OK
 
15903
# check layout success:    1
 
15904
REPAIR   TABLE t1 EXTENDED;
 
15905
Table   Op      Msg_type        Msg_text
 
15906
test.t1 repair  note    The storage engine for the table doesn't support repair
 
15907
# check layout success:    1
 
15908
TRUNCATE t1;
 
15909
        
 
15910
# check TRUNCATE success:       1
 
15911
# check layout success:    1
 
15912
# End usability test (inc/partition_check.inc)
 
15913
DROP TABLE t1;
 
15914
CREATE TABLE t1 (
 
15915
f_int1 INTEGER,
 
15916
f_int2 INTEGER,
 
15917
f_char1 CHAR(20),
 
15918
f_char2 CHAR(20),
 
15919
f_charbig VARCHAR(1000)
 
15920
, PRIMARY KEY(f_int2,f_int1)
 
15921
)
 
15922
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
15923
(PARTITION parta VALUES LESS THAN (0),
 
15924
PARTITION partb VALUES LESS THAN (5),
 
15925
PARTITION partc VALUES LESS THAN (10),
 
15926
PARTITION partd VALUES LESS THAN (10 + 5),
 
15927
PARTITION parte VALUES LESS THAN (20),
 
15928
PARTITION partf VALUES LESS THAN (2147483646));
 
15929
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15930
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15931
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15932
ALTER TABLE t1 DROP PRIMARY KEY;
 
15933
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15934
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15935
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15936
# Start usability test (inc/partition_check.inc)
 
15937
create_command
 
15938
SHOW CREATE TABLE t1;
 
15939
Table   Create Table
 
15940
t1      CREATE TABLE `t1` (
 
15941
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
15942
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
15943
  `f_char1` char(20) DEFAULT NULL,
 
15944
  `f_char2` char(20) DEFAULT NULL,
 
15945
  `f_charbig` varchar(1000) DEFAULT NULL
 
15946
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
15947
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
 
15948
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
15949
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
15950
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
15951
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
15952
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
15953
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
15954
 
 
15955
# check prerequisites-1 success:    1
 
15956
# check COUNT(*) success:    1
 
15957
# check MIN/MAX(f_int1) success:    1
 
15958
# check MIN/MAX(f_int2) success:    1
 
15959
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15960
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15961
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
15962
WHERE f_int1 IN (2,3);
 
15963
# check prerequisites-3 success:    1
 
15964
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15965
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
15966
# check read via f_int1 success: 1
 
15967
# check read via f_int2 success: 1
 
15968
        
 
15969
# check multiple-1 success:     1
 
15970
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
15971
        
 
15972
# check multiple-2 success:     1
 
15973
INSERT INTO t1 SELECT * FROM t0_template
 
15974
WHERE MOD(f_int1,3) = 0;
 
15975
        
 
15976
# check multiple-3 success:     1
 
15977
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
15978
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
15979
AND @max_row_div2 + @max_row_div4;
 
15980
        
 
15981
# check multiple-4 success:     1
 
15982
DELETE FROM t1
 
15983
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
15984
AND @max_row_div2 + @max_row_div4 + @max_row;
 
15985
        
 
15986
# check multiple-5 success:     1
 
15987
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
15988
INSERT INTO t1
 
15989
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15990
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15991
f_charbig = '#SINGLE#';
 
15992
        
 
15993
# check single-1 success:       1
 
15994
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
15995
INSERT INTO t1
 
15996
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15997
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15998
f_charbig = '#SINGLE#';
 
15999
        
 
16000
# check single-2 success:       1
 
16001
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
16002
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
16003
UPDATE t1 SET f_int1 = @cur_value2
 
16004
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
16005
        
 
16006
# check single-3 success:       1
 
16007
SET @cur_value1= -1;
 
16008
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
16009
UPDATE t1 SET f_int1 = @cur_value1
 
16010
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
16011
        
 
16012
# check single-4 success:       1
 
16013
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
16014
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
16015
        
 
16016
# check single-5 success:       1
 
16017
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
16018
        
 
16019
# check single-6 success:       1
 
16020
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
16021
ERROR HY000: Table has no partition for value 2147483647
 
16022
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
16023
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
16024
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
16025
f_charbig = '#NULL#';
 
16026
INSERT INTO t1
 
16027
SET f_int1 = NULL , f_int2 = -@max_row,
 
16028
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
16029
f_charbig = '#NULL#';
 
16030
ERROR 23000: Column 'f_int1' cannot be null
 
16031
# check null success:    1
 
16032
DELETE FROM t1
 
16033
WHERE f_int1 = 0 AND f_int2 = 0
 
16034
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
16035
AND f_charbig = '#NULL#';
 
16036
SET AUTOCOMMIT= 0;
 
16037
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16038
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16039
FROM t0_template source_tab
 
16040
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16041
        
 
16042
# check transactions-1 success:         1
 
16043
COMMIT WORK;
 
16044
        
 
16045
# check transactions-2 success:         1
 
16046
ROLLBACK WORK;
 
16047
        
 
16048
# check transactions-3 success:         1
 
16049
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16050
COMMIT WORK;
 
16051
ROLLBACK WORK;
 
16052
        
 
16053
# check transactions-4 success:         1
 
16054
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16055
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16056
FROM t0_template source_tab
 
16057
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16058
        
 
16059
# check transactions-5 success:         1
 
16060
ROLLBACK WORK;
 
16061
        
 
16062
# check transactions-6 success:         1
 
16063
# INFO: Storage engine used for t1 seems to be transactional.
 
16064
COMMIT;
 
16065
        
 
16066
# check transactions-7 success:         1
 
16067
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16068
COMMIT WORK;
 
16069
SET @@session.sql_mode = 'traditional';
 
16070
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
16071
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16072
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
16073
'', '', 'was inserted' FROM t0_template
 
16074
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16075
ERROR 22012: Division by 0
 
16076
COMMIT;
 
16077
        
 
16078
# check transactions-8 success:         1
 
16079
# INFO: Storage engine used for t1 seems to be able to revert
 
16080
#       changes made by the failing statement.
 
16081
SET @@session.sql_mode = '';
 
16082
SET AUTOCOMMIT= 1;
 
16083
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16084
COMMIT WORK;
 
16085
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
16086
        
 
16087
# check special-1 success:      1
 
16088
UPDATE t1 SET f_charbig = '';
 
16089
        
 
16090
# check special-2 success:      1
 
16091
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
16092
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16093
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
16094
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16095
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16096
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16097
'just inserted' FROM t0_template
 
16098
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16099
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
16100
BEGIN
 
16101
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16102
f_charbig = 'updated by trigger'
 
16103
      WHERE f_int1 = new.f_int1;
 
16104
END|
 
16105
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16106
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16107
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16108
        
 
16109
# check trigger-1 success:      1
 
16110
DROP TRIGGER trg_1;
 
16111
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16112
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16113
f_charbig = 'just inserted'
 
16114
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16115
DELETE FROM t0_aux
 
16116
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16117
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16118
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16119
'just inserted' FROM t0_template
 
16120
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16121
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
16122
BEGIN
 
16123
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16124
f_charbig = 'updated by trigger'
 
16125
      WHERE f_int1 = new.f_int1;
 
16126
END|
 
16127
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16128
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16129
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16130
        
 
16131
# check trigger-2 success:      1
 
16132
DROP TRIGGER trg_1;
 
16133
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16134
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16135
f_charbig = 'just inserted'
 
16136
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16137
DELETE FROM t0_aux
 
16138
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16139
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16140
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16141
'just inserted' FROM t0_template
 
16142
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16143
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16144
BEGIN
 
16145
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16146
f_charbig = 'updated by trigger'
 
16147
      WHERE f_int1 = new.f_int1;
 
16148
END|
 
16149
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16150
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16151
        
 
16152
# check trigger-3 success:      1
 
16153
DROP TRIGGER trg_1;
 
16154
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16155
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16156
f_charbig = 'just inserted'
 
16157
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16158
DELETE FROM t0_aux
 
16159
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16160
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16161
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16162
'just inserted' FROM t0_template
 
16163
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16164
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16165
BEGIN
 
16166
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16167
f_charbig = 'updated by trigger'
 
16168
      WHERE f_int1 = - old.f_int1;
 
16169
END|
 
16170
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16171
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16172
        
 
16173
# check trigger-4 success:      1
 
16174
DROP TRIGGER trg_1;
 
16175
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16176
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16177
f_charbig = 'just inserted'
 
16178
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16179
DELETE FROM t0_aux
 
16180
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16181
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16182
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16183
'just inserted' FROM t0_template
 
16184
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16185
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16186
BEGIN
 
16187
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16188
f_charbig = 'updated by trigger'
 
16189
      WHERE f_int1 = new.f_int1;
 
16190
END|
 
16191
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16192
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16193
        
 
16194
# check trigger-5 success:      1
 
16195
DROP TRIGGER trg_1;
 
16196
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16197
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16198
f_charbig = 'just inserted'
 
16199
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16200
DELETE FROM t0_aux
 
16201
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16202
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16203
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16204
'just inserted' FROM t0_template
 
16205
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16206
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16207
BEGIN
 
16208
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16209
f_charbig = 'updated by trigger'
 
16210
      WHERE f_int1 = - old.f_int1;
 
16211
END|
 
16212
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16213
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16214
        
 
16215
# check trigger-6 success:      1
 
16216
DROP TRIGGER trg_1;
 
16217
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16218
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16219
f_charbig = 'just inserted'
 
16220
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16221
DELETE FROM t0_aux
 
16222
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16223
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16224
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16225
'just inserted' FROM t0_template
 
16226
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16227
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
16228
BEGIN
 
16229
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16230
f_charbig = 'updated by trigger'
 
16231
      WHERE f_int1 = - old.f_int1;
 
16232
END|
 
16233
DELETE FROM t0_aux
 
16234
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16235
        
 
16236
# check trigger-7 success:      1
 
16237
DROP TRIGGER trg_1;
 
16238
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16239
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16240
f_charbig = 'just inserted'
 
16241
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16242
DELETE FROM t0_aux
 
16243
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16244
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16245
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16246
'just inserted' FROM t0_template
 
16247
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16248
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
16249
BEGIN
 
16250
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16251
f_charbig = 'updated by trigger'
 
16252
      WHERE f_int1 = - old.f_int1;
 
16253
END|
 
16254
DELETE FROM t0_aux
 
16255
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16256
        
 
16257
# check trigger-8 success:      1
 
16258
DROP TRIGGER trg_1;
 
16259
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16260
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16261
f_charbig = 'just inserted'
 
16262
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16263
DELETE FROM t0_aux
 
16264
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16265
DELETE FROM t1
 
16266
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16267
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16268
BEGIN
 
16269
SET new.f_int1 = old.f_int1 + @max_row,
 
16270
new.f_int2 = old.f_int2 - @max_row,
 
16271
new.f_charbig = '####updated per update trigger####';
 
16272
END|
 
16273
UPDATE t1
 
16274
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16275
f_charbig = '####updated per update statement itself####';
 
16276
        
 
16277
# check trigger-9 success:      1
 
16278
DROP TRIGGER trg_2;
 
16279
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16280
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16281
f_charbig = CONCAT('===',f_char1,'===');
 
16282
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16283
BEGIN
 
16284
SET new.f_int1 = new.f_int1 + @max_row,
 
16285
new.f_int2 = new.f_int2 - @max_row,
 
16286
new.f_charbig = '####updated per update trigger####';
 
16287
END|
 
16288
UPDATE t1
 
16289
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16290
f_charbig = '####updated per update statement itself####';
 
16291
        
 
16292
# check trigger-10 success:     1
 
16293
DROP TRIGGER trg_2;
 
16294
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16295
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16296
f_charbig = CONCAT('===',f_char1,'===');
 
16297
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16298
BEGIN
 
16299
SET new.f_int1 = @my_max1 + @counter,
 
16300
new.f_int2 = @my_min2 - @counter,
 
16301
new.f_charbig = '####updated per insert trigger####';
 
16302
SET @counter = @counter + 1;
 
16303
END|
 
16304
SET @counter = 1;
 
16305
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16306
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16307
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16308
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16309
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16310
ORDER BY f_int1;
 
16311
DROP TRIGGER trg_3;
 
16312
        
 
16313
# check trigger-11 success:     1
 
16314
DELETE FROM t1
 
16315
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16316
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16317
AND f_charbig = '####updated per insert trigger####';
 
16318
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16319
BEGIN
 
16320
SET new.f_int1 = @my_max1 + @counter,
 
16321
new.f_int2 = @my_min2 - @counter,
 
16322
new.f_charbig = '####updated per insert trigger####';
 
16323
SET @counter = @counter + 1;
 
16324
END|
 
16325
SET @counter = 1;
 
16326
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16327
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
16328
SELECT CAST(f_int1 AS CHAR),
 
16329
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16330
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16331
ORDER BY f_int1;
 
16332
DROP TRIGGER trg_3;
 
16333
        
 
16334
# check trigger-12 success:     1
 
16335
DELETE FROM t1
 
16336
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16337
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16338
AND f_charbig = '####updated per insert trigger####';
 
16339
ANALYZE  TABLE t1;
 
16340
Table   Op      Msg_type        Msg_text
 
16341
test.t1 analyze status  OK
 
16342
CHECK    TABLE t1 EXTENDED;
 
16343
Table   Op      Msg_type        Msg_text
 
16344
test.t1 check   status  OK
 
16345
CHECKSUM TABLE t1 EXTENDED;
 
16346
Table   Checksum
 
16347
test.t1 <some_value>
 
16348
OPTIMIZE TABLE t1;
 
16349
Table   Op      Msg_type        Msg_text
 
16350
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
16351
test.t1 optimize        status  OK
 
16352
# check layout success:    1
 
16353
REPAIR   TABLE t1 EXTENDED;
 
16354
Table   Op      Msg_type        Msg_text
 
16355
test.t1 repair  note    The storage engine for the table doesn't support repair
 
16356
# check layout success:    1
 
16357
TRUNCATE t1;
 
16358
        
 
16359
# check TRUNCATE success:       1
 
16360
# check layout success:    1
 
16361
# End usability test (inc/partition_check.inc)
 
16362
DROP TABLE t1;
 
16363
CREATE TABLE t1 (
 
16364
f_int1 INTEGER,
 
16365
f_int2 INTEGER,
 
16366
f_char1 CHAR(20),
 
16367
f_char2 CHAR(20),
 
16368
f_charbig VARCHAR(1000)
 
16369
, PRIMARY KEY(f_int2,f_int1)
 
16370
)
 
16371
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
16372
(PARTITION parta VALUES LESS THAN (0),
 
16373
PARTITION partb VALUES LESS THAN (5),
 
16374
PARTITION partc VALUES LESS THAN (10),
 
16375
PARTITION partd VALUES LESS THAN (2147483646));
 
16376
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16377
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16378
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
16379
ALTER TABLE t1 DROP PRIMARY KEY;
 
16380
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16381
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16382
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16383
# Start usability test (inc/partition_check.inc)
 
16384
create_command
 
16385
SHOW CREATE TABLE t1;
 
16386
Table   Create Table
 
16387
t1      CREATE TABLE `t1` (
 
16388
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
16389
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
16390
  `f_char1` char(20) DEFAULT NULL,
 
16391
  `f_char2` char(20) DEFAULT NULL,
 
16392
  `f_charbig` varchar(1000) DEFAULT NULL
 
16393
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
16394
/*!50100 PARTITION BY RANGE (f_int1)
 
16395
SUBPARTITION BY HASH (f_int2)
 
16396
SUBPARTITIONS 2
 
16397
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
16398
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
16399
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
16400
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
16401
 
 
16402
# check prerequisites-1 success:    1
 
16403
# check COUNT(*) success:    1
 
16404
# check MIN/MAX(f_int1) success:    1
 
16405
# check MIN/MAX(f_int2) success:    1
 
16406
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16407
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16408
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
16409
WHERE f_int1 IN (2,3);
 
16410
# check prerequisites-3 success:    1
 
16411
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16412
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
16413
# check read via f_int1 success: 1
 
16414
# check read via f_int2 success: 1
 
16415
        
 
16416
# check multiple-1 success:     1
 
16417
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
16418
        
 
16419
# check multiple-2 success:     1
 
16420
INSERT INTO t1 SELECT * FROM t0_template
 
16421
WHERE MOD(f_int1,3) = 0;
 
16422
        
 
16423
# check multiple-3 success:     1
 
16424
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
16425
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
16426
AND @max_row_div2 + @max_row_div4;
 
16427
        
 
16428
# check multiple-4 success:     1
 
16429
DELETE FROM t1
 
16430
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
16431
AND @max_row_div2 + @max_row_div4 + @max_row;
 
16432
        
 
16433
# check multiple-5 success:     1
 
16434
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
16435
INSERT INTO t1
 
16436
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16437
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16438
f_charbig = '#SINGLE#';
 
16439
        
 
16440
# check single-1 success:       1
 
16441
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
16442
INSERT INTO t1
 
16443
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16444
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16445
f_charbig = '#SINGLE#';
 
16446
        
 
16447
# check single-2 success:       1
 
16448
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
16449
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
16450
UPDATE t1 SET f_int1 = @cur_value2
 
16451
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
16452
        
 
16453
# check single-3 success:       1
 
16454
SET @cur_value1= -1;
 
16455
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
16456
UPDATE t1 SET f_int1 = @cur_value1
 
16457
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
16458
        
 
16459
# check single-4 success:       1
 
16460
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
16461
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
16462
        
 
16463
# check single-5 success:       1
 
16464
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
16465
        
 
16466
# check single-6 success:       1
 
16467
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
16468
ERROR HY000: Table has no partition for value 2147483647
 
16469
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
16470
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
16471
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
16472
f_charbig = '#NULL#';
 
16473
INSERT INTO t1
 
16474
SET f_int1 = NULL , f_int2 = -@max_row,
 
16475
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
16476
f_charbig = '#NULL#';
 
16477
ERROR 23000: Column 'f_int1' cannot be null
 
16478
# check null success:    1
 
16479
DELETE FROM t1
 
16480
WHERE f_int1 = 0 AND f_int2 = 0
 
16481
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
16482
AND f_charbig = '#NULL#';
 
16483
SET AUTOCOMMIT= 0;
 
16484
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16485
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16486
FROM t0_template source_tab
 
16487
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16488
        
 
16489
# check transactions-1 success:         1
 
16490
COMMIT WORK;
 
16491
        
 
16492
# check transactions-2 success:         1
 
16493
ROLLBACK WORK;
 
16494
        
 
16495
# check transactions-3 success:         1
 
16496
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16497
COMMIT WORK;
 
16498
ROLLBACK WORK;
 
16499
        
 
16500
# check transactions-4 success:         1
 
16501
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16502
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16503
FROM t0_template source_tab
 
16504
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16505
        
 
16506
# check transactions-5 success:         1
 
16507
ROLLBACK WORK;
 
16508
        
 
16509
# check transactions-6 success:         1
 
16510
# INFO: Storage engine used for t1 seems to be transactional.
 
16511
COMMIT;
 
16512
        
 
16513
# check transactions-7 success:         1
 
16514
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16515
COMMIT WORK;
 
16516
SET @@session.sql_mode = 'traditional';
 
16517
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
16518
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16519
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
16520
'', '', 'was inserted' FROM t0_template
 
16521
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16522
ERROR 22012: Division by 0
 
16523
COMMIT;
 
16524
        
 
16525
# check transactions-8 success:         1
 
16526
# INFO: Storage engine used for t1 seems to be able to revert
 
16527
#       changes made by the failing statement.
 
16528
SET @@session.sql_mode = '';
 
16529
SET AUTOCOMMIT= 1;
 
16530
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16531
COMMIT WORK;
 
16532
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
16533
        
 
16534
# check special-1 success:      1
 
16535
UPDATE t1 SET f_charbig = '';
 
16536
        
 
16537
# check special-2 success:      1
 
16538
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
16539
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16540
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
16541
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16542
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16543
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16544
'just inserted' FROM t0_template
 
16545
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16546
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
16547
BEGIN
 
16548
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16549
f_charbig = 'updated by trigger'
 
16550
      WHERE f_int1 = new.f_int1;
 
16551
END|
 
16552
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16553
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16554
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16555
        
 
16556
# check trigger-1 success:      1
 
16557
DROP TRIGGER trg_1;
 
16558
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16559
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16560
f_charbig = 'just inserted'
 
16561
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16562
DELETE FROM t0_aux
 
16563
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16564
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16565
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16566
'just inserted' FROM t0_template
 
16567
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16568
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
16569
BEGIN
 
16570
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16571
f_charbig = 'updated by trigger'
 
16572
      WHERE f_int1 = new.f_int1;
 
16573
END|
 
16574
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16575
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16576
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16577
        
 
16578
# check trigger-2 success:      1
 
16579
DROP TRIGGER trg_1;
 
16580
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16581
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16582
f_charbig = 'just inserted'
 
16583
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16584
DELETE FROM t0_aux
 
16585
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16586
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16587
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16588
'just inserted' FROM t0_template
 
16589
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16590
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16591
BEGIN
 
16592
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16593
f_charbig = 'updated by trigger'
 
16594
      WHERE f_int1 = new.f_int1;
 
16595
END|
 
16596
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16597
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16598
        
 
16599
# check trigger-3 success:      1
 
16600
DROP TRIGGER trg_1;
 
16601
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16602
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16603
f_charbig = 'just inserted'
 
16604
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16605
DELETE FROM t0_aux
 
16606
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16607
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16608
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16609
'just inserted' FROM t0_template
 
16610
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16611
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16612
BEGIN
 
16613
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16614
f_charbig = 'updated by trigger'
 
16615
      WHERE f_int1 = - old.f_int1;
 
16616
END|
 
16617
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16618
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16619
        
 
16620
# check trigger-4 success:      1
 
16621
DROP TRIGGER trg_1;
 
16622
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16623
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16624
f_charbig = 'just inserted'
 
16625
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16626
DELETE FROM t0_aux
 
16627
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16628
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16629
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16630
'just inserted' FROM t0_template
 
16631
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16632
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16633
BEGIN
 
16634
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16635
f_charbig = 'updated by trigger'
 
16636
      WHERE f_int1 = new.f_int1;
 
16637
END|
 
16638
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16639
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16640
        
 
16641
# check trigger-5 success:      1
 
16642
DROP TRIGGER trg_1;
 
16643
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16644
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16645
f_charbig = 'just inserted'
 
16646
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16647
DELETE FROM t0_aux
 
16648
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16649
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16650
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16651
'just inserted' FROM t0_template
 
16652
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16653
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16654
BEGIN
 
16655
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16656
f_charbig = 'updated by trigger'
 
16657
      WHERE f_int1 = - old.f_int1;
 
16658
END|
 
16659
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16660
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16661
        
 
16662
# check trigger-6 success:      1
 
16663
DROP TRIGGER trg_1;
 
16664
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16665
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16666
f_charbig = 'just inserted'
 
16667
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16668
DELETE FROM t0_aux
 
16669
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16670
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16671
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16672
'just inserted' FROM t0_template
 
16673
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16674
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
16675
BEGIN
 
16676
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16677
f_charbig = 'updated by trigger'
 
16678
      WHERE f_int1 = - old.f_int1;
 
16679
END|
 
16680
DELETE FROM t0_aux
 
16681
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16682
        
 
16683
# check trigger-7 success:      1
 
16684
DROP TRIGGER trg_1;
 
16685
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16686
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16687
f_charbig = 'just inserted'
 
16688
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16689
DELETE FROM t0_aux
 
16690
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16691
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16692
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16693
'just inserted' FROM t0_template
 
16694
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16695
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
16696
BEGIN
 
16697
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16698
f_charbig = 'updated by trigger'
 
16699
      WHERE f_int1 = - old.f_int1;
 
16700
END|
 
16701
DELETE FROM t0_aux
 
16702
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16703
        
 
16704
# check trigger-8 success:      1
 
16705
DROP TRIGGER trg_1;
 
16706
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16707
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16708
f_charbig = 'just inserted'
 
16709
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16710
DELETE FROM t0_aux
 
16711
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16712
DELETE FROM t1
 
16713
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16714
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16715
BEGIN
 
16716
SET new.f_int1 = old.f_int1 + @max_row,
 
16717
new.f_int2 = old.f_int2 - @max_row,
 
16718
new.f_charbig = '####updated per update trigger####';
 
16719
END|
 
16720
UPDATE t1
 
16721
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16722
f_charbig = '####updated per update statement itself####';
 
16723
        
 
16724
# check trigger-9 success:      1
 
16725
DROP TRIGGER trg_2;
 
16726
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16727
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16728
f_charbig = CONCAT('===',f_char1,'===');
 
16729
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16730
BEGIN
 
16731
SET new.f_int1 = new.f_int1 + @max_row,
 
16732
new.f_int2 = new.f_int2 - @max_row,
 
16733
new.f_charbig = '####updated per update trigger####';
 
16734
END|
 
16735
UPDATE t1
 
16736
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16737
f_charbig = '####updated per update statement itself####';
 
16738
        
 
16739
# check trigger-10 success:     1
 
16740
DROP TRIGGER trg_2;
 
16741
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16742
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16743
f_charbig = CONCAT('===',f_char1,'===');
 
16744
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16745
BEGIN
 
16746
SET new.f_int1 = @my_max1 + @counter,
 
16747
new.f_int2 = @my_min2 - @counter,
 
16748
new.f_charbig = '####updated per insert trigger####';
 
16749
SET @counter = @counter + 1;
 
16750
END|
 
16751
SET @counter = 1;
 
16752
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16753
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16754
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16755
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16756
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16757
ORDER BY f_int1;
 
16758
DROP TRIGGER trg_3;
 
16759
        
 
16760
# check trigger-11 success:     1
 
16761
DELETE FROM t1
 
16762
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16763
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16764
AND f_charbig = '####updated per insert trigger####';
 
16765
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16766
BEGIN
 
16767
SET new.f_int1 = @my_max1 + @counter,
 
16768
new.f_int2 = @my_min2 - @counter,
 
16769
new.f_charbig = '####updated per insert trigger####';
 
16770
SET @counter = @counter + 1;
 
16771
END|
 
16772
SET @counter = 1;
 
16773
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16774
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
16775
SELECT CAST(f_int1 AS CHAR),
 
16776
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16777
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16778
ORDER BY f_int1;
 
16779
DROP TRIGGER trg_3;
 
16780
        
 
16781
# check trigger-12 success:     1
 
16782
DELETE FROM t1
 
16783
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16784
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16785
AND f_charbig = '####updated per insert trigger####';
 
16786
ANALYZE  TABLE t1;
 
16787
Table   Op      Msg_type        Msg_text
 
16788
test.t1 analyze status  OK
 
16789
CHECK    TABLE t1 EXTENDED;
 
16790
Table   Op      Msg_type        Msg_text
 
16791
test.t1 check   status  OK
 
16792
CHECKSUM TABLE t1 EXTENDED;
 
16793
Table   Checksum
 
16794
test.t1 <some_value>
 
16795
OPTIMIZE TABLE t1;
 
16796
Table   Op      Msg_type        Msg_text
 
16797
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
16798
test.t1 optimize        status  OK
 
16799
# check layout success:    1
 
16800
REPAIR   TABLE t1 EXTENDED;
 
16801
Table   Op      Msg_type        Msg_text
 
16802
test.t1 repair  note    The storage engine for the table doesn't support repair
 
16803
# check layout success:    1
 
16804
TRUNCATE t1;
 
16805
        
 
16806
# check TRUNCATE success:       1
 
16807
# check layout success:    1
 
16808
# End usability test (inc/partition_check.inc)
 
16809
DROP TABLE t1;
 
16810
CREATE TABLE t1 (
 
16811
f_int1 INTEGER,
 
16812
f_int2 INTEGER,
 
16813
f_char1 CHAR(20),
 
16814
f_char2 CHAR(20),
 
16815
f_charbig VARCHAR(1000)
 
16816
, PRIMARY KEY(f_int2,f_int1)
 
16817
)
 
16818
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
16819
(PARTITION part1 VALUES LESS THAN (0)
 
16820
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
16821
PARTITION part2 VALUES LESS THAN (5)
 
16822
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
16823
PARTITION part3 VALUES LESS THAN (10)
 
16824
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
16825
PARTITION part4 VALUES LESS THAN (2147483646)
 
16826
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
16827
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16828
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16829
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
16830
ALTER TABLE t1 DROP PRIMARY KEY;
 
16831
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16832
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16833
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16834
# Start usability test (inc/partition_check.inc)
 
16835
create_command
 
16836
SHOW CREATE TABLE t1;
 
16837
Table   Create Table
 
16838
t1      CREATE TABLE `t1` (
 
16839
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
16840
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
16841
  `f_char1` char(20) DEFAULT NULL,
 
16842
  `f_char2` char(20) DEFAULT NULL,
 
16843
  `f_charbig` varchar(1000) DEFAULT NULL
 
16844
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
16845
/*!50100 PARTITION BY RANGE (f_int1)
 
16846
SUBPARTITION BY KEY (f_int2)
 
16847
(PARTITION part1 VALUES LESS THAN (0)
 
16848
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
16849
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
16850
 PARTITION part2 VALUES LESS THAN (5)
 
16851
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
16852
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
16853
 PARTITION part3 VALUES LESS THAN (10)
 
16854
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
16855
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
16856
 PARTITION part4 VALUES LESS THAN (2147483646)
 
16857
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
16858
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
16859
 
 
16860
# check prerequisites-1 success:    1
 
16861
# check COUNT(*) success:    1
 
16862
# check MIN/MAX(f_int1) success:    1
 
16863
# check MIN/MAX(f_int2) success:    1
 
16864
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16865
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16866
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
16867
WHERE f_int1 IN (2,3);
 
16868
# check prerequisites-3 success:    1
 
16869
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16870
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
16871
# check read via f_int1 success: 1
 
16872
# check read via f_int2 success: 1
 
16873
        
 
16874
# check multiple-1 success:     1
 
16875
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
16876
        
 
16877
# check multiple-2 success:     1
 
16878
INSERT INTO t1 SELECT * FROM t0_template
 
16879
WHERE MOD(f_int1,3) = 0;
 
16880
        
 
16881
# check multiple-3 success:     1
 
16882
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
16883
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
16884
AND @max_row_div2 + @max_row_div4;
 
16885
        
 
16886
# check multiple-4 success:     1
 
16887
DELETE FROM t1
 
16888
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
16889
AND @max_row_div2 + @max_row_div4 + @max_row;
 
16890
        
 
16891
# check multiple-5 success:     1
 
16892
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
16893
INSERT INTO t1
 
16894
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16895
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16896
f_charbig = '#SINGLE#';
 
16897
        
 
16898
# check single-1 success:       1
 
16899
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
16900
INSERT INTO t1
 
16901
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16902
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16903
f_charbig = '#SINGLE#';
 
16904
        
 
16905
# check single-2 success:       1
 
16906
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
16907
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
16908
UPDATE t1 SET f_int1 = @cur_value2
 
16909
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
16910
        
 
16911
# check single-3 success:       1
 
16912
SET @cur_value1= -1;
 
16913
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
16914
UPDATE t1 SET f_int1 = @cur_value1
 
16915
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
16916
        
 
16917
# check single-4 success:       1
 
16918
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
16919
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
16920
        
 
16921
# check single-5 success:       1
 
16922
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
16923
        
 
16924
# check single-6 success:       1
 
16925
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
16926
ERROR HY000: Table has no partition for value 2147483647
 
16927
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
16928
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
16929
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
16930
f_charbig = '#NULL#';
 
16931
INSERT INTO t1
 
16932
SET f_int1 = NULL , f_int2 = -@max_row,
 
16933
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
16934
f_charbig = '#NULL#';
 
16935
ERROR 23000: Column 'f_int1' cannot be null
 
16936
# check null success:    1
 
16937
DELETE FROM t1
 
16938
WHERE f_int1 = 0 AND f_int2 = 0
 
16939
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
16940
AND f_charbig = '#NULL#';
 
16941
SET AUTOCOMMIT= 0;
 
16942
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16943
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16944
FROM t0_template source_tab
 
16945
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16946
        
 
16947
# check transactions-1 success:         1
 
16948
COMMIT WORK;
 
16949
        
 
16950
# check transactions-2 success:         1
 
16951
ROLLBACK WORK;
 
16952
        
 
16953
# check transactions-3 success:         1
 
16954
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16955
COMMIT WORK;
 
16956
ROLLBACK WORK;
 
16957
        
 
16958
# check transactions-4 success:         1
 
16959
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16960
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16961
FROM t0_template source_tab
 
16962
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16963
        
 
16964
# check transactions-5 success:         1
 
16965
ROLLBACK WORK;
 
16966
        
 
16967
# check transactions-6 success:         1
 
16968
# INFO: Storage engine used for t1 seems to be transactional.
 
16969
COMMIT;
 
16970
        
 
16971
# check transactions-7 success:         1
 
16972
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16973
COMMIT WORK;
 
16974
SET @@session.sql_mode = 'traditional';
 
16975
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
16976
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16977
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
16978
'', '', 'was inserted' FROM t0_template
 
16979
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16980
ERROR 22012: Division by 0
 
16981
COMMIT;
 
16982
        
 
16983
# check transactions-8 success:         1
 
16984
# INFO: Storage engine used for t1 seems to be able to revert
 
16985
#       changes made by the failing statement.
 
16986
SET @@session.sql_mode = '';
 
16987
SET AUTOCOMMIT= 1;
 
16988
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16989
COMMIT WORK;
 
16990
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
16991
        
 
16992
# check special-1 success:      1
 
16993
UPDATE t1 SET f_charbig = '';
 
16994
        
 
16995
# check special-2 success:      1
 
16996
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
16997
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16998
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
16999
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17000
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17001
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17002
'just inserted' FROM t0_template
 
17003
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17004
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
17005
BEGIN
 
17006
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17007
f_charbig = 'updated by trigger'
 
17008
      WHERE f_int1 = new.f_int1;
 
17009
END|
 
17010
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17011
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17012
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17013
        
 
17014
# check trigger-1 success:      1
 
17015
DROP TRIGGER trg_1;
 
17016
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17017
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17018
f_charbig = 'just inserted'
 
17019
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17020
DELETE FROM t0_aux
 
17021
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17022
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17023
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17024
'just inserted' FROM t0_template
 
17025
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17026
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
17027
BEGIN
 
17028
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17029
f_charbig = 'updated by trigger'
 
17030
      WHERE f_int1 = new.f_int1;
 
17031
END|
 
17032
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17033
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17034
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17035
        
 
17036
# check trigger-2 success:      1
 
17037
DROP TRIGGER trg_1;
 
17038
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17039
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17040
f_charbig = 'just inserted'
 
17041
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17042
DELETE FROM t0_aux
 
17043
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17044
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17045
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17046
'just inserted' FROM t0_template
 
17047
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17048
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17049
BEGIN
 
17050
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17051
f_charbig = 'updated by trigger'
 
17052
      WHERE f_int1 = new.f_int1;
 
17053
END|
 
17054
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17055
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17056
        
 
17057
# check trigger-3 success:      1
 
17058
DROP TRIGGER trg_1;
 
17059
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17060
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17061
f_charbig = 'just inserted'
 
17062
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17063
DELETE FROM t0_aux
 
17064
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17065
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17066
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17067
'just inserted' FROM t0_template
 
17068
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17069
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17070
BEGIN
 
17071
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17072
f_charbig = 'updated by trigger'
 
17073
      WHERE f_int1 = - old.f_int1;
 
17074
END|
 
17075
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17076
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17077
        
 
17078
# check trigger-4 success:      1
 
17079
DROP TRIGGER trg_1;
 
17080
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17081
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17082
f_charbig = 'just inserted'
 
17083
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17084
DELETE FROM t0_aux
 
17085
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17086
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17087
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17088
'just inserted' FROM t0_template
 
17089
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17090
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17091
BEGIN
 
17092
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17093
f_charbig = 'updated by trigger'
 
17094
      WHERE f_int1 = new.f_int1;
 
17095
END|
 
17096
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17097
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17098
        
 
17099
# check trigger-5 success:      1
 
17100
DROP TRIGGER trg_1;
 
17101
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17102
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17103
f_charbig = 'just inserted'
 
17104
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17105
DELETE FROM t0_aux
 
17106
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17107
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17108
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17109
'just inserted' FROM t0_template
 
17110
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17111
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17112
BEGIN
 
17113
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17114
f_charbig = 'updated by trigger'
 
17115
      WHERE f_int1 = - old.f_int1;
 
17116
END|
 
17117
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17118
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17119
        
 
17120
# check trigger-6 success:      1
 
17121
DROP TRIGGER trg_1;
 
17122
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17123
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17124
f_charbig = 'just inserted'
 
17125
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17126
DELETE FROM t0_aux
 
17127
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17128
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17129
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17130
'just inserted' FROM t0_template
 
17131
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17132
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
17133
BEGIN
 
17134
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17135
f_charbig = 'updated by trigger'
 
17136
      WHERE f_int1 = - old.f_int1;
 
17137
END|
 
17138
DELETE FROM t0_aux
 
17139
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17140
        
 
17141
# check trigger-7 success:      1
 
17142
DROP TRIGGER trg_1;
 
17143
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17144
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17145
f_charbig = 'just inserted'
 
17146
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17147
DELETE FROM t0_aux
 
17148
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17149
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17150
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17151
'just inserted' FROM t0_template
 
17152
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17153
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
17154
BEGIN
 
17155
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17156
f_charbig = 'updated by trigger'
 
17157
      WHERE f_int1 = - old.f_int1;
 
17158
END|
 
17159
DELETE FROM t0_aux
 
17160
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17161
        
 
17162
# check trigger-8 success:      1
 
17163
DROP TRIGGER trg_1;
 
17164
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17165
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17166
f_charbig = 'just inserted'
 
17167
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17168
DELETE FROM t0_aux
 
17169
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17170
DELETE FROM t1
 
17171
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17172
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17173
BEGIN
 
17174
SET new.f_int1 = old.f_int1 + @max_row,
 
17175
new.f_int2 = old.f_int2 - @max_row,
 
17176
new.f_charbig = '####updated per update trigger####';
 
17177
END|
 
17178
UPDATE t1
 
17179
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17180
f_charbig = '####updated per update statement itself####';
 
17181
        
 
17182
# check trigger-9 success:      1
 
17183
DROP TRIGGER trg_2;
 
17184
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17185
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17186
f_charbig = CONCAT('===',f_char1,'===');
 
17187
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17188
BEGIN
 
17189
SET new.f_int1 = new.f_int1 + @max_row,
 
17190
new.f_int2 = new.f_int2 - @max_row,
 
17191
new.f_charbig = '####updated per update trigger####';
 
17192
END|
 
17193
UPDATE t1
 
17194
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17195
f_charbig = '####updated per update statement itself####';
 
17196
        
 
17197
# check trigger-10 success:     1
 
17198
DROP TRIGGER trg_2;
 
17199
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17200
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17201
f_charbig = CONCAT('===',f_char1,'===');
 
17202
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17203
BEGIN
 
17204
SET new.f_int1 = @my_max1 + @counter,
 
17205
new.f_int2 = @my_min2 - @counter,
 
17206
new.f_charbig = '####updated per insert trigger####';
 
17207
SET @counter = @counter + 1;
 
17208
END|
 
17209
SET @counter = 1;
 
17210
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17211
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17212
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17213
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17214
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17215
ORDER BY f_int1;
 
17216
DROP TRIGGER trg_3;
 
17217
        
 
17218
# check trigger-11 success:     1
 
17219
DELETE FROM t1
 
17220
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17221
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17222
AND f_charbig = '####updated per insert trigger####';
 
17223
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17224
BEGIN
 
17225
SET new.f_int1 = @my_max1 + @counter,
 
17226
new.f_int2 = @my_min2 - @counter,
 
17227
new.f_charbig = '####updated per insert trigger####';
 
17228
SET @counter = @counter + 1;
 
17229
END|
 
17230
SET @counter = 1;
 
17231
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17232
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
17233
SELECT CAST(f_int1 AS CHAR),
 
17234
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17235
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17236
ORDER BY f_int1;
 
17237
DROP TRIGGER trg_3;
 
17238
        
 
17239
# check trigger-12 success:     1
 
17240
DELETE FROM t1
 
17241
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17242
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17243
AND f_charbig = '####updated per insert trigger####';
 
17244
ANALYZE  TABLE t1;
 
17245
Table   Op      Msg_type        Msg_text
 
17246
test.t1 analyze status  OK
 
17247
CHECK    TABLE t1 EXTENDED;
 
17248
Table   Op      Msg_type        Msg_text
 
17249
test.t1 check   status  OK
 
17250
CHECKSUM TABLE t1 EXTENDED;
 
17251
Table   Checksum
 
17252
test.t1 <some_value>
 
17253
OPTIMIZE TABLE t1;
 
17254
Table   Op      Msg_type        Msg_text
 
17255
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
17256
test.t1 optimize        status  OK
 
17257
# check layout success:    1
 
17258
REPAIR   TABLE t1 EXTENDED;
 
17259
Table   Op      Msg_type        Msg_text
 
17260
test.t1 repair  note    The storage engine for the table doesn't support repair
 
17261
# check layout success:    1
 
17262
TRUNCATE t1;
 
17263
        
 
17264
# check TRUNCATE success:       1
 
17265
# check layout success:    1
 
17266
# End usability test (inc/partition_check.inc)
 
17267
DROP TABLE t1;
 
17268
CREATE TABLE t1 (
 
17269
f_int1 INTEGER,
 
17270
f_int2 INTEGER,
 
17271
f_char1 CHAR(20),
 
17272
f_char2 CHAR(20),
 
17273
f_charbig VARCHAR(1000)
 
17274
, PRIMARY KEY(f_int2,f_int1)
 
17275
)
 
17276
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
17277
(PARTITION part1 VALUES IN (0)
 
17278
(SUBPARTITION sp11, SUBPARTITION sp12),
 
17279
PARTITION part2 VALUES IN (1)
 
17280
(SUBPARTITION sp21, SUBPARTITION sp22),
 
17281
PARTITION part3 VALUES IN (2)
 
17282
(SUBPARTITION sp31, SUBPARTITION sp32),
 
17283
PARTITION part4 VALUES IN (NULL)
 
17284
(SUBPARTITION sp41, SUBPARTITION sp42));
 
17285
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17286
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17287
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
17288
ALTER TABLE t1 DROP PRIMARY KEY;
 
17289
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17290
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17291
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17292
# Start usability test (inc/partition_check.inc)
 
17293
create_command
 
17294
SHOW CREATE TABLE t1;
 
17295
Table   Create Table
 
17296
t1      CREATE TABLE `t1` (
 
17297
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
17298
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
17299
  `f_char1` char(20) DEFAULT NULL,
 
17300
  `f_char2` char(20) DEFAULT NULL,
 
17301
  `f_charbig` varchar(1000) DEFAULT NULL
 
17302
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
17303
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
17304
SUBPARTITION BY HASH (f_int2 + 1)
 
17305
(PARTITION part1 VALUES IN (0)
 
17306
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
17307
  SUBPARTITION sp12 ENGINE = InnoDB),
 
17308
 PARTITION part2 VALUES IN (1)
 
17309
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
17310
  SUBPARTITION sp22 ENGINE = InnoDB),
 
17311
 PARTITION part3 VALUES IN (2)
 
17312
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
17313
  SUBPARTITION sp32 ENGINE = InnoDB),
 
17314
 PARTITION part4 VALUES IN (NULL)
 
17315
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
17316
  SUBPARTITION sp42 ENGINE = InnoDB)) */
 
17317
 
 
17318
# check prerequisites-1 success:    1
 
17319
# check COUNT(*) success:    1
 
17320
# check MIN/MAX(f_int1) success:    1
 
17321
# check MIN/MAX(f_int2) success:    1
 
17322
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17323
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17324
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
17325
WHERE f_int1 IN (2,3);
 
17326
# check prerequisites-3 success:    1
 
17327
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
17328
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
17329
# check read via f_int1 success: 1
 
17330
# check read via f_int2 success: 1
 
17331
        
 
17332
# check multiple-1 success:     1
 
17333
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
17334
        
 
17335
# check multiple-2 success:     1
 
17336
INSERT INTO t1 SELECT * FROM t0_template
 
17337
WHERE MOD(f_int1,3) = 0;
 
17338
        
 
17339
# check multiple-3 success:     1
 
17340
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
17341
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
17342
AND @max_row_div2 + @max_row_div4;
 
17343
        
 
17344
# check multiple-4 success:     1
 
17345
DELETE FROM t1
 
17346
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
17347
AND @max_row_div2 + @max_row_div4 + @max_row;
 
17348
        
 
17349
# check multiple-5 success:     1
 
17350
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
17351
INSERT INTO t1
 
17352
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17353
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17354
f_charbig = '#SINGLE#';
 
17355
        
 
17356
# check single-1 success:       1
 
17357
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
17358
INSERT INTO t1
 
17359
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17360
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17361
f_charbig = '#SINGLE#';
 
17362
        
 
17363
# check single-2 success:       1
 
17364
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
17365
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
17366
UPDATE t1 SET f_int1 = @cur_value2
 
17367
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
17368
        
 
17369
# check single-3 success:       1
 
17370
SET @cur_value1= -1;
 
17371
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
17372
UPDATE t1 SET f_int1 = @cur_value1
 
17373
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
17374
        
 
17375
# check single-4 success:       1
 
17376
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
17377
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
17378
        
 
17379
# check single-5 success:       1
 
17380
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
17381
        
 
17382
# check single-6 success:       1
 
17383
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
17384
        
 
17385
# check single-7 success:       1
 
17386
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
17387
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
17388
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
17389
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
17390
f_charbig = '#NULL#';
 
17391
INSERT INTO t1
 
17392
SET f_int1 = NULL , f_int2 = -@max_row,
 
17393
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
17394
f_charbig = '#NULL#';
 
17395
ERROR 23000: Column 'f_int1' cannot be null
 
17396
# check null success:    1
 
17397
DELETE FROM t1
 
17398
WHERE f_int1 = 0 AND f_int2 = 0
 
17399
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
17400
AND f_charbig = '#NULL#';
 
17401
SET AUTOCOMMIT= 0;
 
17402
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17403
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17404
FROM t0_template source_tab
 
17405
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17406
        
 
17407
# check transactions-1 success:         1
 
17408
COMMIT WORK;
 
17409
        
 
17410
# check transactions-2 success:         1
 
17411
ROLLBACK WORK;
 
17412
        
 
17413
# check transactions-3 success:         1
 
17414
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17415
COMMIT WORK;
 
17416
ROLLBACK WORK;
 
17417
        
 
17418
# check transactions-4 success:         1
 
17419
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17420
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17421
FROM t0_template source_tab
 
17422
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17423
        
 
17424
# check transactions-5 success:         1
 
17425
ROLLBACK WORK;
 
17426
        
 
17427
# check transactions-6 success:         1
 
17428
# INFO: Storage engine used for t1 seems to be transactional.
 
17429
COMMIT;
 
17430
        
 
17431
# check transactions-7 success:         1
 
17432
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17433
COMMIT WORK;
 
17434
SET @@session.sql_mode = 'traditional';
 
17435
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
17436
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17437
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
17438
'', '', 'was inserted' FROM t0_template
 
17439
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17440
ERROR 22012: Division by 0
 
17441
COMMIT;
 
17442
        
 
17443
# check transactions-8 success:         1
 
17444
# INFO: Storage engine used for t1 seems to be able to revert
 
17445
#       changes made by the failing statement.
 
17446
SET @@session.sql_mode = '';
 
17447
SET AUTOCOMMIT= 1;
 
17448
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17449
COMMIT WORK;
 
17450
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
17451
        
 
17452
# check special-1 success:      1
 
17453
UPDATE t1 SET f_charbig = '';
 
17454
        
 
17455
# check special-2 success:      1
 
17456
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
17457
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17458
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
17459
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17460
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17461
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17462
'just inserted' FROM t0_template
 
17463
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17464
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
17465
BEGIN
 
17466
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17467
f_charbig = 'updated by trigger'
 
17468
      WHERE f_int1 = new.f_int1;
 
17469
END|
 
17470
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17471
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17472
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17473
        
 
17474
# check trigger-1 success:      1
 
17475
DROP TRIGGER trg_1;
 
17476
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17477
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17478
f_charbig = 'just inserted'
 
17479
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17480
DELETE FROM t0_aux
 
17481
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17482
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17483
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17484
'just inserted' FROM t0_template
 
17485
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17486
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
17487
BEGIN
 
17488
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17489
f_charbig = 'updated by trigger'
 
17490
      WHERE f_int1 = new.f_int1;
 
17491
END|
 
17492
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17493
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17494
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17495
        
 
17496
# check trigger-2 success:      1
 
17497
DROP TRIGGER trg_1;
 
17498
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17499
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17500
f_charbig = 'just inserted'
 
17501
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17502
DELETE FROM t0_aux
 
17503
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17504
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17505
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17506
'just inserted' FROM t0_template
 
17507
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17508
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17509
BEGIN
 
17510
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17511
f_charbig = 'updated by trigger'
 
17512
      WHERE f_int1 = new.f_int1;
 
17513
END|
 
17514
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17515
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17516
        
 
17517
# check trigger-3 success:      1
 
17518
DROP TRIGGER trg_1;
 
17519
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17520
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17521
f_charbig = 'just inserted'
 
17522
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17523
DELETE FROM t0_aux
 
17524
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17525
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17526
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17527
'just inserted' FROM t0_template
 
17528
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17529
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17530
BEGIN
 
17531
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17532
f_charbig = 'updated by trigger'
 
17533
      WHERE f_int1 = - old.f_int1;
 
17534
END|
 
17535
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17536
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17537
        
 
17538
# check trigger-4 success:      1
 
17539
DROP TRIGGER trg_1;
 
17540
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17541
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17542
f_charbig = 'just inserted'
 
17543
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17544
DELETE FROM t0_aux
 
17545
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17546
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17547
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17548
'just inserted' FROM t0_template
 
17549
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17550
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17551
BEGIN
 
17552
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17553
f_charbig = 'updated by trigger'
 
17554
      WHERE f_int1 = new.f_int1;
 
17555
END|
 
17556
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17557
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17558
        
 
17559
# check trigger-5 success:      1
 
17560
DROP TRIGGER trg_1;
 
17561
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17562
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17563
f_charbig = 'just inserted'
 
17564
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17565
DELETE FROM t0_aux
 
17566
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17567
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17568
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17569
'just inserted' FROM t0_template
 
17570
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17571
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17572
BEGIN
 
17573
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17574
f_charbig = 'updated by trigger'
 
17575
      WHERE f_int1 = - old.f_int1;
 
17576
END|
 
17577
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17578
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17579
        
 
17580
# check trigger-6 success:      1
 
17581
DROP TRIGGER trg_1;
 
17582
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17583
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17584
f_charbig = 'just inserted'
 
17585
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17586
DELETE FROM t0_aux
 
17587
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17588
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17589
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17590
'just inserted' FROM t0_template
 
17591
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17592
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
17593
BEGIN
 
17594
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17595
f_charbig = 'updated by trigger'
 
17596
      WHERE f_int1 = - old.f_int1;
 
17597
END|
 
17598
DELETE FROM t0_aux
 
17599
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17600
        
 
17601
# check trigger-7 success:      1
 
17602
DROP TRIGGER trg_1;
 
17603
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17604
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17605
f_charbig = 'just inserted'
 
17606
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17607
DELETE FROM t0_aux
 
17608
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17609
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17610
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17611
'just inserted' FROM t0_template
 
17612
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17613
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
17614
BEGIN
 
17615
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17616
f_charbig = 'updated by trigger'
 
17617
      WHERE f_int1 = - old.f_int1;
 
17618
END|
 
17619
DELETE FROM t0_aux
 
17620
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17621
        
 
17622
# check trigger-8 success:      1
 
17623
DROP TRIGGER trg_1;
 
17624
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17625
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17626
f_charbig = 'just inserted'
 
17627
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17628
DELETE FROM t0_aux
 
17629
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17630
DELETE FROM t1
 
17631
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17632
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17633
BEGIN
 
17634
SET new.f_int1 = old.f_int1 + @max_row,
 
17635
new.f_int2 = old.f_int2 - @max_row,
 
17636
new.f_charbig = '####updated per update trigger####';
 
17637
END|
 
17638
UPDATE t1
 
17639
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17640
f_charbig = '####updated per update statement itself####';
 
17641
        
 
17642
# check trigger-9 success:      1
 
17643
DROP TRIGGER trg_2;
 
17644
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17645
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17646
f_charbig = CONCAT('===',f_char1,'===');
 
17647
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17648
BEGIN
 
17649
SET new.f_int1 = new.f_int1 + @max_row,
 
17650
new.f_int2 = new.f_int2 - @max_row,
 
17651
new.f_charbig = '####updated per update trigger####';
 
17652
END|
 
17653
UPDATE t1
 
17654
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17655
f_charbig = '####updated per update statement itself####';
 
17656
        
 
17657
# check trigger-10 success:     1
 
17658
DROP TRIGGER trg_2;
 
17659
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17660
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17661
f_charbig = CONCAT('===',f_char1,'===');
 
17662
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17663
BEGIN
 
17664
SET new.f_int1 = @my_max1 + @counter,
 
17665
new.f_int2 = @my_min2 - @counter,
 
17666
new.f_charbig = '####updated per insert trigger####';
 
17667
SET @counter = @counter + 1;
 
17668
END|
 
17669
SET @counter = 1;
 
17670
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17671
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17672
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17673
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17674
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17675
ORDER BY f_int1;
 
17676
DROP TRIGGER trg_3;
 
17677
        
 
17678
# check trigger-11 success:     1
 
17679
DELETE FROM t1
 
17680
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17681
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17682
AND f_charbig = '####updated per insert trigger####';
 
17683
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17684
BEGIN
 
17685
SET new.f_int1 = @my_max1 + @counter,
 
17686
new.f_int2 = @my_min2 - @counter,
 
17687
new.f_charbig = '####updated per insert trigger####';
 
17688
SET @counter = @counter + 1;
 
17689
END|
 
17690
SET @counter = 1;
 
17691
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17692
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
17693
SELECT CAST(f_int1 AS CHAR),
 
17694
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17695
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17696
ORDER BY f_int1;
 
17697
DROP TRIGGER trg_3;
 
17698
        
 
17699
# check trigger-12 success:     1
 
17700
DELETE FROM t1
 
17701
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17702
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17703
AND f_charbig = '####updated per insert trigger####';
 
17704
ANALYZE  TABLE t1;
 
17705
Table   Op      Msg_type        Msg_text
 
17706
test.t1 analyze status  OK
 
17707
CHECK    TABLE t1 EXTENDED;
 
17708
Table   Op      Msg_type        Msg_text
 
17709
test.t1 check   status  OK
 
17710
CHECKSUM TABLE t1 EXTENDED;
 
17711
Table   Checksum
 
17712
test.t1 <some_value>
 
17713
OPTIMIZE TABLE t1;
 
17714
Table   Op      Msg_type        Msg_text
 
17715
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
17716
test.t1 optimize        status  OK
 
17717
# check layout success:    1
 
17718
REPAIR   TABLE t1 EXTENDED;
 
17719
Table   Op      Msg_type        Msg_text
 
17720
test.t1 repair  note    The storage engine for the table doesn't support repair
 
17721
# check layout success:    1
 
17722
TRUNCATE t1;
 
17723
        
 
17724
# check TRUNCATE success:       1
 
17725
# check layout success:    1
 
17726
# End usability test (inc/partition_check.inc)
 
17727
DROP TABLE t1;
 
17728
CREATE TABLE t1 (
 
17729
f_int1 INTEGER,
 
17730
f_int2 INTEGER,
 
17731
f_char1 CHAR(20),
 
17732
f_char2 CHAR(20),
 
17733
f_charbig VARCHAR(1000)
 
17734
, PRIMARY KEY(f_int2,f_int1)
 
17735
)
 
17736
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
17737
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
17738
(PARTITION part1 VALUES IN (0),
 
17739
 PARTITION part2 VALUES IN (1),
 
17740
 PARTITION part3 VALUES IN (NULL));
 
17741
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17742
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17743
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
17744
ALTER TABLE t1 DROP PRIMARY KEY;
 
17745
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17746
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17747
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17748
# Start usability test (inc/partition_check.inc)
 
17749
create_command
 
17750
SHOW CREATE TABLE t1;
 
17751
Table   Create Table
 
17752
t1      CREATE TABLE `t1` (
 
17753
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
17754
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
17755
  `f_char1` char(20) DEFAULT NULL,
 
17756
  `f_char2` char(20) DEFAULT NULL,
 
17757
  `f_charbig` varchar(1000) DEFAULT NULL
 
17758
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
17759
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
17760
SUBPARTITION BY KEY (f_int2)
 
17761
SUBPARTITIONS 3
 
17762
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
17763
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
17764
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
17765
 
 
17766
# check prerequisites-1 success:    1
 
17767
# check COUNT(*) success:    1
 
17768
# check MIN/MAX(f_int1) success:    1
 
17769
# check MIN/MAX(f_int2) success:    1
 
17770
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17771
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17772
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
17773
WHERE f_int1 IN (2,3);
 
17774
# check prerequisites-3 success:    1
 
17775
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
17776
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
17777
# check read via f_int1 success: 1
 
17778
# check read via f_int2 success: 1
 
17779
        
 
17780
# check multiple-1 success:     1
 
17781
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
17782
        
 
17783
# check multiple-2 success:     1
 
17784
INSERT INTO t1 SELECT * FROM t0_template
 
17785
WHERE MOD(f_int1,3) = 0;
 
17786
        
 
17787
# check multiple-3 success:     1
 
17788
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
17789
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
17790
AND @max_row_div2 + @max_row_div4;
 
17791
        
 
17792
# check multiple-4 success:     1
 
17793
DELETE FROM t1
 
17794
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
17795
AND @max_row_div2 + @max_row_div4 + @max_row;
 
17796
        
 
17797
# check multiple-5 success:     1
 
17798
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
17799
INSERT INTO t1
 
17800
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17801
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17802
f_charbig = '#SINGLE#';
 
17803
        
 
17804
# check single-1 success:       1
 
17805
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
17806
INSERT INTO t1
 
17807
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17808
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17809
f_charbig = '#SINGLE#';
 
17810
        
 
17811
# check single-2 success:       1
 
17812
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
17813
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
17814
UPDATE t1 SET f_int1 = @cur_value2
 
17815
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
17816
        
 
17817
# check single-3 success:       1
 
17818
SET @cur_value1= -1;
 
17819
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
17820
UPDATE t1 SET f_int1 = @cur_value1
 
17821
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
17822
        
 
17823
# check single-4 success:       1
 
17824
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
17825
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
17826
        
 
17827
# check single-5 success:       1
 
17828
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
17829
        
 
17830
# check single-6 success:       1
 
17831
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
17832
        
 
17833
# check single-7 success:       1
 
17834
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
17835
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
17836
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
17837
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
17838
f_charbig = '#NULL#';
 
17839
INSERT INTO t1
 
17840
SET f_int1 = NULL , f_int2 = -@max_row,
 
17841
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
17842
f_charbig = '#NULL#';
 
17843
ERROR 23000: Column 'f_int1' cannot be null
 
17844
# check null success:    1
 
17845
DELETE FROM t1
 
17846
WHERE f_int1 = 0 AND f_int2 = 0
 
17847
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
17848
AND f_charbig = '#NULL#';
 
17849
SET AUTOCOMMIT= 0;
 
17850
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17851
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17852
FROM t0_template source_tab
 
17853
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17854
        
 
17855
# check transactions-1 success:         1
 
17856
COMMIT WORK;
 
17857
        
 
17858
# check transactions-2 success:         1
 
17859
ROLLBACK WORK;
 
17860
        
 
17861
# check transactions-3 success:         1
 
17862
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17863
COMMIT WORK;
 
17864
ROLLBACK WORK;
 
17865
        
 
17866
# check transactions-4 success:         1
 
17867
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17868
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17869
FROM t0_template source_tab
 
17870
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17871
        
 
17872
# check transactions-5 success:         1
 
17873
ROLLBACK WORK;
 
17874
        
 
17875
# check transactions-6 success:         1
 
17876
# INFO: Storage engine used for t1 seems to be transactional.
 
17877
COMMIT;
 
17878
        
 
17879
# check transactions-7 success:         1
 
17880
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17881
COMMIT WORK;
 
17882
SET @@session.sql_mode = 'traditional';
 
17883
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
17884
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17885
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
17886
'', '', 'was inserted' FROM t0_template
 
17887
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17888
ERROR 22012: Division by 0
 
17889
COMMIT;
 
17890
        
 
17891
# check transactions-8 success:         1
 
17892
# INFO: Storage engine used for t1 seems to be able to revert
 
17893
#       changes made by the failing statement.
 
17894
SET @@session.sql_mode = '';
 
17895
SET AUTOCOMMIT= 1;
 
17896
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17897
COMMIT WORK;
 
17898
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
17899
        
 
17900
# check special-1 success:      1
 
17901
UPDATE t1 SET f_charbig = '';
 
17902
        
 
17903
# check special-2 success:      1
 
17904
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
17905
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17906
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
17907
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17908
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17909
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17910
'just inserted' FROM t0_template
 
17911
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17912
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
17913
BEGIN
 
17914
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17915
f_charbig = 'updated by trigger'
 
17916
      WHERE f_int1 = new.f_int1;
 
17917
END|
 
17918
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17919
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17920
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17921
        
 
17922
# check trigger-1 success:      1
 
17923
DROP TRIGGER trg_1;
 
17924
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17925
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17926
f_charbig = 'just inserted'
 
17927
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17928
DELETE FROM t0_aux
 
17929
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17930
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17931
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17932
'just inserted' FROM t0_template
 
17933
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17934
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
17935
BEGIN
 
17936
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17937
f_charbig = 'updated by trigger'
 
17938
      WHERE f_int1 = new.f_int1;
 
17939
END|
 
17940
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17941
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17942
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17943
        
 
17944
# check trigger-2 success:      1
 
17945
DROP TRIGGER trg_1;
 
17946
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17947
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17948
f_charbig = 'just inserted'
 
17949
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17950
DELETE FROM t0_aux
 
17951
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17952
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17953
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17954
'just inserted' FROM t0_template
 
17955
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17956
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17957
BEGIN
 
17958
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17959
f_charbig = 'updated by trigger'
 
17960
      WHERE f_int1 = new.f_int1;
 
17961
END|
 
17962
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17963
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17964
        
 
17965
# check trigger-3 success:      1
 
17966
DROP TRIGGER trg_1;
 
17967
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17968
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17969
f_charbig = 'just inserted'
 
17970
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17971
DELETE FROM t0_aux
 
17972
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17973
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17974
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17975
'just inserted' FROM t0_template
 
17976
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17977
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17978
BEGIN
 
17979
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17980
f_charbig = 'updated by trigger'
 
17981
      WHERE f_int1 = - old.f_int1;
 
17982
END|
 
17983
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17984
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17985
        
 
17986
# check trigger-4 success:      1
 
17987
DROP TRIGGER trg_1;
 
17988
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17989
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17990
f_charbig = 'just inserted'
 
17991
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17992
DELETE FROM t0_aux
 
17993
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17994
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17995
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17996
'just inserted' FROM t0_template
 
17997
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17998
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17999
BEGIN
 
18000
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18001
f_charbig = 'updated by trigger'
 
18002
      WHERE f_int1 = new.f_int1;
 
18003
END|
 
18004
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18005
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18006
        
 
18007
# check trigger-5 success:      1
 
18008
DROP TRIGGER trg_1;
 
18009
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18010
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18011
f_charbig = 'just inserted'
 
18012
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18013
DELETE FROM t0_aux
 
18014
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18015
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18016
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18017
'just inserted' FROM t0_template
 
18018
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18019
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18020
BEGIN
 
18021
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18022
f_charbig = 'updated by trigger'
 
18023
      WHERE f_int1 = - old.f_int1;
 
18024
END|
 
18025
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18026
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18027
        
 
18028
# check trigger-6 success:      1
 
18029
DROP TRIGGER trg_1;
 
18030
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18031
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18032
f_charbig = 'just inserted'
 
18033
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18034
DELETE FROM t0_aux
 
18035
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18036
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18037
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18038
'just inserted' FROM t0_template
 
18039
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18040
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
18041
BEGIN
 
18042
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18043
f_charbig = 'updated by trigger'
 
18044
      WHERE f_int1 = - old.f_int1;
 
18045
END|
 
18046
DELETE FROM t0_aux
 
18047
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18048
        
 
18049
# check trigger-7 success:      1
 
18050
DROP TRIGGER trg_1;
 
18051
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18052
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18053
f_charbig = 'just inserted'
 
18054
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18055
DELETE FROM t0_aux
 
18056
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18057
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18058
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18059
'just inserted' FROM t0_template
 
18060
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18061
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
18062
BEGIN
 
18063
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18064
f_charbig = 'updated by trigger'
 
18065
      WHERE f_int1 = - old.f_int1;
 
18066
END|
 
18067
DELETE FROM t0_aux
 
18068
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18069
        
 
18070
# check trigger-8 success:      1
 
18071
DROP TRIGGER trg_1;
 
18072
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18073
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18074
f_charbig = 'just inserted'
 
18075
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18076
DELETE FROM t0_aux
 
18077
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18078
DELETE FROM t1
 
18079
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18080
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18081
BEGIN
 
18082
SET new.f_int1 = old.f_int1 + @max_row,
 
18083
new.f_int2 = old.f_int2 - @max_row,
 
18084
new.f_charbig = '####updated per update trigger####';
 
18085
END|
 
18086
UPDATE t1
 
18087
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18088
f_charbig = '####updated per update statement itself####';
 
18089
        
 
18090
# check trigger-9 success:      1
 
18091
DROP TRIGGER trg_2;
 
18092
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18093
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18094
f_charbig = CONCAT('===',f_char1,'===');
 
18095
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18096
BEGIN
 
18097
SET new.f_int1 = new.f_int1 + @max_row,
 
18098
new.f_int2 = new.f_int2 - @max_row,
 
18099
new.f_charbig = '####updated per update trigger####';
 
18100
END|
 
18101
UPDATE t1
 
18102
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18103
f_charbig = '####updated per update statement itself####';
 
18104
        
 
18105
# check trigger-10 success:     1
 
18106
DROP TRIGGER trg_2;
 
18107
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18108
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18109
f_charbig = CONCAT('===',f_char1,'===');
 
18110
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18111
BEGIN
 
18112
SET new.f_int1 = @my_max1 + @counter,
 
18113
new.f_int2 = @my_min2 - @counter,
 
18114
new.f_charbig = '####updated per insert trigger####';
 
18115
SET @counter = @counter + 1;
 
18116
END|
 
18117
SET @counter = 1;
 
18118
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18119
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18120
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18121
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18122
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18123
ORDER BY f_int1;
 
18124
DROP TRIGGER trg_3;
 
18125
        
 
18126
# check trigger-11 success:     1
 
18127
DELETE FROM t1
 
18128
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18129
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18130
AND f_charbig = '####updated per insert trigger####';
 
18131
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18132
BEGIN
 
18133
SET new.f_int1 = @my_max1 + @counter,
 
18134
new.f_int2 = @my_min2 - @counter,
 
18135
new.f_charbig = '####updated per insert trigger####';
 
18136
SET @counter = @counter + 1;
 
18137
END|
 
18138
SET @counter = 1;
 
18139
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18140
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
18141
SELECT CAST(f_int1 AS CHAR),
 
18142
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18143
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18144
ORDER BY f_int1;
 
18145
DROP TRIGGER trg_3;
 
18146
        
 
18147
# check trigger-12 success:     1
 
18148
DELETE FROM t1
 
18149
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18150
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18151
AND f_charbig = '####updated per insert trigger####';
 
18152
ANALYZE  TABLE t1;
 
18153
Table   Op      Msg_type        Msg_text
 
18154
test.t1 analyze status  OK
 
18155
CHECK    TABLE t1 EXTENDED;
 
18156
Table   Op      Msg_type        Msg_text
 
18157
test.t1 check   status  OK
 
18158
CHECKSUM TABLE t1 EXTENDED;
 
18159
Table   Checksum
 
18160
test.t1 <some_value>
 
18161
OPTIMIZE TABLE t1;
 
18162
Table   Op      Msg_type        Msg_text
 
18163
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
18164
test.t1 optimize        status  OK
 
18165
# check layout success:    1
 
18166
REPAIR   TABLE t1 EXTENDED;
 
18167
Table   Op      Msg_type        Msg_text
 
18168
test.t1 repair  note    The storage engine for the table doesn't support repair
 
18169
# check layout success:    1
 
18170
TRUNCATE t1;
 
18171
        
 
18172
# check TRUNCATE success:       1
 
18173
# check layout success:    1
 
18174
# End usability test (inc/partition_check.inc)
 
18175
DROP TABLE t1;
 
18176
#  2.2.2 DROP UNIQUE INDEX consisting of two columns
 
18177
DROP TABLE IF EXISTS t1;
 
18178
CREATE TABLE t1 (
 
18179
f_int1 INTEGER,
 
18180
f_int2 INTEGER,
 
18181
f_char1 CHAR(20),
 
18182
f_char2 CHAR(20),
 
18183
f_charbig VARCHAR(1000)
 
18184
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
18185
)
 
18186
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
18187
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18188
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18189
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
18190
ALTER TABLE t1 DROP INDEX uidx1;
 
18191
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18192
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18193
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18194
# Start usability test (inc/partition_check.inc)
 
18195
create_command
 
18196
SHOW CREATE TABLE t1;
 
18197
Table   Create Table
 
18198
t1      CREATE TABLE `t1` (
 
18199
  `f_int1` int(11) DEFAULT NULL,
 
18200
  `f_int2` int(11) DEFAULT NULL,
 
18201
  `f_char1` char(20) DEFAULT NULL,
 
18202
  `f_char2` char(20) DEFAULT NULL,
 
18203
  `f_charbig` varchar(1000) DEFAULT NULL
 
18204
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
18205
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
 
18206
PARTITIONS 2 */
 
18207
 
 
18208
# check prerequisites-1 success:    1
 
18209
# check COUNT(*) success:    1
 
18210
# check MIN/MAX(f_int1) success:    1
 
18211
# check MIN/MAX(f_int2) success:    1
 
18212
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18213
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18214
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
18215
WHERE f_int1 IN (2,3);
 
18216
# check prerequisites-3 success:    1
 
18217
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
18218
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
18219
# check read via f_int1 success: 1
 
18220
# check read via f_int2 success: 1
 
18221
        
 
18222
# check multiple-1 success:     1
 
18223
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
18224
        
 
18225
# check multiple-2 success:     1
 
18226
INSERT INTO t1 SELECT * FROM t0_template
 
18227
WHERE MOD(f_int1,3) = 0;
 
18228
        
 
18229
# check multiple-3 success:     1
 
18230
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
18231
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
18232
AND @max_row_div2 + @max_row_div4;
 
18233
        
 
18234
# check multiple-4 success:     1
 
18235
DELETE FROM t1
 
18236
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
18237
AND @max_row_div2 + @max_row_div4 + @max_row;
 
18238
        
 
18239
# check multiple-5 success:     1
 
18240
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
18241
INSERT INTO t1
 
18242
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18243
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18244
f_charbig = '#SINGLE#';
 
18245
        
 
18246
# check single-1 success:       1
 
18247
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
18248
INSERT INTO t1
 
18249
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18250
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18251
f_charbig = '#SINGLE#';
 
18252
        
 
18253
# check single-2 success:       1
 
18254
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
18255
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
18256
UPDATE t1 SET f_int1 = @cur_value2
 
18257
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
18258
        
 
18259
# check single-3 success:       1
 
18260
SET @cur_value1= -1;
 
18261
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
18262
UPDATE t1 SET f_int1 = @cur_value1
 
18263
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
18264
        
 
18265
# check single-4 success:       1
 
18266
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
18267
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
18268
        
 
18269
# check single-5 success:       1
 
18270
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
18271
        
 
18272
# check single-6 success:       1
 
18273
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
18274
        
 
18275
# check single-7 success:       1
 
18276
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
18277
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
18278
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
18279
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
18280
f_charbig = '#NULL#';
 
18281
INSERT INTO t1
 
18282
SET f_int1 = NULL , f_int2 = -@max_row,
 
18283
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
18284
f_charbig = '#NULL#';
 
18285
# check null success:    1
 
18286
        
 
18287
# check null-1 success:         1
 
18288
UPDATE t1 SET f_int1 = -@max_row
 
18289
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18290
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18291
        
 
18292
# check null-2 success:         1
 
18293
UPDATE t1 SET f_int1 = NULL
 
18294
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18295
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18296
        
 
18297
# check null-3 success:         1
 
18298
DELETE FROM t1
 
18299
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18300
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18301
        
 
18302
# check null-4 success:         1
 
18303
DELETE FROM t1
 
18304
WHERE f_int1 = 0 AND f_int2 = 0
 
18305
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
18306
AND f_charbig = '#NULL#';
 
18307
SET AUTOCOMMIT= 0;
 
18308
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18309
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18310
FROM t0_template source_tab
 
18311
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18312
        
 
18313
# check transactions-1 success:         1
 
18314
COMMIT WORK;
 
18315
        
 
18316
# check transactions-2 success:         1
 
18317
ROLLBACK WORK;
 
18318
        
 
18319
# check transactions-3 success:         1
 
18320
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18321
COMMIT WORK;
 
18322
ROLLBACK WORK;
 
18323
        
 
18324
# check transactions-4 success:         1
 
18325
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18326
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18327
FROM t0_template source_tab
 
18328
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18329
        
 
18330
# check transactions-5 success:         1
 
18331
ROLLBACK WORK;
 
18332
        
 
18333
# check transactions-6 success:         1
 
18334
# INFO: Storage engine used for t1 seems to be transactional.
 
18335
COMMIT;
 
18336
        
 
18337
# check transactions-7 success:         1
 
18338
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18339
COMMIT WORK;
 
18340
SET @@session.sql_mode = 'traditional';
 
18341
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
18342
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18343
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
18344
'', '', 'was inserted' FROM t0_template
 
18345
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18346
ERROR 22012: Division by 0
 
18347
COMMIT;
 
18348
        
 
18349
# check transactions-8 success:         1
 
18350
# INFO: Storage engine used for t1 seems to be able to revert
 
18351
#       changes made by the failing statement.
 
18352
SET @@session.sql_mode = '';
 
18353
SET AUTOCOMMIT= 1;
 
18354
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18355
COMMIT WORK;
 
18356
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
18357
        
 
18358
# check special-1 success:      1
 
18359
UPDATE t1 SET f_charbig = '';
 
18360
        
 
18361
# check special-2 success:      1
 
18362
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
18363
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18364
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
18365
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18366
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18367
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18368
'just inserted' FROM t0_template
 
18369
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18370
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
18371
BEGIN
 
18372
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18373
f_charbig = 'updated by trigger'
 
18374
      WHERE f_int1 = new.f_int1;
 
18375
END|
 
18376
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18377
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18378
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18379
        
 
18380
# check trigger-1 success:      1
 
18381
DROP TRIGGER trg_1;
 
18382
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18383
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18384
f_charbig = 'just inserted'
 
18385
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18386
DELETE FROM t0_aux
 
18387
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18388
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18389
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18390
'just inserted' FROM t0_template
 
18391
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18392
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
18393
BEGIN
 
18394
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18395
f_charbig = 'updated by trigger'
 
18396
      WHERE f_int1 = new.f_int1;
 
18397
END|
 
18398
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18399
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18400
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18401
        
 
18402
# check trigger-2 success:      1
 
18403
DROP TRIGGER trg_1;
 
18404
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18405
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18406
f_charbig = 'just inserted'
 
18407
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18408
DELETE FROM t0_aux
 
18409
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18410
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18411
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18412
'just inserted' FROM t0_template
 
18413
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18414
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18415
BEGIN
 
18416
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18417
f_charbig = 'updated by trigger'
 
18418
      WHERE f_int1 = new.f_int1;
 
18419
END|
 
18420
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18421
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18422
        
 
18423
# check trigger-3 success:      1
 
18424
DROP TRIGGER trg_1;
 
18425
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18426
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18427
f_charbig = 'just inserted'
 
18428
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18429
DELETE FROM t0_aux
 
18430
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18431
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18432
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18433
'just inserted' FROM t0_template
 
18434
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18435
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18436
BEGIN
 
18437
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18438
f_charbig = 'updated by trigger'
 
18439
      WHERE f_int1 = - old.f_int1;
 
18440
END|
 
18441
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18442
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18443
        
 
18444
# check trigger-4 success:      1
 
18445
DROP TRIGGER trg_1;
 
18446
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18447
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18448
f_charbig = 'just inserted'
 
18449
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18450
DELETE FROM t0_aux
 
18451
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18452
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18453
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18454
'just inserted' FROM t0_template
 
18455
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18456
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18457
BEGIN
 
18458
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18459
f_charbig = 'updated by trigger'
 
18460
      WHERE f_int1 = new.f_int1;
 
18461
END|
 
18462
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18463
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18464
        
 
18465
# check trigger-5 success:      1
 
18466
DROP TRIGGER trg_1;
 
18467
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18468
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18469
f_charbig = 'just inserted'
 
18470
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18471
DELETE FROM t0_aux
 
18472
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18473
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18474
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18475
'just inserted' FROM t0_template
 
18476
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18477
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18478
BEGIN
 
18479
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18480
f_charbig = 'updated by trigger'
 
18481
      WHERE f_int1 = - old.f_int1;
 
18482
END|
 
18483
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18484
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18485
        
 
18486
# check trigger-6 success:      1
 
18487
DROP TRIGGER trg_1;
 
18488
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18489
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18490
f_charbig = 'just inserted'
 
18491
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18492
DELETE FROM t0_aux
 
18493
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18494
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18495
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18496
'just inserted' FROM t0_template
 
18497
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18498
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
18499
BEGIN
 
18500
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18501
f_charbig = 'updated by trigger'
 
18502
      WHERE f_int1 = - old.f_int1;
 
18503
END|
 
18504
DELETE FROM t0_aux
 
18505
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18506
        
 
18507
# check trigger-7 success:      1
 
18508
DROP TRIGGER trg_1;
 
18509
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18510
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18511
f_charbig = 'just inserted'
 
18512
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18513
DELETE FROM t0_aux
 
18514
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18515
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18516
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18517
'just inserted' FROM t0_template
 
18518
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18519
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
18520
BEGIN
 
18521
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18522
f_charbig = 'updated by trigger'
 
18523
      WHERE f_int1 = - old.f_int1;
 
18524
END|
 
18525
DELETE FROM t0_aux
 
18526
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18527
        
 
18528
# check trigger-8 success:      1
 
18529
DROP TRIGGER trg_1;
 
18530
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18531
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18532
f_charbig = 'just inserted'
 
18533
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18534
DELETE FROM t0_aux
 
18535
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18536
DELETE FROM t1
 
18537
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18538
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18539
BEGIN
 
18540
SET new.f_int1 = old.f_int1 + @max_row,
 
18541
new.f_int2 = old.f_int2 - @max_row,
 
18542
new.f_charbig = '####updated per update trigger####';
 
18543
END|
 
18544
UPDATE t1
 
18545
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18546
f_charbig = '####updated per update statement itself####';
 
18547
        
 
18548
# check trigger-9 success:      1
 
18549
DROP TRIGGER trg_2;
 
18550
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18551
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18552
f_charbig = CONCAT('===',f_char1,'===');
 
18553
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18554
BEGIN
 
18555
SET new.f_int1 = new.f_int1 + @max_row,
 
18556
new.f_int2 = new.f_int2 - @max_row,
 
18557
new.f_charbig = '####updated per update trigger####';
 
18558
END|
 
18559
UPDATE t1
 
18560
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18561
f_charbig = '####updated per update statement itself####';
 
18562
        
 
18563
# check trigger-10 success:     1
 
18564
DROP TRIGGER trg_2;
 
18565
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18566
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18567
f_charbig = CONCAT('===',f_char1,'===');
 
18568
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18569
BEGIN
 
18570
SET new.f_int1 = @my_max1 + @counter,
 
18571
new.f_int2 = @my_min2 - @counter,
 
18572
new.f_charbig = '####updated per insert trigger####';
 
18573
SET @counter = @counter + 1;
 
18574
END|
 
18575
SET @counter = 1;
 
18576
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18577
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18578
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18579
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18580
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18581
ORDER BY f_int1;
 
18582
DROP TRIGGER trg_3;
 
18583
        
 
18584
# check trigger-11 success:     1
 
18585
DELETE FROM t1
 
18586
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18587
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18588
AND f_charbig = '####updated per insert trigger####';
 
18589
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18590
BEGIN
 
18591
SET new.f_int1 = @my_max1 + @counter,
 
18592
new.f_int2 = @my_min2 - @counter,
 
18593
new.f_charbig = '####updated per insert trigger####';
 
18594
SET @counter = @counter + 1;
 
18595
END|
 
18596
SET @counter = 1;
 
18597
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18598
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
18599
SELECT CAST(f_int1 AS CHAR),
 
18600
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18601
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18602
ORDER BY f_int1;
 
18603
DROP TRIGGER trg_3;
 
18604
        
 
18605
# check trigger-12 success:     1
 
18606
DELETE FROM t1
 
18607
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18608
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18609
AND f_charbig = '####updated per insert trigger####';
 
18610
ANALYZE  TABLE t1;
 
18611
Table   Op      Msg_type        Msg_text
 
18612
test.t1 analyze status  OK
 
18613
CHECK    TABLE t1 EXTENDED;
 
18614
Table   Op      Msg_type        Msg_text
 
18615
test.t1 check   status  OK
 
18616
CHECKSUM TABLE t1 EXTENDED;
 
18617
Table   Checksum
 
18618
test.t1 <some_value>
 
18619
OPTIMIZE TABLE t1;
 
18620
Table   Op      Msg_type        Msg_text
 
18621
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
18622
test.t1 optimize        status  OK
 
18623
# check layout success:    1
 
18624
REPAIR   TABLE t1 EXTENDED;
 
18625
Table   Op      Msg_type        Msg_text
 
18626
test.t1 repair  note    The storage engine for the table doesn't support repair
 
18627
# check layout success:    1
 
18628
TRUNCATE t1;
 
18629
        
 
18630
# check TRUNCATE success:       1
 
18631
# check layout success:    1
 
18632
# End usability test (inc/partition_check.inc)
 
18633
DROP TABLE t1;
 
18634
CREATE TABLE t1 (
 
18635
f_int1 INTEGER,
 
18636
f_int2 INTEGER,
 
18637
f_char1 CHAR(20),
 
18638
f_char2 CHAR(20),
 
18639
f_charbig VARCHAR(1000)
 
18640
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
18641
)
 
18642
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
18643
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18644
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18645
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
18646
ALTER TABLE t1 DROP INDEX uidx1;
 
18647
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18648
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18649
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18650
# Start usability test (inc/partition_check.inc)
 
18651
create_command
 
18652
SHOW CREATE TABLE t1;
 
18653
Table   Create Table
 
18654
t1      CREATE TABLE `t1` (
 
18655
  `f_int1` int(11) DEFAULT NULL,
 
18656
  `f_int2` int(11) DEFAULT NULL,
 
18657
  `f_char1` char(20) DEFAULT NULL,
 
18658
  `f_char2` char(20) DEFAULT NULL,
 
18659
  `f_charbig` varchar(1000) DEFAULT NULL
 
18660
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
18661
/*!50100 PARTITION BY KEY (f_int1,f_int2)
 
18662
PARTITIONS 5 */
 
18663
 
 
18664
# check prerequisites-1 success:    1
 
18665
# check COUNT(*) success:    1
 
18666
# check MIN/MAX(f_int1) success:    1
 
18667
# check MIN/MAX(f_int2) success:    1
 
18668
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18669
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18670
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
18671
WHERE f_int1 IN (2,3);
 
18672
# check prerequisites-3 success:    1
 
18673
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
18674
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
18675
# check read via f_int1 success: 1
 
18676
# check read via f_int2 success: 1
 
18677
        
 
18678
# check multiple-1 success:     1
 
18679
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
18680
        
 
18681
# check multiple-2 success:     1
 
18682
INSERT INTO t1 SELECT * FROM t0_template
 
18683
WHERE MOD(f_int1,3) = 0;
 
18684
        
 
18685
# check multiple-3 success:     1
 
18686
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
18687
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
18688
AND @max_row_div2 + @max_row_div4;
 
18689
        
 
18690
# check multiple-4 success:     1
 
18691
DELETE FROM t1
 
18692
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
18693
AND @max_row_div2 + @max_row_div4 + @max_row;
 
18694
        
 
18695
# check multiple-5 success:     1
 
18696
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
18697
INSERT INTO t1
 
18698
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18699
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18700
f_charbig = '#SINGLE#';
 
18701
        
 
18702
# check single-1 success:       1
 
18703
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
18704
INSERT INTO t1
 
18705
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18706
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18707
f_charbig = '#SINGLE#';
 
18708
        
 
18709
# check single-2 success:       1
 
18710
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
18711
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
18712
UPDATE t1 SET f_int1 = @cur_value2
 
18713
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
18714
        
 
18715
# check single-3 success:       1
 
18716
SET @cur_value1= -1;
 
18717
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
18718
UPDATE t1 SET f_int1 = @cur_value1
 
18719
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
18720
        
 
18721
# check single-4 success:       1
 
18722
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
18723
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
18724
        
 
18725
# check single-5 success:       1
 
18726
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
18727
        
 
18728
# check single-6 success:       1
 
18729
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
18730
        
 
18731
# check single-7 success:       1
 
18732
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
18733
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
18734
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
18735
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
18736
f_charbig = '#NULL#';
 
18737
INSERT INTO t1
 
18738
SET f_int1 = NULL , f_int2 = -@max_row,
 
18739
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
18740
f_charbig = '#NULL#';
 
18741
# check null success:    1
 
18742
        
 
18743
# check null-1 success:         1
 
18744
UPDATE t1 SET f_int1 = -@max_row
 
18745
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18746
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18747
        
 
18748
# check null-2 success:         1
 
18749
UPDATE t1 SET f_int1 = NULL
 
18750
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18751
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18752
        
 
18753
# check null-3 success:         1
 
18754
DELETE FROM t1
 
18755
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18756
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18757
        
 
18758
# check null-4 success:         1
 
18759
DELETE FROM t1
 
18760
WHERE f_int1 = 0 AND f_int2 = 0
 
18761
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
18762
AND f_charbig = '#NULL#';
 
18763
SET AUTOCOMMIT= 0;
 
18764
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18765
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18766
FROM t0_template source_tab
 
18767
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18768
        
 
18769
# check transactions-1 success:         1
 
18770
COMMIT WORK;
 
18771
        
 
18772
# check transactions-2 success:         1
 
18773
ROLLBACK WORK;
 
18774
        
 
18775
# check transactions-3 success:         1
 
18776
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18777
COMMIT WORK;
 
18778
ROLLBACK WORK;
 
18779
        
 
18780
# check transactions-4 success:         1
 
18781
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18782
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18783
FROM t0_template source_tab
 
18784
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18785
        
 
18786
# check transactions-5 success:         1
 
18787
ROLLBACK WORK;
 
18788
        
 
18789
# check transactions-6 success:         1
 
18790
# INFO: Storage engine used for t1 seems to be transactional.
 
18791
COMMIT;
 
18792
        
 
18793
# check transactions-7 success:         1
 
18794
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18795
COMMIT WORK;
 
18796
SET @@session.sql_mode = 'traditional';
 
18797
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
18798
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18799
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
18800
'', '', 'was inserted' FROM t0_template
 
18801
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18802
ERROR 22012: Division by 0
 
18803
COMMIT;
 
18804
        
 
18805
# check transactions-8 success:         1
 
18806
# INFO: Storage engine used for t1 seems to be able to revert
 
18807
#       changes made by the failing statement.
 
18808
SET @@session.sql_mode = '';
 
18809
SET AUTOCOMMIT= 1;
 
18810
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18811
COMMIT WORK;
 
18812
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
18813
        
 
18814
# check special-1 success:      1
 
18815
UPDATE t1 SET f_charbig = '';
 
18816
        
 
18817
# check special-2 success:      1
 
18818
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
18819
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18820
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
18821
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18822
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18823
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18824
'just inserted' FROM t0_template
 
18825
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18826
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
18827
BEGIN
 
18828
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18829
f_charbig = 'updated by trigger'
 
18830
      WHERE f_int1 = new.f_int1;
 
18831
END|
 
18832
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18833
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18834
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18835
        
 
18836
# check trigger-1 success:      1
 
18837
DROP TRIGGER trg_1;
 
18838
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18839
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18840
f_charbig = 'just inserted'
 
18841
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18842
DELETE FROM t0_aux
 
18843
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18844
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18845
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18846
'just inserted' FROM t0_template
 
18847
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18848
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
18849
BEGIN
 
18850
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18851
f_charbig = 'updated by trigger'
 
18852
      WHERE f_int1 = new.f_int1;
 
18853
END|
 
18854
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18855
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18856
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18857
        
 
18858
# check trigger-2 success:      1
 
18859
DROP TRIGGER trg_1;
 
18860
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18861
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18862
f_charbig = 'just inserted'
 
18863
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18864
DELETE FROM t0_aux
 
18865
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18866
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18867
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18868
'just inserted' FROM t0_template
 
18869
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18870
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18871
BEGIN
 
18872
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18873
f_charbig = 'updated by trigger'
 
18874
      WHERE f_int1 = new.f_int1;
 
18875
END|
 
18876
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18877
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18878
        
 
18879
# check trigger-3 success:      1
 
18880
DROP TRIGGER trg_1;
 
18881
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18882
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18883
f_charbig = 'just inserted'
 
18884
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18885
DELETE FROM t0_aux
 
18886
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18887
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18888
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18889
'just inserted' FROM t0_template
 
18890
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18891
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18892
BEGIN
 
18893
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18894
f_charbig = 'updated by trigger'
 
18895
      WHERE f_int1 = - old.f_int1;
 
18896
END|
 
18897
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18898
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18899
        
 
18900
# check trigger-4 success:      1
 
18901
DROP TRIGGER trg_1;
 
18902
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18903
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18904
f_charbig = 'just inserted'
 
18905
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18906
DELETE FROM t0_aux
 
18907
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18908
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18909
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18910
'just inserted' FROM t0_template
 
18911
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18912
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18913
BEGIN
 
18914
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18915
f_charbig = 'updated by trigger'
 
18916
      WHERE f_int1 = new.f_int1;
 
18917
END|
 
18918
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18919
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18920
        
 
18921
# check trigger-5 success:      1
 
18922
DROP TRIGGER trg_1;
 
18923
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18924
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18925
f_charbig = 'just inserted'
 
18926
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18927
DELETE FROM t0_aux
 
18928
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18929
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18930
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18931
'just inserted' FROM t0_template
 
18932
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18933
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18934
BEGIN
 
18935
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18936
f_charbig = 'updated by trigger'
 
18937
      WHERE f_int1 = - old.f_int1;
 
18938
END|
 
18939
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18940
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18941
        
 
18942
# check trigger-6 success:      1
 
18943
DROP TRIGGER trg_1;
 
18944
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18945
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18946
f_charbig = 'just inserted'
 
18947
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18948
DELETE FROM t0_aux
 
18949
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18950
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18951
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18952
'just inserted' FROM t0_template
 
18953
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18954
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
18955
BEGIN
 
18956
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18957
f_charbig = 'updated by trigger'
 
18958
      WHERE f_int1 = - old.f_int1;
 
18959
END|
 
18960
DELETE FROM t0_aux
 
18961
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18962
        
 
18963
# check trigger-7 success:      1
 
18964
DROP TRIGGER trg_1;
 
18965
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18966
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18967
f_charbig = 'just inserted'
 
18968
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18969
DELETE FROM t0_aux
 
18970
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18971
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18972
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18973
'just inserted' FROM t0_template
 
18974
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18975
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
18976
BEGIN
 
18977
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18978
f_charbig = 'updated by trigger'
 
18979
      WHERE f_int1 = - old.f_int1;
 
18980
END|
 
18981
DELETE FROM t0_aux
 
18982
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18983
        
 
18984
# check trigger-8 success:      1
 
18985
DROP TRIGGER trg_1;
 
18986
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18987
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18988
f_charbig = 'just inserted'
 
18989
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18990
DELETE FROM t0_aux
 
18991
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18992
DELETE FROM t1
 
18993
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18994
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18995
BEGIN
 
18996
SET new.f_int1 = old.f_int1 + @max_row,
 
18997
new.f_int2 = old.f_int2 - @max_row,
 
18998
new.f_charbig = '####updated per update trigger####';
 
18999
END|
 
19000
UPDATE t1
 
19001
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19002
f_charbig = '####updated per update statement itself####';
 
19003
        
 
19004
# check trigger-9 success:      1
 
19005
DROP TRIGGER trg_2;
 
19006
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19007
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19008
f_charbig = CONCAT('===',f_char1,'===');
 
19009
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19010
BEGIN
 
19011
SET new.f_int1 = new.f_int1 + @max_row,
 
19012
new.f_int2 = new.f_int2 - @max_row,
 
19013
new.f_charbig = '####updated per update trigger####';
 
19014
END|
 
19015
UPDATE t1
 
19016
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19017
f_charbig = '####updated per update statement itself####';
 
19018
        
 
19019
# check trigger-10 success:     1
 
19020
DROP TRIGGER trg_2;
 
19021
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19022
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19023
f_charbig = CONCAT('===',f_char1,'===');
 
19024
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19025
BEGIN
 
19026
SET new.f_int1 = @my_max1 + @counter,
 
19027
new.f_int2 = @my_min2 - @counter,
 
19028
new.f_charbig = '####updated per insert trigger####';
 
19029
SET @counter = @counter + 1;
 
19030
END|
 
19031
SET @counter = 1;
 
19032
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19033
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19034
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19035
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19036
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19037
ORDER BY f_int1;
 
19038
DROP TRIGGER trg_3;
 
19039
        
 
19040
# check trigger-11 success:     1
 
19041
DELETE FROM t1
 
19042
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19043
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19044
AND f_charbig = '####updated per insert trigger####';
 
19045
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19046
BEGIN
 
19047
SET new.f_int1 = @my_max1 + @counter,
 
19048
new.f_int2 = @my_min2 - @counter,
 
19049
new.f_charbig = '####updated per insert trigger####';
 
19050
SET @counter = @counter + 1;
 
19051
END|
 
19052
SET @counter = 1;
 
19053
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19054
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
19055
SELECT CAST(f_int1 AS CHAR),
 
19056
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19057
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19058
ORDER BY f_int1;
 
19059
DROP TRIGGER trg_3;
 
19060
        
 
19061
# check trigger-12 success:     1
 
19062
DELETE FROM t1
 
19063
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19064
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19065
AND f_charbig = '####updated per insert trigger####';
 
19066
ANALYZE  TABLE t1;
 
19067
Table   Op      Msg_type        Msg_text
 
19068
test.t1 analyze status  OK
 
19069
CHECK    TABLE t1 EXTENDED;
 
19070
Table   Op      Msg_type        Msg_text
 
19071
test.t1 check   status  OK
 
19072
CHECKSUM TABLE t1 EXTENDED;
 
19073
Table   Checksum
 
19074
test.t1 <some_value>
 
19075
OPTIMIZE TABLE t1;
 
19076
Table   Op      Msg_type        Msg_text
 
19077
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
19078
test.t1 optimize        status  OK
 
19079
# check layout success:    1
 
19080
REPAIR   TABLE t1 EXTENDED;
 
19081
Table   Op      Msg_type        Msg_text
 
19082
test.t1 repair  note    The storage engine for the table doesn't support repair
 
19083
# check layout success:    1
 
19084
TRUNCATE t1;
 
19085
        
 
19086
# check TRUNCATE success:       1
 
19087
# check layout success:    1
 
19088
# End usability test (inc/partition_check.inc)
 
19089
DROP TABLE t1;
 
19090
CREATE TABLE t1 (
 
19091
f_int1 INTEGER,
 
19092
f_int2 INTEGER,
 
19093
f_char1 CHAR(20),
 
19094
f_char2 CHAR(20),
 
19095
f_charbig VARCHAR(1000)
 
19096
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
19097
)
 
19098
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
19099
(PARTITION part_3 VALUES IN (-3),
 
19100
PARTITION part_2 VALUES IN (-2),
 
19101
PARTITION part_1 VALUES IN (-1),
 
19102
PARTITION part_N VALUES IN (NULL),
 
19103
PARTITION part0 VALUES IN (0),
 
19104
PARTITION part1 VALUES IN (1),
 
19105
PARTITION part2 VALUES IN (2),
 
19106
PARTITION part3 VALUES IN (3));
 
19107
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19108
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19109
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
19110
ALTER TABLE t1 DROP INDEX uidx1;
 
19111
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19112
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19113
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19114
# Start usability test (inc/partition_check.inc)
 
19115
create_command
 
19116
SHOW CREATE TABLE t1;
 
19117
Table   Create Table
 
19118
t1      CREATE TABLE `t1` (
 
19119
  `f_int1` int(11) DEFAULT NULL,
 
19120
  `f_int2` int(11) DEFAULT NULL,
 
19121
  `f_char1` char(20) DEFAULT NULL,
 
19122
  `f_char2` char(20) DEFAULT NULL,
 
19123
  `f_charbig` varchar(1000) DEFAULT NULL
 
19124
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
19125
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
 
19126
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
19127
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
19128
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
19129
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
19130
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
19131
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
19132
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
19133
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
19134
 
 
19135
# check prerequisites-1 success:    1
 
19136
# check COUNT(*) success:    1
 
19137
# check MIN/MAX(f_int1) success:    1
 
19138
# check MIN/MAX(f_int2) success:    1
 
19139
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19140
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19141
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
19142
WHERE f_int1 IN (2,3);
 
19143
# check prerequisites-3 success:    1
 
19144
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
19145
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
19146
# check read via f_int1 success: 1
 
19147
# check read via f_int2 success: 1
 
19148
        
 
19149
# check multiple-1 success:     1
 
19150
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
19151
        
 
19152
# check multiple-2 success:     1
 
19153
INSERT INTO t1 SELECT * FROM t0_template
 
19154
WHERE MOD(f_int1,3) = 0;
 
19155
        
 
19156
# check multiple-3 success:     1
 
19157
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
19158
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
19159
AND @max_row_div2 + @max_row_div4;
 
19160
        
 
19161
# check multiple-4 success:     1
 
19162
DELETE FROM t1
 
19163
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
19164
AND @max_row_div2 + @max_row_div4 + @max_row;
 
19165
        
 
19166
# check multiple-5 success:     1
 
19167
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
19168
INSERT INTO t1
 
19169
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19170
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19171
f_charbig = '#SINGLE#';
 
19172
        
 
19173
# check single-1 success:       1
 
19174
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
19175
INSERT INTO t1
 
19176
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19177
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19178
f_charbig = '#SINGLE#';
 
19179
        
 
19180
# check single-2 success:       1
 
19181
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
19182
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
19183
UPDATE t1 SET f_int1 = @cur_value2
 
19184
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
19185
        
 
19186
# check single-3 success:       1
 
19187
SET @cur_value1= -1;
 
19188
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
19189
UPDATE t1 SET f_int1 = @cur_value1
 
19190
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
19191
        
 
19192
# check single-4 success:       1
 
19193
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
19194
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
19195
        
 
19196
# check single-5 success:       1
 
19197
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
19198
        
 
19199
# check single-6 success:       1
 
19200
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
19201
        
 
19202
# check single-7 success:       1
 
19203
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
19204
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
19205
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
19206
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
19207
f_charbig = '#NULL#';
 
19208
INSERT INTO t1
 
19209
SET f_int1 = NULL , f_int2 = -@max_row,
 
19210
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
19211
f_charbig = '#NULL#';
 
19212
# check null success:    1
 
19213
        
 
19214
# check null-1 success:         1
 
19215
UPDATE t1 SET f_int1 = -@max_row
 
19216
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19217
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19218
        
 
19219
# check null-2 success:         1
 
19220
UPDATE t1 SET f_int1 = NULL
 
19221
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19222
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19223
        
 
19224
# check null-3 success:         1
 
19225
DELETE FROM t1
 
19226
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19227
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19228
        
 
19229
# check null-4 success:         1
 
19230
DELETE FROM t1
 
19231
WHERE f_int1 = 0 AND f_int2 = 0
 
19232
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
19233
AND f_charbig = '#NULL#';
 
19234
SET AUTOCOMMIT= 0;
 
19235
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19236
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19237
FROM t0_template source_tab
 
19238
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19239
        
 
19240
# check transactions-1 success:         1
 
19241
COMMIT WORK;
 
19242
        
 
19243
# check transactions-2 success:         1
 
19244
ROLLBACK WORK;
 
19245
        
 
19246
# check transactions-3 success:         1
 
19247
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19248
COMMIT WORK;
 
19249
ROLLBACK WORK;
 
19250
        
 
19251
# check transactions-4 success:         1
 
19252
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19253
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19254
FROM t0_template source_tab
 
19255
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19256
        
 
19257
# check transactions-5 success:         1
 
19258
ROLLBACK WORK;
 
19259
        
 
19260
# check transactions-6 success:         1
 
19261
# INFO: Storage engine used for t1 seems to be transactional.
 
19262
COMMIT;
 
19263
        
 
19264
# check transactions-7 success:         1
 
19265
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19266
COMMIT WORK;
 
19267
SET @@session.sql_mode = 'traditional';
 
19268
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
19269
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19270
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
19271
'', '', 'was inserted' FROM t0_template
 
19272
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19273
ERROR 22012: Division by 0
 
19274
COMMIT;
 
19275
        
 
19276
# check transactions-8 success:         1
 
19277
# INFO: Storage engine used for t1 seems to be able to revert
 
19278
#       changes made by the failing statement.
 
19279
SET @@session.sql_mode = '';
 
19280
SET AUTOCOMMIT= 1;
 
19281
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19282
COMMIT WORK;
 
19283
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
19284
        
 
19285
# check special-1 success:      1
 
19286
UPDATE t1 SET f_charbig = '';
 
19287
        
 
19288
# check special-2 success:      1
 
19289
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
19290
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19291
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
19292
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19293
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19294
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19295
'just inserted' FROM t0_template
 
19296
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19297
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
19298
BEGIN
 
19299
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19300
f_charbig = 'updated by trigger'
 
19301
      WHERE f_int1 = new.f_int1;
 
19302
END|
 
19303
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19304
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19305
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19306
        
 
19307
# check trigger-1 success:      1
 
19308
DROP TRIGGER trg_1;
 
19309
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19310
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19311
f_charbig = 'just inserted'
 
19312
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19313
DELETE FROM t0_aux
 
19314
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19315
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19316
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19317
'just inserted' FROM t0_template
 
19318
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19319
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
19320
BEGIN
 
19321
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19322
f_charbig = 'updated by trigger'
 
19323
      WHERE f_int1 = new.f_int1;
 
19324
END|
 
19325
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19326
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19327
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19328
        
 
19329
# check trigger-2 success:      1
 
19330
DROP TRIGGER trg_1;
 
19331
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19332
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19333
f_charbig = 'just inserted'
 
19334
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19335
DELETE FROM t0_aux
 
19336
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19337
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19338
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19339
'just inserted' FROM t0_template
 
19340
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19341
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19342
BEGIN
 
19343
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19344
f_charbig = 'updated by trigger'
 
19345
      WHERE f_int1 = new.f_int1;
 
19346
END|
 
19347
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19348
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19349
        
 
19350
# check trigger-3 success:      1
 
19351
DROP TRIGGER trg_1;
 
19352
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19353
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19354
f_charbig = 'just inserted'
 
19355
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19356
DELETE FROM t0_aux
 
19357
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19358
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19359
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19360
'just inserted' FROM t0_template
 
19361
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19362
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19363
BEGIN
 
19364
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19365
f_charbig = 'updated by trigger'
 
19366
      WHERE f_int1 = - old.f_int1;
 
19367
END|
 
19368
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19369
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19370
        
 
19371
# check trigger-4 success:      1
 
19372
DROP TRIGGER trg_1;
 
19373
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19374
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19375
f_charbig = 'just inserted'
 
19376
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19377
DELETE FROM t0_aux
 
19378
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19379
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19380
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19381
'just inserted' FROM t0_template
 
19382
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19383
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19384
BEGIN
 
19385
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19386
f_charbig = 'updated by trigger'
 
19387
      WHERE f_int1 = new.f_int1;
 
19388
END|
 
19389
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19390
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19391
        
 
19392
# check trigger-5 success:      1
 
19393
DROP TRIGGER trg_1;
 
19394
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19395
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19396
f_charbig = 'just inserted'
 
19397
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19398
DELETE FROM t0_aux
 
19399
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19400
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19401
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19402
'just inserted' FROM t0_template
 
19403
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19404
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19405
BEGIN
 
19406
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19407
f_charbig = 'updated by trigger'
 
19408
      WHERE f_int1 = - old.f_int1;
 
19409
END|
 
19410
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19411
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19412
        
 
19413
# check trigger-6 success:      1
 
19414
DROP TRIGGER trg_1;
 
19415
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19416
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19417
f_charbig = 'just inserted'
 
19418
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19419
DELETE FROM t0_aux
 
19420
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19421
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19422
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19423
'just inserted' FROM t0_template
 
19424
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19425
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
19426
BEGIN
 
19427
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19428
f_charbig = 'updated by trigger'
 
19429
      WHERE f_int1 = - old.f_int1;
 
19430
END|
 
19431
DELETE FROM t0_aux
 
19432
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19433
        
 
19434
# check trigger-7 success:      1
 
19435
DROP TRIGGER trg_1;
 
19436
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19437
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19438
f_charbig = 'just inserted'
 
19439
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19440
DELETE FROM t0_aux
 
19441
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19442
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19443
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19444
'just inserted' FROM t0_template
 
19445
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19446
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
19447
BEGIN
 
19448
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19449
f_charbig = 'updated by trigger'
 
19450
      WHERE f_int1 = - old.f_int1;
 
19451
END|
 
19452
DELETE FROM t0_aux
 
19453
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19454
        
 
19455
# check trigger-8 success:      1
 
19456
DROP TRIGGER trg_1;
 
19457
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19458
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19459
f_charbig = 'just inserted'
 
19460
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19461
DELETE FROM t0_aux
 
19462
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19463
DELETE FROM t1
 
19464
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19465
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19466
BEGIN
 
19467
SET new.f_int1 = old.f_int1 + @max_row,
 
19468
new.f_int2 = old.f_int2 - @max_row,
 
19469
new.f_charbig = '####updated per update trigger####';
 
19470
END|
 
19471
UPDATE t1
 
19472
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19473
f_charbig = '####updated per update statement itself####';
 
19474
        
 
19475
# check trigger-9 success:      1
 
19476
DROP TRIGGER trg_2;
 
19477
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19478
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19479
f_charbig = CONCAT('===',f_char1,'===');
 
19480
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19481
BEGIN
 
19482
SET new.f_int1 = new.f_int1 + @max_row,
 
19483
new.f_int2 = new.f_int2 - @max_row,
 
19484
new.f_charbig = '####updated per update trigger####';
 
19485
END|
 
19486
UPDATE t1
 
19487
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19488
f_charbig = '####updated per update statement itself####';
 
19489
        
 
19490
# check trigger-10 success:     1
 
19491
DROP TRIGGER trg_2;
 
19492
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19493
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19494
f_charbig = CONCAT('===',f_char1,'===');
 
19495
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19496
BEGIN
 
19497
SET new.f_int1 = @my_max1 + @counter,
 
19498
new.f_int2 = @my_min2 - @counter,
 
19499
new.f_charbig = '####updated per insert trigger####';
 
19500
SET @counter = @counter + 1;
 
19501
END|
 
19502
SET @counter = 1;
 
19503
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19504
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19505
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19506
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19507
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19508
ORDER BY f_int1;
 
19509
DROP TRIGGER trg_3;
 
19510
        
 
19511
# check trigger-11 success:     1
 
19512
DELETE FROM t1
 
19513
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19514
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19515
AND f_charbig = '####updated per insert trigger####';
 
19516
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19517
BEGIN
 
19518
SET new.f_int1 = @my_max1 + @counter,
 
19519
new.f_int2 = @my_min2 - @counter,
 
19520
new.f_charbig = '####updated per insert trigger####';
 
19521
SET @counter = @counter + 1;
 
19522
END|
 
19523
SET @counter = 1;
 
19524
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19525
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
19526
SELECT CAST(f_int1 AS CHAR),
 
19527
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19528
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19529
ORDER BY f_int1;
 
19530
DROP TRIGGER trg_3;
 
19531
        
 
19532
# check trigger-12 success:     1
 
19533
DELETE FROM t1
 
19534
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19535
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19536
AND f_charbig = '####updated per insert trigger####';
 
19537
ANALYZE  TABLE t1;
 
19538
Table   Op      Msg_type        Msg_text
 
19539
test.t1 analyze status  OK
 
19540
CHECK    TABLE t1 EXTENDED;
 
19541
Table   Op      Msg_type        Msg_text
 
19542
test.t1 check   status  OK
 
19543
CHECKSUM TABLE t1 EXTENDED;
 
19544
Table   Checksum
 
19545
test.t1 <some_value>
 
19546
OPTIMIZE TABLE t1;
 
19547
Table   Op      Msg_type        Msg_text
 
19548
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
19549
test.t1 optimize        status  OK
 
19550
# check layout success:    1
 
19551
REPAIR   TABLE t1 EXTENDED;
 
19552
Table   Op      Msg_type        Msg_text
 
19553
test.t1 repair  note    The storage engine for the table doesn't support repair
 
19554
# check layout success:    1
 
19555
TRUNCATE t1;
 
19556
        
 
19557
# check TRUNCATE success:       1
 
19558
# check layout success:    1
 
19559
# End usability test (inc/partition_check.inc)
 
19560
DROP TABLE t1;
 
19561
CREATE TABLE t1 (
 
19562
f_int1 INTEGER,
 
19563
f_int2 INTEGER,
 
19564
f_char1 CHAR(20),
 
19565
f_char2 CHAR(20),
 
19566
f_charbig VARCHAR(1000)
 
19567
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
19568
)
 
19569
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
19570
(PARTITION parta VALUES LESS THAN (0),
 
19571
PARTITION partb VALUES LESS THAN (5),
 
19572
PARTITION partc VALUES LESS THAN (10),
 
19573
PARTITION partd VALUES LESS THAN (10 + 5),
 
19574
PARTITION parte VALUES LESS THAN (20),
 
19575
PARTITION partf VALUES LESS THAN (2147483646));
 
19576
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19577
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19578
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
19579
ALTER TABLE t1 DROP INDEX uidx1;
 
19580
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19581
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19582
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19583
# Start usability test (inc/partition_check.inc)
 
19584
create_command
 
19585
SHOW CREATE TABLE t1;
 
19586
Table   Create Table
 
19587
t1      CREATE TABLE `t1` (
 
19588
  `f_int1` int(11) DEFAULT NULL,
 
19589
  `f_int2` int(11) DEFAULT NULL,
 
19590
  `f_char1` char(20) DEFAULT NULL,
 
19591
  `f_char2` char(20) DEFAULT NULL,
 
19592
  `f_charbig` varchar(1000) DEFAULT NULL
 
19593
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
19594
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
 
19595
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
19596
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
19597
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
19598
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
19599
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
19600
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
19601
 
 
19602
# check prerequisites-1 success:    1
 
19603
# check COUNT(*) success:    1
 
19604
# check MIN/MAX(f_int1) success:    1
 
19605
# check MIN/MAX(f_int2) success:    1
 
19606
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19607
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19608
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
19609
WHERE f_int1 IN (2,3);
 
19610
# check prerequisites-3 success:    1
 
19611
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
19612
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
19613
# check read via f_int1 success: 1
 
19614
# check read via f_int2 success: 1
 
19615
        
 
19616
# check multiple-1 success:     1
 
19617
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
19618
        
 
19619
# check multiple-2 success:     1
 
19620
INSERT INTO t1 SELECT * FROM t0_template
 
19621
WHERE MOD(f_int1,3) = 0;
 
19622
        
 
19623
# check multiple-3 success:     1
 
19624
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
19625
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
19626
AND @max_row_div2 + @max_row_div4;
 
19627
        
 
19628
# check multiple-4 success:     1
 
19629
DELETE FROM t1
 
19630
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
19631
AND @max_row_div2 + @max_row_div4 + @max_row;
 
19632
        
 
19633
# check multiple-5 success:     1
 
19634
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
19635
INSERT INTO t1
 
19636
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19637
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19638
f_charbig = '#SINGLE#';
 
19639
        
 
19640
# check single-1 success:       1
 
19641
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
19642
INSERT INTO t1
 
19643
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19644
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19645
f_charbig = '#SINGLE#';
 
19646
        
 
19647
# check single-2 success:       1
 
19648
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
19649
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
19650
UPDATE t1 SET f_int1 = @cur_value2
 
19651
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
19652
        
 
19653
# check single-3 success:       1
 
19654
SET @cur_value1= -1;
 
19655
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
19656
UPDATE t1 SET f_int1 = @cur_value1
 
19657
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
19658
        
 
19659
# check single-4 success:       1
 
19660
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
19661
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
19662
        
 
19663
# check single-5 success:       1
 
19664
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
19665
        
 
19666
# check single-6 success:       1
 
19667
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
19668
ERROR HY000: Table has no partition for value 2147483647
 
19669
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
19670
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
19671
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
19672
f_charbig = '#NULL#';
 
19673
INSERT INTO t1
 
19674
SET f_int1 = NULL , f_int2 = -@max_row,
 
19675
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
19676
f_charbig = '#NULL#';
 
19677
# check null success:    1
 
19678
        
 
19679
# check null-1 success:         1
 
19680
UPDATE t1 SET f_int1 = -@max_row
 
19681
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19682
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19683
        
 
19684
# check null-2 success:         1
 
19685
UPDATE t1 SET f_int1 = NULL
 
19686
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19687
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19688
        
 
19689
# check null-3 success:         1
 
19690
DELETE FROM t1
 
19691
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19692
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19693
        
 
19694
# check null-4 success:         1
 
19695
DELETE FROM t1
 
19696
WHERE f_int1 = 0 AND f_int2 = 0
 
19697
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
19698
AND f_charbig = '#NULL#';
 
19699
SET AUTOCOMMIT= 0;
 
19700
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19701
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19702
FROM t0_template source_tab
 
19703
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19704
        
 
19705
# check transactions-1 success:         1
 
19706
COMMIT WORK;
 
19707
        
 
19708
# check transactions-2 success:         1
 
19709
ROLLBACK WORK;
 
19710
        
 
19711
# check transactions-3 success:         1
 
19712
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19713
COMMIT WORK;
 
19714
ROLLBACK WORK;
 
19715
        
 
19716
# check transactions-4 success:         1
 
19717
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19718
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19719
FROM t0_template source_tab
 
19720
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19721
        
 
19722
# check transactions-5 success:         1
 
19723
ROLLBACK WORK;
 
19724
        
 
19725
# check transactions-6 success:         1
 
19726
# INFO: Storage engine used for t1 seems to be transactional.
 
19727
COMMIT;
 
19728
        
 
19729
# check transactions-7 success:         1
 
19730
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19731
COMMIT WORK;
 
19732
SET @@session.sql_mode = 'traditional';
 
19733
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
19734
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19735
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
19736
'', '', 'was inserted' FROM t0_template
 
19737
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19738
ERROR 22012: Division by 0
 
19739
COMMIT;
 
19740
        
 
19741
# check transactions-8 success:         1
 
19742
# INFO: Storage engine used for t1 seems to be able to revert
 
19743
#       changes made by the failing statement.
 
19744
SET @@session.sql_mode = '';
 
19745
SET AUTOCOMMIT= 1;
 
19746
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19747
COMMIT WORK;
 
19748
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
19749
        
 
19750
# check special-1 success:      1
 
19751
UPDATE t1 SET f_charbig = '';
 
19752
        
 
19753
# check special-2 success:      1
 
19754
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
19755
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19756
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
19757
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19758
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19759
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19760
'just inserted' FROM t0_template
 
19761
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19762
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
19763
BEGIN
 
19764
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19765
f_charbig = 'updated by trigger'
 
19766
      WHERE f_int1 = new.f_int1;
 
19767
END|
 
19768
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19769
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19770
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19771
        
 
19772
# check trigger-1 success:      1
 
19773
DROP TRIGGER trg_1;
 
19774
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19775
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19776
f_charbig = 'just inserted'
 
19777
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19778
DELETE FROM t0_aux
 
19779
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19780
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19781
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19782
'just inserted' FROM t0_template
 
19783
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19784
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
19785
BEGIN
 
19786
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19787
f_charbig = 'updated by trigger'
 
19788
      WHERE f_int1 = new.f_int1;
 
19789
END|
 
19790
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19791
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19792
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19793
        
 
19794
# check trigger-2 success:      1
 
19795
DROP TRIGGER trg_1;
 
19796
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19797
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19798
f_charbig = 'just inserted'
 
19799
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19800
DELETE FROM t0_aux
 
19801
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19802
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19803
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19804
'just inserted' FROM t0_template
 
19805
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19806
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19807
BEGIN
 
19808
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19809
f_charbig = 'updated by trigger'
 
19810
      WHERE f_int1 = new.f_int1;
 
19811
END|
 
19812
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19813
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19814
        
 
19815
# check trigger-3 success:      1
 
19816
DROP TRIGGER trg_1;
 
19817
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19818
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19819
f_charbig = 'just inserted'
 
19820
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19821
DELETE FROM t0_aux
 
19822
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19823
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19824
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19825
'just inserted' FROM t0_template
 
19826
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19827
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19828
BEGIN
 
19829
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19830
f_charbig = 'updated by trigger'
 
19831
      WHERE f_int1 = - old.f_int1;
 
19832
END|
 
19833
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19834
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19835
        
 
19836
# check trigger-4 success:      1
 
19837
DROP TRIGGER trg_1;
 
19838
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19839
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19840
f_charbig = 'just inserted'
 
19841
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19842
DELETE FROM t0_aux
 
19843
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19844
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19845
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19846
'just inserted' FROM t0_template
 
19847
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19848
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19849
BEGIN
 
19850
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19851
f_charbig = 'updated by trigger'
 
19852
      WHERE f_int1 = new.f_int1;
 
19853
END|
 
19854
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19855
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19856
        
 
19857
# check trigger-5 success:      1
 
19858
DROP TRIGGER trg_1;
 
19859
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19860
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19861
f_charbig = 'just inserted'
 
19862
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19863
DELETE FROM t0_aux
 
19864
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19865
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19866
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19867
'just inserted' FROM t0_template
 
19868
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19869
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19870
BEGIN
 
19871
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19872
f_charbig = 'updated by trigger'
 
19873
      WHERE f_int1 = - old.f_int1;
 
19874
END|
 
19875
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19876
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19877
        
 
19878
# check trigger-6 success:      1
 
19879
DROP TRIGGER trg_1;
 
19880
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19881
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19882
f_charbig = 'just inserted'
 
19883
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19884
DELETE FROM t0_aux
 
19885
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19886
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19887
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19888
'just inserted' FROM t0_template
 
19889
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19890
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
19891
BEGIN
 
19892
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19893
f_charbig = 'updated by trigger'
 
19894
      WHERE f_int1 = - old.f_int1;
 
19895
END|
 
19896
DELETE FROM t0_aux
 
19897
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19898
        
 
19899
# check trigger-7 success:      1
 
19900
DROP TRIGGER trg_1;
 
19901
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19902
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19903
f_charbig = 'just inserted'
 
19904
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19905
DELETE FROM t0_aux
 
19906
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19907
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19908
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19909
'just inserted' FROM t0_template
 
19910
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19911
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
19912
BEGIN
 
19913
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19914
f_charbig = 'updated by trigger'
 
19915
      WHERE f_int1 = - old.f_int1;
 
19916
END|
 
19917
DELETE FROM t0_aux
 
19918
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19919
        
 
19920
# check trigger-8 success:      1
 
19921
DROP TRIGGER trg_1;
 
19922
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19923
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19924
f_charbig = 'just inserted'
 
19925
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19926
DELETE FROM t0_aux
 
19927
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19928
DELETE FROM t1
 
19929
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19930
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19931
BEGIN
 
19932
SET new.f_int1 = old.f_int1 + @max_row,
 
19933
new.f_int2 = old.f_int2 - @max_row,
 
19934
new.f_charbig = '####updated per update trigger####';
 
19935
END|
 
19936
UPDATE t1
 
19937
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19938
f_charbig = '####updated per update statement itself####';
 
19939
        
 
19940
# check trigger-9 success:      1
 
19941
DROP TRIGGER trg_2;
 
19942
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19943
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19944
f_charbig = CONCAT('===',f_char1,'===');
 
19945
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19946
BEGIN
 
19947
SET new.f_int1 = new.f_int1 + @max_row,
 
19948
new.f_int2 = new.f_int2 - @max_row,
 
19949
new.f_charbig = '####updated per update trigger####';
 
19950
END|
 
19951
UPDATE t1
 
19952
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19953
f_charbig = '####updated per update statement itself####';
 
19954
        
 
19955
# check trigger-10 success:     1
 
19956
DROP TRIGGER trg_2;
 
19957
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19958
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19959
f_charbig = CONCAT('===',f_char1,'===');
 
19960
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19961
BEGIN
 
19962
SET new.f_int1 = @my_max1 + @counter,
 
19963
new.f_int2 = @my_min2 - @counter,
 
19964
new.f_charbig = '####updated per insert trigger####';
 
19965
SET @counter = @counter + 1;
 
19966
END|
 
19967
SET @counter = 1;
 
19968
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19969
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19970
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19971
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19972
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19973
ORDER BY f_int1;
 
19974
DROP TRIGGER trg_3;
 
19975
        
 
19976
# check trigger-11 success:     1
 
19977
DELETE FROM t1
 
19978
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19979
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19980
AND f_charbig = '####updated per insert trigger####';
 
19981
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19982
BEGIN
 
19983
SET new.f_int1 = @my_max1 + @counter,
 
19984
new.f_int2 = @my_min2 - @counter,
 
19985
new.f_charbig = '####updated per insert trigger####';
 
19986
SET @counter = @counter + 1;
 
19987
END|
 
19988
SET @counter = 1;
 
19989
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19990
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
19991
SELECT CAST(f_int1 AS CHAR),
 
19992
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19993
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19994
ORDER BY f_int1;
 
19995
DROP TRIGGER trg_3;
 
19996
        
 
19997
# check trigger-12 success:     1
 
19998
DELETE FROM t1
 
19999
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20000
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20001
AND f_charbig = '####updated per insert trigger####';
 
20002
ANALYZE  TABLE t1;
 
20003
Table   Op      Msg_type        Msg_text
 
20004
test.t1 analyze status  OK
 
20005
CHECK    TABLE t1 EXTENDED;
 
20006
Table   Op      Msg_type        Msg_text
 
20007
test.t1 check   status  OK
 
20008
CHECKSUM TABLE t1 EXTENDED;
 
20009
Table   Checksum
 
20010
test.t1 <some_value>
 
20011
OPTIMIZE TABLE t1;
 
20012
Table   Op      Msg_type        Msg_text
 
20013
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
20014
test.t1 optimize        status  OK
 
20015
# check layout success:    1
 
20016
REPAIR   TABLE t1 EXTENDED;
 
20017
Table   Op      Msg_type        Msg_text
 
20018
test.t1 repair  note    The storage engine for the table doesn't support repair
 
20019
# check layout success:    1
 
20020
TRUNCATE t1;
 
20021
        
 
20022
# check TRUNCATE success:       1
 
20023
# check layout success:    1
 
20024
# End usability test (inc/partition_check.inc)
 
20025
DROP TABLE t1;
 
20026
CREATE TABLE t1 (
 
20027
f_int1 INTEGER,
 
20028
f_int2 INTEGER,
 
20029
f_char1 CHAR(20),
 
20030
f_char2 CHAR(20),
 
20031
f_charbig VARCHAR(1000)
 
20032
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
20033
)
 
20034
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
20035
(PARTITION parta VALUES LESS THAN (0),
 
20036
PARTITION partb VALUES LESS THAN (5),
 
20037
PARTITION partc VALUES LESS THAN (10),
 
20038
PARTITION partd VALUES LESS THAN (2147483646));
 
20039
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20040
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20041
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
20042
ALTER TABLE t1 DROP INDEX uidx1;
 
20043
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20044
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20045
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20046
# Start usability test (inc/partition_check.inc)
 
20047
create_command
 
20048
SHOW CREATE TABLE t1;
 
20049
Table   Create Table
 
20050
t1      CREATE TABLE `t1` (
 
20051
  `f_int1` int(11) DEFAULT NULL,
 
20052
  `f_int2` int(11) DEFAULT NULL,
 
20053
  `f_char1` char(20) DEFAULT NULL,
 
20054
  `f_char2` char(20) DEFAULT NULL,
 
20055
  `f_charbig` varchar(1000) DEFAULT NULL
 
20056
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
20057
/*!50100 PARTITION BY RANGE (f_int1)
 
20058
SUBPARTITION BY HASH (f_int2)
 
20059
SUBPARTITIONS 2
 
20060
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
20061
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
20062
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
20063
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
20064
 
 
20065
# check prerequisites-1 success:    1
 
20066
# check COUNT(*) success:    1
 
20067
# check MIN/MAX(f_int1) success:    1
 
20068
# check MIN/MAX(f_int2) success:    1
 
20069
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20070
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20071
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
20072
WHERE f_int1 IN (2,3);
 
20073
# check prerequisites-3 success:    1
 
20074
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
20075
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
20076
# check read via f_int1 success: 1
 
20077
# check read via f_int2 success: 1
 
20078
        
 
20079
# check multiple-1 success:     1
 
20080
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
20081
        
 
20082
# check multiple-2 success:     1
 
20083
INSERT INTO t1 SELECT * FROM t0_template
 
20084
WHERE MOD(f_int1,3) = 0;
 
20085
        
 
20086
# check multiple-3 success:     1
 
20087
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
20088
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
20089
AND @max_row_div2 + @max_row_div4;
 
20090
        
 
20091
# check multiple-4 success:     1
 
20092
DELETE FROM t1
 
20093
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
20094
AND @max_row_div2 + @max_row_div4 + @max_row;
 
20095
        
 
20096
# check multiple-5 success:     1
 
20097
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
20098
INSERT INTO t1
 
20099
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20100
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20101
f_charbig = '#SINGLE#';
 
20102
        
 
20103
# check single-1 success:       1
 
20104
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
20105
INSERT INTO t1
 
20106
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20107
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20108
f_charbig = '#SINGLE#';
 
20109
        
 
20110
# check single-2 success:       1
 
20111
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
20112
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
20113
UPDATE t1 SET f_int1 = @cur_value2
 
20114
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
20115
        
 
20116
# check single-3 success:       1
 
20117
SET @cur_value1= -1;
 
20118
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
20119
UPDATE t1 SET f_int1 = @cur_value1
 
20120
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
20121
        
 
20122
# check single-4 success:       1
 
20123
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
20124
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
20125
        
 
20126
# check single-5 success:       1
 
20127
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
20128
        
 
20129
# check single-6 success:       1
 
20130
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
20131
ERROR HY000: Table has no partition for value 2147483647
 
20132
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
20133
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
20134
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
20135
f_charbig = '#NULL#';
 
20136
INSERT INTO t1
 
20137
SET f_int1 = NULL , f_int2 = -@max_row,
 
20138
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
20139
f_charbig = '#NULL#';
 
20140
# check null success:    1
 
20141
        
 
20142
# check null-1 success:         1
 
20143
UPDATE t1 SET f_int1 = -@max_row
 
20144
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20145
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20146
        
 
20147
# check null-2 success:         1
 
20148
UPDATE t1 SET f_int1 = NULL
 
20149
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20150
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20151
        
 
20152
# check null-3 success:         1
 
20153
DELETE FROM t1
 
20154
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20155
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20156
        
 
20157
# check null-4 success:         1
 
20158
DELETE FROM t1
 
20159
WHERE f_int1 = 0 AND f_int2 = 0
 
20160
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
20161
AND f_charbig = '#NULL#';
 
20162
SET AUTOCOMMIT= 0;
 
20163
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20164
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20165
FROM t0_template source_tab
 
20166
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20167
        
 
20168
# check transactions-1 success:         1
 
20169
COMMIT WORK;
 
20170
        
 
20171
# check transactions-2 success:         1
 
20172
ROLLBACK WORK;
 
20173
        
 
20174
# check transactions-3 success:         1
 
20175
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20176
COMMIT WORK;
 
20177
ROLLBACK WORK;
 
20178
        
 
20179
# check transactions-4 success:         1
 
20180
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20181
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20182
FROM t0_template source_tab
 
20183
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20184
        
 
20185
# check transactions-5 success:         1
 
20186
ROLLBACK WORK;
 
20187
        
 
20188
# check transactions-6 success:         1
 
20189
# INFO: Storage engine used for t1 seems to be transactional.
 
20190
COMMIT;
 
20191
        
 
20192
# check transactions-7 success:         1
 
20193
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20194
COMMIT WORK;
 
20195
SET @@session.sql_mode = 'traditional';
 
20196
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
20197
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20198
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
20199
'', '', 'was inserted' FROM t0_template
 
20200
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20201
ERROR 22012: Division by 0
 
20202
COMMIT;
 
20203
        
 
20204
# check transactions-8 success:         1
 
20205
# INFO: Storage engine used for t1 seems to be able to revert
 
20206
#       changes made by the failing statement.
 
20207
SET @@session.sql_mode = '';
 
20208
SET AUTOCOMMIT= 1;
 
20209
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20210
COMMIT WORK;
 
20211
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
20212
        
 
20213
# check special-1 success:      1
 
20214
UPDATE t1 SET f_charbig = '';
 
20215
        
 
20216
# check special-2 success:      1
 
20217
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
20218
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20219
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
20220
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20221
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20222
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20223
'just inserted' FROM t0_template
 
20224
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20225
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
20226
BEGIN
 
20227
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20228
f_charbig = 'updated by trigger'
 
20229
      WHERE f_int1 = new.f_int1;
 
20230
END|
 
20231
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20232
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20233
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20234
        
 
20235
# check trigger-1 success:      1
 
20236
DROP TRIGGER trg_1;
 
20237
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20238
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20239
f_charbig = 'just inserted'
 
20240
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20241
DELETE FROM t0_aux
 
20242
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20243
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20244
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20245
'just inserted' FROM t0_template
 
20246
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20247
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
20248
BEGIN
 
20249
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20250
f_charbig = 'updated by trigger'
 
20251
      WHERE f_int1 = new.f_int1;
 
20252
END|
 
20253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20254
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20255
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20256
        
 
20257
# check trigger-2 success:      1
 
20258
DROP TRIGGER trg_1;
 
20259
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20260
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20261
f_charbig = 'just inserted'
 
20262
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20263
DELETE FROM t0_aux
 
20264
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20265
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20266
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20267
'just inserted' FROM t0_template
 
20268
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20269
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20270
BEGIN
 
20271
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20272
f_charbig = 'updated by trigger'
 
20273
      WHERE f_int1 = new.f_int1;
 
20274
END|
 
20275
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20276
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20277
        
 
20278
# check trigger-3 success:      1
 
20279
DROP TRIGGER trg_1;
 
20280
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20281
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20282
f_charbig = 'just inserted'
 
20283
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20284
DELETE FROM t0_aux
 
20285
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20286
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20287
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20288
'just inserted' FROM t0_template
 
20289
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20290
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20291
BEGIN
 
20292
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20293
f_charbig = 'updated by trigger'
 
20294
      WHERE f_int1 = - old.f_int1;
 
20295
END|
 
20296
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20297
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20298
        
 
20299
# check trigger-4 success:      1
 
20300
DROP TRIGGER trg_1;
 
20301
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20302
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20303
f_charbig = 'just inserted'
 
20304
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20305
DELETE FROM t0_aux
 
20306
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20307
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20308
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20309
'just inserted' FROM t0_template
 
20310
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20311
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20312
BEGIN
 
20313
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20314
f_charbig = 'updated by trigger'
 
20315
      WHERE f_int1 = new.f_int1;
 
20316
END|
 
20317
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20318
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20319
        
 
20320
# check trigger-5 success:      1
 
20321
DROP TRIGGER trg_1;
 
20322
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20323
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20324
f_charbig = 'just inserted'
 
20325
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20326
DELETE FROM t0_aux
 
20327
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20328
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20329
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20330
'just inserted' FROM t0_template
 
20331
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20332
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20333
BEGIN
 
20334
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20335
f_charbig = 'updated by trigger'
 
20336
      WHERE f_int1 = - old.f_int1;
 
20337
END|
 
20338
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20339
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20340
        
 
20341
# check trigger-6 success:      1
 
20342
DROP TRIGGER trg_1;
 
20343
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20344
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20345
f_charbig = 'just inserted'
 
20346
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20347
DELETE FROM t0_aux
 
20348
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20349
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20350
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20351
'just inserted' FROM t0_template
 
20352
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20353
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
20354
BEGIN
 
20355
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20356
f_charbig = 'updated by trigger'
 
20357
      WHERE f_int1 = - old.f_int1;
 
20358
END|
 
20359
DELETE FROM t0_aux
 
20360
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20361
        
 
20362
# check trigger-7 success:      1
 
20363
DROP TRIGGER trg_1;
 
20364
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20365
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20366
f_charbig = 'just inserted'
 
20367
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20368
DELETE FROM t0_aux
 
20369
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20370
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20371
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20372
'just inserted' FROM t0_template
 
20373
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20374
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
20375
BEGIN
 
20376
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20377
f_charbig = 'updated by trigger'
 
20378
      WHERE f_int1 = - old.f_int1;
 
20379
END|
 
20380
DELETE FROM t0_aux
 
20381
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20382
        
 
20383
# check trigger-8 success:      1
 
20384
DROP TRIGGER trg_1;
 
20385
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20386
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20387
f_charbig = 'just inserted'
 
20388
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20389
DELETE FROM t0_aux
 
20390
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20391
DELETE FROM t1
 
20392
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20393
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20394
BEGIN
 
20395
SET new.f_int1 = old.f_int1 + @max_row,
 
20396
new.f_int2 = old.f_int2 - @max_row,
 
20397
new.f_charbig = '####updated per update trigger####';
 
20398
END|
 
20399
UPDATE t1
 
20400
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20401
f_charbig = '####updated per update statement itself####';
 
20402
        
 
20403
# check trigger-9 success:      1
 
20404
DROP TRIGGER trg_2;
 
20405
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20406
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20407
f_charbig = CONCAT('===',f_char1,'===');
 
20408
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20409
BEGIN
 
20410
SET new.f_int1 = new.f_int1 + @max_row,
 
20411
new.f_int2 = new.f_int2 - @max_row,
 
20412
new.f_charbig = '####updated per update trigger####';
 
20413
END|
 
20414
UPDATE t1
 
20415
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20416
f_charbig = '####updated per update statement itself####';
 
20417
        
 
20418
# check trigger-10 success:     1
 
20419
DROP TRIGGER trg_2;
 
20420
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20421
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20422
f_charbig = CONCAT('===',f_char1,'===');
 
20423
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20424
BEGIN
 
20425
SET new.f_int1 = @my_max1 + @counter,
 
20426
new.f_int2 = @my_min2 - @counter,
 
20427
new.f_charbig = '####updated per insert trigger####';
 
20428
SET @counter = @counter + 1;
 
20429
END|
 
20430
SET @counter = 1;
 
20431
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20432
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20433
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20434
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20435
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20436
ORDER BY f_int1;
 
20437
DROP TRIGGER trg_3;
 
20438
        
 
20439
# check trigger-11 success:     1
 
20440
DELETE FROM t1
 
20441
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20442
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20443
AND f_charbig = '####updated per insert trigger####';
 
20444
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20445
BEGIN
 
20446
SET new.f_int1 = @my_max1 + @counter,
 
20447
new.f_int2 = @my_min2 - @counter,
 
20448
new.f_charbig = '####updated per insert trigger####';
 
20449
SET @counter = @counter + 1;
 
20450
END|
 
20451
SET @counter = 1;
 
20452
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20453
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
20454
SELECT CAST(f_int1 AS CHAR),
 
20455
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20456
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20457
ORDER BY f_int1;
 
20458
DROP TRIGGER trg_3;
 
20459
        
 
20460
# check trigger-12 success:     1
 
20461
DELETE FROM t1
 
20462
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20463
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20464
AND f_charbig = '####updated per insert trigger####';
 
20465
ANALYZE  TABLE t1;
 
20466
Table   Op      Msg_type        Msg_text
 
20467
test.t1 analyze status  OK
 
20468
CHECK    TABLE t1 EXTENDED;
 
20469
Table   Op      Msg_type        Msg_text
 
20470
test.t1 check   status  OK
 
20471
CHECKSUM TABLE t1 EXTENDED;
 
20472
Table   Checksum
 
20473
test.t1 <some_value>
 
20474
OPTIMIZE TABLE t1;
 
20475
Table   Op      Msg_type        Msg_text
 
20476
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
20477
test.t1 optimize        status  OK
 
20478
# check layout success:    1
 
20479
REPAIR   TABLE t1 EXTENDED;
 
20480
Table   Op      Msg_type        Msg_text
 
20481
test.t1 repair  note    The storage engine for the table doesn't support repair
 
20482
# check layout success:    1
 
20483
TRUNCATE t1;
 
20484
        
 
20485
# check TRUNCATE success:       1
 
20486
# check layout success:    1
 
20487
# End usability test (inc/partition_check.inc)
 
20488
DROP TABLE t1;
 
20489
CREATE TABLE t1 (
 
20490
f_int1 INTEGER,
 
20491
f_int2 INTEGER,
 
20492
f_char1 CHAR(20),
 
20493
f_char2 CHAR(20),
 
20494
f_charbig VARCHAR(1000)
 
20495
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
20496
)
 
20497
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
20498
(PARTITION part1 VALUES LESS THAN (0)
 
20499
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
20500
PARTITION part2 VALUES LESS THAN (5)
 
20501
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
20502
PARTITION part3 VALUES LESS THAN (10)
 
20503
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
20504
PARTITION part4 VALUES LESS THAN (2147483646)
 
20505
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
20506
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20507
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20508
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
20509
ALTER TABLE t1 DROP INDEX uidx1;
 
20510
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20511
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20512
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20513
# Start usability test (inc/partition_check.inc)
 
20514
create_command
 
20515
SHOW CREATE TABLE t1;
 
20516
Table   Create Table
 
20517
t1      CREATE TABLE `t1` (
 
20518
  `f_int1` int(11) DEFAULT NULL,
 
20519
  `f_int2` int(11) DEFAULT NULL,
 
20520
  `f_char1` char(20) DEFAULT NULL,
 
20521
  `f_char2` char(20) DEFAULT NULL,
 
20522
  `f_charbig` varchar(1000) DEFAULT NULL
 
20523
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
20524
/*!50100 PARTITION BY RANGE (f_int1)
 
20525
SUBPARTITION BY KEY (f_int2)
 
20526
(PARTITION part1 VALUES LESS THAN (0)
 
20527
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
20528
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
20529
 PARTITION part2 VALUES LESS THAN (5)
 
20530
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
20531
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
20532
 PARTITION part3 VALUES LESS THAN (10)
 
20533
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
20534
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
20535
 PARTITION part4 VALUES LESS THAN (2147483646)
 
20536
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
20537
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
20538
 
 
20539
# check prerequisites-1 success:    1
 
20540
# check COUNT(*) success:    1
 
20541
# check MIN/MAX(f_int1) success:    1
 
20542
# check MIN/MAX(f_int2) success:    1
 
20543
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20544
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20545
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
20546
WHERE f_int1 IN (2,3);
 
20547
# check prerequisites-3 success:    1
 
20548
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
20549
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
20550
# check read via f_int1 success: 1
 
20551
# check read via f_int2 success: 1
 
20552
        
 
20553
# check multiple-1 success:     1
 
20554
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
20555
        
 
20556
# check multiple-2 success:     1
 
20557
INSERT INTO t1 SELECT * FROM t0_template
 
20558
WHERE MOD(f_int1,3) = 0;
 
20559
        
 
20560
# check multiple-3 success:     1
 
20561
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
20562
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
20563
AND @max_row_div2 + @max_row_div4;
 
20564
        
 
20565
# check multiple-4 success:     1
 
20566
DELETE FROM t1
 
20567
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
20568
AND @max_row_div2 + @max_row_div4 + @max_row;
 
20569
        
 
20570
# check multiple-5 success:     1
 
20571
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
20572
INSERT INTO t1
 
20573
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20574
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20575
f_charbig = '#SINGLE#';
 
20576
        
 
20577
# check single-1 success:       1
 
20578
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
20579
INSERT INTO t1
 
20580
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20581
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20582
f_charbig = '#SINGLE#';
 
20583
        
 
20584
# check single-2 success:       1
 
20585
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
20586
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
20587
UPDATE t1 SET f_int1 = @cur_value2
 
20588
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
20589
        
 
20590
# check single-3 success:       1
 
20591
SET @cur_value1= -1;
 
20592
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
20593
UPDATE t1 SET f_int1 = @cur_value1
 
20594
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
20595
        
 
20596
# check single-4 success:       1
 
20597
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
20598
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
20599
        
 
20600
# check single-5 success:       1
 
20601
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
20602
        
 
20603
# check single-6 success:       1
 
20604
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
20605
ERROR HY000: Table has no partition for value 2147483647
 
20606
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
20607
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
20608
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
20609
f_charbig = '#NULL#';
 
20610
INSERT INTO t1
 
20611
SET f_int1 = NULL , f_int2 = -@max_row,
 
20612
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
20613
f_charbig = '#NULL#';
 
20614
# check null success:    1
 
20615
        
 
20616
# check null-1 success:         1
 
20617
UPDATE t1 SET f_int1 = -@max_row
 
20618
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20619
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20620
        
 
20621
# check null-2 success:         1
 
20622
UPDATE t1 SET f_int1 = NULL
 
20623
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20624
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20625
        
 
20626
# check null-3 success:         1
 
20627
DELETE FROM t1
 
20628
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20629
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20630
        
 
20631
# check null-4 success:         1
 
20632
DELETE FROM t1
 
20633
WHERE f_int1 = 0 AND f_int2 = 0
 
20634
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
20635
AND f_charbig = '#NULL#';
 
20636
SET AUTOCOMMIT= 0;
 
20637
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20638
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20639
FROM t0_template source_tab
 
20640
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20641
        
 
20642
# check transactions-1 success:         1
 
20643
COMMIT WORK;
 
20644
        
 
20645
# check transactions-2 success:         1
 
20646
ROLLBACK WORK;
 
20647
        
 
20648
# check transactions-3 success:         1
 
20649
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20650
COMMIT WORK;
 
20651
ROLLBACK WORK;
 
20652
        
 
20653
# check transactions-4 success:         1
 
20654
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20655
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20656
FROM t0_template source_tab
 
20657
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20658
        
 
20659
# check transactions-5 success:         1
 
20660
ROLLBACK WORK;
 
20661
        
 
20662
# check transactions-6 success:         1
 
20663
# INFO: Storage engine used for t1 seems to be transactional.
 
20664
COMMIT;
 
20665
        
 
20666
# check transactions-7 success:         1
 
20667
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20668
COMMIT WORK;
 
20669
SET @@session.sql_mode = 'traditional';
 
20670
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
20671
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20672
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
20673
'', '', 'was inserted' FROM t0_template
 
20674
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20675
ERROR 22012: Division by 0
 
20676
COMMIT;
 
20677
        
 
20678
# check transactions-8 success:         1
 
20679
# INFO: Storage engine used for t1 seems to be able to revert
 
20680
#       changes made by the failing statement.
 
20681
SET @@session.sql_mode = '';
 
20682
SET AUTOCOMMIT= 1;
 
20683
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20684
COMMIT WORK;
 
20685
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
20686
        
 
20687
# check special-1 success:      1
 
20688
UPDATE t1 SET f_charbig = '';
 
20689
        
 
20690
# check special-2 success:      1
 
20691
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
20692
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20693
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
20694
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20695
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20696
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20697
'just inserted' FROM t0_template
 
20698
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20699
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
20700
BEGIN
 
20701
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20702
f_charbig = 'updated by trigger'
 
20703
      WHERE f_int1 = new.f_int1;
 
20704
END|
 
20705
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20706
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20707
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20708
        
 
20709
# check trigger-1 success:      1
 
20710
DROP TRIGGER trg_1;
 
20711
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20712
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20713
f_charbig = 'just inserted'
 
20714
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20715
DELETE FROM t0_aux
 
20716
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20717
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20718
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20719
'just inserted' FROM t0_template
 
20720
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20721
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
20722
BEGIN
 
20723
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20724
f_charbig = 'updated by trigger'
 
20725
      WHERE f_int1 = new.f_int1;
 
20726
END|
 
20727
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20728
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20729
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20730
        
 
20731
# check trigger-2 success:      1
 
20732
DROP TRIGGER trg_1;
 
20733
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20734
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20735
f_charbig = 'just inserted'
 
20736
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20737
DELETE FROM t0_aux
 
20738
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20739
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20740
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20741
'just inserted' FROM t0_template
 
20742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20743
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20744
BEGIN
 
20745
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20746
f_charbig = 'updated by trigger'
 
20747
      WHERE f_int1 = new.f_int1;
 
20748
END|
 
20749
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20750
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20751
        
 
20752
# check trigger-3 success:      1
 
20753
DROP TRIGGER trg_1;
 
20754
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20755
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20756
f_charbig = 'just inserted'
 
20757
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20758
DELETE FROM t0_aux
 
20759
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20760
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20761
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20762
'just inserted' FROM t0_template
 
20763
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20764
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20765
BEGIN
 
20766
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20767
f_charbig = 'updated by trigger'
 
20768
      WHERE f_int1 = - old.f_int1;
 
20769
END|
 
20770
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20771
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20772
        
 
20773
# check trigger-4 success:      1
 
20774
DROP TRIGGER trg_1;
 
20775
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20776
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20777
f_charbig = 'just inserted'
 
20778
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20779
DELETE FROM t0_aux
 
20780
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20781
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20782
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20783
'just inserted' FROM t0_template
 
20784
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20785
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20786
BEGIN
 
20787
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20788
f_charbig = 'updated by trigger'
 
20789
      WHERE f_int1 = new.f_int1;
 
20790
END|
 
20791
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20792
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20793
        
 
20794
# check trigger-5 success:      1
 
20795
DROP TRIGGER trg_1;
 
20796
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20797
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20798
f_charbig = 'just inserted'
 
20799
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20800
DELETE FROM t0_aux
 
20801
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20802
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20803
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20804
'just inserted' FROM t0_template
 
20805
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20806
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20807
BEGIN
 
20808
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20809
f_charbig = 'updated by trigger'
 
20810
      WHERE f_int1 = - old.f_int1;
 
20811
END|
 
20812
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20813
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20814
        
 
20815
# check trigger-6 success:      1
 
20816
DROP TRIGGER trg_1;
 
20817
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20818
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20819
f_charbig = 'just inserted'
 
20820
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20821
DELETE FROM t0_aux
 
20822
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20823
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20824
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20825
'just inserted' FROM t0_template
 
20826
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20827
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
20828
BEGIN
 
20829
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20830
f_charbig = 'updated by trigger'
 
20831
      WHERE f_int1 = - old.f_int1;
 
20832
END|
 
20833
DELETE FROM t0_aux
 
20834
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20835
        
 
20836
# check trigger-7 success:      1
 
20837
DROP TRIGGER trg_1;
 
20838
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20839
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20840
f_charbig = 'just inserted'
 
20841
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20842
DELETE FROM t0_aux
 
20843
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20844
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20845
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20846
'just inserted' FROM t0_template
 
20847
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20848
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
20849
BEGIN
 
20850
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20851
f_charbig = 'updated by trigger'
 
20852
      WHERE f_int1 = - old.f_int1;
 
20853
END|
 
20854
DELETE FROM t0_aux
 
20855
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20856
        
 
20857
# check trigger-8 success:      1
 
20858
DROP TRIGGER trg_1;
 
20859
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20860
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20861
f_charbig = 'just inserted'
 
20862
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20863
DELETE FROM t0_aux
 
20864
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20865
DELETE FROM t1
 
20866
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20867
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20868
BEGIN
 
20869
SET new.f_int1 = old.f_int1 + @max_row,
 
20870
new.f_int2 = old.f_int2 - @max_row,
 
20871
new.f_charbig = '####updated per update trigger####';
 
20872
END|
 
20873
UPDATE t1
 
20874
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20875
f_charbig = '####updated per update statement itself####';
 
20876
        
 
20877
# check trigger-9 success:      1
 
20878
DROP TRIGGER trg_2;
 
20879
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20880
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20881
f_charbig = CONCAT('===',f_char1,'===');
 
20882
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20883
BEGIN
 
20884
SET new.f_int1 = new.f_int1 + @max_row,
 
20885
new.f_int2 = new.f_int2 - @max_row,
 
20886
new.f_charbig = '####updated per update trigger####';
 
20887
END|
 
20888
UPDATE t1
 
20889
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20890
f_charbig = '####updated per update statement itself####';
 
20891
        
 
20892
# check trigger-10 success:     1
 
20893
DROP TRIGGER trg_2;
 
20894
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20895
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20896
f_charbig = CONCAT('===',f_char1,'===');
 
20897
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20898
BEGIN
 
20899
SET new.f_int1 = @my_max1 + @counter,
 
20900
new.f_int2 = @my_min2 - @counter,
 
20901
new.f_charbig = '####updated per insert trigger####';
 
20902
SET @counter = @counter + 1;
 
20903
END|
 
20904
SET @counter = 1;
 
20905
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20906
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20907
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20908
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20909
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20910
ORDER BY f_int1;
 
20911
DROP TRIGGER trg_3;
 
20912
        
 
20913
# check trigger-11 success:     1
 
20914
DELETE FROM t1
 
20915
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20916
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20917
AND f_charbig = '####updated per insert trigger####';
 
20918
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20919
BEGIN
 
20920
SET new.f_int1 = @my_max1 + @counter,
 
20921
new.f_int2 = @my_min2 - @counter,
 
20922
new.f_charbig = '####updated per insert trigger####';
 
20923
SET @counter = @counter + 1;
 
20924
END|
 
20925
SET @counter = 1;
 
20926
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20927
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
20928
SELECT CAST(f_int1 AS CHAR),
 
20929
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20930
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20931
ORDER BY f_int1;
 
20932
DROP TRIGGER trg_3;
 
20933
        
 
20934
# check trigger-12 success:     1
 
20935
DELETE FROM t1
 
20936
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20937
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20938
AND f_charbig = '####updated per insert trigger####';
 
20939
ANALYZE  TABLE t1;
 
20940
Table   Op      Msg_type        Msg_text
 
20941
test.t1 analyze status  OK
 
20942
CHECK    TABLE t1 EXTENDED;
 
20943
Table   Op      Msg_type        Msg_text
 
20944
test.t1 check   status  OK
 
20945
CHECKSUM TABLE t1 EXTENDED;
 
20946
Table   Checksum
 
20947
test.t1 <some_value>
 
20948
OPTIMIZE TABLE t1;
 
20949
Table   Op      Msg_type        Msg_text
 
20950
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
20951
test.t1 optimize        status  OK
 
20952
# check layout success:    1
 
20953
REPAIR   TABLE t1 EXTENDED;
 
20954
Table   Op      Msg_type        Msg_text
 
20955
test.t1 repair  note    The storage engine for the table doesn't support repair
 
20956
# check layout success:    1
 
20957
TRUNCATE t1;
 
20958
        
 
20959
# check TRUNCATE success:       1
 
20960
# check layout success:    1
 
20961
# End usability test (inc/partition_check.inc)
 
20962
DROP TABLE t1;
 
20963
CREATE TABLE t1 (
 
20964
f_int1 INTEGER,
 
20965
f_int2 INTEGER,
 
20966
f_char1 CHAR(20),
 
20967
f_char2 CHAR(20),
 
20968
f_charbig VARCHAR(1000)
 
20969
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
20970
)
 
20971
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
20972
(PARTITION part1 VALUES IN (0)
 
20973
(SUBPARTITION sp11, SUBPARTITION sp12),
 
20974
PARTITION part2 VALUES IN (1)
 
20975
(SUBPARTITION sp21, SUBPARTITION sp22),
 
20976
PARTITION part3 VALUES IN (2)
 
20977
(SUBPARTITION sp31, SUBPARTITION sp32),
 
20978
PARTITION part4 VALUES IN (NULL)
 
20979
(SUBPARTITION sp41, SUBPARTITION sp42));
 
20980
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20981
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20982
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
20983
ALTER TABLE t1 DROP INDEX uidx1;
 
20984
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20985
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20986
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20987
# Start usability test (inc/partition_check.inc)
 
20988
create_command
 
20989
SHOW CREATE TABLE t1;
 
20990
Table   Create Table
 
20991
t1      CREATE TABLE `t1` (
 
20992
  `f_int1` int(11) DEFAULT NULL,
 
20993
  `f_int2` int(11) DEFAULT NULL,
 
20994
  `f_char1` char(20) DEFAULT NULL,
 
20995
  `f_char2` char(20) DEFAULT NULL,
 
20996
  `f_charbig` varchar(1000) DEFAULT NULL
 
20997
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
20998
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
20999
SUBPARTITION BY HASH (f_int2 + 1)
 
21000
(PARTITION part1 VALUES IN (0)
 
21001
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
21002
  SUBPARTITION sp12 ENGINE = InnoDB),
 
21003
 PARTITION part2 VALUES IN (1)
 
21004
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
21005
  SUBPARTITION sp22 ENGINE = InnoDB),
 
21006
 PARTITION part3 VALUES IN (2)
 
21007
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
21008
  SUBPARTITION sp32 ENGINE = InnoDB),
 
21009
 PARTITION part4 VALUES IN (NULL)
 
21010
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
21011
  SUBPARTITION sp42 ENGINE = InnoDB)) */
 
21012
 
 
21013
# check prerequisites-1 success:    1
 
21014
# check COUNT(*) success:    1
 
21015
# check MIN/MAX(f_int1) success:    1
 
21016
# check MIN/MAX(f_int2) success:    1
 
21017
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21018
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21019
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
21020
WHERE f_int1 IN (2,3);
 
21021
# check prerequisites-3 success:    1
 
21022
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21023
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
21024
# check read via f_int1 success: 1
 
21025
# check read via f_int2 success: 1
 
21026
        
 
21027
# check multiple-1 success:     1
 
21028
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
21029
        
 
21030
# check multiple-2 success:     1
 
21031
INSERT INTO t1 SELECT * FROM t0_template
 
21032
WHERE MOD(f_int1,3) = 0;
 
21033
        
 
21034
# check multiple-3 success:     1
 
21035
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
21036
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
21037
AND @max_row_div2 + @max_row_div4;
 
21038
        
 
21039
# check multiple-4 success:     1
 
21040
DELETE FROM t1
 
21041
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
21042
AND @max_row_div2 + @max_row_div4 + @max_row;
 
21043
        
 
21044
# check multiple-5 success:     1
 
21045
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
21046
INSERT INTO t1
 
21047
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21048
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21049
f_charbig = '#SINGLE#';
 
21050
        
 
21051
# check single-1 success:       1
 
21052
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
21053
INSERT INTO t1
 
21054
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21055
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21056
f_charbig = '#SINGLE#';
 
21057
        
 
21058
# check single-2 success:       1
 
21059
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
21060
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
21061
UPDATE t1 SET f_int1 = @cur_value2
 
21062
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
21063
        
 
21064
# check single-3 success:       1
 
21065
SET @cur_value1= -1;
 
21066
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
21067
UPDATE t1 SET f_int1 = @cur_value1
 
21068
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
21069
        
 
21070
# check single-4 success:       1
 
21071
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
21072
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
21073
        
 
21074
# check single-5 success:       1
 
21075
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
21076
        
 
21077
# check single-6 success:       1
 
21078
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
21079
        
 
21080
# check single-7 success:       1
 
21081
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
21082
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
21083
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
21084
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
21085
f_charbig = '#NULL#';
 
21086
INSERT INTO t1
 
21087
SET f_int1 = NULL , f_int2 = -@max_row,
 
21088
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
21089
f_charbig = '#NULL#';
 
21090
# check null success:    1
 
21091
        
 
21092
# check null-1 success:         1
 
21093
UPDATE t1 SET f_int1 = -@max_row
 
21094
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21095
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21096
        
 
21097
# check null-2 success:         1
 
21098
UPDATE t1 SET f_int1 = NULL
 
21099
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21100
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21101
        
 
21102
# check null-3 success:         1
 
21103
DELETE FROM t1
 
21104
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21105
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21106
        
 
21107
# check null-4 success:         1
 
21108
DELETE FROM t1
 
21109
WHERE f_int1 = 0 AND f_int2 = 0
 
21110
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
21111
AND f_charbig = '#NULL#';
 
21112
SET AUTOCOMMIT= 0;
 
21113
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21114
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21115
FROM t0_template source_tab
 
21116
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21117
        
 
21118
# check transactions-1 success:         1
 
21119
COMMIT WORK;
 
21120
        
 
21121
# check transactions-2 success:         1
 
21122
ROLLBACK WORK;
 
21123
        
 
21124
# check transactions-3 success:         1
 
21125
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21126
COMMIT WORK;
 
21127
ROLLBACK WORK;
 
21128
        
 
21129
# check transactions-4 success:         1
 
21130
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21131
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21132
FROM t0_template source_tab
 
21133
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21134
        
 
21135
# check transactions-5 success:         1
 
21136
ROLLBACK WORK;
 
21137
        
 
21138
# check transactions-6 success:         1
 
21139
# INFO: Storage engine used for t1 seems to be transactional.
 
21140
COMMIT;
 
21141
        
 
21142
# check transactions-7 success:         1
 
21143
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21144
COMMIT WORK;
 
21145
SET @@session.sql_mode = 'traditional';
 
21146
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
21147
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21148
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
21149
'', '', 'was inserted' FROM t0_template
 
21150
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21151
ERROR 22012: Division by 0
 
21152
COMMIT;
 
21153
        
 
21154
# check transactions-8 success:         1
 
21155
# INFO: Storage engine used for t1 seems to be able to revert
 
21156
#       changes made by the failing statement.
 
21157
SET @@session.sql_mode = '';
 
21158
SET AUTOCOMMIT= 1;
 
21159
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21160
COMMIT WORK;
 
21161
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
21162
        
 
21163
# check special-1 success:      1
 
21164
UPDATE t1 SET f_charbig = '';
 
21165
        
 
21166
# check special-2 success:      1
 
21167
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
21168
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21169
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
21170
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21171
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21172
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21173
'just inserted' FROM t0_template
 
21174
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21175
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
21176
BEGIN
 
21177
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21178
f_charbig = 'updated by trigger'
 
21179
      WHERE f_int1 = new.f_int1;
 
21180
END|
 
21181
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21182
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21183
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21184
        
 
21185
# check trigger-1 success:      1
 
21186
DROP TRIGGER trg_1;
 
21187
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21188
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21189
f_charbig = 'just inserted'
 
21190
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21191
DELETE FROM t0_aux
 
21192
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21193
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21194
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21195
'just inserted' FROM t0_template
 
21196
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21197
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
21198
BEGIN
 
21199
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21200
f_charbig = 'updated by trigger'
 
21201
      WHERE f_int1 = new.f_int1;
 
21202
END|
 
21203
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21204
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21205
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21206
        
 
21207
# check trigger-2 success:      1
 
21208
DROP TRIGGER trg_1;
 
21209
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21210
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21211
f_charbig = 'just inserted'
 
21212
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21213
DELETE FROM t0_aux
 
21214
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21215
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21216
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21217
'just inserted' FROM t0_template
 
21218
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21219
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21220
BEGIN
 
21221
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21222
f_charbig = 'updated by trigger'
 
21223
      WHERE f_int1 = new.f_int1;
 
21224
END|
 
21225
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21226
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21227
        
 
21228
# check trigger-3 success:      1
 
21229
DROP TRIGGER trg_1;
 
21230
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21231
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21232
f_charbig = 'just inserted'
 
21233
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21234
DELETE FROM t0_aux
 
21235
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21236
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21237
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21238
'just inserted' FROM t0_template
 
21239
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21240
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21241
BEGIN
 
21242
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21243
f_charbig = 'updated by trigger'
 
21244
      WHERE f_int1 = - old.f_int1;
 
21245
END|
 
21246
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21247
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21248
        
 
21249
# check trigger-4 success:      1
 
21250
DROP TRIGGER trg_1;
 
21251
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21252
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21253
f_charbig = 'just inserted'
 
21254
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21255
DELETE FROM t0_aux
 
21256
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21257
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21258
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21259
'just inserted' FROM t0_template
 
21260
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21261
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21262
BEGIN
 
21263
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21264
f_charbig = 'updated by trigger'
 
21265
      WHERE f_int1 = new.f_int1;
 
21266
END|
 
21267
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21268
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21269
        
 
21270
# check trigger-5 success:      1
 
21271
DROP TRIGGER trg_1;
 
21272
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21273
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21274
f_charbig = 'just inserted'
 
21275
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21276
DELETE FROM t0_aux
 
21277
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21278
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21279
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21280
'just inserted' FROM t0_template
 
21281
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21282
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21283
BEGIN
 
21284
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21285
f_charbig = 'updated by trigger'
 
21286
      WHERE f_int1 = - old.f_int1;
 
21287
END|
 
21288
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21289
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21290
        
 
21291
# check trigger-6 success:      1
 
21292
DROP TRIGGER trg_1;
 
21293
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21294
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21295
f_charbig = 'just inserted'
 
21296
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21297
DELETE FROM t0_aux
 
21298
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21299
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21300
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21301
'just inserted' FROM t0_template
 
21302
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21303
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
21304
BEGIN
 
21305
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21306
f_charbig = 'updated by trigger'
 
21307
      WHERE f_int1 = - old.f_int1;
 
21308
END|
 
21309
DELETE FROM t0_aux
 
21310
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21311
        
 
21312
# check trigger-7 success:      1
 
21313
DROP TRIGGER trg_1;
 
21314
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21315
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21316
f_charbig = 'just inserted'
 
21317
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21318
DELETE FROM t0_aux
 
21319
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21320
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21321
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21322
'just inserted' FROM t0_template
 
21323
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21324
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
21325
BEGIN
 
21326
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21327
f_charbig = 'updated by trigger'
 
21328
      WHERE f_int1 = - old.f_int1;
 
21329
END|
 
21330
DELETE FROM t0_aux
 
21331
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21332
        
 
21333
# check trigger-8 success:      1
 
21334
DROP TRIGGER trg_1;
 
21335
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21336
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21337
f_charbig = 'just inserted'
 
21338
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21339
DELETE FROM t0_aux
 
21340
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21341
DELETE FROM t1
 
21342
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21343
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21344
BEGIN
 
21345
SET new.f_int1 = old.f_int1 + @max_row,
 
21346
new.f_int2 = old.f_int2 - @max_row,
 
21347
new.f_charbig = '####updated per update trigger####';
 
21348
END|
 
21349
UPDATE t1
 
21350
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21351
f_charbig = '####updated per update statement itself####';
 
21352
        
 
21353
# check trigger-9 success:      1
 
21354
DROP TRIGGER trg_2;
 
21355
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21356
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21357
f_charbig = CONCAT('===',f_char1,'===');
 
21358
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21359
BEGIN
 
21360
SET new.f_int1 = new.f_int1 + @max_row,
 
21361
new.f_int2 = new.f_int2 - @max_row,
 
21362
new.f_charbig = '####updated per update trigger####';
 
21363
END|
 
21364
UPDATE t1
 
21365
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21366
f_charbig = '####updated per update statement itself####';
 
21367
        
 
21368
# check trigger-10 success:     1
 
21369
DROP TRIGGER trg_2;
 
21370
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21371
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21372
f_charbig = CONCAT('===',f_char1,'===');
 
21373
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21374
BEGIN
 
21375
SET new.f_int1 = @my_max1 + @counter,
 
21376
new.f_int2 = @my_min2 - @counter,
 
21377
new.f_charbig = '####updated per insert trigger####';
 
21378
SET @counter = @counter + 1;
 
21379
END|
 
21380
SET @counter = 1;
 
21381
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21382
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21383
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21384
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21385
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21386
ORDER BY f_int1;
 
21387
DROP TRIGGER trg_3;
 
21388
        
 
21389
# check trigger-11 success:     1
 
21390
DELETE FROM t1
 
21391
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21392
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21393
AND f_charbig = '####updated per insert trigger####';
 
21394
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21395
BEGIN
 
21396
SET new.f_int1 = @my_max1 + @counter,
 
21397
new.f_int2 = @my_min2 - @counter,
 
21398
new.f_charbig = '####updated per insert trigger####';
 
21399
SET @counter = @counter + 1;
 
21400
END|
 
21401
SET @counter = 1;
 
21402
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21403
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
21404
SELECT CAST(f_int1 AS CHAR),
 
21405
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21406
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21407
ORDER BY f_int1;
 
21408
DROP TRIGGER trg_3;
 
21409
        
 
21410
# check trigger-12 success:     1
 
21411
DELETE FROM t1
 
21412
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21413
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21414
AND f_charbig = '####updated per insert trigger####';
 
21415
ANALYZE  TABLE t1;
 
21416
Table   Op      Msg_type        Msg_text
 
21417
test.t1 analyze status  OK
 
21418
CHECK    TABLE t1 EXTENDED;
 
21419
Table   Op      Msg_type        Msg_text
 
21420
test.t1 check   status  OK
 
21421
CHECKSUM TABLE t1 EXTENDED;
 
21422
Table   Checksum
 
21423
test.t1 <some_value>
 
21424
OPTIMIZE TABLE t1;
 
21425
Table   Op      Msg_type        Msg_text
 
21426
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
21427
test.t1 optimize        status  OK
 
21428
# check layout success:    1
 
21429
REPAIR   TABLE t1 EXTENDED;
 
21430
Table   Op      Msg_type        Msg_text
 
21431
test.t1 repair  note    The storage engine for the table doesn't support repair
 
21432
# check layout success:    1
 
21433
TRUNCATE t1;
 
21434
        
 
21435
# check TRUNCATE success:       1
 
21436
# check layout success:    1
 
21437
# End usability test (inc/partition_check.inc)
 
21438
DROP TABLE t1;
 
21439
CREATE TABLE t1 (
 
21440
f_int1 INTEGER,
 
21441
f_int2 INTEGER,
 
21442
f_char1 CHAR(20),
 
21443
f_char2 CHAR(20),
 
21444
f_charbig VARCHAR(1000)
 
21445
, UNIQUE INDEX uidx1 (f_int1,f_int2)
 
21446
)
 
21447
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
21448
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
21449
(PARTITION part1 VALUES IN (0),
 
21450
 PARTITION part2 VALUES IN (1),
 
21451
 PARTITION part3 VALUES IN (NULL));
 
21452
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21453
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21454
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
21455
ALTER TABLE t1 DROP INDEX uidx1;
 
21456
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21457
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21458
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21459
# Start usability test (inc/partition_check.inc)
 
21460
create_command
 
21461
SHOW CREATE TABLE t1;
 
21462
Table   Create Table
 
21463
t1      CREATE TABLE `t1` (
 
21464
  `f_int1` int(11) DEFAULT NULL,
 
21465
  `f_int2` int(11) DEFAULT NULL,
 
21466
  `f_char1` char(20) DEFAULT NULL,
 
21467
  `f_char2` char(20) DEFAULT NULL,
 
21468
  `f_charbig` varchar(1000) DEFAULT NULL
 
21469
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
21470
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
21471
SUBPARTITION BY KEY (f_int2)
 
21472
SUBPARTITIONS 3
 
21473
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
21474
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
21475
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
21476
 
 
21477
# check prerequisites-1 success:    1
 
21478
# check COUNT(*) success:    1
 
21479
# check MIN/MAX(f_int1) success:    1
 
21480
# check MIN/MAX(f_int2) success:    1
 
21481
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21482
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21483
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
21484
WHERE f_int1 IN (2,3);
 
21485
# check prerequisites-3 success:    1
 
21486
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21487
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
21488
# check read via f_int1 success: 1
 
21489
# check read via f_int2 success: 1
 
21490
        
 
21491
# check multiple-1 success:     1
 
21492
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
21493
        
 
21494
# check multiple-2 success:     1
 
21495
INSERT INTO t1 SELECT * FROM t0_template
 
21496
WHERE MOD(f_int1,3) = 0;
 
21497
        
 
21498
# check multiple-3 success:     1
 
21499
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
21500
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
21501
AND @max_row_div2 + @max_row_div4;
 
21502
        
 
21503
# check multiple-4 success:     1
 
21504
DELETE FROM t1
 
21505
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
21506
AND @max_row_div2 + @max_row_div4 + @max_row;
 
21507
        
 
21508
# check multiple-5 success:     1
 
21509
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
21510
INSERT INTO t1
 
21511
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21512
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21513
f_charbig = '#SINGLE#';
 
21514
        
 
21515
# check single-1 success:       1
 
21516
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
21517
INSERT INTO t1
 
21518
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21519
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21520
f_charbig = '#SINGLE#';
 
21521
        
 
21522
# check single-2 success:       1
 
21523
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
21524
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
21525
UPDATE t1 SET f_int1 = @cur_value2
 
21526
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
21527
        
 
21528
# check single-3 success:       1
 
21529
SET @cur_value1= -1;
 
21530
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
21531
UPDATE t1 SET f_int1 = @cur_value1
 
21532
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
21533
        
 
21534
# check single-4 success:       1
 
21535
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
21536
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
21537
        
 
21538
# check single-5 success:       1
 
21539
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
21540
        
 
21541
# check single-6 success:       1
 
21542
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
21543
        
 
21544
# check single-7 success:       1
 
21545
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
21546
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
21547
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
21548
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
21549
f_charbig = '#NULL#';
 
21550
INSERT INTO t1
 
21551
SET f_int1 = NULL , f_int2 = -@max_row,
 
21552
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
21553
f_charbig = '#NULL#';
 
21554
# check null success:    1
 
21555
        
 
21556
# check null-1 success:         1
 
21557
UPDATE t1 SET f_int1 = -@max_row
 
21558
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21559
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21560
        
 
21561
# check null-2 success:         1
 
21562
UPDATE t1 SET f_int1 = NULL
 
21563
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21564
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21565
        
 
21566
# check null-3 success:         1
 
21567
DELETE FROM t1
 
21568
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21569
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21570
        
 
21571
# check null-4 success:         1
 
21572
DELETE FROM t1
 
21573
WHERE f_int1 = 0 AND f_int2 = 0
 
21574
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
21575
AND f_charbig = '#NULL#';
 
21576
SET AUTOCOMMIT= 0;
 
21577
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21578
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21579
FROM t0_template source_tab
 
21580
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21581
        
 
21582
# check transactions-1 success:         1
 
21583
COMMIT WORK;
 
21584
        
 
21585
# check transactions-2 success:         1
 
21586
ROLLBACK WORK;
 
21587
        
 
21588
# check transactions-3 success:         1
 
21589
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21590
COMMIT WORK;
 
21591
ROLLBACK WORK;
 
21592
        
 
21593
# check transactions-4 success:         1
 
21594
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21595
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21596
FROM t0_template source_tab
 
21597
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21598
        
 
21599
# check transactions-5 success:         1
 
21600
ROLLBACK WORK;
 
21601
        
 
21602
# check transactions-6 success:         1
 
21603
# INFO: Storage engine used for t1 seems to be transactional.
 
21604
COMMIT;
 
21605
        
 
21606
# check transactions-7 success:         1
 
21607
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21608
COMMIT WORK;
 
21609
SET @@session.sql_mode = 'traditional';
 
21610
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
21611
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21612
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
21613
'', '', 'was inserted' FROM t0_template
 
21614
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21615
ERROR 22012: Division by 0
 
21616
COMMIT;
 
21617
        
 
21618
# check transactions-8 success:         1
 
21619
# INFO: Storage engine used for t1 seems to be able to revert
 
21620
#       changes made by the failing statement.
 
21621
SET @@session.sql_mode = '';
 
21622
SET AUTOCOMMIT= 1;
 
21623
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21624
COMMIT WORK;
 
21625
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
21626
        
 
21627
# check special-1 success:      1
 
21628
UPDATE t1 SET f_charbig = '';
 
21629
        
 
21630
# check special-2 success:      1
 
21631
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
21632
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21633
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
21634
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21635
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21636
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21637
'just inserted' FROM t0_template
 
21638
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21639
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
21640
BEGIN
 
21641
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21642
f_charbig = 'updated by trigger'
 
21643
      WHERE f_int1 = new.f_int1;
 
21644
END|
 
21645
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21646
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21647
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21648
        
 
21649
# check trigger-1 success:      1
 
21650
DROP TRIGGER trg_1;
 
21651
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21652
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21653
f_charbig = 'just inserted'
 
21654
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21655
DELETE FROM t0_aux
 
21656
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21657
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21658
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21659
'just inserted' FROM t0_template
 
21660
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21661
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
21662
BEGIN
 
21663
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21664
f_charbig = 'updated by trigger'
 
21665
      WHERE f_int1 = new.f_int1;
 
21666
END|
 
21667
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21668
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21669
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21670
        
 
21671
# check trigger-2 success:      1
 
21672
DROP TRIGGER trg_1;
 
21673
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21674
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21675
f_charbig = 'just inserted'
 
21676
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21677
DELETE FROM t0_aux
 
21678
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21679
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21680
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21681
'just inserted' FROM t0_template
 
21682
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21683
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21684
BEGIN
 
21685
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21686
f_charbig = 'updated by trigger'
 
21687
      WHERE f_int1 = new.f_int1;
 
21688
END|
 
21689
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21690
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21691
        
 
21692
# check trigger-3 success:      1
 
21693
DROP TRIGGER trg_1;
 
21694
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21695
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21696
f_charbig = 'just inserted'
 
21697
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21698
DELETE FROM t0_aux
 
21699
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21700
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21701
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21702
'just inserted' FROM t0_template
 
21703
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21704
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21705
BEGIN
 
21706
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21707
f_charbig = 'updated by trigger'
 
21708
      WHERE f_int1 = - old.f_int1;
 
21709
END|
 
21710
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21711
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21712
        
 
21713
# check trigger-4 success:      1
 
21714
DROP TRIGGER trg_1;
 
21715
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21716
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21717
f_charbig = 'just inserted'
 
21718
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21719
DELETE FROM t0_aux
 
21720
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21721
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21722
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21723
'just inserted' FROM t0_template
 
21724
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21725
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21726
BEGIN
 
21727
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21728
f_charbig = 'updated by trigger'
 
21729
      WHERE f_int1 = new.f_int1;
 
21730
END|
 
21731
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21732
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21733
        
 
21734
# check trigger-5 success:      1
 
21735
DROP TRIGGER trg_1;
 
21736
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21737
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21738
f_charbig = 'just inserted'
 
21739
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21740
DELETE FROM t0_aux
 
21741
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21742
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21743
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21744
'just inserted' FROM t0_template
 
21745
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21746
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21747
BEGIN
 
21748
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21749
f_charbig = 'updated by trigger'
 
21750
      WHERE f_int1 = - old.f_int1;
 
21751
END|
 
21752
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21753
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21754
        
 
21755
# check trigger-6 success:      1
 
21756
DROP TRIGGER trg_1;
 
21757
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21758
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21759
f_charbig = 'just inserted'
 
21760
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21761
DELETE FROM t0_aux
 
21762
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21763
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21764
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21765
'just inserted' FROM t0_template
 
21766
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21767
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
21768
BEGIN
 
21769
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21770
f_charbig = 'updated by trigger'
 
21771
      WHERE f_int1 = - old.f_int1;
 
21772
END|
 
21773
DELETE FROM t0_aux
 
21774
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21775
        
 
21776
# check trigger-7 success:      1
 
21777
DROP TRIGGER trg_1;
 
21778
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21779
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21780
f_charbig = 'just inserted'
 
21781
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21782
DELETE FROM t0_aux
 
21783
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21784
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21785
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21786
'just inserted' FROM t0_template
 
21787
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21788
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
21789
BEGIN
 
21790
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21791
f_charbig = 'updated by trigger'
 
21792
      WHERE f_int1 = - old.f_int1;
 
21793
END|
 
21794
DELETE FROM t0_aux
 
21795
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21796
        
 
21797
# check trigger-8 success:      1
 
21798
DROP TRIGGER trg_1;
 
21799
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21800
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21801
f_charbig = 'just inserted'
 
21802
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21803
DELETE FROM t0_aux
 
21804
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21805
DELETE FROM t1
 
21806
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21807
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21808
BEGIN
 
21809
SET new.f_int1 = old.f_int1 + @max_row,
 
21810
new.f_int2 = old.f_int2 - @max_row,
 
21811
new.f_charbig = '####updated per update trigger####';
 
21812
END|
 
21813
UPDATE t1
 
21814
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21815
f_charbig = '####updated per update statement itself####';
 
21816
        
 
21817
# check trigger-9 success:      1
 
21818
DROP TRIGGER trg_2;
 
21819
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21820
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21821
f_charbig = CONCAT('===',f_char1,'===');
 
21822
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21823
BEGIN
 
21824
SET new.f_int1 = new.f_int1 + @max_row,
 
21825
new.f_int2 = new.f_int2 - @max_row,
 
21826
new.f_charbig = '####updated per update trigger####';
 
21827
END|
 
21828
UPDATE t1
 
21829
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21830
f_charbig = '####updated per update statement itself####';
 
21831
        
 
21832
# check trigger-10 success:     1
 
21833
DROP TRIGGER trg_2;
 
21834
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21835
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21836
f_charbig = CONCAT('===',f_char1,'===');
 
21837
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21838
BEGIN
 
21839
SET new.f_int1 = @my_max1 + @counter,
 
21840
new.f_int2 = @my_min2 - @counter,
 
21841
new.f_charbig = '####updated per insert trigger####';
 
21842
SET @counter = @counter + 1;
 
21843
END|
 
21844
SET @counter = 1;
 
21845
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21846
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21847
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21848
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21849
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21850
ORDER BY f_int1;
 
21851
DROP TRIGGER trg_3;
 
21852
        
 
21853
# check trigger-11 success:     1
 
21854
DELETE FROM t1
 
21855
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21856
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21857
AND f_charbig = '####updated per insert trigger####';
 
21858
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21859
BEGIN
 
21860
SET new.f_int1 = @my_max1 + @counter,
 
21861
new.f_int2 = @my_min2 - @counter,
 
21862
new.f_charbig = '####updated per insert trigger####';
 
21863
SET @counter = @counter + 1;
 
21864
END|
 
21865
SET @counter = 1;
 
21866
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21867
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
21868
SELECT CAST(f_int1 AS CHAR),
 
21869
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21870
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21871
ORDER BY f_int1;
 
21872
DROP TRIGGER trg_3;
 
21873
        
 
21874
# check trigger-12 success:     1
 
21875
DELETE FROM t1
 
21876
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21877
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21878
AND f_charbig = '####updated per insert trigger####';
 
21879
ANALYZE  TABLE t1;
 
21880
Table   Op      Msg_type        Msg_text
 
21881
test.t1 analyze status  OK
 
21882
CHECK    TABLE t1 EXTENDED;
 
21883
Table   Op      Msg_type        Msg_text
 
21884
test.t1 check   status  OK
 
21885
CHECKSUM TABLE t1 EXTENDED;
 
21886
Table   Checksum
 
21887
test.t1 <some_value>
 
21888
OPTIMIZE TABLE t1;
 
21889
Table   Op      Msg_type        Msg_text
 
21890
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
21891
test.t1 optimize        status  OK
 
21892
# check layout success:    1
 
21893
REPAIR   TABLE t1 EXTENDED;
 
21894
Table   Op      Msg_type        Msg_text
 
21895
test.t1 repair  note    The storage engine for the table doesn't support repair
 
21896
# check layout success:    1
 
21897
TRUNCATE t1;
 
21898
        
 
21899
# check TRUNCATE success:       1
 
21900
# check layout success:    1
 
21901
# End usability test (inc/partition_check.inc)
 
21902
DROP TABLE t1;
 
21903
DROP TABLE IF EXISTS t1;
 
21904
CREATE TABLE t1 (
 
21905
f_int1 INTEGER,
 
21906
f_int2 INTEGER,
 
21907
f_char1 CHAR(20),
 
21908
f_char2 CHAR(20),
 
21909
f_charbig VARCHAR(1000)
 
21910
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
21911
)
 
21912
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
21913
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21914
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21915
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
21916
ALTER TABLE t1 DROP INDEX uidx1;
 
21917
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21918
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21919
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21920
# Start usability test (inc/partition_check.inc)
 
21921
create_command
 
21922
SHOW CREATE TABLE t1;
 
21923
Table   Create Table
 
21924
t1      CREATE TABLE `t1` (
 
21925
  `f_int1` int(11) DEFAULT NULL,
 
21926
  `f_int2` int(11) DEFAULT NULL,
 
21927
  `f_char1` char(20) DEFAULT NULL,
 
21928
  `f_char2` char(20) DEFAULT NULL,
 
21929
  `f_charbig` varchar(1000) DEFAULT NULL
 
21930
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
21931
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
 
21932
PARTITIONS 2 */
 
21933
 
 
21934
# check prerequisites-1 success:    1
 
21935
# check COUNT(*) success:    1
 
21936
# check MIN/MAX(f_int1) success:    1
 
21937
# check MIN/MAX(f_int2) success:    1
 
21938
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21939
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21940
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
21941
WHERE f_int1 IN (2,3);
 
21942
# check prerequisites-3 success:    1
 
21943
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21944
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
21945
# check read via f_int1 success: 1
 
21946
# check read via f_int2 success: 1
 
21947
        
 
21948
# check multiple-1 success:     1
 
21949
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
21950
        
 
21951
# check multiple-2 success:     1
 
21952
INSERT INTO t1 SELECT * FROM t0_template
 
21953
WHERE MOD(f_int1,3) = 0;
 
21954
        
 
21955
# check multiple-3 success:     1
 
21956
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
21957
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
21958
AND @max_row_div2 + @max_row_div4;
 
21959
        
 
21960
# check multiple-4 success:     1
 
21961
DELETE FROM t1
 
21962
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
21963
AND @max_row_div2 + @max_row_div4 + @max_row;
 
21964
        
 
21965
# check multiple-5 success:     1
 
21966
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
21967
INSERT INTO t1
 
21968
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21969
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21970
f_charbig = '#SINGLE#';
 
21971
        
 
21972
# check single-1 success:       1
 
21973
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
21974
INSERT INTO t1
 
21975
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21976
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21977
f_charbig = '#SINGLE#';
 
21978
        
 
21979
# check single-2 success:       1
 
21980
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
21981
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
21982
UPDATE t1 SET f_int1 = @cur_value2
 
21983
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
21984
        
 
21985
# check single-3 success:       1
 
21986
SET @cur_value1= -1;
 
21987
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
21988
UPDATE t1 SET f_int1 = @cur_value1
 
21989
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
21990
        
 
21991
# check single-4 success:       1
 
21992
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
21993
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
21994
        
 
21995
# check single-5 success:       1
 
21996
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
21997
        
 
21998
# check single-6 success:       1
 
21999
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
22000
        
 
22001
# check single-7 success:       1
 
22002
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
22003
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
22004
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
22005
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
22006
f_charbig = '#NULL#';
 
22007
INSERT INTO t1
 
22008
SET f_int1 = NULL , f_int2 = -@max_row,
 
22009
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
22010
f_charbig = '#NULL#';
 
22011
# check null success:    1
 
22012
        
 
22013
# check null-1 success:         1
 
22014
UPDATE t1 SET f_int1 = -@max_row
 
22015
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22016
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22017
        
 
22018
# check null-2 success:         1
 
22019
UPDATE t1 SET f_int1 = NULL
 
22020
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22021
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22022
        
 
22023
# check null-3 success:         1
 
22024
DELETE FROM t1
 
22025
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22026
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22027
        
 
22028
# check null-4 success:         1
 
22029
DELETE FROM t1
 
22030
WHERE f_int1 = 0 AND f_int2 = 0
 
22031
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
22032
AND f_charbig = '#NULL#';
 
22033
SET AUTOCOMMIT= 0;
 
22034
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22035
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22036
FROM t0_template source_tab
 
22037
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22038
        
 
22039
# check transactions-1 success:         1
 
22040
COMMIT WORK;
 
22041
        
 
22042
# check transactions-2 success:         1
 
22043
ROLLBACK WORK;
 
22044
        
 
22045
# check transactions-3 success:         1
 
22046
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22047
COMMIT WORK;
 
22048
ROLLBACK WORK;
 
22049
        
 
22050
# check transactions-4 success:         1
 
22051
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22052
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22053
FROM t0_template source_tab
 
22054
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22055
        
 
22056
# check transactions-5 success:         1
 
22057
ROLLBACK WORK;
 
22058
        
 
22059
# check transactions-6 success:         1
 
22060
# INFO: Storage engine used for t1 seems to be transactional.
 
22061
COMMIT;
 
22062
        
 
22063
# check transactions-7 success:         1
 
22064
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22065
COMMIT WORK;
 
22066
SET @@session.sql_mode = 'traditional';
 
22067
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
22068
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22069
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
22070
'', '', 'was inserted' FROM t0_template
 
22071
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22072
ERROR 22012: Division by 0
 
22073
COMMIT;
 
22074
        
 
22075
# check transactions-8 success:         1
 
22076
# INFO: Storage engine used for t1 seems to be able to revert
 
22077
#       changes made by the failing statement.
 
22078
SET @@session.sql_mode = '';
 
22079
SET AUTOCOMMIT= 1;
 
22080
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22081
COMMIT WORK;
 
22082
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
22083
        
 
22084
# check special-1 success:      1
 
22085
UPDATE t1 SET f_charbig = '';
 
22086
        
 
22087
# check special-2 success:      1
 
22088
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
22089
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22090
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
22091
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22092
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22093
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22094
'just inserted' FROM t0_template
 
22095
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22096
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
22097
BEGIN
 
22098
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22099
f_charbig = 'updated by trigger'
 
22100
      WHERE f_int1 = new.f_int1;
 
22101
END|
 
22102
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22103
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22104
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22105
        
 
22106
# check trigger-1 success:      1
 
22107
DROP TRIGGER trg_1;
 
22108
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22109
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22110
f_charbig = 'just inserted'
 
22111
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22112
DELETE FROM t0_aux
 
22113
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22114
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22115
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22116
'just inserted' FROM t0_template
 
22117
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22118
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
22119
BEGIN
 
22120
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22121
f_charbig = 'updated by trigger'
 
22122
      WHERE f_int1 = new.f_int1;
 
22123
END|
 
22124
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22125
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22126
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22127
        
 
22128
# check trigger-2 success:      1
 
22129
DROP TRIGGER trg_1;
 
22130
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22131
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22132
f_charbig = 'just inserted'
 
22133
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22134
DELETE FROM t0_aux
 
22135
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22136
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22137
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22138
'just inserted' FROM t0_template
 
22139
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22140
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22141
BEGIN
 
22142
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22143
f_charbig = 'updated by trigger'
 
22144
      WHERE f_int1 = new.f_int1;
 
22145
END|
 
22146
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22147
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22148
        
 
22149
# check trigger-3 success:      1
 
22150
DROP TRIGGER trg_1;
 
22151
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22152
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22153
f_charbig = 'just inserted'
 
22154
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22155
DELETE FROM t0_aux
 
22156
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22157
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22158
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22159
'just inserted' FROM t0_template
 
22160
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22161
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22162
BEGIN
 
22163
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22164
f_charbig = 'updated by trigger'
 
22165
      WHERE f_int1 = - old.f_int1;
 
22166
END|
 
22167
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22168
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22169
        
 
22170
# check trigger-4 success:      1
 
22171
DROP TRIGGER trg_1;
 
22172
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22173
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22174
f_charbig = 'just inserted'
 
22175
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22176
DELETE FROM t0_aux
 
22177
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22178
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22179
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22180
'just inserted' FROM t0_template
 
22181
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22182
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22183
BEGIN
 
22184
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22185
f_charbig = 'updated by trigger'
 
22186
      WHERE f_int1 = new.f_int1;
 
22187
END|
 
22188
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22189
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22190
        
 
22191
# check trigger-5 success:      1
 
22192
DROP TRIGGER trg_1;
 
22193
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22194
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22195
f_charbig = 'just inserted'
 
22196
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22197
DELETE FROM t0_aux
 
22198
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22199
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22200
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22201
'just inserted' FROM t0_template
 
22202
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22203
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22204
BEGIN
 
22205
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22206
f_charbig = 'updated by trigger'
 
22207
      WHERE f_int1 = - old.f_int1;
 
22208
END|
 
22209
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22210
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22211
        
 
22212
# check trigger-6 success:      1
 
22213
DROP TRIGGER trg_1;
 
22214
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22215
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22216
f_charbig = 'just inserted'
 
22217
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22218
DELETE FROM t0_aux
 
22219
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22220
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22221
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22222
'just inserted' FROM t0_template
 
22223
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22224
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
22225
BEGIN
 
22226
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22227
f_charbig = 'updated by trigger'
 
22228
      WHERE f_int1 = - old.f_int1;
 
22229
END|
 
22230
DELETE FROM t0_aux
 
22231
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22232
        
 
22233
# check trigger-7 success:      1
 
22234
DROP TRIGGER trg_1;
 
22235
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22236
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22237
f_charbig = 'just inserted'
 
22238
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22239
DELETE FROM t0_aux
 
22240
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22241
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22242
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22243
'just inserted' FROM t0_template
 
22244
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22245
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
22246
BEGIN
 
22247
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22248
f_charbig = 'updated by trigger'
 
22249
      WHERE f_int1 = - old.f_int1;
 
22250
END|
 
22251
DELETE FROM t0_aux
 
22252
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22253
        
 
22254
# check trigger-8 success:      1
 
22255
DROP TRIGGER trg_1;
 
22256
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22257
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22258
f_charbig = 'just inserted'
 
22259
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22260
DELETE FROM t0_aux
 
22261
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22262
DELETE FROM t1
 
22263
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22264
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22265
BEGIN
 
22266
SET new.f_int1 = old.f_int1 + @max_row,
 
22267
new.f_int2 = old.f_int2 - @max_row,
 
22268
new.f_charbig = '####updated per update trigger####';
 
22269
END|
 
22270
UPDATE t1
 
22271
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22272
f_charbig = '####updated per update statement itself####';
 
22273
        
 
22274
# check trigger-9 success:      1
 
22275
DROP TRIGGER trg_2;
 
22276
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22277
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22278
f_charbig = CONCAT('===',f_char1,'===');
 
22279
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22280
BEGIN
 
22281
SET new.f_int1 = new.f_int1 + @max_row,
 
22282
new.f_int2 = new.f_int2 - @max_row,
 
22283
new.f_charbig = '####updated per update trigger####';
 
22284
END|
 
22285
UPDATE t1
 
22286
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22287
f_charbig = '####updated per update statement itself####';
 
22288
        
 
22289
# check trigger-10 success:     1
 
22290
DROP TRIGGER trg_2;
 
22291
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22292
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22293
f_charbig = CONCAT('===',f_char1,'===');
 
22294
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22295
BEGIN
 
22296
SET new.f_int1 = @my_max1 + @counter,
 
22297
new.f_int2 = @my_min2 - @counter,
 
22298
new.f_charbig = '####updated per insert trigger####';
 
22299
SET @counter = @counter + 1;
 
22300
END|
 
22301
SET @counter = 1;
 
22302
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22303
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22304
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22305
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22306
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22307
ORDER BY f_int1;
 
22308
DROP TRIGGER trg_3;
 
22309
        
 
22310
# check trigger-11 success:     1
 
22311
DELETE FROM t1
 
22312
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22313
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22314
AND f_charbig = '####updated per insert trigger####';
 
22315
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22316
BEGIN
 
22317
SET new.f_int1 = @my_max1 + @counter,
 
22318
new.f_int2 = @my_min2 - @counter,
 
22319
new.f_charbig = '####updated per insert trigger####';
 
22320
SET @counter = @counter + 1;
 
22321
END|
 
22322
SET @counter = 1;
 
22323
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22324
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
22325
SELECT CAST(f_int1 AS CHAR),
 
22326
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22327
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22328
ORDER BY f_int1;
 
22329
DROP TRIGGER trg_3;
 
22330
        
 
22331
# check trigger-12 success:     1
 
22332
DELETE FROM t1
 
22333
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22334
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22335
AND f_charbig = '####updated per insert trigger####';
 
22336
ANALYZE  TABLE t1;
 
22337
Table   Op      Msg_type        Msg_text
 
22338
test.t1 analyze status  OK
 
22339
CHECK    TABLE t1 EXTENDED;
 
22340
Table   Op      Msg_type        Msg_text
 
22341
test.t1 check   status  OK
 
22342
CHECKSUM TABLE t1 EXTENDED;
 
22343
Table   Checksum
 
22344
test.t1 <some_value>
 
22345
OPTIMIZE TABLE t1;
 
22346
Table   Op      Msg_type        Msg_text
 
22347
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
22348
test.t1 optimize        status  OK
 
22349
# check layout success:    1
 
22350
REPAIR   TABLE t1 EXTENDED;
 
22351
Table   Op      Msg_type        Msg_text
 
22352
test.t1 repair  note    The storage engine for the table doesn't support repair
 
22353
# check layout success:    1
 
22354
TRUNCATE t1;
 
22355
        
 
22356
# check TRUNCATE success:       1
 
22357
# check layout success:    1
 
22358
# End usability test (inc/partition_check.inc)
 
22359
DROP TABLE t1;
 
22360
CREATE TABLE t1 (
 
22361
f_int1 INTEGER,
 
22362
f_int2 INTEGER,
 
22363
f_char1 CHAR(20),
 
22364
f_char2 CHAR(20),
 
22365
f_charbig VARCHAR(1000)
 
22366
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
22367
)
 
22368
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
22369
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22370
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22371
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
22372
ALTER TABLE t1 DROP INDEX uidx1;
 
22373
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22374
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22375
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22376
# Start usability test (inc/partition_check.inc)
 
22377
create_command
 
22378
SHOW CREATE TABLE t1;
 
22379
Table   Create Table
 
22380
t1      CREATE TABLE `t1` (
 
22381
  `f_int1` int(11) DEFAULT NULL,
 
22382
  `f_int2` int(11) DEFAULT NULL,
 
22383
  `f_char1` char(20) DEFAULT NULL,
 
22384
  `f_char2` char(20) DEFAULT NULL,
 
22385
  `f_charbig` varchar(1000) DEFAULT NULL
 
22386
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
22387
/*!50100 PARTITION BY KEY (f_int1,f_int2)
 
22388
PARTITIONS 5 */
 
22389
 
 
22390
# check prerequisites-1 success:    1
 
22391
# check COUNT(*) success:    1
 
22392
# check MIN/MAX(f_int1) success:    1
 
22393
# check MIN/MAX(f_int2) success:    1
 
22394
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22395
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22396
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
22397
WHERE f_int1 IN (2,3);
 
22398
# check prerequisites-3 success:    1
 
22399
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
22400
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
22401
# check read via f_int1 success: 1
 
22402
# check read via f_int2 success: 1
 
22403
        
 
22404
# check multiple-1 success:     1
 
22405
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
22406
        
 
22407
# check multiple-2 success:     1
 
22408
INSERT INTO t1 SELECT * FROM t0_template
 
22409
WHERE MOD(f_int1,3) = 0;
 
22410
        
 
22411
# check multiple-3 success:     1
 
22412
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
22413
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
22414
AND @max_row_div2 + @max_row_div4;
 
22415
        
 
22416
# check multiple-4 success:     1
 
22417
DELETE FROM t1
 
22418
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
22419
AND @max_row_div2 + @max_row_div4 + @max_row;
 
22420
        
 
22421
# check multiple-5 success:     1
 
22422
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
22423
INSERT INTO t1
 
22424
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22425
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22426
f_charbig = '#SINGLE#';
 
22427
        
 
22428
# check single-1 success:       1
 
22429
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
22430
INSERT INTO t1
 
22431
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22432
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22433
f_charbig = '#SINGLE#';
 
22434
        
 
22435
# check single-2 success:       1
 
22436
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
22437
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
22438
UPDATE t1 SET f_int1 = @cur_value2
 
22439
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
22440
        
 
22441
# check single-3 success:       1
 
22442
SET @cur_value1= -1;
 
22443
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
22444
UPDATE t1 SET f_int1 = @cur_value1
 
22445
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
22446
        
 
22447
# check single-4 success:       1
 
22448
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
22449
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
22450
        
 
22451
# check single-5 success:       1
 
22452
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
22453
        
 
22454
# check single-6 success:       1
 
22455
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
22456
        
 
22457
# check single-7 success:       1
 
22458
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
22459
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
22460
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
22461
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
22462
f_charbig = '#NULL#';
 
22463
INSERT INTO t1
 
22464
SET f_int1 = NULL , f_int2 = -@max_row,
 
22465
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
22466
f_charbig = '#NULL#';
 
22467
# check null success:    1
 
22468
        
 
22469
# check null-1 success:         1
 
22470
UPDATE t1 SET f_int1 = -@max_row
 
22471
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22472
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22473
        
 
22474
# check null-2 success:         1
 
22475
UPDATE t1 SET f_int1 = NULL
 
22476
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22477
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22478
        
 
22479
# check null-3 success:         1
 
22480
DELETE FROM t1
 
22481
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22482
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22483
        
 
22484
# check null-4 success:         1
 
22485
DELETE FROM t1
 
22486
WHERE f_int1 = 0 AND f_int2 = 0
 
22487
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
22488
AND f_charbig = '#NULL#';
 
22489
SET AUTOCOMMIT= 0;
 
22490
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22491
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22492
FROM t0_template source_tab
 
22493
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22494
        
 
22495
# check transactions-1 success:         1
 
22496
COMMIT WORK;
 
22497
        
 
22498
# check transactions-2 success:         1
 
22499
ROLLBACK WORK;
 
22500
        
 
22501
# check transactions-3 success:         1
 
22502
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22503
COMMIT WORK;
 
22504
ROLLBACK WORK;
 
22505
        
 
22506
# check transactions-4 success:         1
 
22507
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22508
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22509
FROM t0_template source_tab
 
22510
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22511
        
 
22512
# check transactions-5 success:         1
 
22513
ROLLBACK WORK;
 
22514
        
 
22515
# check transactions-6 success:         1
 
22516
# INFO: Storage engine used for t1 seems to be transactional.
 
22517
COMMIT;
 
22518
        
 
22519
# check transactions-7 success:         1
 
22520
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22521
COMMIT WORK;
 
22522
SET @@session.sql_mode = 'traditional';
 
22523
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
22524
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22525
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
22526
'', '', 'was inserted' FROM t0_template
 
22527
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22528
ERROR 22012: Division by 0
 
22529
COMMIT;
 
22530
        
 
22531
# check transactions-8 success:         1
 
22532
# INFO: Storage engine used for t1 seems to be able to revert
 
22533
#       changes made by the failing statement.
 
22534
SET @@session.sql_mode = '';
 
22535
SET AUTOCOMMIT= 1;
 
22536
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22537
COMMIT WORK;
 
22538
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
22539
        
 
22540
# check special-1 success:      1
 
22541
UPDATE t1 SET f_charbig = '';
 
22542
        
 
22543
# check special-2 success:      1
 
22544
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
22545
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22546
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
22547
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22548
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22549
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22550
'just inserted' FROM t0_template
 
22551
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22552
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
22553
BEGIN
 
22554
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22555
f_charbig = 'updated by trigger'
 
22556
      WHERE f_int1 = new.f_int1;
 
22557
END|
 
22558
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22559
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22560
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22561
        
 
22562
# check trigger-1 success:      1
 
22563
DROP TRIGGER trg_1;
 
22564
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22565
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22566
f_charbig = 'just inserted'
 
22567
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22568
DELETE FROM t0_aux
 
22569
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22570
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22571
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22572
'just inserted' FROM t0_template
 
22573
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22574
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
22575
BEGIN
 
22576
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22577
f_charbig = 'updated by trigger'
 
22578
      WHERE f_int1 = new.f_int1;
 
22579
END|
 
22580
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22581
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22582
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22583
        
 
22584
# check trigger-2 success:      1
 
22585
DROP TRIGGER trg_1;
 
22586
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22587
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22588
f_charbig = 'just inserted'
 
22589
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22590
DELETE FROM t0_aux
 
22591
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22592
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22593
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22594
'just inserted' FROM t0_template
 
22595
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22596
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22597
BEGIN
 
22598
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22599
f_charbig = 'updated by trigger'
 
22600
      WHERE f_int1 = new.f_int1;
 
22601
END|
 
22602
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22603
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22604
        
 
22605
# check trigger-3 success:      1
 
22606
DROP TRIGGER trg_1;
 
22607
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22608
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22609
f_charbig = 'just inserted'
 
22610
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22611
DELETE FROM t0_aux
 
22612
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22613
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22614
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22615
'just inserted' FROM t0_template
 
22616
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22617
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22618
BEGIN
 
22619
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22620
f_charbig = 'updated by trigger'
 
22621
      WHERE f_int1 = - old.f_int1;
 
22622
END|
 
22623
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22624
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22625
        
 
22626
# check trigger-4 success:      1
 
22627
DROP TRIGGER trg_1;
 
22628
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22629
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22630
f_charbig = 'just inserted'
 
22631
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22632
DELETE FROM t0_aux
 
22633
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22634
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22635
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22636
'just inserted' FROM t0_template
 
22637
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22638
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22639
BEGIN
 
22640
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22641
f_charbig = 'updated by trigger'
 
22642
      WHERE f_int1 = new.f_int1;
 
22643
END|
 
22644
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22645
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22646
        
 
22647
# check trigger-5 success:      1
 
22648
DROP TRIGGER trg_1;
 
22649
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22650
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22651
f_charbig = 'just inserted'
 
22652
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22653
DELETE FROM t0_aux
 
22654
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22655
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22656
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22657
'just inserted' FROM t0_template
 
22658
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22659
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22660
BEGIN
 
22661
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22662
f_charbig = 'updated by trigger'
 
22663
      WHERE f_int1 = - old.f_int1;
 
22664
END|
 
22665
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22666
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22667
        
 
22668
# check trigger-6 success:      1
 
22669
DROP TRIGGER trg_1;
 
22670
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22671
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22672
f_charbig = 'just inserted'
 
22673
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22674
DELETE FROM t0_aux
 
22675
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22676
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22677
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22678
'just inserted' FROM t0_template
 
22679
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22680
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
22681
BEGIN
 
22682
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22683
f_charbig = 'updated by trigger'
 
22684
      WHERE f_int1 = - old.f_int1;
 
22685
END|
 
22686
DELETE FROM t0_aux
 
22687
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22688
        
 
22689
# check trigger-7 success:      1
 
22690
DROP TRIGGER trg_1;
 
22691
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22692
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22693
f_charbig = 'just inserted'
 
22694
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22695
DELETE FROM t0_aux
 
22696
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22697
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22698
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22699
'just inserted' FROM t0_template
 
22700
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22701
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
22702
BEGIN
 
22703
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22704
f_charbig = 'updated by trigger'
 
22705
      WHERE f_int1 = - old.f_int1;
 
22706
END|
 
22707
DELETE FROM t0_aux
 
22708
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22709
        
 
22710
# check trigger-8 success:      1
 
22711
DROP TRIGGER trg_1;
 
22712
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22713
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22714
f_charbig = 'just inserted'
 
22715
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22716
DELETE FROM t0_aux
 
22717
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22718
DELETE FROM t1
 
22719
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22720
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22721
BEGIN
 
22722
SET new.f_int1 = old.f_int1 + @max_row,
 
22723
new.f_int2 = old.f_int2 - @max_row,
 
22724
new.f_charbig = '####updated per update trigger####';
 
22725
END|
 
22726
UPDATE t1
 
22727
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22728
f_charbig = '####updated per update statement itself####';
 
22729
        
 
22730
# check trigger-9 success:      1
 
22731
DROP TRIGGER trg_2;
 
22732
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22733
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22734
f_charbig = CONCAT('===',f_char1,'===');
 
22735
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22736
BEGIN
 
22737
SET new.f_int1 = new.f_int1 + @max_row,
 
22738
new.f_int2 = new.f_int2 - @max_row,
 
22739
new.f_charbig = '####updated per update trigger####';
 
22740
END|
 
22741
UPDATE t1
 
22742
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22743
f_charbig = '####updated per update statement itself####';
 
22744
        
 
22745
# check trigger-10 success:     1
 
22746
DROP TRIGGER trg_2;
 
22747
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22748
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22749
f_charbig = CONCAT('===',f_char1,'===');
 
22750
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22751
BEGIN
 
22752
SET new.f_int1 = @my_max1 + @counter,
 
22753
new.f_int2 = @my_min2 - @counter,
 
22754
new.f_charbig = '####updated per insert trigger####';
 
22755
SET @counter = @counter + 1;
 
22756
END|
 
22757
SET @counter = 1;
 
22758
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22759
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22760
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22761
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22762
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22763
ORDER BY f_int1;
 
22764
DROP TRIGGER trg_3;
 
22765
        
 
22766
# check trigger-11 success:     1
 
22767
DELETE FROM t1
 
22768
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22769
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22770
AND f_charbig = '####updated per insert trigger####';
 
22771
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22772
BEGIN
 
22773
SET new.f_int1 = @my_max1 + @counter,
 
22774
new.f_int2 = @my_min2 - @counter,
 
22775
new.f_charbig = '####updated per insert trigger####';
 
22776
SET @counter = @counter + 1;
 
22777
END|
 
22778
SET @counter = 1;
 
22779
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22780
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
22781
SELECT CAST(f_int1 AS CHAR),
 
22782
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22783
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22784
ORDER BY f_int1;
 
22785
DROP TRIGGER trg_3;
 
22786
        
 
22787
# check trigger-12 success:     1
 
22788
DELETE FROM t1
 
22789
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22790
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22791
AND f_charbig = '####updated per insert trigger####';
 
22792
ANALYZE  TABLE t1;
 
22793
Table   Op      Msg_type        Msg_text
 
22794
test.t1 analyze status  OK
 
22795
CHECK    TABLE t1 EXTENDED;
 
22796
Table   Op      Msg_type        Msg_text
 
22797
test.t1 check   status  OK
 
22798
CHECKSUM TABLE t1 EXTENDED;
 
22799
Table   Checksum
 
22800
test.t1 <some_value>
 
22801
OPTIMIZE TABLE t1;
 
22802
Table   Op      Msg_type        Msg_text
 
22803
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
22804
test.t1 optimize        status  OK
 
22805
# check layout success:    1
 
22806
REPAIR   TABLE t1 EXTENDED;
 
22807
Table   Op      Msg_type        Msg_text
 
22808
test.t1 repair  note    The storage engine for the table doesn't support repair
 
22809
# check layout success:    1
 
22810
TRUNCATE t1;
 
22811
        
 
22812
# check TRUNCATE success:       1
 
22813
# check layout success:    1
 
22814
# End usability test (inc/partition_check.inc)
 
22815
DROP TABLE t1;
 
22816
CREATE TABLE t1 (
 
22817
f_int1 INTEGER,
 
22818
f_int2 INTEGER,
 
22819
f_char1 CHAR(20),
 
22820
f_char2 CHAR(20),
 
22821
f_charbig VARCHAR(1000)
 
22822
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
22823
)
 
22824
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
22825
(PARTITION part_3 VALUES IN (-3),
 
22826
PARTITION part_2 VALUES IN (-2),
 
22827
PARTITION part_1 VALUES IN (-1),
 
22828
PARTITION part_N VALUES IN (NULL),
 
22829
PARTITION part0 VALUES IN (0),
 
22830
PARTITION part1 VALUES IN (1),
 
22831
PARTITION part2 VALUES IN (2),
 
22832
PARTITION part3 VALUES IN (3));
 
22833
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22834
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22835
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
22836
ALTER TABLE t1 DROP INDEX uidx1;
 
22837
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22838
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22839
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22840
# Start usability test (inc/partition_check.inc)
 
22841
create_command
 
22842
SHOW CREATE TABLE t1;
 
22843
Table   Create Table
 
22844
t1      CREATE TABLE `t1` (
 
22845
  `f_int1` int(11) DEFAULT NULL,
 
22846
  `f_int2` int(11) DEFAULT NULL,
 
22847
  `f_char1` char(20) DEFAULT NULL,
 
22848
  `f_char2` char(20) DEFAULT NULL,
 
22849
  `f_charbig` varchar(1000) DEFAULT NULL
 
22850
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
22851
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
 
22852
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
22853
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
22854
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
22855
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
22856
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
22857
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
22858
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
22859
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
22860
 
 
22861
# check prerequisites-1 success:    1
 
22862
# check COUNT(*) success:    1
 
22863
# check MIN/MAX(f_int1) success:    1
 
22864
# check MIN/MAX(f_int2) success:    1
 
22865
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22866
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22867
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
22868
WHERE f_int1 IN (2,3);
 
22869
# check prerequisites-3 success:    1
 
22870
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
22871
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
22872
# check read via f_int1 success: 1
 
22873
# check read via f_int2 success: 1
 
22874
        
 
22875
# check multiple-1 success:     1
 
22876
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
22877
        
 
22878
# check multiple-2 success:     1
 
22879
INSERT INTO t1 SELECT * FROM t0_template
 
22880
WHERE MOD(f_int1,3) = 0;
 
22881
        
 
22882
# check multiple-3 success:     1
 
22883
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
22884
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
22885
AND @max_row_div2 + @max_row_div4;
 
22886
        
 
22887
# check multiple-4 success:     1
 
22888
DELETE FROM t1
 
22889
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
22890
AND @max_row_div2 + @max_row_div4 + @max_row;
 
22891
        
 
22892
# check multiple-5 success:     1
 
22893
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
22894
INSERT INTO t1
 
22895
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22896
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22897
f_charbig = '#SINGLE#';
 
22898
        
 
22899
# check single-1 success:       1
 
22900
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
22901
INSERT INTO t1
 
22902
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22903
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22904
f_charbig = '#SINGLE#';
 
22905
        
 
22906
# check single-2 success:       1
 
22907
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
22908
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
22909
UPDATE t1 SET f_int1 = @cur_value2
 
22910
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
22911
        
 
22912
# check single-3 success:       1
 
22913
SET @cur_value1= -1;
 
22914
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
22915
UPDATE t1 SET f_int1 = @cur_value1
 
22916
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
22917
        
 
22918
# check single-4 success:       1
 
22919
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
22920
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
22921
        
 
22922
# check single-5 success:       1
 
22923
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
22924
        
 
22925
# check single-6 success:       1
 
22926
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
22927
        
 
22928
# check single-7 success:       1
 
22929
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
22930
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
22931
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
22932
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
22933
f_charbig = '#NULL#';
 
22934
INSERT INTO t1
 
22935
SET f_int1 = NULL , f_int2 = -@max_row,
 
22936
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
22937
f_charbig = '#NULL#';
 
22938
# check null success:    1
 
22939
        
 
22940
# check null-1 success:         1
 
22941
UPDATE t1 SET f_int1 = -@max_row
 
22942
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22943
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22944
        
 
22945
# check null-2 success:         1
 
22946
UPDATE t1 SET f_int1 = NULL
 
22947
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22948
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22949
        
 
22950
# check null-3 success:         1
 
22951
DELETE FROM t1
 
22952
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22953
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22954
        
 
22955
# check null-4 success:         1
 
22956
DELETE FROM t1
 
22957
WHERE f_int1 = 0 AND f_int2 = 0
 
22958
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
22959
AND f_charbig = '#NULL#';
 
22960
SET AUTOCOMMIT= 0;
 
22961
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22962
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22963
FROM t0_template source_tab
 
22964
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22965
        
 
22966
# check transactions-1 success:         1
 
22967
COMMIT WORK;
 
22968
        
 
22969
# check transactions-2 success:         1
 
22970
ROLLBACK WORK;
 
22971
        
 
22972
# check transactions-3 success:         1
 
22973
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22974
COMMIT WORK;
 
22975
ROLLBACK WORK;
 
22976
        
 
22977
# check transactions-4 success:         1
 
22978
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22979
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22980
FROM t0_template source_tab
 
22981
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22982
        
 
22983
# check transactions-5 success:         1
 
22984
ROLLBACK WORK;
 
22985
        
 
22986
# check transactions-6 success:         1
 
22987
# INFO: Storage engine used for t1 seems to be transactional.
 
22988
COMMIT;
 
22989
        
 
22990
# check transactions-7 success:         1
 
22991
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22992
COMMIT WORK;
 
22993
SET @@session.sql_mode = 'traditional';
 
22994
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
22995
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22996
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
22997
'', '', 'was inserted' FROM t0_template
 
22998
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22999
ERROR 22012: Division by 0
 
23000
COMMIT;
 
23001
        
 
23002
# check transactions-8 success:         1
 
23003
# INFO: Storage engine used for t1 seems to be able to revert
 
23004
#       changes made by the failing statement.
 
23005
SET @@session.sql_mode = '';
 
23006
SET AUTOCOMMIT= 1;
 
23007
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23008
COMMIT WORK;
 
23009
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
23010
        
 
23011
# check special-1 success:      1
 
23012
UPDATE t1 SET f_charbig = '';
 
23013
        
 
23014
# check special-2 success:      1
 
23015
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
23016
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23017
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
23018
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23019
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23020
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23021
'just inserted' FROM t0_template
 
23022
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23023
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
23024
BEGIN
 
23025
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23026
f_charbig = 'updated by trigger'
 
23027
      WHERE f_int1 = new.f_int1;
 
23028
END|
 
23029
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23030
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23031
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23032
        
 
23033
# check trigger-1 success:      1
 
23034
DROP TRIGGER trg_1;
 
23035
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23036
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23037
f_charbig = 'just inserted'
 
23038
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23039
DELETE FROM t0_aux
 
23040
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23041
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23042
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23043
'just inserted' FROM t0_template
 
23044
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23045
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
23046
BEGIN
 
23047
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23048
f_charbig = 'updated by trigger'
 
23049
      WHERE f_int1 = new.f_int1;
 
23050
END|
 
23051
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23052
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23053
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23054
        
 
23055
# check trigger-2 success:      1
 
23056
DROP TRIGGER trg_1;
 
23057
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23058
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23059
f_charbig = 'just inserted'
 
23060
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23061
DELETE FROM t0_aux
 
23062
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23063
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23064
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23065
'just inserted' FROM t0_template
 
23066
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23067
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23068
BEGIN
 
23069
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23070
f_charbig = 'updated by trigger'
 
23071
      WHERE f_int1 = new.f_int1;
 
23072
END|
 
23073
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23074
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23075
        
 
23076
# check trigger-3 success:      1
 
23077
DROP TRIGGER trg_1;
 
23078
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23079
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23080
f_charbig = 'just inserted'
 
23081
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23082
DELETE FROM t0_aux
 
23083
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23084
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23085
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23086
'just inserted' FROM t0_template
 
23087
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23088
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23089
BEGIN
 
23090
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23091
f_charbig = 'updated by trigger'
 
23092
      WHERE f_int1 = - old.f_int1;
 
23093
END|
 
23094
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23095
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23096
        
 
23097
# check trigger-4 success:      1
 
23098
DROP TRIGGER trg_1;
 
23099
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23100
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23101
f_charbig = 'just inserted'
 
23102
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23103
DELETE FROM t0_aux
 
23104
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23105
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23106
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23107
'just inserted' FROM t0_template
 
23108
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23109
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23110
BEGIN
 
23111
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23112
f_charbig = 'updated by trigger'
 
23113
      WHERE f_int1 = new.f_int1;
 
23114
END|
 
23115
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23116
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23117
        
 
23118
# check trigger-5 success:      1
 
23119
DROP TRIGGER trg_1;
 
23120
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23121
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23122
f_charbig = 'just inserted'
 
23123
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23124
DELETE FROM t0_aux
 
23125
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23126
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23127
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23128
'just inserted' FROM t0_template
 
23129
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23130
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23131
BEGIN
 
23132
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23133
f_charbig = 'updated by trigger'
 
23134
      WHERE f_int1 = - old.f_int1;
 
23135
END|
 
23136
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23137
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23138
        
 
23139
# check trigger-6 success:      1
 
23140
DROP TRIGGER trg_1;
 
23141
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23142
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23143
f_charbig = 'just inserted'
 
23144
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23145
DELETE FROM t0_aux
 
23146
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23147
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23148
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23149
'just inserted' FROM t0_template
 
23150
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23151
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
23152
BEGIN
 
23153
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23154
f_charbig = 'updated by trigger'
 
23155
      WHERE f_int1 = - old.f_int1;
 
23156
END|
 
23157
DELETE FROM t0_aux
 
23158
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23159
        
 
23160
# check trigger-7 success:      1
 
23161
DROP TRIGGER trg_1;
 
23162
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23163
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23164
f_charbig = 'just inserted'
 
23165
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23166
DELETE FROM t0_aux
 
23167
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23168
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23169
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23170
'just inserted' FROM t0_template
 
23171
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23172
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
23173
BEGIN
 
23174
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23175
f_charbig = 'updated by trigger'
 
23176
      WHERE f_int1 = - old.f_int1;
 
23177
END|
 
23178
DELETE FROM t0_aux
 
23179
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23180
        
 
23181
# check trigger-8 success:      1
 
23182
DROP TRIGGER trg_1;
 
23183
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23184
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23185
f_charbig = 'just inserted'
 
23186
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23187
DELETE FROM t0_aux
 
23188
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23189
DELETE FROM t1
 
23190
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23191
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23192
BEGIN
 
23193
SET new.f_int1 = old.f_int1 + @max_row,
 
23194
new.f_int2 = old.f_int2 - @max_row,
 
23195
new.f_charbig = '####updated per update trigger####';
 
23196
END|
 
23197
UPDATE t1
 
23198
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23199
f_charbig = '####updated per update statement itself####';
 
23200
        
 
23201
# check trigger-9 success:      1
 
23202
DROP TRIGGER trg_2;
 
23203
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23204
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23205
f_charbig = CONCAT('===',f_char1,'===');
 
23206
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23207
BEGIN
 
23208
SET new.f_int1 = new.f_int1 + @max_row,
 
23209
new.f_int2 = new.f_int2 - @max_row,
 
23210
new.f_charbig = '####updated per update trigger####';
 
23211
END|
 
23212
UPDATE t1
 
23213
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23214
f_charbig = '####updated per update statement itself####';
 
23215
        
 
23216
# check trigger-10 success:     1
 
23217
DROP TRIGGER trg_2;
 
23218
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23219
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23220
f_charbig = CONCAT('===',f_char1,'===');
 
23221
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23222
BEGIN
 
23223
SET new.f_int1 = @my_max1 + @counter,
 
23224
new.f_int2 = @my_min2 - @counter,
 
23225
new.f_charbig = '####updated per insert trigger####';
 
23226
SET @counter = @counter + 1;
 
23227
END|
 
23228
SET @counter = 1;
 
23229
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23230
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23231
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23232
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23233
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23234
ORDER BY f_int1;
 
23235
DROP TRIGGER trg_3;
 
23236
        
 
23237
# check trigger-11 success:     1
 
23238
DELETE FROM t1
 
23239
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23240
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23241
AND f_charbig = '####updated per insert trigger####';
 
23242
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23243
BEGIN
 
23244
SET new.f_int1 = @my_max1 + @counter,
 
23245
new.f_int2 = @my_min2 - @counter,
 
23246
new.f_charbig = '####updated per insert trigger####';
 
23247
SET @counter = @counter + 1;
 
23248
END|
 
23249
SET @counter = 1;
 
23250
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23251
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
23252
SELECT CAST(f_int1 AS CHAR),
 
23253
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23254
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23255
ORDER BY f_int1;
 
23256
DROP TRIGGER trg_3;
 
23257
        
 
23258
# check trigger-12 success:     1
 
23259
DELETE FROM t1
 
23260
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23261
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23262
AND f_charbig = '####updated per insert trigger####';
 
23263
ANALYZE  TABLE t1;
 
23264
Table   Op      Msg_type        Msg_text
 
23265
test.t1 analyze status  OK
 
23266
CHECK    TABLE t1 EXTENDED;
 
23267
Table   Op      Msg_type        Msg_text
 
23268
test.t1 check   status  OK
 
23269
CHECKSUM TABLE t1 EXTENDED;
 
23270
Table   Checksum
 
23271
test.t1 <some_value>
 
23272
OPTIMIZE TABLE t1;
 
23273
Table   Op      Msg_type        Msg_text
 
23274
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
23275
test.t1 optimize        status  OK
 
23276
# check layout success:    1
 
23277
REPAIR   TABLE t1 EXTENDED;
 
23278
Table   Op      Msg_type        Msg_text
 
23279
test.t1 repair  note    The storage engine for the table doesn't support repair
 
23280
# check layout success:    1
 
23281
TRUNCATE t1;
 
23282
        
 
23283
# check TRUNCATE success:       1
 
23284
# check layout success:    1
 
23285
# End usability test (inc/partition_check.inc)
 
23286
DROP TABLE t1;
 
23287
CREATE TABLE t1 (
 
23288
f_int1 INTEGER,
 
23289
f_int2 INTEGER,
 
23290
f_char1 CHAR(20),
 
23291
f_char2 CHAR(20),
 
23292
f_charbig VARCHAR(1000)
 
23293
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
23294
)
 
23295
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
23296
(PARTITION parta VALUES LESS THAN (0),
 
23297
PARTITION partb VALUES LESS THAN (5),
 
23298
PARTITION partc VALUES LESS THAN (10),
 
23299
PARTITION partd VALUES LESS THAN (10 + 5),
 
23300
PARTITION parte VALUES LESS THAN (20),
 
23301
PARTITION partf VALUES LESS THAN (2147483646));
 
23302
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23303
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23304
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23305
ALTER TABLE t1 DROP INDEX uidx1;
 
23306
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23307
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23308
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23309
# Start usability test (inc/partition_check.inc)
 
23310
create_command
 
23311
SHOW CREATE TABLE t1;
 
23312
Table   Create Table
 
23313
t1      CREATE TABLE `t1` (
 
23314
  `f_int1` int(11) DEFAULT NULL,
 
23315
  `f_int2` int(11) DEFAULT NULL,
 
23316
  `f_char1` char(20) DEFAULT NULL,
 
23317
  `f_char2` char(20) DEFAULT NULL,
 
23318
  `f_charbig` varchar(1000) DEFAULT NULL
 
23319
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
23320
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
 
23321
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
23322
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
23323
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
23324
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
23325
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
23326
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
23327
 
 
23328
# check prerequisites-1 success:    1
 
23329
# check COUNT(*) success:    1
 
23330
# check MIN/MAX(f_int1) success:    1
 
23331
# check MIN/MAX(f_int2) success:    1
 
23332
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23333
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23334
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
23335
WHERE f_int1 IN (2,3);
 
23336
# check prerequisites-3 success:    1
 
23337
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
23338
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
23339
# check read via f_int1 success: 1
 
23340
# check read via f_int2 success: 1
 
23341
        
 
23342
# check multiple-1 success:     1
 
23343
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
23344
        
 
23345
# check multiple-2 success:     1
 
23346
INSERT INTO t1 SELECT * FROM t0_template
 
23347
WHERE MOD(f_int1,3) = 0;
 
23348
        
 
23349
# check multiple-3 success:     1
 
23350
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
23351
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
23352
AND @max_row_div2 + @max_row_div4;
 
23353
        
 
23354
# check multiple-4 success:     1
 
23355
DELETE FROM t1
 
23356
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
23357
AND @max_row_div2 + @max_row_div4 + @max_row;
 
23358
        
 
23359
# check multiple-5 success:     1
 
23360
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
23361
INSERT INTO t1
 
23362
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23363
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23364
f_charbig = '#SINGLE#';
 
23365
        
 
23366
# check single-1 success:       1
 
23367
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
23368
INSERT INTO t1
 
23369
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23370
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23371
f_charbig = '#SINGLE#';
 
23372
        
 
23373
# check single-2 success:       1
 
23374
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
23375
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
23376
UPDATE t1 SET f_int1 = @cur_value2
 
23377
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
23378
        
 
23379
# check single-3 success:       1
 
23380
SET @cur_value1= -1;
 
23381
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
23382
UPDATE t1 SET f_int1 = @cur_value1
 
23383
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
23384
        
 
23385
# check single-4 success:       1
 
23386
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
23387
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
23388
        
 
23389
# check single-5 success:       1
 
23390
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
23391
        
 
23392
# check single-6 success:       1
 
23393
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
23394
ERROR HY000: Table has no partition for value 2147483647
 
23395
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
23396
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
23397
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
23398
f_charbig = '#NULL#';
 
23399
INSERT INTO t1
 
23400
SET f_int1 = NULL , f_int2 = -@max_row,
 
23401
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
23402
f_charbig = '#NULL#';
 
23403
# check null success:    1
 
23404
        
 
23405
# check null-1 success:         1
 
23406
UPDATE t1 SET f_int1 = -@max_row
 
23407
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23408
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23409
        
 
23410
# check null-2 success:         1
 
23411
UPDATE t1 SET f_int1 = NULL
 
23412
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23413
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23414
        
 
23415
# check null-3 success:         1
 
23416
DELETE FROM t1
 
23417
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23418
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23419
        
 
23420
# check null-4 success:         1
 
23421
DELETE FROM t1
 
23422
WHERE f_int1 = 0 AND f_int2 = 0
 
23423
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
23424
AND f_charbig = '#NULL#';
 
23425
SET AUTOCOMMIT= 0;
 
23426
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23427
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23428
FROM t0_template source_tab
 
23429
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23430
        
 
23431
# check transactions-1 success:         1
 
23432
COMMIT WORK;
 
23433
        
 
23434
# check transactions-2 success:         1
 
23435
ROLLBACK WORK;
 
23436
        
 
23437
# check transactions-3 success:         1
 
23438
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23439
COMMIT WORK;
 
23440
ROLLBACK WORK;
 
23441
        
 
23442
# check transactions-4 success:         1
 
23443
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23444
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23445
FROM t0_template source_tab
 
23446
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23447
        
 
23448
# check transactions-5 success:         1
 
23449
ROLLBACK WORK;
 
23450
        
 
23451
# check transactions-6 success:         1
 
23452
# INFO: Storage engine used for t1 seems to be transactional.
 
23453
COMMIT;
 
23454
        
 
23455
# check transactions-7 success:         1
 
23456
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23457
COMMIT WORK;
 
23458
SET @@session.sql_mode = 'traditional';
 
23459
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
23460
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23461
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
23462
'', '', 'was inserted' FROM t0_template
 
23463
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23464
ERROR 22012: Division by 0
 
23465
COMMIT;
 
23466
        
 
23467
# check transactions-8 success:         1
 
23468
# INFO: Storage engine used for t1 seems to be able to revert
 
23469
#       changes made by the failing statement.
 
23470
SET @@session.sql_mode = '';
 
23471
SET AUTOCOMMIT= 1;
 
23472
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23473
COMMIT WORK;
 
23474
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
23475
        
 
23476
# check special-1 success:      1
 
23477
UPDATE t1 SET f_charbig = '';
 
23478
        
 
23479
# check special-2 success:      1
 
23480
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
23481
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23482
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
23483
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23484
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23485
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23486
'just inserted' FROM t0_template
 
23487
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23488
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
23489
BEGIN
 
23490
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23491
f_charbig = 'updated by trigger'
 
23492
      WHERE f_int1 = new.f_int1;
 
23493
END|
 
23494
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23495
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23496
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23497
        
 
23498
# check trigger-1 success:      1
 
23499
DROP TRIGGER trg_1;
 
23500
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23501
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23502
f_charbig = 'just inserted'
 
23503
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23504
DELETE FROM t0_aux
 
23505
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23506
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23507
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23508
'just inserted' FROM t0_template
 
23509
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23510
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
23511
BEGIN
 
23512
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23513
f_charbig = 'updated by trigger'
 
23514
      WHERE f_int1 = new.f_int1;
 
23515
END|
 
23516
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23517
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23518
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23519
        
 
23520
# check trigger-2 success:      1
 
23521
DROP TRIGGER trg_1;
 
23522
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23523
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23524
f_charbig = 'just inserted'
 
23525
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23526
DELETE FROM t0_aux
 
23527
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23528
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23529
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23530
'just inserted' FROM t0_template
 
23531
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23532
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23533
BEGIN
 
23534
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23535
f_charbig = 'updated by trigger'
 
23536
      WHERE f_int1 = new.f_int1;
 
23537
END|
 
23538
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23539
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23540
        
 
23541
# check trigger-3 success:      1
 
23542
DROP TRIGGER trg_1;
 
23543
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23544
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23545
f_charbig = 'just inserted'
 
23546
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23547
DELETE FROM t0_aux
 
23548
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23549
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23550
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23551
'just inserted' FROM t0_template
 
23552
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23553
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23554
BEGIN
 
23555
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23556
f_charbig = 'updated by trigger'
 
23557
      WHERE f_int1 = - old.f_int1;
 
23558
END|
 
23559
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23560
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23561
        
 
23562
# check trigger-4 success:      1
 
23563
DROP TRIGGER trg_1;
 
23564
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23565
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23566
f_charbig = 'just inserted'
 
23567
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23568
DELETE FROM t0_aux
 
23569
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23570
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23571
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23572
'just inserted' FROM t0_template
 
23573
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23574
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23575
BEGIN
 
23576
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23577
f_charbig = 'updated by trigger'
 
23578
      WHERE f_int1 = new.f_int1;
 
23579
END|
 
23580
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23581
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23582
        
 
23583
# check trigger-5 success:      1
 
23584
DROP TRIGGER trg_1;
 
23585
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23586
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23587
f_charbig = 'just inserted'
 
23588
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23589
DELETE FROM t0_aux
 
23590
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23591
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23592
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23593
'just inserted' FROM t0_template
 
23594
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23595
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23596
BEGIN
 
23597
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23598
f_charbig = 'updated by trigger'
 
23599
      WHERE f_int1 = - old.f_int1;
 
23600
END|
 
23601
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23602
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23603
        
 
23604
# check trigger-6 success:      1
 
23605
DROP TRIGGER trg_1;
 
23606
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23607
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23608
f_charbig = 'just inserted'
 
23609
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23610
DELETE FROM t0_aux
 
23611
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23612
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23613
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23614
'just inserted' FROM t0_template
 
23615
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23616
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
23617
BEGIN
 
23618
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23619
f_charbig = 'updated by trigger'
 
23620
      WHERE f_int1 = - old.f_int1;
 
23621
END|
 
23622
DELETE FROM t0_aux
 
23623
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23624
        
 
23625
# check trigger-7 success:      1
 
23626
DROP TRIGGER trg_1;
 
23627
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23628
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23629
f_charbig = 'just inserted'
 
23630
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23631
DELETE FROM t0_aux
 
23632
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23633
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23634
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23635
'just inserted' FROM t0_template
 
23636
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23637
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
23638
BEGIN
 
23639
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23640
f_charbig = 'updated by trigger'
 
23641
      WHERE f_int1 = - old.f_int1;
 
23642
END|
 
23643
DELETE FROM t0_aux
 
23644
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23645
        
 
23646
# check trigger-8 success:      1
 
23647
DROP TRIGGER trg_1;
 
23648
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23649
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23650
f_charbig = 'just inserted'
 
23651
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23652
DELETE FROM t0_aux
 
23653
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23654
DELETE FROM t1
 
23655
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23656
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23657
BEGIN
 
23658
SET new.f_int1 = old.f_int1 + @max_row,
 
23659
new.f_int2 = old.f_int2 - @max_row,
 
23660
new.f_charbig = '####updated per update trigger####';
 
23661
END|
 
23662
UPDATE t1
 
23663
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23664
f_charbig = '####updated per update statement itself####';
 
23665
        
 
23666
# check trigger-9 success:      1
 
23667
DROP TRIGGER trg_2;
 
23668
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23669
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23670
f_charbig = CONCAT('===',f_char1,'===');
 
23671
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23672
BEGIN
 
23673
SET new.f_int1 = new.f_int1 + @max_row,
 
23674
new.f_int2 = new.f_int2 - @max_row,
 
23675
new.f_charbig = '####updated per update trigger####';
 
23676
END|
 
23677
UPDATE t1
 
23678
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23679
f_charbig = '####updated per update statement itself####';
 
23680
        
 
23681
# check trigger-10 success:     1
 
23682
DROP TRIGGER trg_2;
 
23683
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23684
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23685
f_charbig = CONCAT('===',f_char1,'===');
 
23686
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23687
BEGIN
 
23688
SET new.f_int1 = @my_max1 + @counter,
 
23689
new.f_int2 = @my_min2 - @counter,
 
23690
new.f_charbig = '####updated per insert trigger####';
 
23691
SET @counter = @counter + 1;
 
23692
END|
 
23693
SET @counter = 1;
 
23694
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23695
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23696
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23697
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23698
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23699
ORDER BY f_int1;
 
23700
DROP TRIGGER trg_3;
 
23701
        
 
23702
# check trigger-11 success:     1
 
23703
DELETE FROM t1
 
23704
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23705
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23706
AND f_charbig = '####updated per insert trigger####';
 
23707
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23708
BEGIN
 
23709
SET new.f_int1 = @my_max1 + @counter,
 
23710
new.f_int2 = @my_min2 - @counter,
 
23711
new.f_charbig = '####updated per insert trigger####';
 
23712
SET @counter = @counter + 1;
 
23713
END|
 
23714
SET @counter = 1;
 
23715
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23716
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
23717
SELECT CAST(f_int1 AS CHAR),
 
23718
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23719
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23720
ORDER BY f_int1;
 
23721
DROP TRIGGER trg_3;
 
23722
        
 
23723
# check trigger-12 success:     1
 
23724
DELETE FROM t1
 
23725
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23726
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23727
AND f_charbig = '####updated per insert trigger####';
 
23728
ANALYZE  TABLE t1;
 
23729
Table   Op      Msg_type        Msg_text
 
23730
test.t1 analyze status  OK
 
23731
CHECK    TABLE t1 EXTENDED;
 
23732
Table   Op      Msg_type        Msg_text
 
23733
test.t1 check   status  OK
 
23734
CHECKSUM TABLE t1 EXTENDED;
 
23735
Table   Checksum
 
23736
test.t1 <some_value>
 
23737
OPTIMIZE TABLE t1;
 
23738
Table   Op      Msg_type        Msg_text
 
23739
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
23740
test.t1 optimize        status  OK
 
23741
# check layout success:    1
 
23742
REPAIR   TABLE t1 EXTENDED;
 
23743
Table   Op      Msg_type        Msg_text
 
23744
test.t1 repair  note    The storage engine for the table doesn't support repair
 
23745
# check layout success:    1
 
23746
TRUNCATE t1;
 
23747
        
 
23748
# check TRUNCATE success:       1
 
23749
# check layout success:    1
 
23750
# End usability test (inc/partition_check.inc)
 
23751
DROP TABLE t1;
 
23752
CREATE TABLE t1 (
 
23753
f_int1 INTEGER,
 
23754
f_int2 INTEGER,
 
23755
f_char1 CHAR(20),
 
23756
f_char2 CHAR(20),
 
23757
f_charbig VARCHAR(1000)
 
23758
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
23759
)
 
23760
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
23761
(PARTITION parta VALUES LESS THAN (0),
 
23762
PARTITION partb VALUES LESS THAN (5),
 
23763
PARTITION partc VALUES LESS THAN (10),
 
23764
PARTITION partd VALUES LESS THAN (2147483646));
 
23765
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23766
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23767
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23768
ALTER TABLE t1 DROP INDEX uidx1;
 
23769
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23770
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23771
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23772
# Start usability test (inc/partition_check.inc)
 
23773
create_command
 
23774
SHOW CREATE TABLE t1;
 
23775
Table   Create Table
 
23776
t1      CREATE TABLE `t1` (
 
23777
  `f_int1` int(11) DEFAULT NULL,
 
23778
  `f_int2` int(11) DEFAULT NULL,
 
23779
  `f_char1` char(20) DEFAULT NULL,
 
23780
  `f_char2` char(20) DEFAULT NULL,
 
23781
  `f_charbig` varchar(1000) DEFAULT NULL
 
23782
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
23783
/*!50100 PARTITION BY RANGE (f_int1)
 
23784
SUBPARTITION BY HASH (f_int2)
 
23785
SUBPARTITIONS 2
 
23786
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
23787
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
23788
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
23789
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
23790
 
 
23791
# check prerequisites-1 success:    1
 
23792
# check COUNT(*) success:    1
 
23793
# check MIN/MAX(f_int1) success:    1
 
23794
# check MIN/MAX(f_int2) success:    1
 
23795
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23796
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23797
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
23798
WHERE f_int1 IN (2,3);
 
23799
# check prerequisites-3 success:    1
 
23800
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
23801
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
23802
# check read via f_int1 success: 1
 
23803
# check read via f_int2 success: 1
 
23804
        
 
23805
# check multiple-1 success:     1
 
23806
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
23807
        
 
23808
# check multiple-2 success:     1
 
23809
INSERT INTO t1 SELECT * FROM t0_template
 
23810
WHERE MOD(f_int1,3) = 0;
 
23811
        
 
23812
# check multiple-3 success:     1
 
23813
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
23814
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
23815
AND @max_row_div2 + @max_row_div4;
 
23816
        
 
23817
# check multiple-4 success:     1
 
23818
DELETE FROM t1
 
23819
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
23820
AND @max_row_div2 + @max_row_div4 + @max_row;
 
23821
        
 
23822
# check multiple-5 success:     1
 
23823
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
23824
INSERT INTO t1
 
23825
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23826
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23827
f_charbig = '#SINGLE#';
 
23828
        
 
23829
# check single-1 success:       1
 
23830
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
23831
INSERT INTO t1
 
23832
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23833
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23834
f_charbig = '#SINGLE#';
 
23835
        
 
23836
# check single-2 success:       1
 
23837
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
23838
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
23839
UPDATE t1 SET f_int1 = @cur_value2
 
23840
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
23841
        
 
23842
# check single-3 success:       1
 
23843
SET @cur_value1= -1;
 
23844
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
23845
UPDATE t1 SET f_int1 = @cur_value1
 
23846
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
23847
        
 
23848
# check single-4 success:       1
 
23849
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
23850
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
23851
        
 
23852
# check single-5 success:       1
 
23853
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
23854
        
 
23855
# check single-6 success:       1
 
23856
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
23857
ERROR HY000: Table has no partition for value 2147483647
 
23858
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
23859
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
23860
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
23861
f_charbig = '#NULL#';
 
23862
INSERT INTO t1
 
23863
SET f_int1 = NULL , f_int2 = -@max_row,
 
23864
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
23865
f_charbig = '#NULL#';
 
23866
# check null success:    1
 
23867
        
 
23868
# check null-1 success:         1
 
23869
UPDATE t1 SET f_int1 = -@max_row
 
23870
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23871
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23872
        
 
23873
# check null-2 success:         1
 
23874
UPDATE t1 SET f_int1 = NULL
 
23875
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23876
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23877
        
 
23878
# check null-3 success:         1
 
23879
DELETE FROM t1
 
23880
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23881
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23882
        
 
23883
# check null-4 success:         1
 
23884
DELETE FROM t1
 
23885
WHERE f_int1 = 0 AND f_int2 = 0
 
23886
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
23887
AND f_charbig = '#NULL#';
 
23888
SET AUTOCOMMIT= 0;
 
23889
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23890
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23891
FROM t0_template source_tab
 
23892
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23893
        
 
23894
# check transactions-1 success:         1
 
23895
COMMIT WORK;
 
23896
        
 
23897
# check transactions-2 success:         1
 
23898
ROLLBACK WORK;
 
23899
        
 
23900
# check transactions-3 success:         1
 
23901
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23902
COMMIT WORK;
 
23903
ROLLBACK WORK;
 
23904
        
 
23905
# check transactions-4 success:         1
 
23906
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23907
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23908
FROM t0_template source_tab
 
23909
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23910
        
 
23911
# check transactions-5 success:         1
 
23912
ROLLBACK WORK;
 
23913
        
 
23914
# check transactions-6 success:         1
 
23915
# INFO: Storage engine used for t1 seems to be transactional.
 
23916
COMMIT;
 
23917
        
 
23918
# check transactions-7 success:         1
 
23919
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23920
COMMIT WORK;
 
23921
SET @@session.sql_mode = 'traditional';
 
23922
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
23923
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23924
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
23925
'', '', 'was inserted' FROM t0_template
 
23926
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23927
ERROR 22012: Division by 0
 
23928
COMMIT;
 
23929
        
 
23930
# check transactions-8 success:         1
 
23931
# INFO: Storage engine used for t1 seems to be able to revert
 
23932
#       changes made by the failing statement.
 
23933
SET @@session.sql_mode = '';
 
23934
SET AUTOCOMMIT= 1;
 
23935
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23936
COMMIT WORK;
 
23937
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
23938
        
 
23939
# check special-1 success:      1
 
23940
UPDATE t1 SET f_charbig = '';
 
23941
        
 
23942
# check special-2 success:      1
 
23943
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
23944
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23945
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
23946
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23947
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23948
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23949
'just inserted' FROM t0_template
 
23950
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23951
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
23952
BEGIN
 
23953
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23954
f_charbig = 'updated by trigger'
 
23955
      WHERE f_int1 = new.f_int1;
 
23956
END|
 
23957
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23958
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23959
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23960
        
 
23961
# check trigger-1 success:      1
 
23962
DROP TRIGGER trg_1;
 
23963
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23964
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23965
f_charbig = 'just inserted'
 
23966
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23967
DELETE FROM t0_aux
 
23968
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23969
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23970
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23971
'just inserted' FROM t0_template
 
23972
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23973
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
23974
BEGIN
 
23975
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23976
f_charbig = 'updated by trigger'
 
23977
      WHERE f_int1 = new.f_int1;
 
23978
END|
 
23979
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23980
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23981
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23982
        
 
23983
# check trigger-2 success:      1
 
23984
DROP TRIGGER trg_1;
 
23985
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23986
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23987
f_charbig = 'just inserted'
 
23988
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23989
DELETE FROM t0_aux
 
23990
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23991
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23992
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23993
'just inserted' FROM t0_template
 
23994
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23995
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23996
BEGIN
 
23997
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23998
f_charbig = 'updated by trigger'
 
23999
      WHERE f_int1 = new.f_int1;
 
24000
END|
 
24001
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24002
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24003
        
 
24004
# check trigger-3 success:      1
 
24005
DROP TRIGGER trg_1;
 
24006
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24007
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24008
f_charbig = 'just inserted'
 
24009
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24010
DELETE FROM t0_aux
 
24011
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24012
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24013
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24014
'just inserted' FROM t0_template
 
24015
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24016
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24017
BEGIN
 
24018
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24019
f_charbig = 'updated by trigger'
 
24020
      WHERE f_int1 = - old.f_int1;
 
24021
END|
 
24022
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24023
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24024
        
 
24025
# check trigger-4 success:      1
 
24026
DROP TRIGGER trg_1;
 
24027
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24028
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24029
f_charbig = 'just inserted'
 
24030
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24031
DELETE FROM t0_aux
 
24032
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24033
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24034
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24035
'just inserted' FROM t0_template
 
24036
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24037
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24038
BEGIN
 
24039
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24040
f_charbig = 'updated by trigger'
 
24041
      WHERE f_int1 = new.f_int1;
 
24042
END|
 
24043
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24044
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24045
        
 
24046
# check trigger-5 success:      1
 
24047
DROP TRIGGER trg_1;
 
24048
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24049
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24050
f_charbig = 'just inserted'
 
24051
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24052
DELETE FROM t0_aux
 
24053
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24054
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24055
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24056
'just inserted' FROM t0_template
 
24057
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24058
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24059
BEGIN
 
24060
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24061
f_charbig = 'updated by trigger'
 
24062
      WHERE f_int1 = - old.f_int1;
 
24063
END|
 
24064
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24065
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24066
        
 
24067
# check trigger-6 success:      1
 
24068
DROP TRIGGER trg_1;
 
24069
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24070
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24071
f_charbig = 'just inserted'
 
24072
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24073
DELETE FROM t0_aux
 
24074
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24075
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24076
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24077
'just inserted' FROM t0_template
 
24078
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24079
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
24080
BEGIN
 
24081
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24082
f_charbig = 'updated by trigger'
 
24083
      WHERE f_int1 = - old.f_int1;
 
24084
END|
 
24085
DELETE FROM t0_aux
 
24086
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24087
        
 
24088
# check trigger-7 success:      1
 
24089
DROP TRIGGER trg_1;
 
24090
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24091
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24092
f_charbig = 'just inserted'
 
24093
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24094
DELETE FROM t0_aux
 
24095
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24096
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24097
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24098
'just inserted' FROM t0_template
 
24099
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24100
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
24101
BEGIN
 
24102
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24103
f_charbig = 'updated by trigger'
 
24104
      WHERE f_int1 = - old.f_int1;
 
24105
END|
 
24106
DELETE FROM t0_aux
 
24107
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24108
        
 
24109
# check trigger-8 success:      1
 
24110
DROP TRIGGER trg_1;
 
24111
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24112
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24113
f_charbig = 'just inserted'
 
24114
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24115
DELETE FROM t0_aux
 
24116
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24117
DELETE FROM t1
 
24118
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24119
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24120
BEGIN
 
24121
SET new.f_int1 = old.f_int1 + @max_row,
 
24122
new.f_int2 = old.f_int2 - @max_row,
 
24123
new.f_charbig = '####updated per update trigger####';
 
24124
END|
 
24125
UPDATE t1
 
24126
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24127
f_charbig = '####updated per update statement itself####';
 
24128
        
 
24129
# check trigger-9 success:      1
 
24130
DROP TRIGGER trg_2;
 
24131
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24132
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24133
f_charbig = CONCAT('===',f_char1,'===');
 
24134
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24135
BEGIN
 
24136
SET new.f_int1 = new.f_int1 + @max_row,
 
24137
new.f_int2 = new.f_int2 - @max_row,
 
24138
new.f_charbig = '####updated per update trigger####';
 
24139
END|
 
24140
UPDATE t1
 
24141
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24142
f_charbig = '####updated per update statement itself####';
 
24143
        
 
24144
# check trigger-10 success:     1
 
24145
DROP TRIGGER trg_2;
 
24146
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24147
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24148
f_charbig = CONCAT('===',f_char1,'===');
 
24149
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24150
BEGIN
 
24151
SET new.f_int1 = @my_max1 + @counter,
 
24152
new.f_int2 = @my_min2 - @counter,
 
24153
new.f_charbig = '####updated per insert trigger####';
 
24154
SET @counter = @counter + 1;
 
24155
END|
 
24156
SET @counter = 1;
 
24157
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24158
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24159
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24160
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24161
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24162
ORDER BY f_int1;
 
24163
DROP TRIGGER trg_3;
 
24164
        
 
24165
# check trigger-11 success:     1
 
24166
DELETE FROM t1
 
24167
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24168
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24169
AND f_charbig = '####updated per insert trigger####';
 
24170
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24171
BEGIN
 
24172
SET new.f_int1 = @my_max1 + @counter,
 
24173
new.f_int2 = @my_min2 - @counter,
 
24174
new.f_charbig = '####updated per insert trigger####';
 
24175
SET @counter = @counter + 1;
 
24176
END|
 
24177
SET @counter = 1;
 
24178
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24179
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
24180
SELECT CAST(f_int1 AS CHAR),
 
24181
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24182
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24183
ORDER BY f_int1;
 
24184
DROP TRIGGER trg_3;
 
24185
        
 
24186
# check trigger-12 success:     1
 
24187
DELETE FROM t1
 
24188
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24189
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24190
AND f_charbig = '####updated per insert trigger####';
 
24191
ANALYZE  TABLE t1;
 
24192
Table   Op      Msg_type        Msg_text
 
24193
test.t1 analyze status  OK
 
24194
CHECK    TABLE t1 EXTENDED;
 
24195
Table   Op      Msg_type        Msg_text
 
24196
test.t1 check   status  OK
 
24197
CHECKSUM TABLE t1 EXTENDED;
 
24198
Table   Checksum
 
24199
test.t1 <some_value>
 
24200
OPTIMIZE TABLE t1;
 
24201
Table   Op      Msg_type        Msg_text
 
24202
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
24203
test.t1 optimize        status  OK
 
24204
# check layout success:    1
 
24205
REPAIR   TABLE t1 EXTENDED;
 
24206
Table   Op      Msg_type        Msg_text
 
24207
test.t1 repair  note    The storage engine for the table doesn't support repair
 
24208
# check layout success:    1
 
24209
TRUNCATE t1;
 
24210
        
 
24211
# check TRUNCATE success:       1
 
24212
# check layout success:    1
 
24213
# End usability test (inc/partition_check.inc)
 
24214
DROP TABLE t1;
 
24215
CREATE TABLE t1 (
 
24216
f_int1 INTEGER,
 
24217
f_int2 INTEGER,
 
24218
f_char1 CHAR(20),
 
24219
f_char2 CHAR(20),
 
24220
f_charbig VARCHAR(1000)
 
24221
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
24222
)
 
24223
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
24224
(PARTITION part1 VALUES LESS THAN (0)
 
24225
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
24226
PARTITION part2 VALUES LESS THAN (5)
 
24227
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
24228
PARTITION part3 VALUES LESS THAN (10)
 
24229
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
24230
PARTITION part4 VALUES LESS THAN (2147483646)
 
24231
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
24232
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24233
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24234
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
24235
ALTER TABLE t1 DROP INDEX uidx1;
 
24236
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24237
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24238
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24239
# Start usability test (inc/partition_check.inc)
 
24240
create_command
 
24241
SHOW CREATE TABLE t1;
 
24242
Table   Create Table
 
24243
t1      CREATE TABLE `t1` (
 
24244
  `f_int1` int(11) DEFAULT NULL,
 
24245
  `f_int2` int(11) DEFAULT NULL,
 
24246
  `f_char1` char(20) DEFAULT NULL,
 
24247
  `f_char2` char(20) DEFAULT NULL,
 
24248
  `f_charbig` varchar(1000) DEFAULT NULL
 
24249
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
24250
/*!50100 PARTITION BY RANGE (f_int1)
 
24251
SUBPARTITION BY KEY (f_int2)
 
24252
(PARTITION part1 VALUES LESS THAN (0)
 
24253
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
24254
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
24255
 PARTITION part2 VALUES LESS THAN (5)
 
24256
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
24257
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
24258
 PARTITION part3 VALUES LESS THAN (10)
 
24259
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
24260
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
24261
 PARTITION part4 VALUES LESS THAN (2147483646)
 
24262
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
24263
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
24264
 
 
24265
# check prerequisites-1 success:    1
 
24266
# check COUNT(*) success:    1
 
24267
# check MIN/MAX(f_int1) success:    1
 
24268
# check MIN/MAX(f_int2) success:    1
 
24269
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24270
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24271
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
24272
WHERE f_int1 IN (2,3);
 
24273
# check prerequisites-3 success:    1
 
24274
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
24275
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
24276
# check read via f_int1 success: 1
 
24277
# check read via f_int2 success: 1
 
24278
        
 
24279
# check multiple-1 success:     1
 
24280
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
24281
        
 
24282
# check multiple-2 success:     1
 
24283
INSERT INTO t1 SELECT * FROM t0_template
 
24284
WHERE MOD(f_int1,3) = 0;
 
24285
        
 
24286
# check multiple-3 success:     1
 
24287
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
24288
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
24289
AND @max_row_div2 + @max_row_div4;
 
24290
        
 
24291
# check multiple-4 success:     1
 
24292
DELETE FROM t1
 
24293
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
24294
AND @max_row_div2 + @max_row_div4 + @max_row;
 
24295
        
 
24296
# check multiple-5 success:     1
 
24297
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
24298
INSERT INTO t1
 
24299
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24300
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24301
f_charbig = '#SINGLE#';
 
24302
        
 
24303
# check single-1 success:       1
 
24304
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
24305
INSERT INTO t1
 
24306
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24307
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24308
f_charbig = '#SINGLE#';
 
24309
        
 
24310
# check single-2 success:       1
 
24311
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
24312
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
24313
UPDATE t1 SET f_int1 = @cur_value2
 
24314
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
24315
        
 
24316
# check single-3 success:       1
 
24317
SET @cur_value1= -1;
 
24318
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
24319
UPDATE t1 SET f_int1 = @cur_value1
 
24320
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
24321
        
 
24322
# check single-4 success:       1
 
24323
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
24324
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
24325
        
 
24326
# check single-5 success:       1
 
24327
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
24328
        
 
24329
# check single-6 success:       1
 
24330
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
24331
ERROR HY000: Table has no partition for value 2147483647
 
24332
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
24333
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
24334
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
24335
f_charbig = '#NULL#';
 
24336
INSERT INTO t1
 
24337
SET f_int1 = NULL , f_int2 = -@max_row,
 
24338
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
24339
f_charbig = '#NULL#';
 
24340
# check null success:    1
 
24341
        
 
24342
# check null-1 success:         1
 
24343
UPDATE t1 SET f_int1 = -@max_row
 
24344
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24345
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24346
        
 
24347
# check null-2 success:         1
 
24348
UPDATE t1 SET f_int1 = NULL
 
24349
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24350
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24351
        
 
24352
# check null-3 success:         1
 
24353
DELETE FROM t1
 
24354
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24355
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24356
        
 
24357
# check null-4 success:         1
 
24358
DELETE FROM t1
 
24359
WHERE f_int1 = 0 AND f_int2 = 0
 
24360
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
24361
AND f_charbig = '#NULL#';
 
24362
SET AUTOCOMMIT= 0;
 
24363
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24364
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24365
FROM t0_template source_tab
 
24366
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24367
        
 
24368
# check transactions-1 success:         1
 
24369
COMMIT WORK;
 
24370
        
 
24371
# check transactions-2 success:         1
 
24372
ROLLBACK WORK;
 
24373
        
 
24374
# check transactions-3 success:         1
 
24375
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24376
COMMIT WORK;
 
24377
ROLLBACK WORK;
 
24378
        
 
24379
# check transactions-4 success:         1
 
24380
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24381
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24382
FROM t0_template source_tab
 
24383
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24384
        
 
24385
# check transactions-5 success:         1
 
24386
ROLLBACK WORK;
 
24387
        
 
24388
# check transactions-6 success:         1
 
24389
# INFO: Storage engine used for t1 seems to be transactional.
 
24390
COMMIT;
 
24391
        
 
24392
# check transactions-7 success:         1
 
24393
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24394
COMMIT WORK;
 
24395
SET @@session.sql_mode = 'traditional';
 
24396
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
24397
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24398
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
24399
'', '', 'was inserted' FROM t0_template
 
24400
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24401
ERROR 22012: Division by 0
 
24402
COMMIT;
 
24403
        
 
24404
# check transactions-8 success:         1
 
24405
# INFO: Storage engine used for t1 seems to be able to revert
 
24406
#       changes made by the failing statement.
 
24407
SET @@session.sql_mode = '';
 
24408
SET AUTOCOMMIT= 1;
 
24409
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24410
COMMIT WORK;
 
24411
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
24412
        
 
24413
# check special-1 success:      1
 
24414
UPDATE t1 SET f_charbig = '';
 
24415
        
 
24416
# check special-2 success:      1
 
24417
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
24418
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24419
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
24420
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24421
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24422
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24423
'just inserted' FROM t0_template
 
24424
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24425
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
24426
BEGIN
 
24427
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24428
f_charbig = 'updated by trigger'
 
24429
      WHERE f_int1 = new.f_int1;
 
24430
END|
 
24431
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24432
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24433
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24434
        
 
24435
# check trigger-1 success:      1
 
24436
DROP TRIGGER trg_1;
 
24437
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24438
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24439
f_charbig = 'just inserted'
 
24440
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24441
DELETE FROM t0_aux
 
24442
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24443
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24444
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24445
'just inserted' FROM t0_template
 
24446
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24447
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
24448
BEGIN
 
24449
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24450
f_charbig = 'updated by trigger'
 
24451
      WHERE f_int1 = new.f_int1;
 
24452
END|
 
24453
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24454
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24455
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24456
        
 
24457
# check trigger-2 success:      1
 
24458
DROP TRIGGER trg_1;
 
24459
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24460
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24461
f_charbig = 'just inserted'
 
24462
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24463
DELETE FROM t0_aux
 
24464
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24465
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24466
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24467
'just inserted' FROM t0_template
 
24468
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24469
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24470
BEGIN
 
24471
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24472
f_charbig = 'updated by trigger'
 
24473
      WHERE f_int1 = new.f_int1;
 
24474
END|
 
24475
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24476
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24477
        
 
24478
# check trigger-3 success:      1
 
24479
DROP TRIGGER trg_1;
 
24480
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24481
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24482
f_charbig = 'just inserted'
 
24483
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24484
DELETE FROM t0_aux
 
24485
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24486
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24487
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24488
'just inserted' FROM t0_template
 
24489
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24490
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24491
BEGIN
 
24492
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24493
f_charbig = 'updated by trigger'
 
24494
      WHERE f_int1 = - old.f_int1;
 
24495
END|
 
24496
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24497
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24498
        
 
24499
# check trigger-4 success:      1
 
24500
DROP TRIGGER trg_1;
 
24501
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24502
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24503
f_charbig = 'just inserted'
 
24504
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24505
DELETE FROM t0_aux
 
24506
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24507
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24508
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24509
'just inserted' FROM t0_template
 
24510
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24511
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24512
BEGIN
 
24513
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24514
f_charbig = 'updated by trigger'
 
24515
      WHERE f_int1 = new.f_int1;
 
24516
END|
 
24517
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24518
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24519
        
 
24520
# check trigger-5 success:      1
 
24521
DROP TRIGGER trg_1;
 
24522
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24523
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24524
f_charbig = 'just inserted'
 
24525
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24526
DELETE FROM t0_aux
 
24527
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24528
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24529
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24530
'just inserted' FROM t0_template
 
24531
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24532
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24533
BEGIN
 
24534
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24535
f_charbig = 'updated by trigger'
 
24536
      WHERE f_int1 = - old.f_int1;
 
24537
END|
 
24538
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24539
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24540
        
 
24541
# check trigger-6 success:      1
 
24542
DROP TRIGGER trg_1;
 
24543
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24544
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24545
f_charbig = 'just inserted'
 
24546
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24547
DELETE FROM t0_aux
 
24548
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24549
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24550
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24551
'just inserted' FROM t0_template
 
24552
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24553
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
24554
BEGIN
 
24555
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24556
f_charbig = 'updated by trigger'
 
24557
      WHERE f_int1 = - old.f_int1;
 
24558
END|
 
24559
DELETE FROM t0_aux
 
24560
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24561
        
 
24562
# check trigger-7 success:      1
 
24563
DROP TRIGGER trg_1;
 
24564
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24565
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24566
f_charbig = 'just inserted'
 
24567
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24568
DELETE FROM t0_aux
 
24569
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24570
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24571
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24572
'just inserted' FROM t0_template
 
24573
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24574
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
24575
BEGIN
 
24576
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24577
f_charbig = 'updated by trigger'
 
24578
      WHERE f_int1 = - old.f_int1;
 
24579
END|
 
24580
DELETE FROM t0_aux
 
24581
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24582
        
 
24583
# check trigger-8 success:      1
 
24584
DROP TRIGGER trg_1;
 
24585
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24586
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24587
f_charbig = 'just inserted'
 
24588
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24589
DELETE FROM t0_aux
 
24590
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24591
DELETE FROM t1
 
24592
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24593
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24594
BEGIN
 
24595
SET new.f_int1 = old.f_int1 + @max_row,
 
24596
new.f_int2 = old.f_int2 - @max_row,
 
24597
new.f_charbig = '####updated per update trigger####';
 
24598
END|
 
24599
UPDATE t1
 
24600
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24601
f_charbig = '####updated per update statement itself####';
 
24602
        
 
24603
# check trigger-9 success:      1
 
24604
DROP TRIGGER trg_2;
 
24605
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24606
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24607
f_charbig = CONCAT('===',f_char1,'===');
 
24608
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24609
BEGIN
 
24610
SET new.f_int1 = new.f_int1 + @max_row,
 
24611
new.f_int2 = new.f_int2 - @max_row,
 
24612
new.f_charbig = '####updated per update trigger####';
 
24613
END|
 
24614
UPDATE t1
 
24615
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24616
f_charbig = '####updated per update statement itself####';
 
24617
        
 
24618
# check trigger-10 success:     1
 
24619
DROP TRIGGER trg_2;
 
24620
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24621
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24622
f_charbig = CONCAT('===',f_char1,'===');
 
24623
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24624
BEGIN
 
24625
SET new.f_int1 = @my_max1 + @counter,
 
24626
new.f_int2 = @my_min2 - @counter,
 
24627
new.f_charbig = '####updated per insert trigger####';
 
24628
SET @counter = @counter + 1;
 
24629
END|
 
24630
SET @counter = 1;
 
24631
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24632
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24633
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24634
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24635
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24636
ORDER BY f_int1;
 
24637
DROP TRIGGER trg_3;
 
24638
        
 
24639
# check trigger-11 success:     1
 
24640
DELETE FROM t1
 
24641
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24642
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24643
AND f_charbig = '####updated per insert trigger####';
 
24644
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24645
BEGIN
 
24646
SET new.f_int1 = @my_max1 + @counter,
 
24647
new.f_int2 = @my_min2 - @counter,
 
24648
new.f_charbig = '####updated per insert trigger####';
 
24649
SET @counter = @counter + 1;
 
24650
END|
 
24651
SET @counter = 1;
 
24652
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24653
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
24654
SELECT CAST(f_int1 AS CHAR),
 
24655
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24656
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24657
ORDER BY f_int1;
 
24658
DROP TRIGGER trg_3;
 
24659
        
 
24660
# check trigger-12 success:     1
 
24661
DELETE FROM t1
 
24662
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24663
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24664
AND f_charbig = '####updated per insert trigger####';
 
24665
ANALYZE  TABLE t1;
 
24666
Table   Op      Msg_type        Msg_text
 
24667
test.t1 analyze status  OK
 
24668
CHECK    TABLE t1 EXTENDED;
 
24669
Table   Op      Msg_type        Msg_text
 
24670
test.t1 check   status  OK
 
24671
CHECKSUM TABLE t1 EXTENDED;
 
24672
Table   Checksum
 
24673
test.t1 <some_value>
 
24674
OPTIMIZE TABLE t1;
 
24675
Table   Op      Msg_type        Msg_text
 
24676
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
24677
test.t1 optimize        status  OK
 
24678
# check layout success:    1
 
24679
REPAIR   TABLE t1 EXTENDED;
 
24680
Table   Op      Msg_type        Msg_text
 
24681
test.t1 repair  note    The storage engine for the table doesn't support repair
 
24682
# check layout success:    1
 
24683
TRUNCATE t1;
 
24684
        
 
24685
# check TRUNCATE success:       1
 
24686
# check layout success:    1
 
24687
# End usability test (inc/partition_check.inc)
 
24688
DROP TABLE t1;
 
24689
CREATE TABLE t1 (
 
24690
f_int1 INTEGER,
 
24691
f_int2 INTEGER,
 
24692
f_char1 CHAR(20),
 
24693
f_char2 CHAR(20),
 
24694
f_charbig VARCHAR(1000)
 
24695
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
24696
)
 
24697
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
24698
(PARTITION part1 VALUES IN (0)
 
24699
(SUBPARTITION sp11, SUBPARTITION sp12),
 
24700
PARTITION part2 VALUES IN (1)
 
24701
(SUBPARTITION sp21, SUBPARTITION sp22),
 
24702
PARTITION part3 VALUES IN (2)
 
24703
(SUBPARTITION sp31, SUBPARTITION sp32),
 
24704
PARTITION part4 VALUES IN (NULL)
 
24705
(SUBPARTITION sp41, SUBPARTITION sp42));
 
24706
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24707
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24708
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
24709
ALTER TABLE t1 DROP INDEX uidx1;
 
24710
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24711
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24712
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24713
# Start usability test (inc/partition_check.inc)
 
24714
create_command
 
24715
SHOW CREATE TABLE t1;
 
24716
Table   Create Table
 
24717
t1      CREATE TABLE `t1` (
 
24718
  `f_int1` int(11) DEFAULT NULL,
 
24719
  `f_int2` int(11) DEFAULT NULL,
 
24720
  `f_char1` char(20) DEFAULT NULL,
 
24721
  `f_char2` char(20) DEFAULT NULL,
 
24722
  `f_charbig` varchar(1000) DEFAULT NULL
 
24723
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
24724
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
24725
SUBPARTITION BY HASH (f_int2 + 1)
 
24726
(PARTITION part1 VALUES IN (0)
 
24727
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
24728
  SUBPARTITION sp12 ENGINE = InnoDB),
 
24729
 PARTITION part2 VALUES IN (1)
 
24730
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
24731
  SUBPARTITION sp22 ENGINE = InnoDB),
 
24732
 PARTITION part3 VALUES IN (2)
 
24733
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
24734
  SUBPARTITION sp32 ENGINE = InnoDB),
 
24735
 PARTITION part4 VALUES IN (NULL)
 
24736
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
24737
  SUBPARTITION sp42 ENGINE = InnoDB)) */
 
24738
 
 
24739
# check prerequisites-1 success:    1
 
24740
# check COUNT(*) success:    1
 
24741
# check MIN/MAX(f_int1) success:    1
 
24742
# check MIN/MAX(f_int2) success:    1
 
24743
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24744
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24745
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
24746
WHERE f_int1 IN (2,3);
 
24747
# check prerequisites-3 success:    1
 
24748
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
24749
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
24750
# check read via f_int1 success: 1
 
24751
# check read via f_int2 success: 1
 
24752
        
 
24753
# check multiple-1 success:     1
 
24754
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
24755
        
 
24756
# check multiple-2 success:     1
 
24757
INSERT INTO t1 SELECT * FROM t0_template
 
24758
WHERE MOD(f_int1,3) = 0;
 
24759
        
 
24760
# check multiple-3 success:     1
 
24761
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
24762
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
24763
AND @max_row_div2 + @max_row_div4;
 
24764
        
 
24765
# check multiple-4 success:     1
 
24766
DELETE FROM t1
 
24767
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
24768
AND @max_row_div2 + @max_row_div4 + @max_row;
 
24769
        
 
24770
# check multiple-5 success:     1
 
24771
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
24772
INSERT INTO t1
 
24773
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24774
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24775
f_charbig = '#SINGLE#';
 
24776
        
 
24777
# check single-1 success:       1
 
24778
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
24779
INSERT INTO t1
 
24780
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24781
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24782
f_charbig = '#SINGLE#';
 
24783
        
 
24784
# check single-2 success:       1
 
24785
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
24786
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
24787
UPDATE t1 SET f_int1 = @cur_value2
 
24788
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
24789
        
 
24790
# check single-3 success:       1
 
24791
SET @cur_value1= -1;
 
24792
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
24793
UPDATE t1 SET f_int1 = @cur_value1
 
24794
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
24795
        
 
24796
# check single-4 success:       1
 
24797
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
24798
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
24799
        
 
24800
# check single-5 success:       1
 
24801
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
24802
        
 
24803
# check single-6 success:       1
 
24804
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
24805
        
 
24806
# check single-7 success:       1
 
24807
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
24808
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
24809
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
24810
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
24811
f_charbig = '#NULL#';
 
24812
INSERT INTO t1
 
24813
SET f_int1 = NULL , f_int2 = -@max_row,
 
24814
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
24815
f_charbig = '#NULL#';
 
24816
# check null success:    1
 
24817
        
 
24818
# check null-1 success:         1
 
24819
UPDATE t1 SET f_int1 = -@max_row
 
24820
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24821
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24822
        
 
24823
# check null-2 success:         1
 
24824
UPDATE t1 SET f_int1 = NULL
 
24825
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24826
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24827
        
 
24828
# check null-3 success:         1
 
24829
DELETE FROM t1
 
24830
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24831
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24832
        
 
24833
# check null-4 success:         1
 
24834
DELETE FROM t1
 
24835
WHERE f_int1 = 0 AND f_int2 = 0
 
24836
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
24837
AND f_charbig = '#NULL#';
 
24838
SET AUTOCOMMIT= 0;
 
24839
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24840
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24841
FROM t0_template source_tab
 
24842
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24843
        
 
24844
# check transactions-1 success:         1
 
24845
COMMIT WORK;
 
24846
        
 
24847
# check transactions-2 success:         1
 
24848
ROLLBACK WORK;
 
24849
        
 
24850
# check transactions-3 success:         1
 
24851
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24852
COMMIT WORK;
 
24853
ROLLBACK WORK;
 
24854
        
 
24855
# check transactions-4 success:         1
 
24856
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24857
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24858
FROM t0_template source_tab
 
24859
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24860
        
 
24861
# check transactions-5 success:         1
 
24862
ROLLBACK WORK;
 
24863
        
 
24864
# check transactions-6 success:         1
 
24865
# INFO: Storage engine used for t1 seems to be transactional.
 
24866
COMMIT;
 
24867
        
 
24868
# check transactions-7 success:         1
 
24869
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24870
COMMIT WORK;
 
24871
SET @@session.sql_mode = 'traditional';
 
24872
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
24873
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24874
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
24875
'', '', 'was inserted' FROM t0_template
 
24876
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24877
ERROR 22012: Division by 0
 
24878
COMMIT;
 
24879
        
 
24880
# check transactions-8 success:         1
 
24881
# INFO: Storage engine used for t1 seems to be able to revert
 
24882
#       changes made by the failing statement.
 
24883
SET @@session.sql_mode = '';
 
24884
SET AUTOCOMMIT= 1;
 
24885
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24886
COMMIT WORK;
 
24887
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
24888
        
 
24889
# check special-1 success:      1
 
24890
UPDATE t1 SET f_charbig = '';
 
24891
        
 
24892
# check special-2 success:      1
 
24893
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
24894
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24895
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
24896
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24897
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24898
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24899
'just inserted' FROM t0_template
 
24900
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24901
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
24902
BEGIN
 
24903
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24904
f_charbig = 'updated by trigger'
 
24905
      WHERE f_int1 = new.f_int1;
 
24906
END|
 
24907
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24908
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24909
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24910
        
 
24911
# check trigger-1 success:      1
 
24912
DROP TRIGGER trg_1;
 
24913
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24914
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24915
f_charbig = 'just inserted'
 
24916
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24917
DELETE FROM t0_aux
 
24918
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24919
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24920
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24921
'just inserted' FROM t0_template
 
24922
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24923
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
24924
BEGIN
 
24925
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24926
f_charbig = 'updated by trigger'
 
24927
      WHERE f_int1 = new.f_int1;
 
24928
END|
 
24929
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24930
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24931
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24932
        
 
24933
# check trigger-2 success:      1
 
24934
DROP TRIGGER trg_1;
 
24935
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24936
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24937
f_charbig = 'just inserted'
 
24938
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24939
DELETE FROM t0_aux
 
24940
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24941
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24942
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24943
'just inserted' FROM t0_template
 
24944
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24945
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24946
BEGIN
 
24947
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24948
f_charbig = 'updated by trigger'
 
24949
      WHERE f_int1 = new.f_int1;
 
24950
END|
 
24951
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24952
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24953
        
 
24954
# check trigger-3 success:      1
 
24955
DROP TRIGGER trg_1;
 
24956
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24957
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24958
f_charbig = 'just inserted'
 
24959
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24960
DELETE FROM t0_aux
 
24961
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24962
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24963
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24964
'just inserted' FROM t0_template
 
24965
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24966
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24967
BEGIN
 
24968
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24969
f_charbig = 'updated by trigger'
 
24970
      WHERE f_int1 = - old.f_int1;
 
24971
END|
 
24972
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24973
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24974
        
 
24975
# check trigger-4 success:      1
 
24976
DROP TRIGGER trg_1;
 
24977
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24978
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24979
f_charbig = 'just inserted'
 
24980
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24981
DELETE FROM t0_aux
 
24982
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24983
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24984
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24985
'just inserted' FROM t0_template
 
24986
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24987
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24988
BEGIN
 
24989
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24990
f_charbig = 'updated by trigger'
 
24991
      WHERE f_int1 = new.f_int1;
 
24992
END|
 
24993
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24994
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24995
        
 
24996
# check trigger-5 success:      1
 
24997
DROP TRIGGER trg_1;
 
24998
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24999
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25000
f_charbig = 'just inserted'
 
25001
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25002
DELETE FROM t0_aux
 
25003
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25004
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25005
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25006
'just inserted' FROM t0_template
 
25007
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25008
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25009
BEGIN
 
25010
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25011
f_charbig = 'updated by trigger'
 
25012
      WHERE f_int1 = - old.f_int1;
 
25013
END|
 
25014
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25015
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25016
        
 
25017
# check trigger-6 success:      1
 
25018
DROP TRIGGER trg_1;
 
25019
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25020
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25021
f_charbig = 'just inserted'
 
25022
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25023
DELETE FROM t0_aux
 
25024
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25025
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25026
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25027
'just inserted' FROM t0_template
 
25028
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25029
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
25030
BEGIN
 
25031
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25032
f_charbig = 'updated by trigger'
 
25033
      WHERE f_int1 = - old.f_int1;
 
25034
END|
 
25035
DELETE FROM t0_aux
 
25036
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25037
        
 
25038
# check trigger-7 success:      1
 
25039
DROP TRIGGER trg_1;
 
25040
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25041
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25042
f_charbig = 'just inserted'
 
25043
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25044
DELETE FROM t0_aux
 
25045
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25046
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25047
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25048
'just inserted' FROM t0_template
 
25049
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25050
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
25051
BEGIN
 
25052
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25053
f_charbig = 'updated by trigger'
 
25054
      WHERE f_int1 = - old.f_int1;
 
25055
END|
 
25056
DELETE FROM t0_aux
 
25057
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25058
        
 
25059
# check trigger-8 success:      1
 
25060
DROP TRIGGER trg_1;
 
25061
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25062
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25063
f_charbig = 'just inserted'
 
25064
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25065
DELETE FROM t0_aux
 
25066
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25067
DELETE FROM t1
 
25068
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25069
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25070
BEGIN
 
25071
SET new.f_int1 = old.f_int1 + @max_row,
 
25072
new.f_int2 = old.f_int2 - @max_row,
 
25073
new.f_charbig = '####updated per update trigger####';
 
25074
END|
 
25075
UPDATE t1
 
25076
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25077
f_charbig = '####updated per update statement itself####';
 
25078
        
 
25079
# check trigger-9 success:      1
 
25080
DROP TRIGGER trg_2;
 
25081
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25082
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25083
f_charbig = CONCAT('===',f_char1,'===');
 
25084
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25085
BEGIN
 
25086
SET new.f_int1 = new.f_int1 + @max_row,
 
25087
new.f_int2 = new.f_int2 - @max_row,
 
25088
new.f_charbig = '####updated per update trigger####';
 
25089
END|
 
25090
UPDATE t1
 
25091
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25092
f_charbig = '####updated per update statement itself####';
 
25093
        
 
25094
# check trigger-10 success:     1
 
25095
DROP TRIGGER trg_2;
 
25096
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25097
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25098
f_charbig = CONCAT('===',f_char1,'===');
 
25099
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25100
BEGIN
 
25101
SET new.f_int1 = @my_max1 + @counter,
 
25102
new.f_int2 = @my_min2 - @counter,
 
25103
new.f_charbig = '####updated per insert trigger####';
 
25104
SET @counter = @counter + 1;
 
25105
END|
 
25106
SET @counter = 1;
 
25107
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25108
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25109
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25110
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25111
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25112
ORDER BY f_int1;
 
25113
DROP TRIGGER trg_3;
 
25114
        
 
25115
# check trigger-11 success:     1
 
25116
DELETE FROM t1
 
25117
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25118
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25119
AND f_charbig = '####updated per insert trigger####';
 
25120
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25121
BEGIN
 
25122
SET new.f_int1 = @my_max1 + @counter,
 
25123
new.f_int2 = @my_min2 - @counter,
 
25124
new.f_charbig = '####updated per insert trigger####';
 
25125
SET @counter = @counter + 1;
 
25126
END|
 
25127
SET @counter = 1;
 
25128
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25129
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
25130
SELECT CAST(f_int1 AS CHAR),
 
25131
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25132
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25133
ORDER BY f_int1;
 
25134
DROP TRIGGER trg_3;
 
25135
        
 
25136
# check trigger-12 success:     1
 
25137
DELETE FROM t1
 
25138
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25139
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25140
AND f_charbig = '####updated per insert trigger####';
 
25141
ANALYZE  TABLE t1;
 
25142
Table   Op      Msg_type        Msg_text
 
25143
test.t1 analyze status  OK
 
25144
CHECK    TABLE t1 EXTENDED;
 
25145
Table   Op      Msg_type        Msg_text
 
25146
test.t1 check   status  OK
 
25147
CHECKSUM TABLE t1 EXTENDED;
 
25148
Table   Checksum
 
25149
test.t1 <some_value>
 
25150
OPTIMIZE TABLE t1;
 
25151
Table   Op      Msg_type        Msg_text
 
25152
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
25153
test.t1 optimize        status  OK
 
25154
# check layout success:    1
 
25155
REPAIR   TABLE t1 EXTENDED;
 
25156
Table   Op      Msg_type        Msg_text
 
25157
test.t1 repair  note    The storage engine for the table doesn't support repair
 
25158
# check layout success:    1
 
25159
TRUNCATE t1;
 
25160
        
 
25161
# check TRUNCATE success:       1
 
25162
# check layout success:    1
 
25163
# End usability test (inc/partition_check.inc)
 
25164
DROP TABLE t1;
 
25165
CREATE TABLE t1 (
 
25166
f_int1 INTEGER,
 
25167
f_int2 INTEGER,
 
25168
f_char1 CHAR(20),
 
25169
f_char2 CHAR(20),
 
25170
f_charbig VARCHAR(1000)
 
25171
, UNIQUE INDEX uidx1 (f_int2,f_int1)
 
25172
)
 
25173
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
25174
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
25175
(PARTITION part1 VALUES IN (0),
 
25176
 PARTITION part2 VALUES IN (1),
 
25177
 PARTITION part3 VALUES IN (NULL));
 
25178
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25179
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25180
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
25181
ALTER TABLE t1 DROP INDEX uidx1;
 
25182
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25183
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25184
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25185
# Start usability test (inc/partition_check.inc)
 
25186
create_command
 
25187
SHOW CREATE TABLE t1;
 
25188
Table   Create Table
 
25189
t1      CREATE TABLE `t1` (
 
25190
  `f_int1` int(11) DEFAULT NULL,
 
25191
  `f_int2` int(11) DEFAULT NULL,
 
25192
  `f_char1` char(20) DEFAULT NULL,
 
25193
  `f_char2` char(20) DEFAULT NULL,
 
25194
  `f_charbig` varchar(1000) DEFAULT NULL
 
25195
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
25196
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
25197
SUBPARTITION BY KEY (f_int2)
 
25198
SUBPARTITIONS 3
 
25199
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
25200
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
25201
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
25202
 
 
25203
# check prerequisites-1 success:    1
 
25204
# check COUNT(*) success:    1
 
25205
# check MIN/MAX(f_int1) success:    1
 
25206
# check MIN/MAX(f_int2) success:    1
 
25207
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25208
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25209
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
25210
WHERE f_int1 IN (2,3);
 
25211
# check prerequisites-3 success:    1
 
25212
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25213
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
25214
# check read via f_int1 success: 1
 
25215
# check read via f_int2 success: 1
 
25216
        
 
25217
# check multiple-1 success:     1
 
25218
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
25219
        
 
25220
# check multiple-2 success:     1
 
25221
INSERT INTO t1 SELECT * FROM t0_template
 
25222
WHERE MOD(f_int1,3) = 0;
 
25223
        
 
25224
# check multiple-3 success:     1
 
25225
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
25226
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
25227
AND @max_row_div2 + @max_row_div4;
 
25228
        
 
25229
# check multiple-4 success:     1
 
25230
DELETE FROM t1
 
25231
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
25232
AND @max_row_div2 + @max_row_div4 + @max_row;
 
25233
        
 
25234
# check multiple-5 success:     1
 
25235
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
25236
INSERT INTO t1
 
25237
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25238
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25239
f_charbig = '#SINGLE#';
 
25240
        
 
25241
# check single-1 success:       1
 
25242
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
25243
INSERT INTO t1
 
25244
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25245
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25246
f_charbig = '#SINGLE#';
 
25247
        
 
25248
# check single-2 success:       1
 
25249
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
25250
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
25251
UPDATE t1 SET f_int1 = @cur_value2
 
25252
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
25253
        
 
25254
# check single-3 success:       1
 
25255
SET @cur_value1= -1;
 
25256
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
25257
UPDATE t1 SET f_int1 = @cur_value1
 
25258
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
25259
        
 
25260
# check single-4 success:       1
 
25261
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
25262
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
25263
        
 
25264
# check single-5 success:       1
 
25265
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
25266
        
 
25267
# check single-6 success:       1
 
25268
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
25269
        
 
25270
# check single-7 success:       1
 
25271
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
25272
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
25273
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
25274
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
25275
f_charbig = '#NULL#';
 
25276
INSERT INTO t1
 
25277
SET f_int1 = NULL , f_int2 = -@max_row,
 
25278
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
25279
f_charbig = '#NULL#';
 
25280
# check null success:    1
 
25281
        
 
25282
# check null-1 success:         1
 
25283
UPDATE t1 SET f_int1 = -@max_row
 
25284
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25285
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25286
        
 
25287
# check null-2 success:         1
 
25288
UPDATE t1 SET f_int1 = NULL
 
25289
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25290
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25291
        
 
25292
# check null-3 success:         1
 
25293
DELETE FROM t1
 
25294
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25295
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25296
        
 
25297
# check null-4 success:         1
 
25298
DELETE FROM t1
 
25299
WHERE f_int1 = 0 AND f_int2 = 0
 
25300
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
25301
AND f_charbig = '#NULL#';
 
25302
SET AUTOCOMMIT= 0;
 
25303
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25304
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25305
FROM t0_template source_tab
 
25306
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25307
        
 
25308
# check transactions-1 success:         1
 
25309
COMMIT WORK;
 
25310
        
 
25311
# check transactions-2 success:         1
 
25312
ROLLBACK WORK;
 
25313
        
 
25314
# check transactions-3 success:         1
 
25315
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25316
COMMIT WORK;
 
25317
ROLLBACK WORK;
 
25318
        
 
25319
# check transactions-4 success:         1
 
25320
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25321
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25322
FROM t0_template source_tab
 
25323
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25324
        
 
25325
# check transactions-5 success:         1
 
25326
ROLLBACK WORK;
 
25327
        
 
25328
# check transactions-6 success:         1
 
25329
# INFO: Storage engine used for t1 seems to be transactional.
 
25330
COMMIT;
 
25331
        
 
25332
# check transactions-7 success:         1
 
25333
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25334
COMMIT WORK;
 
25335
SET @@session.sql_mode = 'traditional';
 
25336
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
25337
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25338
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
25339
'', '', 'was inserted' FROM t0_template
 
25340
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25341
ERROR 22012: Division by 0
 
25342
COMMIT;
 
25343
        
 
25344
# check transactions-8 success:         1
 
25345
# INFO: Storage engine used for t1 seems to be able to revert
 
25346
#       changes made by the failing statement.
 
25347
SET @@session.sql_mode = '';
 
25348
SET AUTOCOMMIT= 1;
 
25349
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25350
COMMIT WORK;
 
25351
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
25352
        
 
25353
# check special-1 success:      1
 
25354
UPDATE t1 SET f_charbig = '';
 
25355
        
 
25356
# check special-2 success:      1
 
25357
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
25358
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25359
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
25360
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25361
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25362
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25363
'just inserted' FROM t0_template
 
25364
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25365
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
25366
BEGIN
 
25367
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25368
f_charbig = 'updated by trigger'
 
25369
      WHERE f_int1 = new.f_int1;
 
25370
END|
 
25371
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25372
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25373
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25374
        
 
25375
# check trigger-1 success:      1
 
25376
DROP TRIGGER trg_1;
 
25377
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25378
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25379
f_charbig = 'just inserted'
 
25380
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25381
DELETE FROM t0_aux
 
25382
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25383
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25384
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25385
'just inserted' FROM t0_template
 
25386
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25387
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
25388
BEGIN
 
25389
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25390
f_charbig = 'updated by trigger'
 
25391
      WHERE f_int1 = new.f_int1;
 
25392
END|
 
25393
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25394
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25395
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25396
        
 
25397
# check trigger-2 success:      1
 
25398
DROP TRIGGER trg_1;
 
25399
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25400
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25401
f_charbig = 'just inserted'
 
25402
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25403
DELETE FROM t0_aux
 
25404
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25405
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25406
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25407
'just inserted' FROM t0_template
 
25408
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25409
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25410
BEGIN
 
25411
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25412
f_charbig = 'updated by trigger'
 
25413
      WHERE f_int1 = new.f_int1;
 
25414
END|
 
25415
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25416
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25417
        
 
25418
# check trigger-3 success:      1
 
25419
DROP TRIGGER trg_1;
 
25420
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25421
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25422
f_charbig = 'just inserted'
 
25423
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25424
DELETE FROM t0_aux
 
25425
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25426
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25427
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25428
'just inserted' FROM t0_template
 
25429
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25430
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25431
BEGIN
 
25432
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25433
f_charbig = 'updated by trigger'
 
25434
      WHERE f_int1 = - old.f_int1;
 
25435
END|
 
25436
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25437
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25438
        
 
25439
# check trigger-4 success:      1
 
25440
DROP TRIGGER trg_1;
 
25441
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25442
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25443
f_charbig = 'just inserted'
 
25444
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25445
DELETE FROM t0_aux
 
25446
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25447
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25448
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25449
'just inserted' FROM t0_template
 
25450
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25451
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25452
BEGIN
 
25453
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25454
f_charbig = 'updated by trigger'
 
25455
      WHERE f_int1 = new.f_int1;
 
25456
END|
 
25457
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25458
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25459
        
 
25460
# check trigger-5 success:      1
 
25461
DROP TRIGGER trg_1;
 
25462
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25463
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25464
f_charbig = 'just inserted'
 
25465
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25466
DELETE FROM t0_aux
 
25467
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25468
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25469
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25470
'just inserted' FROM t0_template
 
25471
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25472
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25473
BEGIN
 
25474
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25475
f_charbig = 'updated by trigger'
 
25476
      WHERE f_int1 = - old.f_int1;
 
25477
END|
 
25478
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25479
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25480
        
 
25481
# check trigger-6 success:      1
 
25482
DROP TRIGGER trg_1;
 
25483
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25484
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25485
f_charbig = 'just inserted'
 
25486
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25487
DELETE FROM t0_aux
 
25488
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25489
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25490
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25491
'just inserted' FROM t0_template
 
25492
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25493
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
25494
BEGIN
 
25495
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25496
f_charbig = 'updated by trigger'
 
25497
      WHERE f_int1 = - old.f_int1;
 
25498
END|
 
25499
DELETE FROM t0_aux
 
25500
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25501
        
 
25502
# check trigger-7 success:      1
 
25503
DROP TRIGGER trg_1;
 
25504
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25505
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25506
f_charbig = 'just inserted'
 
25507
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25508
DELETE FROM t0_aux
 
25509
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25510
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25511
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25512
'just inserted' FROM t0_template
 
25513
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25514
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
25515
BEGIN
 
25516
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25517
f_charbig = 'updated by trigger'
 
25518
      WHERE f_int1 = - old.f_int1;
 
25519
END|
 
25520
DELETE FROM t0_aux
 
25521
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25522
        
 
25523
# check trigger-8 success:      1
 
25524
DROP TRIGGER trg_1;
 
25525
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25526
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25527
f_charbig = 'just inserted'
 
25528
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25529
DELETE FROM t0_aux
 
25530
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25531
DELETE FROM t1
 
25532
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25533
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25534
BEGIN
 
25535
SET new.f_int1 = old.f_int1 + @max_row,
 
25536
new.f_int2 = old.f_int2 - @max_row,
 
25537
new.f_charbig = '####updated per update trigger####';
 
25538
END|
 
25539
UPDATE t1
 
25540
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25541
f_charbig = '####updated per update statement itself####';
 
25542
        
 
25543
# check trigger-9 success:      1
 
25544
DROP TRIGGER trg_2;
 
25545
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25546
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25547
f_charbig = CONCAT('===',f_char1,'===');
 
25548
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25549
BEGIN
 
25550
SET new.f_int1 = new.f_int1 + @max_row,
 
25551
new.f_int2 = new.f_int2 - @max_row,
 
25552
new.f_charbig = '####updated per update trigger####';
 
25553
END|
 
25554
UPDATE t1
 
25555
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25556
f_charbig = '####updated per update statement itself####';
 
25557
        
 
25558
# check trigger-10 success:     1
 
25559
DROP TRIGGER trg_2;
 
25560
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25561
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25562
f_charbig = CONCAT('===',f_char1,'===');
 
25563
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25564
BEGIN
 
25565
SET new.f_int1 = @my_max1 + @counter,
 
25566
new.f_int2 = @my_min2 - @counter,
 
25567
new.f_charbig = '####updated per insert trigger####';
 
25568
SET @counter = @counter + 1;
 
25569
END|
 
25570
SET @counter = 1;
 
25571
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25572
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25573
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25574
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25575
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25576
ORDER BY f_int1;
 
25577
DROP TRIGGER trg_3;
 
25578
        
 
25579
# check trigger-11 success:     1
 
25580
DELETE FROM t1
 
25581
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25582
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25583
AND f_charbig = '####updated per insert trigger####';
 
25584
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25585
BEGIN
 
25586
SET new.f_int1 = @my_max1 + @counter,
 
25587
new.f_int2 = @my_min2 - @counter,
 
25588
new.f_charbig = '####updated per insert trigger####';
 
25589
SET @counter = @counter + 1;
 
25590
END|
 
25591
SET @counter = 1;
 
25592
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25593
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
25594
SELECT CAST(f_int1 AS CHAR),
 
25595
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25596
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25597
ORDER BY f_int1;
 
25598
DROP TRIGGER trg_3;
 
25599
        
 
25600
# check trigger-12 success:     1
 
25601
DELETE FROM t1
 
25602
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25603
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25604
AND f_charbig = '####updated per insert trigger####';
 
25605
ANALYZE  TABLE t1;
 
25606
Table   Op      Msg_type        Msg_text
 
25607
test.t1 analyze status  OK
 
25608
CHECK    TABLE t1 EXTENDED;
 
25609
Table   Op      Msg_type        Msg_text
 
25610
test.t1 check   status  OK
 
25611
CHECKSUM TABLE t1 EXTENDED;
 
25612
Table   Checksum
 
25613
test.t1 <some_value>
 
25614
OPTIMIZE TABLE t1;
 
25615
Table   Op      Msg_type        Msg_text
 
25616
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
25617
test.t1 optimize        status  OK
 
25618
# check layout success:    1
 
25619
REPAIR   TABLE t1 EXTENDED;
 
25620
Table   Op      Msg_type        Msg_text
 
25621
test.t1 repair  note    The storage engine for the table doesn't support repair
 
25622
# check layout success:    1
 
25623
TRUNCATE t1;
 
25624
        
 
25625
# check TRUNCATE success:       1
 
25626
# check layout success:    1
 
25627
# End usability test (inc/partition_check.inc)
 
25628
DROP TABLE t1;
 
25629
#  2.2.3 DROP PRIMARY KEY + UNIQUE INDEX consisting of two columns
 
25630
DROP TABLE IF EXISTS t1;
 
25631
CREATE TABLE t1 (
 
25632
f_int1 INTEGER,
 
25633
f_int2 INTEGER,
 
25634
f_char1 CHAR(20),
 
25635
f_char2 CHAR(20),
 
25636
f_charbig VARCHAR(1000)
 
25637
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
25638
)
 
25639
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
25640
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25641
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25642
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
25643
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
25644
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25645
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25646
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25647
# Start usability test (inc/partition_check.inc)
 
25648
create_command
 
25649
SHOW CREATE TABLE t1;
 
25650
Table   Create Table
 
25651
t1      CREATE TABLE `t1` (
 
25652
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
25653
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
25654
  `f_char1` char(20) DEFAULT NULL,
 
25655
  `f_char2` char(20) DEFAULT NULL,
 
25656
  `f_charbig` varchar(1000) DEFAULT NULL
 
25657
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
25658
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
 
25659
PARTITIONS 2 */
 
25660
 
 
25661
# check prerequisites-1 success:    1
 
25662
# check COUNT(*) success:    1
 
25663
# check MIN/MAX(f_int1) success:    1
 
25664
# check MIN/MAX(f_int2) success:    1
 
25665
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25666
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25667
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
25668
WHERE f_int1 IN (2,3);
 
25669
# check prerequisites-3 success:    1
 
25670
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25671
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
25672
# check read via f_int1 success: 1
 
25673
# check read via f_int2 success: 1
 
25674
        
 
25675
# check multiple-1 success:     1
 
25676
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
25677
        
 
25678
# check multiple-2 success:     1
 
25679
INSERT INTO t1 SELECT * FROM t0_template
 
25680
WHERE MOD(f_int1,3) = 0;
 
25681
        
 
25682
# check multiple-3 success:     1
 
25683
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
25684
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
25685
AND @max_row_div2 + @max_row_div4;
 
25686
        
 
25687
# check multiple-4 success:     1
 
25688
DELETE FROM t1
 
25689
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
25690
AND @max_row_div2 + @max_row_div4 + @max_row;
 
25691
        
 
25692
# check multiple-5 success:     1
 
25693
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
25694
INSERT INTO t1
 
25695
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25696
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25697
f_charbig = '#SINGLE#';
 
25698
        
 
25699
# check single-1 success:       1
 
25700
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
25701
INSERT INTO t1
 
25702
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25703
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25704
f_charbig = '#SINGLE#';
 
25705
        
 
25706
# check single-2 success:       1
 
25707
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
25708
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
25709
UPDATE t1 SET f_int1 = @cur_value2
 
25710
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
25711
        
 
25712
# check single-3 success:       1
 
25713
SET @cur_value1= -1;
 
25714
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
25715
UPDATE t1 SET f_int1 = @cur_value1
 
25716
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
25717
        
 
25718
# check single-4 success:       1
 
25719
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
25720
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
25721
        
 
25722
# check single-5 success:       1
 
25723
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
25724
        
 
25725
# check single-6 success:       1
 
25726
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
25727
        
 
25728
# check single-7 success:       1
 
25729
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
25730
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
25731
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
25732
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
25733
f_charbig = '#NULL#';
 
25734
INSERT INTO t1
 
25735
SET f_int1 = NULL , f_int2 = -@max_row,
 
25736
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
25737
f_charbig = '#NULL#';
 
25738
ERROR 23000: Column 'f_int1' cannot be null
 
25739
# check null success:    1
 
25740
DELETE FROM t1
 
25741
WHERE f_int1 = 0 AND f_int2 = 0
 
25742
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
25743
AND f_charbig = '#NULL#';
 
25744
SET AUTOCOMMIT= 0;
 
25745
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25746
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25747
FROM t0_template source_tab
 
25748
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25749
        
 
25750
# check transactions-1 success:         1
 
25751
COMMIT WORK;
 
25752
        
 
25753
# check transactions-2 success:         1
 
25754
ROLLBACK WORK;
 
25755
        
 
25756
# check transactions-3 success:         1
 
25757
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25758
COMMIT WORK;
 
25759
ROLLBACK WORK;
 
25760
        
 
25761
# check transactions-4 success:         1
 
25762
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25763
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25764
FROM t0_template source_tab
 
25765
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25766
        
 
25767
# check transactions-5 success:         1
 
25768
ROLLBACK WORK;
 
25769
        
 
25770
# check transactions-6 success:         1
 
25771
# INFO: Storage engine used for t1 seems to be transactional.
 
25772
COMMIT;
 
25773
        
 
25774
# check transactions-7 success:         1
 
25775
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25776
COMMIT WORK;
 
25777
SET @@session.sql_mode = 'traditional';
 
25778
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
25779
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25780
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
25781
'', '', 'was inserted' FROM t0_template
 
25782
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25783
ERROR 22012: Division by 0
 
25784
COMMIT;
 
25785
        
 
25786
# check transactions-8 success:         1
 
25787
# INFO: Storage engine used for t1 seems to be able to revert
 
25788
#       changes made by the failing statement.
 
25789
SET @@session.sql_mode = '';
 
25790
SET AUTOCOMMIT= 1;
 
25791
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25792
COMMIT WORK;
 
25793
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
25794
        
 
25795
# check special-1 success:      1
 
25796
UPDATE t1 SET f_charbig = '';
 
25797
        
 
25798
# check special-2 success:      1
 
25799
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
25800
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25801
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
25802
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25803
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25804
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25805
'just inserted' FROM t0_template
 
25806
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25807
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
25808
BEGIN
 
25809
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25810
f_charbig = 'updated by trigger'
 
25811
      WHERE f_int1 = new.f_int1;
 
25812
END|
 
25813
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25814
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25815
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25816
        
 
25817
# check trigger-1 success:      1
 
25818
DROP TRIGGER trg_1;
 
25819
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25820
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25821
f_charbig = 'just inserted'
 
25822
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25823
DELETE FROM t0_aux
 
25824
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25825
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25826
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25827
'just inserted' FROM t0_template
 
25828
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25829
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
25830
BEGIN
 
25831
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25832
f_charbig = 'updated by trigger'
 
25833
      WHERE f_int1 = new.f_int1;
 
25834
END|
 
25835
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25836
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25837
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25838
        
 
25839
# check trigger-2 success:      1
 
25840
DROP TRIGGER trg_1;
 
25841
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25842
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25843
f_charbig = 'just inserted'
 
25844
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25845
DELETE FROM t0_aux
 
25846
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25847
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25848
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25849
'just inserted' FROM t0_template
 
25850
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25851
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25852
BEGIN
 
25853
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25854
f_charbig = 'updated by trigger'
 
25855
      WHERE f_int1 = new.f_int1;
 
25856
END|
 
25857
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25858
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25859
        
 
25860
# check trigger-3 success:      1
 
25861
DROP TRIGGER trg_1;
 
25862
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25863
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25864
f_charbig = 'just inserted'
 
25865
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25866
DELETE FROM t0_aux
 
25867
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25868
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25869
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25870
'just inserted' FROM t0_template
 
25871
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25872
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25873
BEGIN
 
25874
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25875
f_charbig = 'updated by trigger'
 
25876
      WHERE f_int1 = - old.f_int1;
 
25877
END|
 
25878
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25879
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25880
        
 
25881
# check trigger-4 success:      1
 
25882
DROP TRIGGER trg_1;
 
25883
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25884
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25885
f_charbig = 'just inserted'
 
25886
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25887
DELETE FROM t0_aux
 
25888
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25889
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25890
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25891
'just inserted' FROM t0_template
 
25892
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25893
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25894
BEGIN
 
25895
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25896
f_charbig = 'updated by trigger'
 
25897
      WHERE f_int1 = new.f_int1;
 
25898
END|
 
25899
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25900
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25901
        
 
25902
# check trigger-5 success:      1
 
25903
DROP TRIGGER trg_1;
 
25904
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25905
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25906
f_charbig = 'just inserted'
 
25907
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25908
DELETE FROM t0_aux
 
25909
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25910
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25911
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25912
'just inserted' FROM t0_template
 
25913
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25914
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25915
BEGIN
 
25916
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25917
f_charbig = 'updated by trigger'
 
25918
      WHERE f_int1 = - old.f_int1;
 
25919
END|
 
25920
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25921
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25922
        
 
25923
# check trigger-6 success:      1
 
25924
DROP TRIGGER trg_1;
 
25925
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25926
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25927
f_charbig = 'just inserted'
 
25928
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25929
DELETE FROM t0_aux
 
25930
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25931
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25932
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25933
'just inserted' FROM t0_template
 
25934
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25935
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
25936
BEGIN
 
25937
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25938
f_charbig = 'updated by trigger'
 
25939
      WHERE f_int1 = - old.f_int1;
 
25940
END|
 
25941
DELETE FROM t0_aux
 
25942
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25943
        
 
25944
# check trigger-7 success:      1
 
25945
DROP TRIGGER trg_1;
 
25946
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25947
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25948
f_charbig = 'just inserted'
 
25949
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25950
DELETE FROM t0_aux
 
25951
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25952
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25953
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25954
'just inserted' FROM t0_template
 
25955
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25956
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
25957
BEGIN
 
25958
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25959
f_charbig = 'updated by trigger'
 
25960
      WHERE f_int1 = - old.f_int1;
 
25961
END|
 
25962
DELETE FROM t0_aux
 
25963
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25964
        
 
25965
# check trigger-8 success:      1
 
25966
DROP TRIGGER trg_1;
 
25967
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25968
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25969
f_charbig = 'just inserted'
 
25970
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25971
DELETE FROM t0_aux
 
25972
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25973
DELETE FROM t1
 
25974
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25975
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25976
BEGIN
 
25977
SET new.f_int1 = old.f_int1 + @max_row,
 
25978
new.f_int2 = old.f_int2 - @max_row,
 
25979
new.f_charbig = '####updated per update trigger####';
 
25980
END|
 
25981
UPDATE t1
 
25982
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25983
f_charbig = '####updated per update statement itself####';
 
25984
        
 
25985
# check trigger-9 success:      1
 
25986
DROP TRIGGER trg_2;
 
25987
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25988
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25989
f_charbig = CONCAT('===',f_char1,'===');
 
25990
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25991
BEGIN
 
25992
SET new.f_int1 = new.f_int1 + @max_row,
 
25993
new.f_int2 = new.f_int2 - @max_row,
 
25994
new.f_charbig = '####updated per update trigger####';
 
25995
END|
 
25996
UPDATE t1
 
25997
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25998
f_charbig = '####updated per update statement itself####';
 
25999
        
 
26000
# check trigger-10 success:     1
 
26001
DROP TRIGGER trg_2;
 
26002
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26003
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26004
f_charbig = CONCAT('===',f_char1,'===');
 
26005
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26006
BEGIN
 
26007
SET new.f_int1 = @my_max1 + @counter,
 
26008
new.f_int2 = @my_min2 - @counter,
 
26009
new.f_charbig = '####updated per insert trigger####';
 
26010
SET @counter = @counter + 1;
 
26011
END|
 
26012
SET @counter = 1;
 
26013
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26014
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26015
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26016
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26017
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26018
ORDER BY f_int1;
 
26019
DROP TRIGGER trg_3;
 
26020
        
 
26021
# check trigger-11 success:     1
 
26022
DELETE FROM t1
 
26023
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26024
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26025
AND f_charbig = '####updated per insert trigger####';
 
26026
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26027
BEGIN
 
26028
SET new.f_int1 = @my_max1 + @counter,
 
26029
new.f_int2 = @my_min2 - @counter,
 
26030
new.f_charbig = '####updated per insert trigger####';
 
26031
SET @counter = @counter + 1;
 
26032
END|
 
26033
SET @counter = 1;
 
26034
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26035
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
26036
SELECT CAST(f_int1 AS CHAR),
 
26037
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26038
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26039
ORDER BY f_int1;
 
26040
DROP TRIGGER trg_3;
 
26041
        
 
26042
# check trigger-12 success:     1
 
26043
DELETE FROM t1
 
26044
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26045
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26046
AND f_charbig = '####updated per insert trigger####';
 
26047
ANALYZE  TABLE t1;
 
26048
Table   Op      Msg_type        Msg_text
 
26049
test.t1 analyze status  OK
 
26050
CHECK    TABLE t1 EXTENDED;
 
26051
Table   Op      Msg_type        Msg_text
 
26052
test.t1 check   status  OK
 
26053
CHECKSUM TABLE t1 EXTENDED;
 
26054
Table   Checksum
 
26055
test.t1 <some_value>
 
26056
OPTIMIZE TABLE t1;
 
26057
Table   Op      Msg_type        Msg_text
 
26058
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
26059
test.t1 optimize        status  OK
 
26060
# check layout success:    1
 
26061
REPAIR   TABLE t1 EXTENDED;
 
26062
Table   Op      Msg_type        Msg_text
 
26063
test.t1 repair  note    The storage engine for the table doesn't support repair
 
26064
# check layout success:    1
 
26065
TRUNCATE t1;
 
26066
        
 
26067
# check TRUNCATE success:       1
 
26068
# check layout success:    1
 
26069
# End usability test (inc/partition_check.inc)
 
26070
DROP TABLE t1;
 
26071
CREATE TABLE t1 (
 
26072
f_int1 INTEGER,
 
26073
f_int2 INTEGER,
 
26074
f_char1 CHAR(20),
 
26075
f_char2 CHAR(20),
 
26076
f_charbig VARCHAR(1000)
 
26077
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
26078
)
 
26079
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
26080
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26081
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26082
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
26083
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
26084
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26085
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26086
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26087
# Start usability test (inc/partition_check.inc)
 
26088
create_command
 
26089
SHOW CREATE TABLE t1;
 
26090
Table   Create Table
 
26091
t1      CREATE TABLE `t1` (
 
26092
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
26093
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
26094
  `f_char1` char(20) DEFAULT NULL,
 
26095
  `f_char2` char(20) DEFAULT NULL,
 
26096
  `f_charbig` varchar(1000) DEFAULT NULL
 
26097
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
26098
/*!50100 PARTITION BY KEY (f_int1,f_int2)
 
26099
PARTITIONS 5 */
 
26100
 
 
26101
# check prerequisites-1 success:    1
 
26102
# check COUNT(*) success:    1
 
26103
# check MIN/MAX(f_int1) success:    1
 
26104
# check MIN/MAX(f_int2) success:    1
 
26105
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26106
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26107
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
26108
WHERE f_int1 IN (2,3);
 
26109
# check prerequisites-3 success:    1
 
26110
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
26111
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
26112
# check read via f_int1 success: 1
 
26113
# check read via f_int2 success: 1
 
26114
        
 
26115
# check multiple-1 success:     1
 
26116
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
26117
        
 
26118
# check multiple-2 success:     1
 
26119
INSERT INTO t1 SELECT * FROM t0_template
 
26120
WHERE MOD(f_int1,3) = 0;
 
26121
        
 
26122
# check multiple-3 success:     1
 
26123
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
26124
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
26125
AND @max_row_div2 + @max_row_div4;
 
26126
        
 
26127
# check multiple-4 success:     1
 
26128
DELETE FROM t1
 
26129
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
26130
AND @max_row_div2 + @max_row_div4 + @max_row;
 
26131
        
 
26132
# check multiple-5 success:     1
 
26133
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
26134
INSERT INTO t1
 
26135
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26136
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26137
f_charbig = '#SINGLE#';
 
26138
        
 
26139
# check single-1 success:       1
 
26140
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
26141
INSERT INTO t1
 
26142
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26143
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26144
f_charbig = '#SINGLE#';
 
26145
        
 
26146
# check single-2 success:       1
 
26147
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
26148
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
26149
UPDATE t1 SET f_int1 = @cur_value2
 
26150
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
26151
        
 
26152
# check single-3 success:       1
 
26153
SET @cur_value1= -1;
 
26154
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
26155
UPDATE t1 SET f_int1 = @cur_value1
 
26156
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
26157
        
 
26158
# check single-4 success:       1
 
26159
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
26160
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
26161
        
 
26162
# check single-5 success:       1
 
26163
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
26164
        
 
26165
# check single-6 success:       1
 
26166
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
26167
        
 
26168
# check single-7 success:       1
 
26169
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
26170
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
26171
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
26172
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
26173
f_charbig = '#NULL#';
 
26174
INSERT INTO t1
 
26175
SET f_int1 = NULL , f_int2 = -@max_row,
 
26176
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
26177
f_charbig = '#NULL#';
 
26178
ERROR 23000: Column 'f_int1' cannot be null
 
26179
# check null success:    1
 
26180
DELETE FROM t1
 
26181
WHERE f_int1 = 0 AND f_int2 = 0
 
26182
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
26183
AND f_charbig = '#NULL#';
 
26184
SET AUTOCOMMIT= 0;
 
26185
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26186
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26187
FROM t0_template source_tab
 
26188
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26189
        
 
26190
# check transactions-1 success:         1
 
26191
COMMIT WORK;
 
26192
        
 
26193
# check transactions-2 success:         1
 
26194
ROLLBACK WORK;
 
26195
        
 
26196
# check transactions-3 success:         1
 
26197
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26198
COMMIT WORK;
 
26199
ROLLBACK WORK;
 
26200
        
 
26201
# check transactions-4 success:         1
 
26202
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26203
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26204
FROM t0_template source_tab
 
26205
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26206
        
 
26207
# check transactions-5 success:         1
 
26208
ROLLBACK WORK;
 
26209
        
 
26210
# check transactions-6 success:         1
 
26211
# INFO: Storage engine used for t1 seems to be transactional.
 
26212
COMMIT;
 
26213
        
 
26214
# check transactions-7 success:         1
 
26215
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26216
COMMIT WORK;
 
26217
SET @@session.sql_mode = 'traditional';
 
26218
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
26219
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26220
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
26221
'', '', 'was inserted' FROM t0_template
 
26222
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26223
ERROR 22012: Division by 0
 
26224
COMMIT;
 
26225
        
 
26226
# check transactions-8 success:         1
 
26227
# INFO: Storage engine used for t1 seems to be able to revert
 
26228
#       changes made by the failing statement.
 
26229
SET @@session.sql_mode = '';
 
26230
SET AUTOCOMMIT= 1;
 
26231
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26232
COMMIT WORK;
 
26233
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
26234
        
 
26235
# check special-1 success:      1
 
26236
UPDATE t1 SET f_charbig = '';
 
26237
        
 
26238
# check special-2 success:      1
 
26239
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
26240
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26241
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
26242
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26243
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26244
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26245
'just inserted' FROM t0_template
 
26246
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26247
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
26248
BEGIN
 
26249
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26250
f_charbig = 'updated by trigger'
 
26251
      WHERE f_int1 = new.f_int1;
 
26252
END|
 
26253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26254
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26255
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26256
        
 
26257
# check trigger-1 success:      1
 
26258
DROP TRIGGER trg_1;
 
26259
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26260
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26261
f_charbig = 'just inserted'
 
26262
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26263
DELETE FROM t0_aux
 
26264
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26265
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26266
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26267
'just inserted' FROM t0_template
 
26268
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26269
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
26270
BEGIN
 
26271
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26272
f_charbig = 'updated by trigger'
 
26273
      WHERE f_int1 = new.f_int1;
 
26274
END|
 
26275
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26276
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26277
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26278
        
 
26279
# check trigger-2 success:      1
 
26280
DROP TRIGGER trg_1;
 
26281
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26282
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26283
f_charbig = 'just inserted'
 
26284
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26285
DELETE FROM t0_aux
 
26286
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26287
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26288
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26289
'just inserted' FROM t0_template
 
26290
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26291
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26292
BEGIN
 
26293
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26294
f_charbig = 'updated by trigger'
 
26295
      WHERE f_int1 = new.f_int1;
 
26296
END|
 
26297
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26298
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26299
        
 
26300
# check trigger-3 success:      1
 
26301
DROP TRIGGER trg_1;
 
26302
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26303
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26304
f_charbig = 'just inserted'
 
26305
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26306
DELETE FROM t0_aux
 
26307
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26308
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26309
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26310
'just inserted' FROM t0_template
 
26311
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26312
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26313
BEGIN
 
26314
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26315
f_charbig = 'updated by trigger'
 
26316
      WHERE f_int1 = - old.f_int1;
 
26317
END|
 
26318
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26319
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26320
        
 
26321
# check trigger-4 success:      1
 
26322
DROP TRIGGER trg_1;
 
26323
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26324
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26325
f_charbig = 'just inserted'
 
26326
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26327
DELETE FROM t0_aux
 
26328
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26329
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26330
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26331
'just inserted' FROM t0_template
 
26332
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26333
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26334
BEGIN
 
26335
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26336
f_charbig = 'updated by trigger'
 
26337
      WHERE f_int1 = new.f_int1;
 
26338
END|
 
26339
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26340
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26341
        
 
26342
# check trigger-5 success:      1
 
26343
DROP TRIGGER trg_1;
 
26344
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26345
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26346
f_charbig = 'just inserted'
 
26347
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26348
DELETE FROM t0_aux
 
26349
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26350
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26351
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26352
'just inserted' FROM t0_template
 
26353
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26354
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26355
BEGIN
 
26356
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26357
f_charbig = 'updated by trigger'
 
26358
      WHERE f_int1 = - old.f_int1;
 
26359
END|
 
26360
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26361
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26362
        
 
26363
# check trigger-6 success:      1
 
26364
DROP TRIGGER trg_1;
 
26365
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26366
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26367
f_charbig = 'just inserted'
 
26368
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26369
DELETE FROM t0_aux
 
26370
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26371
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26372
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26373
'just inserted' FROM t0_template
 
26374
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26375
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
26376
BEGIN
 
26377
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26378
f_charbig = 'updated by trigger'
 
26379
      WHERE f_int1 = - old.f_int1;
 
26380
END|
 
26381
DELETE FROM t0_aux
 
26382
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26383
        
 
26384
# check trigger-7 success:      1
 
26385
DROP TRIGGER trg_1;
 
26386
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26387
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26388
f_charbig = 'just inserted'
 
26389
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26390
DELETE FROM t0_aux
 
26391
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26392
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26393
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26394
'just inserted' FROM t0_template
 
26395
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26396
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
26397
BEGIN
 
26398
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26399
f_charbig = 'updated by trigger'
 
26400
      WHERE f_int1 = - old.f_int1;
 
26401
END|
 
26402
DELETE FROM t0_aux
 
26403
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26404
        
 
26405
# check trigger-8 success:      1
 
26406
DROP TRIGGER trg_1;
 
26407
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26408
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26409
f_charbig = 'just inserted'
 
26410
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26411
DELETE FROM t0_aux
 
26412
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26413
DELETE FROM t1
 
26414
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26415
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26416
BEGIN
 
26417
SET new.f_int1 = old.f_int1 + @max_row,
 
26418
new.f_int2 = old.f_int2 - @max_row,
 
26419
new.f_charbig = '####updated per update trigger####';
 
26420
END|
 
26421
UPDATE t1
 
26422
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26423
f_charbig = '####updated per update statement itself####';
 
26424
        
 
26425
# check trigger-9 success:      1
 
26426
DROP TRIGGER trg_2;
 
26427
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26428
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26429
f_charbig = CONCAT('===',f_char1,'===');
 
26430
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26431
BEGIN
 
26432
SET new.f_int1 = new.f_int1 + @max_row,
 
26433
new.f_int2 = new.f_int2 - @max_row,
 
26434
new.f_charbig = '####updated per update trigger####';
 
26435
END|
 
26436
UPDATE t1
 
26437
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26438
f_charbig = '####updated per update statement itself####';
 
26439
        
 
26440
# check trigger-10 success:     1
 
26441
DROP TRIGGER trg_2;
 
26442
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26443
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26444
f_charbig = CONCAT('===',f_char1,'===');
 
26445
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26446
BEGIN
 
26447
SET new.f_int1 = @my_max1 + @counter,
 
26448
new.f_int2 = @my_min2 - @counter,
 
26449
new.f_charbig = '####updated per insert trigger####';
 
26450
SET @counter = @counter + 1;
 
26451
END|
 
26452
SET @counter = 1;
 
26453
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26454
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26455
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26456
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26457
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26458
ORDER BY f_int1;
 
26459
DROP TRIGGER trg_3;
 
26460
        
 
26461
# check trigger-11 success:     1
 
26462
DELETE FROM t1
 
26463
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26464
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26465
AND f_charbig = '####updated per insert trigger####';
 
26466
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26467
BEGIN
 
26468
SET new.f_int1 = @my_max1 + @counter,
 
26469
new.f_int2 = @my_min2 - @counter,
 
26470
new.f_charbig = '####updated per insert trigger####';
 
26471
SET @counter = @counter + 1;
 
26472
END|
 
26473
SET @counter = 1;
 
26474
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26475
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
26476
SELECT CAST(f_int1 AS CHAR),
 
26477
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26478
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26479
ORDER BY f_int1;
 
26480
DROP TRIGGER trg_3;
 
26481
        
 
26482
# check trigger-12 success:     1
 
26483
DELETE FROM t1
 
26484
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26485
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26486
AND f_charbig = '####updated per insert trigger####';
 
26487
ANALYZE  TABLE t1;
 
26488
Table   Op      Msg_type        Msg_text
 
26489
test.t1 analyze status  OK
 
26490
CHECK    TABLE t1 EXTENDED;
 
26491
Table   Op      Msg_type        Msg_text
 
26492
test.t1 check   status  OK
 
26493
CHECKSUM TABLE t1 EXTENDED;
 
26494
Table   Checksum
 
26495
test.t1 <some_value>
 
26496
OPTIMIZE TABLE t1;
 
26497
Table   Op      Msg_type        Msg_text
 
26498
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
26499
test.t1 optimize        status  OK
 
26500
# check layout success:    1
 
26501
REPAIR   TABLE t1 EXTENDED;
 
26502
Table   Op      Msg_type        Msg_text
 
26503
test.t1 repair  note    The storage engine for the table doesn't support repair
 
26504
# check layout success:    1
 
26505
TRUNCATE t1;
 
26506
        
 
26507
# check TRUNCATE success:       1
 
26508
# check layout success:    1
 
26509
# End usability test (inc/partition_check.inc)
 
26510
DROP TABLE t1;
 
26511
CREATE TABLE t1 (
 
26512
f_int1 INTEGER,
 
26513
f_int2 INTEGER,
 
26514
f_char1 CHAR(20),
 
26515
f_char2 CHAR(20),
 
26516
f_charbig VARCHAR(1000)
 
26517
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
26518
)
 
26519
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
26520
(PARTITION part_3 VALUES IN (-3),
 
26521
PARTITION part_2 VALUES IN (-2),
 
26522
PARTITION part_1 VALUES IN (-1),
 
26523
PARTITION part_N VALUES IN (NULL),
 
26524
PARTITION part0 VALUES IN (0),
 
26525
PARTITION part1 VALUES IN (1),
 
26526
PARTITION part2 VALUES IN (2),
 
26527
PARTITION part3 VALUES IN (3));
 
26528
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26529
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26530
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
26531
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
26532
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26533
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26534
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26535
# Start usability test (inc/partition_check.inc)
 
26536
create_command
 
26537
SHOW CREATE TABLE t1;
 
26538
Table   Create Table
 
26539
t1      CREATE TABLE `t1` (
 
26540
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
26541
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
26542
  `f_char1` char(20) DEFAULT NULL,
 
26543
  `f_char2` char(20) DEFAULT NULL,
 
26544
  `f_charbig` varchar(1000) DEFAULT NULL
 
26545
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
26546
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
 
26547
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
26548
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
26549
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
26550
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
26551
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
26552
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
26553
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
26554
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
26555
 
 
26556
# check prerequisites-1 success:    1
 
26557
# check COUNT(*) success:    1
 
26558
# check MIN/MAX(f_int1) success:    1
 
26559
# check MIN/MAX(f_int2) success:    1
 
26560
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26561
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26562
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
26563
WHERE f_int1 IN (2,3);
 
26564
# check prerequisites-3 success:    1
 
26565
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
26566
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
26567
# check read via f_int1 success: 1
 
26568
# check read via f_int2 success: 1
 
26569
        
 
26570
# check multiple-1 success:     1
 
26571
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
26572
        
 
26573
# check multiple-2 success:     1
 
26574
INSERT INTO t1 SELECT * FROM t0_template
 
26575
WHERE MOD(f_int1,3) = 0;
 
26576
        
 
26577
# check multiple-3 success:     1
 
26578
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
26579
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
26580
AND @max_row_div2 + @max_row_div4;
 
26581
        
 
26582
# check multiple-4 success:     1
 
26583
DELETE FROM t1
 
26584
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
26585
AND @max_row_div2 + @max_row_div4 + @max_row;
 
26586
        
 
26587
# check multiple-5 success:     1
 
26588
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
26589
INSERT INTO t1
 
26590
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26591
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26592
f_charbig = '#SINGLE#';
 
26593
        
 
26594
# check single-1 success:       1
 
26595
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
26596
INSERT INTO t1
 
26597
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26598
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26599
f_charbig = '#SINGLE#';
 
26600
        
 
26601
# check single-2 success:       1
 
26602
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
26603
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
26604
UPDATE t1 SET f_int1 = @cur_value2
 
26605
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
26606
        
 
26607
# check single-3 success:       1
 
26608
SET @cur_value1= -1;
 
26609
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
26610
UPDATE t1 SET f_int1 = @cur_value1
 
26611
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
26612
        
 
26613
# check single-4 success:       1
 
26614
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
26615
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
26616
        
 
26617
# check single-5 success:       1
 
26618
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
26619
        
 
26620
# check single-6 success:       1
 
26621
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
26622
        
 
26623
# check single-7 success:       1
 
26624
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
26625
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
26626
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
26627
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
26628
f_charbig = '#NULL#';
 
26629
INSERT INTO t1
 
26630
SET f_int1 = NULL , f_int2 = -@max_row,
 
26631
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
26632
f_charbig = '#NULL#';
 
26633
ERROR 23000: Column 'f_int1' cannot be null
 
26634
# check null success:    1
 
26635
DELETE FROM t1
 
26636
WHERE f_int1 = 0 AND f_int2 = 0
 
26637
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
26638
AND f_charbig = '#NULL#';
 
26639
SET AUTOCOMMIT= 0;
 
26640
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26641
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26642
FROM t0_template source_tab
 
26643
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26644
        
 
26645
# check transactions-1 success:         1
 
26646
COMMIT WORK;
 
26647
        
 
26648
# check transactions-2 success:         1
 
26649
ROLLBACK WORK;
 
26650
        
 
26651
# check transactions-3 success:         1
 
26652
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26653
COMMIT WORK;
 
26654
ROLLBACK WORK;
 
26655
        
 
26656
# check transactions-4 success:         1
 
26657
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26658
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26659
FROM t0_template source_tab
 
26660
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26661
        
 
26662
# check transactions-5 success:         1
 
26663
ROLLBACK WORK;
 
26664
        
 
26665
# check transactions-6 success:         1
 
26666
# INFO: Storage engine used for t1 seems to be transactional.
 
26667
COMMIT;
 
26668
        
 
26669
# check transactions-7 success:         1
 
26670
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26671
COMMIT WORK;
 
26672
SET @@session.sql_mode = 'traditional';
 
26673
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
26674
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26675
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
26676
'', '', 'was inserted' FROM t0_template
 
26677
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26678
ERROR 22012: Division by 0
 
26679
COMMIT;
 
26680
        
 
26681
# check transactions-8 success:         1
 
26682
# INFO: Storage engine used for t1 seems to be able to revert
 
26683
#       changes made by the failing statement.
 
26684
SET @@session.sql_mode = '';
 
26685
SET AUTOCOMMIT= 1;
 
26686
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26687
COMMIT WORK;
 
26688
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
26689
        
 
26690
# check special-1 success:      1
 
26691
UPDATE t1 SET f_charbig = '';
 
26692
        
 
26693
# check special-2 success:      1
 
26694
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
26695
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26696
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
26697
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26698
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26699
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26700
'just inserted' FROM t0_template
 
26701
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26702
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
26703
BEGIN
 
26704
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26705
f_charbig = 'updated by trigger'
 
26706
      WHERE f_int1 = new.f_int1;
 
26707
END|
 
26708
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26709
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26710
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26711
        
 
26712
# check trigger-1 success:      1
 
26713
DROP TRIGGER trg_1;
 
26714
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26715
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26716
f_charbig = 'just inserted'
 
26717
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26718
DELETE FROM t0_aux
 
26719
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26720
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26721
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26722
'just inserted' FROM t0_template
 
26723
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26724
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
26725
BEGIN
 
26726
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26727
f_charbig = 'updated by trigger'
 
26728
      WHERE f_int1 = new.f_int1;
 
26729
END|
 
26730
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26731
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26732
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26733
        
 
26734
# check trigger-2 success:      1
 
26735
DROP TRIGGER trg_1;
 
26736
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26737
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26738
f_charbig = 'just inserted'
 
26739
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26740
DELETE FROM t0_aux
 
26741
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26742
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26743
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26744
'just inserted' FROM t0_template
 
26745
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26746
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26747
BEGIN
 
26748
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26749
f_charbig = 'updated by trigger'
 
26750
      WHERE f_int1 = new.f_int1;
 
26751
END|
 
26752
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26753
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26754
        
 
26755
# check trigger-3 success:      1
 
26756
DROP TRIGGER trg_1;
 
26757
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26758
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26759
f_charbig = 'just inserted'
 
26760
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26761
DELETE FROM t0_aux
 
26762
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26763
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26764
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26765
'just inserted' FROM t0_template
 
26766
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26767
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26768
BEGIN
 
26769
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26770
f_charbig = 'updated by trigger'
 
26771
      WHERE f_int1 = - old.f_int1;
 
26772
END|
 
26773
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26774
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26775
        
 
26776
# check trigger-4 success:      1
 
26777
DROP TRIGGER trg_1;
 
26778
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26779
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26780
f_charbig = 'just inserted'
 
26781
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26782
DELETE FROM t0_aux
 
26783
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26784
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26785
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26786
'just inserted' FROM t0_template
 
26787
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26788
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26789
BEGIN
 
26790
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26791
f_charbig = 'updated by trigger'
 
26792
      WHERE f_int1 = new.f_int1;
 
26793
END|
 
26794
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26795
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26796
        
 
26797
# check trigger-5 success:      1
 
26798
DROP TRIGGER trg_1;
 
26799
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26800
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26801
f_charbig = 'just inserted'
 
26802
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26803
DELETE FROM t0_aux
 
26804
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26805
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26806
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26807
'just inserted' FROM t0_template
 
26808
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26809
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26810
BEGIN
 
26811
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26812
f_charbig = 'updated by trigger'
 
26813
      WHERE f_int1 = - old.f_int1;
 
26814
END|
 
26815
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26816
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26817
        
 
26818
# check trigger-6 success:      1
 
26819
DROP TRIGGER trg_1;
 
26820
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26821
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26822
f_charbig = 'just inserted'
 
26823
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26824
DELETE FROM t0_aux
 
26825
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26826
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26827
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26828
'just inserted' FROM t0_template
 
26829
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26830
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
26831
BEGIN
 
26832
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26833
f_charbig = 'updated by trigger'
 
26834
      WHERE f_int1 = - old.f_int1;
 
26835
END|
 
26836
DELETE FROM t0_aux
 
26837
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26838
        
 
26839
# check trigger-7 success:      1
 
26840
DROP TRIGGER trg_1;
 
26841
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26842
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26843
f_charbig = 'just inserted'
 
26844
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26845
DELETE FROM t0_aux
 
26846
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26847
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26848
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26849
'just inserted' FROM t0_template
 
26850
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26851
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
26852
BEGIN
 
26853
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26854
f_charbig = 'updated by trigger'
 
26855
      WHERE f_int1 = - old.f_int1;
 
26856
END|
 
26857
DELETE FROM t0_aux
 
26858
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26859
        
 
26860
# check trigger-8 success:      1
 
26861
DROP TRIGGER trg_1;
 
26862
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26863
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26864
f_charbig = 'just inserted'
 
26865
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26866
DELETE FROM t0_aux
 
26867
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26868
DELETE FROM t1
 
26869
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26870
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26871
BEGIN
 
26872
SET new.f_int1 = old.f_int1 + @max_row,
 
26873
new.f_int2 = old.f_int2 - @max_row,
 
26874
new.f_charbig = '####updated per update trigger####';
 
26875
END|
 
26876
UPDATE t1
 
26877
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26878
f_charbig = '####updated per update statement itself####';
 
26879
        
 
26880
# check trigger-9 success:      1
 
26881
DROP TRIGGER trg_2;
 
26882
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26883
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26884
f_charbig = CONCAT('===',f_char1,'===');
 
26885
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26886
BEGIN
 
26887
SET new.f_int1 = new.f_int1 + @max_row,
 
26888
new.f_int2 = new.f_int2 - @max_row,
 
26889
new.f_charbig = '####updated per update trigger####';
 
26890
END|
 
26891
UPDATE t1
 
26892
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26893
f_charbig = '####updated per update statement itself####';
 
26894
        
 
26895
# check trigger-10 success:     1
 
26896
DROP TRIGGER trg_2;
 
26897
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26898
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26899
f_charbig = CONCAT('===',f_char1,'===');
 
26900
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26901
BEGIN
 
26902
SET new.f_int1 = @my_max1 + @counter,
 
26903
new.f_int2 = @my_min2 - @counter,
 
26904
new.f_charbig = '####updated per insert trigger####';
 
26905
SET @counter = @counter + 1;
 
26906
END|
 
26907
SET @counter = 1;
 
26908
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26909
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26910
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26911
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26912
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26913
ORDER BY f_int1;
 
26914
DROP TRIGGER trg_3;
 
26915
        
 
26916
# check trigger-11 success:     1
 
26917
DELETE FROM t1
 
26918
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26919
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26920
AND f_charbig = '####updated per insert trigger####';
 
26921
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26922
BEGIN
 
26923
SET new.f_int1 = @my_max1 + @counter,
 
26924
new.f_int2 = @my_min2 - @counter,
 
26925
new.f_charbig = '####updated per insert trigger####';
 
26926
SET @counter = @counter + 1;
 
26927
END|
 
26928
SET @counter = 1;
 
26929
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26930
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
26931
SELECT CAST(f_int1 AS CHAR),
 
26932
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26933
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26934
ORDER BY f_int1;
 
26935
DROP TRIGGER trg_3;
 
26936
        
 
26937
# check trigger-12 success:     1
 
26938
DELETE FROM t1
 
26939
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26940
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26941
AND f_charbig = '####updated per insert trigger####';
 
26942
ANALYZE  TABLE t1;
 
26943
Table   Op      Msg_type        Msg_text
 
26944
test.t1 analyze status  OK
 
26945
CHECK    TABLE t1 EXTENDED;
 
26946
Table   Op      Msg_type        Msg_text
 
26947
test.t1 check   status  OK
 
26948
CHECKSUM TABLE t1 EXTENDED;
 
26949
Table   Checksum
 
26950
test.t1 <some_value>
 
26951
OPTIMIZE TABLE t1;
 
26952
Table   Op      Msg_type        Msg_text
 
26953
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
26954
test.t1 optimize        status  OK
 
26955
# check layout success:    1
 
26956
REPAIR   TABLE t1 EXTENDED;
 
26957
Table   Op      Msg_type        Msg_text
 
26958
test.t1 repair  note    The storage engine for the table doesn't support repair
 
26959
# check layout success:    1
 
26960
TRUNCATE t1;
 
26961
        
 
26962
# check TRUNCATE success:       1
 
26963
# check layout success:    1
 
26964
# End usability test (inc/partition_check.inc)
 
26965
DROP TABLE t1;
 
26966
CREATE TABLE t1 (
 
26967
f_int1 INTEGER,
 
26968
f_int2 INTEGER,
 
26969
f_char1 CHAR(20),
 
26970
f_char2 CHAR(20),
 
26971
f_charbig VARCHAR(1000)
 
26972
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
26973
)
 
26974
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
26975
(PARTITION parta VALUES LESS THAN (0),
 
26976
PARTITION partb VALUES LESS THAN (5),
 
26977
PARTITION partc VALUES LESS THAN (10),
 
26978
PARTITION partd VALUES LESS THAN (10 + 5),
 
26979
PARTITION parte VALUES LESS THAN (20),
 
26980
PARTITION partf VALUES LESS THAN (2147483646));
 
26981
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26982
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26983
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
26984
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
26985
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26986
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26987
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26988
# Start usability test (inc/partition_check.inc)
 
26989
create_command
 
26990
SHOW CREATE TABLE t1;
 
26991
Table   Create Table
 
26992
t1      CREATE TABLE `t1` (
 
26993
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
26994
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
26995
  `f_char1` char(20) DEFAULT NULL,
 
26996
  `f_char2` char(20) DEFAULT NULL,
 
26997
  `f_charbig` varchar(1000) DEFAULT NULL
 
26998
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
26999
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
 
27000
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
27001
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
27002
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
27003
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
27004
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
27005
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
27006
 
 
27007
# check prerequisites-1 success:    1
 
27008
# check COUNT(*) success:    1
 
27009
# check MIN/MAX(f_int1) success:    1
 
27010
# check MIN/MAX(f_int2) success:    1
 
27011
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27012
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27013
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
27014
WHERE f_int1 IN (2,3);
 
27015
# check prerequisites-3 success:    1
 
27016
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27017
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
27018
# check read via f_int1 success: 1
 
27019
# check read via f_int2 success: 1
 
27020
        
 
27021
# check multiple-1 success:     1
 
27022
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
27023
        
 
27024
# check multiple-2 success:     1
 
27025
INSERT INTO t1 SELECT * FROM t0_template
 
27026
WHERE MOD(f_int1,3) = 0;
 
27027
        
 
27028
# check multiple-3 success:     1
 
27029
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
27030
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
27031
AND @max_row_div2 + @max_row_div4;
 
27032
        
 
27033
# check multiple-4 success:     1
 
27034
DELETE FROM t1
 
27035
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
27036
AND @max_row_div2 + @max_row_div4 + @max_row;
 
27037
        
 
27038
# check multiple-5 success:     1
 
27039
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
27040
INSERT INTO t1
 
27041
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27042
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27043
f_charbig = '#SINGLE#';
 
27044
        
 
27045
# check single-1 success:       1
 
27046
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
27047
INSERT INTO t1
 
27048
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27049
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27050
f_charbig = '#SINGLE#';
 
27051
        
 
27052
# check single-2 success:       1
 
27053
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
27054
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
27055
UPDATE t1 SET f_int1 = @cur_value2
 
27056
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
27057
        
 
27058
# check single-3 success:       1
 
27059
SET @cur_value1= -1;
 
27060
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
27061
UPDATE t1 SET f_int1 = @cur_value1
 
27062
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
27063
        
 
27064
# check single-4 success:       1
 
27065
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
27066
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
27067
        
 
27068
# check single-5 success:       1
 
27069
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
27070
        
 
27071
# check single-6 success:       1
 
27072
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
27073
ERROR HY000: Table has no partition for value 2147483647
 
27074
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
27075
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
27076
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
27077
f_charbig = '#NULL#';
 
27078
INSERT INTO t1
 
27079
SET f_int1 = NULL , f_int2 = -@max_row,
 
27080
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
27081
f_charbig = '#NULL#';
 
27082
ERROR 23000: Column 'f_int1' cannot be null
 
27083
# check null success:    1
 
27084
DELETE FROM t1
 
27085
WHERE f_int1 = 0 AND f_int2 = 0
 
27086
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
27087
AND f_charbig = '#NULL#';
 
27088
SET AUTOCOMMIT= 0;
 
27089
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27090
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27091
FROM t0_template source_tab
 
27092
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27093
        
 
27094
# check transactions-1 success:         1
 
27095
COMMIT WORK;
 
27096
        
 
27097
# check transactions-2 success:         1
 
27098
ROLLBACK WORK;
 
27099
        
 
27100
# check transactions-3 success:         1
 
27101
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27102
COMMIT WORK;
 
27103
ROLLBACK WORK;
 
27104
        
 
27105
# check transactions-4 success:         1
 
27106
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27107
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27108
FROM t0_template source_tab
 
27109
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27110
        
 
27111
# check transactions-5 success:         1
 
27112
ROLLBACK WORK;
 
27113
        
 
27114
# check transactions-6 success:         1
 
27115
# INFO: Storage engine used for t1 seems to be transactional.
 
27116
COMMIT;
 
27117
        
 
27118
# check transactions-7 success:         1
 
27119
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27120
COMMIT WORK;
 
27121
SET @@session.sql_mode = 'traditional';
 
27122
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
27123
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27124
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
27125
'', '', 'was inserted' FROM t0_template
 
27126
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27127
ERROR 22012: Division by 0
 
27128
COMMIT;
 
27129
        
 
27130
# check transactions-8 success:         1
 
27131
# INFO: Storage engine used for t1 seems to be able to revert
 
27132
#       changes made by the failing statement.
 
27133
SET @@session.sql_mode = '';
 
27134
SET AUTOCOMMIT= 1;
 
27135
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27136
COMMIT WORK;
 
27137
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
27138
        
 
27139
# check special-1 success:      1
 
27140
UPDATE t1 SET f_charbig = '';
 
27141
        
 
27142
# check special-2 success:      1
 
27143
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
27144
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27145
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
27146
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27147
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27148
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27149
'just inserted' FROM t0_template
 
27150
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27151
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
27152
BEGIN
 
27153
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27154
f_charbig = 'updated by trigger'
 
27155
      WHERE f_int1 = new.f_int1;
 
27156
END|
 
27157
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27158
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27159
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27160
        
 
27161
# check trigger-1 success:      1
 
27162
DROP TRIGGER trg_1;
 
27163
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27164
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27165
f_charbig = 'just inserted'
 
27166
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27167
DELETE FROM t0_aux
 
27168
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27169
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27170
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27171
'just inserted' FROM t0_template
 
27172
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27173
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
27174
BEGIN
 
27175
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27176
f_charbig = 'updated by trigger'
 
27177
      WHERE f_int1 = new.f_int1;
 
27178
END|
 
27179
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27180
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27181
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27182
        
 
27183
# check trigger-2 success:      1
 
27184
DROP TRIGGER trg_1;
 
27185
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27186
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27187
f_charbig = 'just inserted'
 
27188
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27189
DELETE FROM t0_aux
 
27190
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27191
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27192
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27193
'just inserted' FROM t0_template
 
27194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27195
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27196
BEGIN
 
27197
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27198
f_charbig = 'updated by trigger'
 
27199
      WHERE f_int1 = new.f_int1;
 
27200
END|
 
27201
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27202
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27203
        
 
27204
# check trigger-3 success:      1
 
27205
DROP TRIGGER trg_1;
 
27206
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27207
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27208
f_charbig = 'just inserted'
 
27209
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27210
DELETE FROM t0_aux
 
27211
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27212
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27213
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27214
'just inserted' FROM t0_template
 
27215
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27216
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27217
BEGIN
 
27218
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27219
f_charbig = 'updated by trigger'
 
27220
      WHERE f_int1 = - old.f_int1;
 
27221
END|
 
27222
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27223
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27224
        
 
27225
# check trigger-4 success:      1
 
27226
DROP TRIGGER trg_1;
 
27227
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27228
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27229
f_charbig = 'just inserted'
 
27230
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27231
DELETE FROM t0_aux
 
27232
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27233
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27234
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27235
'just inserted' FROM t0_template
 
27236
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27237
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27238
BEGIN
 
27239
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27240
f_charbig = 'updated by trigger'
 
27241
      WHERE f_int1 = new.f_int1;
 
27242
END|
 
27243
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27244
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27245
        
 
27246
# check trigger-5 success:      1
 
27247
DROP TRIGGER trg_1;
 
27248
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27249
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27250
f_charbig = 'just inserted'
 
27251
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27252
DELETE FROM t0_aux
 
27253
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27254
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27255
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27256
'just inserted' FROM t0_template
 
27257
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27258
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27259
BEGIN
 
27260
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27261
f_charbig = 'updated by trigger'
 
27262
      WHERE f_int1 = - old.f_int1;
 
27263
END|
 
27264
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27265
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27266
        
 
27267
# check trigger-6 success:      1
 
27268
DROP TRIGGER trg_1;
 
27269
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27270
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27271
f_charbig = 'just inserted'
 
27272
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27273
DELETE FROM t0_aux
 
27274
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27275
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27276
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27277
'just inserted' FROM t0_template
 
27278
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27279
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
27280
BEGIN
 
27281
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27282
f_charbig = 'updated by trigger'
 
27283
      WHERE f_int1 = - old.f_int1;
 
27284
END|
 
27285
DELETE FROM t0_aux
 
27286
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27287
        
 
27288
# check trigger-7 success:      1
 
27289
DROP TRIGGER trg_1;
 
27290
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27291
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27292
f_charbig = 'just inserted'
 
27293
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27294
DELETE FROM t0_aux
 
27295
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27296
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27297
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27298
'just inserted' FROM t0_template
 
27299
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27300
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
27301
BEGIN
 
27302
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27303
f_charbig = 'updated by trigger'
 
27304
      WHERE f_int1 = - old.f_int1;
 
27305
END|
 
27306
DELETE FROM t0_aux
 
27307
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27308
        
 
27309
# check trigger-8 success:      1
 
27310
DROP TRIGGER trg_1;
 
27311
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27312
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27313
f_charbig = 'just inserted'
 
27314
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27315
DELETE FROM t0_aux
 
27316
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27317
DELETE FROM t1
 
27318
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27319
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27320
BEGIN
 
27321
SET new.f_int1 = old.f_int1 + @max_row,
 
27322
new.f_int2 = old.f_int2 - @max_row,
 
27323
new.f_charbig = '####updated per update trigger####';
 
27324
END|
 
27325
UPDATE t1
 
27326
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27327
f_charbig = '####updated per update statement itself####';
 
27328
        
 
27329
# check trigger-9 success:      1
 
27330
DROP TRIGGER trg_2;
 
27331
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27332
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27333
f_charbig = CONCAT('===',f_char1,'===');
 
27334
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27335
BEGIN
 
27336
SET new.f_int1 = new.f_int1 + @max_row,
 
27337
new.f_int2 = new.f_int2 - @max_row,
 
27338
new.f_charbig = '####updated per update trigger####';
 
27339
END|
 
27340
UPDATE t1
 
27341
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27342
f_charbig = '####updated per update statement itself####';
 
27343
        
 
27344
# check trigger-10 success:     1
 
27345
DROP TRIGGER trg_2;
 
27346
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27347
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27348
f_charbig = CONCAT('===',f_char1,'===');
 
27349
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27350
BEGIN
 
27351
SET new.f_int1 = @my_max1 + @counter,
 
27352
new.f_int2 = @my_min2 - @counter,
 
27353
new.f_charbig = '####updated per insert trigger####';
 
27354
SET @counter = @counter + 1;
 
27355
END|
 
27356
SET @counter = 1;
 
27357
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27358
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27359
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27360
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27361
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27362
ORDER BY f_int1;
 
27363
DROP TRIGGER trg_3;
 
27364
        
 
27365
# check trigger-11 success:     1
 
27366
DELETE FROM t1
 
27367
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27368
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27369
AND f_charbig = '####updated per insert trigger####';
 
27370
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27371
BEGIN
 
27372
SET new.f_int1 = @my_max1 + @counter,
 
27373
new.f_int2 = @my_min2 - @counter,
 
27374
new.f_charbig = '####updated per insert trigger####';
 
27375
SET @counter = @counter + 1;
 
27376
END|
 
27377
SET @counter = 1;
 
27378
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27379
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
27380
SELECT CAST(f_int1 AS CHAR),
 
27381
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27382
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27383
ORDER BY f_int1;
 
27384
DROP TRIGGER trg_3;
 
27385
        
 
27386
# check trigger-12 success:     1
 
27387
DELETE FROM t1
 
27388
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27389
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27390
AND f_charbig = '####updated per insert trigger####';
 
27391
ANALYZE  TABLE t1;
 
27392
Table   Op      Msg_type        Msg_text
 
27393
test.t1 analyze status  OK
 
27394
CHECK    TABLE t1 EXTENDED;
 
27395
Table   Op      Msg_type        Msg_text
 
27396
test.t1 check   status  OK
 
27397
CHECKSUM TABLE t1 EXTENDED;
 
27398
Table   Checksum
 
27399
test.t1 <some_value>
 
27400
OPTIMIZE TABLE t1;
 
27401
Table   Op      Msg_type        Msg_text
 
27402
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
27403
test.t1 optimize        status  OK
 
27404
# check layout success:    1
 
27405
REPAIR   TABLE t1 EXTENDED;
 
27406
Table   Op      Msg_type        Msg_text
 
27407
test.t1 repair  note    The storage engine for the table doesn't support repair
 
27408
# check layout success:    1
 
27409
TRUNCATE t1;
 
27410
        
 
27411
# check TRUNCATE success:       1
 
27412
# check layout success:    1
 
27413
# End usability test (inc/partition_check.inc)
 
27414
DROP TABLE t1;
 
27415
CREATE TABLE t1 (
 
27416
f_int1 INTEGER,
 
27417
f_int2 INTEGER,
 
27418
f_char1 CHAR(20),
 
27419
f_char2 CHAR(20),
 
27420
f_charbig VARCHAR(1000)
 
27421
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
27422
)
 
27423
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
27424
(PARTITION parta VALUES LESS THAN (0),
 
27425
PARTITION partb VALUES LESS THAN (5),
 
27426
PARTITION partc VALUES LESS THAN (10),
 
27427
PARTITION partd VALUES LESS THAN (2147483646));
 
27428
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27429
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27430
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
27431
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
27432
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27433
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27434
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27435
# Start usability test (inc/partition_check.inc)
 
27436
create_command
 
27437
SHOW CREATE TABLE t1;
 
27438
Table   Create Table
 
27439
t1      CREATE TABLE `t1` (
 
27440
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
27441
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
27442
  `f_char1` char(20) DEFAULT NULL,
 
27443
  `f_char2` char(20) DEFAULT NULL,
 
27444
  `f_charbig` varchar(1000) DEFAULT NULL
 
27445
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
27446
/*!50100 PARTITION BY RANGE (f_int1)
 
27447
SUBPARTITION BY HASH (f_int2)
 
27448
SUBPARTITIONS 2
 
27449
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
27450
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
27451
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
27452
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
27453
 
 
27454
# check prerequisites-1 success:    1
 
27455
# check COUNT(*) success:    1
 
27456
# check MIN/MAX(f_int1) success:    1
 
27457
# check MIN/MAX(f_int2) success:    1
 
27458
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27459
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27460
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
27461
WHERE f_int1 IN (2,3);
 
27462
# check prerequisites-3 success:    1
 
27463
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27464
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
27465
# check read via f_int1 success: 1
 
27466
# check read via f_int2 success: 1
 
27467
        
 
27468
# check multiple-1 success:     1
 
27469
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
27470
        
 
27471
# check multiple-2 success:     1
 
27472
INSERT INTO t1 SELECT * FROM t0_template
 
27473
WHERE MOD(f_int1,3) = 0;
 
27474
        
 
27475
# check multiple-3 success:     1
 
27476
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
27477
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
27478
AND @max_row_div2 + @max_row_div4;
 
27479
        
 
27480
# check multiple-4 success:     1
 
27481
DELETE FROM t1
 
27482
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
27483
AND @max_row_div2 + @max_row_div4 + @max_row;
 
27484
        
 
27485
# check multiple-5 success:     1
 
27486
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
27487
INSERT INTO t1
 
27488
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27489
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27490
f_charbig = '#SINGLE#';
 
27491
        
 
27492
# check single-1 success:       1
 
27493
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
27494
INSERT INTO t1
 
27495
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27496
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27497
f_charbig = '#SINGLE#';
 
27498
        
 
27499
# check single-2 success:       1
 
27500
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
27501
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
27502
UPDATE t1 SET f_int1 = @cur_value2
 
27503
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
27504
        
 
27505
# check single-3 success:       1
 
27506
SET @cur_value1= -1;
 
27507
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
27508
UPDATE t1 SET f_int1 = @cur_value1
 
27509
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
27510
        
 
27511
# check single-4 success:       1
 
27512
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
27513
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
27514
        
 
27515
# check single-5 success:       1
 
27516
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
27517
        
 
27518
# check single-6 success:       1
 
27519
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
27520
ERROR HY000: Table has no partition for value 2147483647
 
27521
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
27522
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
27523
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
27524
f_charbig = '#NULL#';
 
27525
INSERT INTO t1
 
27526
SET f_int1 = NULL , f_int2 = -@max_row,
 
27527
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
27528
f_charbig = '#NULL#';
 
27529
ERROR 23000: Column 'f_int1' cannot be null
 
27530
# check null success:    1
 
27531
DELETE FROM t1
 
27532
WHERE f_int1 = 0 AND f_int2 = 0
 
27533
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
27534
AND f_charbig = '#NULL#';
 
27535
SET AUTOCOMMIT= 0;
 
27536
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27537
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27538
FROM t0_template source_tab
 
27539
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27540
        
 
27541
# check transactions-1 success:         1
 
27542
COMMIT WORK;
 
27543
        
 
27544
# check transactions-2 success:         1
 
27545
ROLLBACK WORK;
 
27546
        
 
27547
# check transactions-3 success:         1
 
27548
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27549
COMMIT WORK;
 
27550
ROLLBACK WORK;
 
27551
        
 
27552
# check transactions-4 success:         1
 
27553
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27554
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27555
FROM t0_template source_tab
 
27556
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27557
        
 
27558
# check transactions-5 success:         1
 
27559
ROLLBACK WORK;
 
27560
        
 
27561
# check transactions-6 success:         1
 
27562
# INFO: Storage engine used for t1 seems to be transactional.
 
27563
COMMIT;
 
27564
        
 
27565
# check transactions-7 success:         1
 
27566
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27567
COMMIT WORK;
 
27568
SET @@session.sql_mode = 'traditional';
 
27569
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
27570
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27571
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
27572
'', '', 'was inserted' FROM t0_template
 
27573
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27574
ERROR 22012: Division by 0
 
27575
COMMIT;
 
27576
        
 
27577
# check transactions-8 success:         1
 
27578
# INFO: Storage engine used for t1 seems to be able to revert
 
27579
#       changes made by the failing statement.
 
27580
SET @@session.sql_mode = '';
 
27581
SET AUTOCOMMIT= 1;
 
27582
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27583
COMMIT WORK;
 
27584
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
27585
        
 
27586
# check special-1 success:      1
 
27587
UPDATE t1 SET f_charbig = '';
 
27588
        
 
27589
# check special-2 success:      1
 
27590
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
27591
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27592
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
27593
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27594
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27595
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27596
'just inserted' FROM t0_template
 
27597
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27598
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
27599
BEGIN
 
27600
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27601
f_charbig = 'updated by trigger'
 
27602
      WHERE f_int1 = new.f_int1;
 
27603
END|
 
27604
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27605
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27606
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27607
        
 
27608
# check trigger-1 success:      1
 
27609
DROP TRIGGER trg_1;
 
27610
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27611
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27612
f_charbig = 'just inserted'
 
27613
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27614
DELETE FROM t0_aux
 
27615
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27616
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27617
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27618
'just inserted' FROM t0_template
 
27619
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27620
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
27621
BEGIN
 
27622
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27623
f_charbig = 'updated by trigger'
 
27624
      WHERE f_int1 = new.f_int1;
 
27625
END|
 
27626
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27627
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27628
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27629
        
 
27630
# check trigger-2 success:      1
 
27631
DROP TRIGGER trg_1;
 
27632
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27633
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27634
f_charbig = 'just inserted'
 
27635
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27636
DELETE FROM t0_aux
 
27637
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27638
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27639
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27640
'just inserted' FROM t0_template
 
27641
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27642
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27643
BEGIN
 
27644
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27645
f_charbig = 'updated by trigger'
 
27646
      WHERE f_int1 = new.f_int1;
 
27647
END|
 
27648
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27649
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27650
        
 
27651
# check trigger-3 success:      1
 
27652
DROP TRIGGER trg_1;
 
27653
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27654
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27655
f_charbig = 'just inserted'
 
27656
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27657
DELETE FROM t0_aux
 
27658
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27659
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27660
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27661
'just inserted' FROM t0_template
 
27662
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27663
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27664
BEGIN
 
27665
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27666
f_charbig = 'updated by trigger'
 
27667
      WHERE f_int1 = - old.f_int1;
 
27668
END|
 
27669
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27670
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27671
        
 
27672
# check trigger-4 success:      1
 
27673
DROP TRIGGER trg_1;
 
27674
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27675
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27676
f_charbig = 'just inserted'
 
27677
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27678
DELETE FROM t0_aux
 
27679
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27680
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27681
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27682
'just inserted' FROM t0_template
 
27683
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27684
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27685
BEGIN
 
27686
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27687
f_charbig = 'updated by trigger'
 
27688
      WHERE f_int1 = new.f_int1;
 
27689
END|
 
27690
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27691
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27692
        
 
27693
# check trigger-5 success:      1
 
27694
DROP TRIGGER trg_1;
 
27695
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27696
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27697
f_charbig = 'just inserted'
 
27698
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27699
DELETE FROM t0_aux
 
27700
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27701
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27702
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27703
'just inserted' FROM t0_template
 
27704
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27705
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27706
BEGIN
 
27707
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27708
f_charbig = 'updated by trigger'
 
27709
      WHERE f_int1 = - old.f_int1;
 
27710
END|
 
27711
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27712
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27713
        
 
27714
# check trigger-6 success:      1
 
27715
DROP TRIGGER trg_1;
 
27716
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27717
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27718
f_charbig = 'just inserted'
 
27719
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27720
DELETE FROM t0_aux
 
27721
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27722
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27723
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27724
'just inserted' FROM t0_template
 
27725
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27726
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
27727
BEGIN
 
27728
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27729
f_charbig = 'updated by trigger'
 
27730
      WHERE f_int1 = - old.f_int1;
 
27731
END|
 
27732
DELETE FROM t0_aux
 
27733
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27734
        
 
27735
# check trigger-7 success:      1
 
27736
DROP TRIGGER trg_1;
 
27737
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27738
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27739
f_charbig = 'just inserted'
 
27740
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27741
DELETE FROM t0_aux
 
27742
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27743
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27744
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27745
'just inserted' FROM t0_template
 
27746
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27747
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
27748
BEGIN
 
27749
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27750
f_charbig = 'updated by trigger'
 
27751
      WHERE f_int1 = - old.f_int1;
 
27752
END|
 
27753
DELETE FROM t0_aux
 
27754
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27755
        
 
27756
# check trigger-8 success:      1
 
27757
DROP TRIGGER trg_1;
 
27758
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27759
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27760
f_charbig = 'just inserted'
 
27761
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27762
DELETE FROM t0_aux
 
27763
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27764
DELETE FROM t1
 
27765
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27766
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27767
BEGIN
 
27768
SET new.f_int1 = old.f_int1 + @max_row,
 
27769
new.f_int2 = old.f_int2 - @max_row,
 
27770
new.f_charbig = '####updated per update trigger####';
 
27771
END|
 
27772
UPDATE t1
 
27773
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27774
f_charbig = '####updated per update statement itself####';
 
27775
        
 
27776
# check trigger-9 success:      1
 
27777
DROP TRIGGER trg_2;
 
27778
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27779
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27780
f_charbig = CONCAT('===',f_char1,'===');
 
27781
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27782
BEGIN
 
27783
SET new.f_int1 = new.f_int1 + @max_row,
 
27784
new.f_int2 = new.f_int2 - @max_row,
 
27785
new.f_charbig = '####updated per update trigger####';
 
27786
END|
 
27787
UPDATE t1
 
27788
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27789
f_charbig = '####updated per update statement itself####';
 
27790
        
 
27791
# check trigger-10 success:     1
 
27792
DROP TRIGGER trg_2;
 
27793
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27794
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27795
f_charbig = CONCAT('===',f_char1,'===');
 
27796
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27797
BEGIN
 
27798
SET new.f_int1 = @my_max1 + @counter,
 
27799
new.f_int2 = @my_min2 - @counter,
 
27800
new.f_charbig = '####updated per insert trigger####';
 
27801
SET @counter = @counter + 1;
 
27802
END|
 
27803
SET @counter = 1;
 
27804
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27805
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27806
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27807
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27808
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27809
ORDER BY f_int1;
 
27810
DROP TRIGGER trg_3;
 
27811
        
 
27812
# check trigger-11 success:     1
 
27813
DELETE FROM t1
 
27814
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27815
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27816
AND f_charbig = '####updated per insert trigger####';
 
27817
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27818
BEGIN
 
27819
SET new.f_int1 = @my_max1 + @counter,
 
27820
new.f_int2 = @my_min2 - @counter,
 
27821
new.f_charbig = '####updated per insert trigger####';
 
27822
SET @counter = @counter + 1;
 
27823
END|
 
27824
SET @counter = 1;
 
27825
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27826
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
27827
SELECT CAST(f_int1 AS CHAR),
 
27828
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27829
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27830
ORDER BY f_int1;
 
27831
DROP TRIGGER trg_3;
 
27832
        
 
27833
# check trigger-12 success:     1
 
27834
DELETE FROM t1
 
27835
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27836
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27837
AND f_charbig = '####updated per insert trigger####';
 
27838
ANALYZE  TABLE t1;
 
27839
Table   Op      Msg_type        Msg_text
 
27840
test.t1 analyze status  OK
 
27841
CHECK    TABLE t1 EXTENDED;
 
27842
Table   Op      Msg_type        Msg_text
 
27843
test.t1 check   status  OK
 
27844
CHECKSUM TABLE t1 EXTENDED;
 
27845
Table   Checksum
 
27846
test.t1 <some_value>
 
27847
OPTIMIZE TABLE t1;
 
27848
Table   Op      Msg_type        Msg_text
 
27849
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
27850
test.t1 optimize        status  OK
 
27851
# check layout success:    1
 
27852
REPAIR   TABLE t1 EXTENDED;
 
27853
Table   Op      Msg_type        Msg_text
 
27854
test.t1 repair  note    The storage engine for the table doesn't support repair
 
27855
# check layout success:    1
 
27856
TRUNCATE t1;
 
27857
        
 
27858
# check TRUNCATE success:       1
 
27859
# check layout success:    1
 
27860
# End usability test (inc/partition_check.inc)
 
27861
DROP TABLE t1;
 
27862
CREATE TABLE t1 (
 
27863
f_int1 INTEGER,
 
27864
f_int2 INTEGER,
 
27865
f_char1 CHAR(20),
 
27866
f_char2 CHAR(20),
 
27867
f_charbig VARCHAR(1000)
 
27868
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
27869
)
 
27870
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
27871
(PARTITION part1 VALUES LESS THAN (0)
 
27872
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
27873
PARTITION part2 VALUES LESS THAN (5)
 
27874
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
27875
PARTITION part3 VALUES LESS THAN (10)
 
27876
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
27877
PARTITION part4 VALUES LESS THAN (2147483646)
 
27878
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
27879
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27880
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27881
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
27882
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
27883
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27884
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27885
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27886
# Start usability test (inc/partition_check.inc)
 
27887
create_command
 
27888
SHOW CREATE TABLE t1;
 
27889
Table   Create Table
 
27890
t1      CREATE TABLE `t1` (
 
27891
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
27892
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
27893
  `f_char1` char(20) DEFAULT NULL,
 
27894
  `f_char2` char(20) DEFAULT NULL,
 
27895
  `f_charbig` varchar(1000) DEFAULT NULL
 
27896
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
27897
/*!50100 PARTITION BY RANGE (f_int1)
 
27898
SUBPARTITION BY KEY (f_int2)
 
27899
(PARTITION part1 VALUES LESS THAN (0)
 
27900
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
27901
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
27902
 PARTITION part2 VALUES LESS THAN (5)
 
27903
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
27904
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
27905
 PARTITION part3 VALUES LESS THAN (10)
 
27906
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
27907
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
27908
 PARTITION part4 VALUES LESS THAN (2147483646)
 
27909
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
27910
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
27911
 
 
27912
# check prerequisites-1 success:    1
 
27913
# check COUNT(*) success:    1
 
27914
# check MIN/MAX(f_int1) success:    1
 
27915
# check MIN/MAX(f_int2) success:    1
 
27916
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27917
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27918
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
27919
WHERE f_int1 IN (2,3);
 
27920
# check prerequisites-3 success:    1
 
27921
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27922
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
27923
# check read via f_int1 success: 1
 
27924
# check read via f_int2 success: 1
 
27925
        
 
27926
# check multiple-1 success:     1
 
27927
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
27928
        
 
27929
# check multiple-2 success:     1
 
27930
INSERT INTO t1 SELECT * FROM t0_template
 
27931
WHERE MOD(f_int1,3) = 0;
 
27932
        
 
27933
# check multiple-3 success:     1
 
27934
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
27935
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
27936
AND @max_row_div2 + @max_row_div4;
 
27937
        
 
27938
# check multiple-4 success:     1
 
27939
DELETE FROM t1
 
27940
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
27941
AND @max_row_div2 + @max_row_div4 + @max_row;
 
27942
        
 
27943
# check multiple-5 success:     1
 
27944
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
27945
INSERT INTO t1
 
27946
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27947
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27948
f_charbig = '#SINGLE#';
 
27949
        
 
27950
# check single-1 success:       1
 
27951
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
27952
INSERT INTO t1
 
27953
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27954
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27955
f_charbig = '#SINGLE#';
 
27956
        
 
27957
# check single-2 success:       1
 
27958
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
27959
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
27960
UPDATE t1 SET f_int1 = @cur_value2
 
27961
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
27962
        
 
27963
# check single-3 success:       1
 
27964
SET @cur_value1= -1;
 
27965
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
27966
UPDATE t1 SET f_int1 = @cur_value1
 
27967
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
27968
        
 
27969
# check single-4 success:       1
 
27970
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
27971
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
27972
        
 
27973
# check single-5 success:       1
 
27974
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
27975
        
 
27976
# check single-6 success:       1
 
27977
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
27978
ERROR HY000: Table has no partition for value 2147483647
 
27979
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
27980
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
27981
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
27982
f_charbig = '#NULL#';
 
27983
INSERT INTO t1
 
27984
SET f_int1 = NULL , f_int2 = -@max_row,
 
27985
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
27986
f_charbig = '#NULL#';
 
27987
ERROR 23000: Column 'f_int1' cannot be null
 
27988
# check null success:    1
 
27989
DELETE FROM t1
 
27990
WHERE f_int1 = 0 AND f_int2 = 0
 
27991
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
27992
AND f_charbig = '#NULL#';
 
27993
SET AUTOCOMMIT= 0;
 
27994
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27995
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27996
FROM t0_template source_tab
 
27997
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27998
        
 
27999
# check transactions-1 success:         1
 
28000
COMMIT WORK;
 
28001
        
 
28002
# check transactions-2 success:         1
 
28003
ROLLBACK WORK;
 
28004
        
 
28005
# check transactions-3 success:         1
 
28006
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28007
COMMIT WORK;
 
28008
ROLLBACK WORK;
 
28009
        
 
28010
# check transactions-4 success:         1
 
28011
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28012
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28013
FROM t0_template source_tab
 
28014
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28015
        
 
28016
# check transactions-5 success:         1
 
28017
ROLLBACK WORK;
 
28018
        
 
28019
# check transactions-6 success:         1
 
28020
# INFO: Storage engine used for t1 seems to be transactional.
 
28021
COMMIT;
 
28022
        
 
28023
# check transactions-7 success:         1
 
28024
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28025
COMMIT WORK;
 
28026
SET @@session.sql_mode = 'traditional';
 
28027
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
28028
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28029
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
28030
'', '', 'was inserted' FROM t0_template
 
28031
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28032
ERROR 22012: Division by 0
 
28033
COMMIT;
 
28034
        
 
28035
# check transactions-8 success:         1
 
28036
# INFO: Storage engine used for t1 seems to be able to revert
 
28037
#       changes made by the failing statement.
 
28038
SET @@session.sql_mode = '';
 
28039
SET AUTOCOMMIT= 1;
 
28040
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28041
COMMIT WORK;
 
28042
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
28043
        
 
28044
# check special-1 success:      1
 
28045
UPDATE t1 SET f_charbig = '';
 
28046
        
 
28047
# check special-2 success:      1
 
28048
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
28049
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28050
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
28051
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28052
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28053
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28054
'just inserted' FROM t0_template
 
28055
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28056
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
28057
BEGIN
 
28058
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28059
f_charbig = 'updated by trigger'
 
28060
      WHERE f_int1 = new.f_int1;
 
28061
END|
 
28062
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28063
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28064
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28065
        
 
28066
# check trigger-1 success:      1
 
28067
DROP TRIGGER trg_1;
 
28068
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28069
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28070
f_charbig = 'just inserted'
 
28071
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28072
DELETE FROM t0_aux
 
28073
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28074
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28075
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28076
'just inserted' FROM t0_template
 
28077
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28078
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
28079
BEGIN
 
28080
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28081
f_charbig = 'updated by trigger'
 
28082
      WHERE f_int1 = new.f_int1;
 
28083
END|
 
28084
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28085
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28086
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28087
        
 
28088
# check trigger-2 success:      1
 
28089
DROP TRIGGER trg_1;
 
28090
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28091
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28092
f_charbig = 'just inserted'
 
28093
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28094
DELETE FROM t0_aux
 
28095
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28096
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28097
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28098
'just inserted' FROM t0_template
 
28099
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28100
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28101
BEGIN
 
28102
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28103
f_charbig = 'updated by trigger'
 
28104
      WHERE f_int1 = new.f_int1;
 
28105
END|
 
28106
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28107
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28108
        
 
28109
# check trigger-3 success:      1
 
28110
DROP TRIGGER trg_1;
 
28111
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28112
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28113
f_charbig = 'just inserted'
 
28114
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28115
DELETE FROM t0_aux
 
28116
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28117
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28118
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28119
'just inserted' FROM t0_template
 
28120
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28121
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28122
BEGIN
 
28123
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28124
f_charbig = 'updated by trigger'
 
28125
      WHERE f_int1 = - old.f_int1;
 
28126
END|
 
28127
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28128
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28129
        
 
28130
# check trigger-4 success:      1
 
28131
DROP TRIGGER trg_1;
 
28132
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28133
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28134
f_charbig = 'just inserted'
 
28135
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28136
DELETE FROM t0_aux
 
28137
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28138
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28139
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28140
'just inserted' FROM t0_template
 
28141
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28142
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28143
BEGIN
 
28144
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28145
f_charbig = 'updated by trigger'
 
28146
      WHERE f_int1 = new.f_int1;
 
28147
END|
 
28148
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28149
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28150
        
 
28151
# check trigger-5 success:      1
 
28152
DROP TRIGGER trg_1;
 
28153
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28154
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28155
f_charbig = 'just inserted'
 
28156
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28157
DELETE FROM t0_aux
 
28158
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28159
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28160
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28161
'just inserted' FROM t0_template
 
28162
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28163
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28164
BEGIN
 
28165
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28166
f_charbig = 'updated by trigger'
 
28167
      WHERE f_int1 = - old.f_int1;
 
28168
END|
 
28169
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28170
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28171
        
 
28172
# check trigger-6 success:      1
 
28173
DROP TRIGGER trg_1;
 
28174
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28175
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28176
f_charbig = 'just inserted'
 
28177
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28178
DELETE FROM t0_aux
 
28179
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28180
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28181
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28182
'just inserted' FROM t0_template
 
28183
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28184
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
28185
BEGIN
 
28186
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28187
f_charbig = 'updated by trigger'
 
28188
      WHERE f_int1 = - old.f_int1;
 
28189
END|
 
28190
DELETE FROM t0_aux
 
28191
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28192
        
 
28193
# check trigger-7 success:      1
 
28194
DROP TRIGGER trg_1;
 
28195
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28196
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28197
f_charbig = 'just inserted'
 
28198
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28199
DELETE FROM t0_aux
 
28200
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28201
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28202
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28203
'just inserted' FROM t0_template
 
28204
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28205
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
28206
BEGIN
 
28207
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28208
f_charbig = 'updated by trigger'
 
28209
      WHERE f_int1 = - old.f_int1;
 
28210
END|
 
28211
DELETE FROM t0_aux
 
28212
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28213
        
 
28214
# check trigger-8 success:      1
 
28215
DROP TRIGGER trg_1;
 
28216
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28217
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28218
f_charbig = 'just inserted'
 
28219
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28220
DELETE FROM t0_aux
 
28221
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28222
DELETE FROM t1
 
28223
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28224
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28225
BEGIN
 
28226
SET new.f_int1 = old.f_int1 + @max_row,
 
28227
new.f_int2 = old.f_int2 - @max_row,
 
28228
new.f_charbig = '####updated per update trigger####';
 
28229
END|
 
28230
UPDATE t1
 
28231
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28232
f_charbig = '####updated per update statement itself####';
 
28233
        
 
28234
# check trigger-9 success:      1
 
28235
DROP TRIGGER trg_2;
 
28236
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28237
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28238
f_charbig = CONCAT('===',f_char1,'===');
 
28239
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28240
BEGIN
 
28241
SET new.f_int1 = new.f_int1 + @max_row,
 
28242
new.f_int2 = new.f_int2 - @max_row,
 
28243
new.f_charbig = '####updated per update trigger####';
 
28244
END|
 
28245
UPDATE t1
 
28246
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28247
f_charbig = '####updated per update statement itself####';
 
28248
        
 
28249
# check trigger-10 success:     1
 
28250
DROP TRIGGER trg_2;
 
28251
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28252
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28253
f_charbig = CONCAT('===',f_char1,'===');
 
28254
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28255
BEGIN
 
28256
SET new.f_int1 = @my_max1 + @counter,
 
28257
new.f_int2 = @my_min2 - @counter,
 
28258
new.f_charbig = '####updated per insert trigger####';
 
28259
SET @counter = @counter + 1;
 
28260
END|
 
28261
SET @counter = 1;
 
28262
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28263
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28264
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28265
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28266
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28267
ORDER BY f_int1;
 
28268
DROP TRIGGER trg_3;
 
28269
        
 
28270
# check trigger-11 success:     1
 
28271
DELETE FROM t1
 
28272
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28273
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28274
AND f_charbig = '####updated per insert trigger####';
 
28275
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28276
BEGIN
 
28277
SET new.f_int1 = @my_max1 + @counter,
 
28278
new.f_int2 = @my_min2 - @counter,
 
28279
new.f_charbig = '####updated per insert trigger####';
 
28280
SET @counter = @counter + 1;
 
28281
END|
 
28282
SET @counter = 1;
 
28283
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28284
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
28285
SELECT CAST(f_int1 AS CHAR),
 
28286
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28287
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28288
ORDER BY f_int1;
 
28289
DROP TRIGGER trg_3;
 
28290
        
 
28291
# check trigger-12 success:     1
 
28292
DELETE FROM t1
 
28293
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28294
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28295
AND f_charbig = '####updated per insert trigger####';
 
28296
ANALYZE  TABLE t1;
 
28297
Table   Op      Msg_type        Msg_text
 
28298
test.t1 analyze status  OK
 
28299
CHECK    TABLE t1 EXTENDED;
 
28300
Table   Op      Msg_type        Msg_text
 
28301
test.t1 check   status  OK
 
28302
CHECKSUM TABLE t1 EXTENDED;
 
28303
Table   Checksum
 
28304
test.t1 <some_value>
 
28305
OPTIMIZE TABLE t1;
 
28306
Table   Op      Msg_type        Msg_text
 
28307
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
28308
test.t1 optimize        status  OK
 
28309
# check layout success:    1
 
28310
REPAIR   TABLE t1 EXTENDED;
 
28311
Table   Op      Msg_type        Msg_text
 
28312
test.t1 repair  note    The storage engine for the table doesn't support repair
 
28313
# check layout success:    1
 
28314
TRUNCATE t1;
 
28315
        
 
28316
# check TRUNCATE success:       1
 
28317
# check layout success:    1
 
28318
# End usability test (inc/partition_check.inc)
 
28319
DROP TABLE t1;
 
28320
CREATE TABLE t1 (
 
28321
f_int1 INTEGER,
 
28322
f_int2 INTEGER,
 
28323
f_char1 CHAR(20),
 
28324
f_char2 CHAR(20),
 
28325
f_charbig VARCHAR(1000)
 
28326
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
28327
)
 
28328
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
28329
(PARTITION part1 VALUES IN (0)
 
28330
(SUBPARTITION sp11, SUBPARTITION sp12),
 
28331
PARTITION part2 VALUES IN (1)
 
28332
(SUBPARTITION sp21, SUBPARTITION sp22),
 
28333
PARTITION part3 VALUES IN (2)
 
28334
(SUBPARTITION sp31, SUBPARTITION sp32),
 
28335
PARTITION part4 VALUES IN (NULL)
 
28336
(SUBPARTITION sp41, SUBPARTITION sp42));
 
28337
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28338
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28339
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
28340
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
28341
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28342
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28343
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28344
# Start usability test (inc/partition_check.inc)
 
28345
create_command
 
28346
SHOW CREATE TABLE t1;
 
28347
Table   Create Table
 
28348
t1      CREATE TABLE `t1` (
 
28349
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
28350
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
28351
  `f_char1` char(20) DEFAULT NULL,
 
28352
  `f_char2` char(20) DEFAULT NULL,
 
28353
  `f_charbig` varchar(1000) DEFAULT NULL
 
28354
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
28355
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
28356
SUBPARTITION BY HASH (f_int2 + 1)
 
28357
(PARTITION part1 VALUES IN (0)
 
28358
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
28359
  SUBPARTITION sp12 ENGINE = InnoDB),
 
28360
 PARTITION part2 VALUES IN (1)
 
28361
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
28362
  SUBPARTITION sp22 ENGINE = InnoDB),
 
28363
 PARTITION part3 VALUES IN (2)
 
28364
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
28365
  SUBPARTITION sp32 ENGINE = InnoDB),
 
28366
 PARTITION part4 VALUES IN (NULL)
 
28367
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
28368
  SUBPARTITION sp42 ENGINE = InnoDB)) */
 
28369
 
 
28370
# check prerequisites-1 success:    1
 
28371
# check COUNT(*) success:    1
 
28372
# check MIN/MAX(f_int1) success:    1
 
28373
# check MIN/MAX(f_int2) success:    1
 
28374
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28375
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28376
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
28377
WHERE f_int1 IN (2,3);
 
28378
# check prerequisites-3 success:    1
 
28379
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
28380
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
28381
# check read via f_int1 success: 1
 
28382
# check read via f_int2 success: 1
 
28383
        
 
28384
# check multiple-1 success:     1
 
28385
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
28386
        
 
28387
# check multiple-2 success:     1
 
28388
INSERT INTO t1 SELECT * FROM t0_template
 
28389
WHERE MOD(f_int1,3) = 0;
 
28390
        
 
28391
# check multiple-3 success:     1
 
28392
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
28393
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
28394
AND @max_row_div2 + @max_row_div4;
 
28395
        
 
28396
# check multiple-4 success:     1
 
28397
DELETE FROM t1
 
28398
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
28399
AND @max_row_div2 + @max_row_div4 + @max_row;
 
28400
        
 
28401
# check multiple-5 success:     1
 
28402
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
28403
INSERT INTO t1
 
28404
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28405
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28406
f_charbig = '#SINGLE#';
 
28407
        
 
28408
# check single-1 success:       1
 
28409
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
28410
INSERT INTO t1
 
28411
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28412
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28413
f_charbig = '#SINGLE#';
 
28414
        
 
28415
# check single-2 success:       1
 
28416
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
28417
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
28418
UPDATE t1 SET f_int1 = @cur_value2
 
28419
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
28420
        
 
28421
# check single-3 success:       1
 
28422
SET @cur_value1= -1;
 
28423
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
28424
UPDATE t1 SET f_int1 = @cur_value1
 
28425
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
28426
        
 
28427
# check single-4 success:       1
 
28428
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
28429
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
28430
        
 
28431
# check single-5 success:       1
 
28432
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
28433
        
 
28434
# check single-6 success:       1
 
28435
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
28436
        
 
28437
# check single-7 success:       1
 
28438
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
28439
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
28440
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
28441
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
28442
f_charbig = '#NULL#';
 
28443
INSERT INTO t1
 
28444
SET f_int1 = NULL , f_int2 = -@max_row,
 
28445
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
28446
f_charbig = '#NULL#';
 
28447
ERROR 23000: Column 'f_int1' cannot be null
 
28448
# check null success:    1
 
28449
DELETE FROM t1
 
28450
WHERE f_int1 = 0 AND f_int2 = 0
 
28451
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
28452
AND f_charbig = '#NULL#';
 
28453
SET AUTOCOMMIT= 0;
 
28454
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28455
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28456
FROM t0_template source_tab
 
28457
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28458
        
 
28459
# check transactions-1 success:         1
 
28460
COMMIT WORK;
 
28461
        
 
28462
# check transactions-2 success:         1
 
28463
ROLLBACK WORK;
 
28464
        
 
28465
# check transactions-3 success:         1
 
28466
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28467
COMMIT WORK;
 
28468
ROLLBACK WORK;
 
28469
        
 
28470
# check transactions-4 success:         1
 
28471
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28472
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28473
FROM t0_template source_tab
 
28474
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28475
        
 
28476
# check transactions-5 success:         1
 
28477
ROLLBACK WORK;
 
28478
        
 
28479
# check transactions-6 success:         1
 
28480
# INFO: Storage engine used for t1 seems to be transactional.
 
28481
COMMIT;
 
28482
        
 
28483
# check transactions-7 success:         1
 
28484
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28485
COMMIT WORK;
 
28486
SET @@session.sql_mode = 'traditional';
 
28487
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
28488
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28489
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
28490
'', '', 'was inserted' FROM t0_template
 
28491
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28492
ERROR 22012: Division by 0
 
28493
COMMIT;
 
28494
        
 
28495
# check transactions-8 success:         1
 
28496
# INFO: Storage engine used for t1 seems to be able to revert
 
28497
#       changes made by the failing statement.
 
28498
SET @@session.sql_mode = '';
 
28499
SET AUTOCOMMIT= 1;
 
28500
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28501
COMMIT WORK;
 
28502
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
28503
        
 
28504
# check special-1 success:      1
 
28505
UPDATE t1 SET f_charbig = '';
 
28506
        
 
28507
# check special-2 success:      1
 
28508
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
28509
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28510
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
28511
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28512
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28513
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28514
'just inserted' FROM t0_template
 
28515
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28516
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
28517
BEGIN
 
28518
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28519
f_charbig = 'updated by trigger'
 
28520
      WHERE f_int1 = new.f_int1;
 
28521
END|
 
28522
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28523
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28524
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28525
        
 
28526
# check trigger-1 success:      1
 
28527
DROP TRIGGER trg_1;
 
28528
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28529
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28530
f_charbig = 'just inserted'
 
28531
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28532
DELETE FROM t0_aux
 
28533
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28534
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28535
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28536
'just inserted' FROM t0_template
 
28537
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28538
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
28539
BEGIN
 
28540
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28541
f_charbig = 'updated by trigger'
 
28542
      WHERE f_int1 = new.f_int1;
 
28543
END|
 
28544
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28545
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28546
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28547
        
 
28548
# check trigger-2 success:      1
 
28549
DROP TRIGGER trg_1;
 
28550
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28551
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28552
f_charbig = 'just inserted'
 
28553
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28554
DELETE FROM t0_aux
 
28555
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28556
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28557
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28558
'just inserted' FROM t0_template
 
28559
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28560
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28561
BEGIN
 
28562
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28563
f_charbig = 'updated by trigger'
 
28564
      WHERE f_int1 = new.f_int1;
 
28565
END|
 
28566
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28567
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28568
        
 
28569
# check trigger-3 success:      1
 
28570
DROP TRIGGER trg_1;
 
28571
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28572
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28573
f_charbig = 'just inserted'
 
28574
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28575
DELETE FROM t0_aux
 
28576
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28577
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28578
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28579
'just inserted' FROM t0_template
 
28580
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28581
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28582
BEGIN
 
28583
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28584
f_charbig = 'updated by trigger'
 
28585
      WHERE f_int1 = - old.f_int1;
 
28586
END|
 
28587
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28588
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28589
        
 
28590
# check trigger-4 success:      1
 
28591
DROP TRIGGER trg_1;
 
28592
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28593
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28594
f_charbig = 'just inserted'
 
28595
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28596
DELETE FROM t0_aux
 
28597
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28598
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28599
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28600
'just inserted' FROM t0_template
 
28601
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28602
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28603
BEGIN
 
28604
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28605
f_charbig = 'updated by trigger'
 
28606
      WHERE f_int1 = new.f_int1;
 
28607
END|
 
28608
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28609
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28610
        
 
28611
# check trigger-5 success:      1
 
28612
DROP TRIGGER trg_1;
 
28613
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28614
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28615
f_charbig = 'just inserted'
 
28616
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28617
DELETE FROM t0_aux
 
28618
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28619
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28620
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28621
'just inserted' FROM t0_template
 
28622
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28623
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28624
BEGIN
 
28625
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28626
f_charbig = 'updated by trigger'
 
28627
      WHERE f_int1 = - old.f_int1;
 
28628
END|
 
28629
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28630
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28631
        
 
28632
# check trigger-6 success:      1
 
28633
DROP TRIGGER trg_1;
 
28634
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28635
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28636
f_charbig = 'just inserted'
 
28637
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28638
DELETE FROM t0_aux
 
28639
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28640
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28641
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28642
'just inserted' FROM t0_template
 
28643
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28644
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
28645
BEGIN
 
28646
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28647
f_charbig = 'updated by trigger'
 
28648
      WHERE f_int1 = - old.f_int1;
 
28649
END|
 
28650
DELETE FROM t0_aux
 
28651
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28652
        
 
28653
# check trigger-7 success:      1
 
28654
DROP TRIGGER trg_1;
 
28655
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28656
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28657
f_charbig = 'just inserted'
 
28658
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28659
DELETE FROM t0_aux
 
28660
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28661
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28662
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28663
'just inserted' FROM t0_template
 
28664
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28665
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
28666
BEGIN
 
28667
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28668
f_charbig = 'updated by trigger'
 
28669
      WHERE f_int1 = - old.f_int1;
 
28670
END|
 
28671
DELETE FROM t0_aux
 
28672
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28673
        
 
28674
# check trigger-8 success:      1
 
28675
DROP TRIGGER trg_1;
 
28676
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28677
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28678
f_charbig = 'just inserted'
 
28679
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28680
DELETE FROM t0_aux
 
28681
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28682
DELETE FROM t1
 
28683
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28684
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28685
BEGIN
 
28686
SET new.f_int1 = old.f_int1 + @max_row,
 
28687
new.f_int2 = old.f_int2 - @max_row,
 
28688
new.f_charbig = '####updated per update trigger####';
 
28689
END|
 
28690
UPDATE t1
 
28691
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28692
f_charbig = '####updated per update statement itself####';
 
28693
        
 
28694
# check trigger-9 success:      1
 
28695
DROP TRIGGER trg_2;
 
28696
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28697
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28698
f_charbig = CONCAT('===',f_char1,'===');
 
28699
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28700
BEGIN
 
28701
SET new.f_int1 = new.f_int1 + @max_row,
 
28702
new.f_int2 = new.f_int2 - @max_row,
 
28703
new.f_charbig = '####updated per update trigger####';
 
28704
END|
 
28705
UPDATE t1
 
28706
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28707
f_charbig = '####updated per update statement itself####';
 
28708
        
 
28709
# check trigger-10 success:     1
 
28710
DROP TRIGGER trg_2;
 
28711
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28712
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28713
f_charbig = CONCAT('===',f_char1,'===');
 
28714
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28715
BEGIN
 
28716
SET new.f_int1 = @my_max1 + @counter,
 
28717
new.f_int2 = @my_min2 - @counter,
 
28718
new.f_charbig = '####updated per insert trigger####';
 
28719
SET @counter = @counter + 1;
 
28720
END|
 
28721
SET @counter = 1;
 
28722
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28723
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28724
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28725
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28726
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28727
ORDER BY f_int1;
 
28728
DROP TRIGGER trg_3;
 
28729
        
 
28730
# check trigger-11 success:     1
 
28731
DELETE FROM t1
 
28732
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28733
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28734
AND f_charbig = '####updated per insert trigger####';
 
28735
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28736
BEGIN
 
28737
SET new.f_int1 = @my_max1 + @counter,
 
28738
new.f_int2 = @my_min2 - @counter,
 
28739
new.f_charbig = '####updated per insert trigger####';
 
28740
SET @counter = @counter + 1;
 
28741
END|
 
28742
SET @counter = 1;
 
28743
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28744
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
28745
SELECT CAST(f_int1 AS CHAR),
 
28746
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28747
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28748
ORDER BY f_int1;
 
28749
DROP TRIGGER trg_3;
 
28750
        
 
28751
# check trigger-12 success:     1
 
28752
DELETE FROM t1
 
28753
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28754
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28755
AND f_charbig = '####updated per insert trigger####';
 
28756
ANALYZE  TABLE t1;
 
28757
Table   Op      Msg_type        Msg_text
 
28758
test.t1 analyze status  OK
 
28759
CHECK    TABLE t1 EXTENDED;
 
28760
Table   Op      Msg_type        Msg_text
 
28761
test.t1 check   status  OK
 
28762
CHECKSUM TABLE t1 EXTENDED;
 
28763
Table   Checksum
 
28764
test.t1 <some_value>
 
28765
OPTIMIZE TABLE t1;
 
28766
Table   Op      Msg_type        Msg_text
 
28767
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
28768
test.t1 optimize        status  OK
 
28769
# check layout success:    1
 
28770
REPAIR   TABLE t1 EXTENDED;
 
28771
Table   Op      Msg_type        Msg_text
 
28772
test.t1 repair  note    The storage engine for the table doesn't support repair
 
28773
# check layout success:    1
 
28774
TRUNCATE t1;
 
28775
        
 
28776
# check TRUNCATE success:       1
 
28777
# check layout success:    1
 
28778
# End usability test (inc/partition_check.inc)
 
28779
DROP TABLE t1;
 
28780
CREATE TABLE t1 (
 
28781
f_int1 INTEGER,
 
28782
f_int2 INTEGER,
 
28783
f_char1 CHAR(20),
 
28784
f_char2 CHAR(20),
 
28785
f_charbig VARCHAR(1000)
 
28786
, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
 
28787
)
 
28788
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
28789
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
28790
(PARTITION part1 VALUES IN (0),
 
28791
 PARTITION part2 VALUES IN (1),
 
28792
 PARTITION part3 VALUES IN (NULL));
 
28793
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28794
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28795
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
28796
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
28797
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28798
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28799
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28800
# Start usability test (inc/partition_check.inc)
 
28801
create_command
 
28802
SHOW CREATE TABLE t1;
 
28803
Table   Create Table
 
28804
t1      CREATE TABLE `t1` (
 
28805
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
28806
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
28807
  `f_char1` char(20) DEFAULT NULL,
 
28808
  `f_char2` char(20) DEFAULT NULL,
 
28809
  `f_charbig` varchar(1000) DEFAULT NULL
 
28810
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
28811
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
28812
SUBPARTITION BY KEY (f_int2)
 
28813
SUBPARTITIONS 3
 
28814
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
28815
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
28816
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
28817
 
 
28818
# check prerequisites-1 success:    1
 
28819
# check COUNT(*) success:    1
 
28820
# check MIN/MAX(f_int1) success:    1
 
28821
# check MIN/MAX(f_int2) success:    1
 
28822
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28823
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28824
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
28825
WHERE f_int1 IN (2,3);
 
28826
# check prerequisites-3 success:    1
 
28827
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
28828
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
28829
# check read via f_int1 success: 1
 
28830
# check read via f_int2 success: 1
 
28831
        
 
28832
# check multiple-1 success:     1
 
28833
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
28834
        
 
28835
# check multiple-2 success:     1
 
28836
INSERT INTO t1 SELECT * FROM t0_template
 
28837
WHERE MOD(f_int1,3) = 0;
 
28838
        
 
28839
# check multiple-3 success:     1
 
28840
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
28841
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
28842
AND @max_row_div2 + @max_row_div4;
 
28843
        
 
28844
# check multiple-4 success:     1
 
28845
DELETE FROM t1
 
28846
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
28847
AND @max_row_div2 + @max_row_div4 + @max_row;
 
28848
        
 
28849
# check multiple-5 success:     1
 
28850
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
28851
INSERT INTO t1
 
28852
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28853
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28854
f_charbig = '#SINGLE#';
 
28855
        
 
28856
# check single-1 success:       1
 
28857
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
28858
INSERT INTO t1
 
28859
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28860
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28861
f_charbig = '#SINGLE#';
 
28862
        
 
28863
# check single-2 success:       1
 
28864
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
28865
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
28866
UPDATE t1 SET f_int1 = @cur_value2
 
28867
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
28868
        
 
28869
# check single-3 success:       1
 
28870
SET @cur_value1= -1;
 
28871
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
28872
UPDATE t1 SET f_int1 = @cur_value1
 
28873
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
28874
        
 
28875
# check single-4 success:       1
 
28876
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
28877
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
28878
        
 
28879
# check single-5 success:       1
 
28880
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
28881
        
 
28882
# check single-6 success:       1
 
28883
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
28884
        
 
28885
# check single-7 success:       1
 
28886
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
28887
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
28888
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
28889
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
28890
f_charbig = '#NULL#';
 
28891
INSERT INTO t1
 
28892
SET f_int1 = NULL , f_int2 = -@max_row,
 
28893
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
28894
f_charbig = '#NULL#';
 
28895
ERROR 23000: Column 'f_int1' cannot be null
 
28896
# check null success:    1
 
28897
DELETE FROM t1
 
28898
WHERE f_int1 = 0 AND f_int2 = 0
 
28899
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
28900
AND f_charbig = '#NULL#';
 
28901
SET AUTOCOMMIT= 0;
 
28902
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28903
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28904
FROM t0_template source_tab
 
28905
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28906
        
 
28907
# check transactions-1 success:         1
 
28908
COMMIT WORK;
 
28909
        
 
28910
# check transactions-2 success:         1
 
28911
ROLLBACK WORK;
 
28912
        
 
28913
# check transactions-3 success:         1
 
28914
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28915
COMMIT WORK;
 
28916
ROLLBACK WORK;
 
28917
        
 
28918
# check transactions-4 success:         1
 
28919
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28920
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28921
FROM t0_template source_tab
 
28922
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28923
        
 
28924
# check transactions-5 success:         1
 
28925
ROLLBACK WORK;
 
28926
        
 
28927
# check transactions-6 success:         1
 
28928
# INFO: Storage engine used for t1 seems to be transactional.
 
28929
COMMIT;
 
28930
        
 
28931
# check transactions-7 success:         1
 
28932
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28933
COMMIT WORK;
 
28934
SET @@session.sql_mode = 'traditional';
 
28935
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
28936
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28937
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
28938
'', '', 'was inserted' FROM t0_template
 
28939
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28940
ERROR 22012: Division by 0
 
28941
COMMIT;
 
28942
        
 
28943
# check transactions-8 success:         1
 
28944
# INFO: Storage engine used for t1 seems to be able to revert
 
28945
#       changes made by the failing statement.
 
28946
SET @@session.sql_mode = '';
 
28947
SET AUTOCOMMIT= 1;
 
28948
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28949
COMMIT WORK;
 
28950
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
28951
        
 
28952
# check special-1 success:      1
 
28953
UPDATE t1 SET f_charbig = '';
 
28954
        
 
28955
# check special-2 success:      1
 
28956
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
28957
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28958
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
28959
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28960
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28961
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28962
'just inserted' FROM t0_template
 
28963
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28964
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
28965
BEGIN
 
28966
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28967
f_charbig = 'updated by trigger'
 
28968
      WHERE f_int1 = new.f_int1;
 
28969
END|
 
28970
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28971
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28972
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28973
        
 
28974
# check trigger-1 success:      1
 
28975
DROP TRIGGER trg_1;
 
28976
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28977
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28978
f_charbig = 'just inserted'
 
28979
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28980
DELETE FROM t0_aux
 
28981
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28982
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28983
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28984
'just inserted' FROM t0_template
 
28985
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28986
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
28987
BEGIN
 
28988
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28989
f_charbig = 'updated by trigger'
 
28990
      WHERE f_int1 = new.f_int1;
 
28991
END|
 
28992
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28993
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28994
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28995
        
 
28996
# check trigger-2 success:      1
 
28997
DROP TRIGGER trg_1;
 
28998
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28999
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29000
f_charbig = 'just inserted'
 
29001
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29002
DELETE FROM t0_aux
 
29003
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29004
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29005
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29006
'just inserted' FROM t0_template
 
29007
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29008
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29009
BEGIN
 
29010
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29011
f_charbig = 'updated by trigger'
 
29012
      WHERE f_int1 = new.f_int1;
 
29013
END|
 
29014
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29015
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29016
        
 
29017
# check trigger-3 success:      1
 
29018
DROP TRIGGER trg_1;
 
29019
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29020
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29021
f_charbig = 'just inserted'
 
29022
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29023
DELETE FROM t0_aux
 
29024
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29025
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29026
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29027
'just inserted' FROM t0_template
 
29028
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29029
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29030
BEGIN
 
29031
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29032
f_charbig = 'updated by trigger'
 
29033
      WHERE f_int1 = - old.f_int1;
 
29034
END|
 
29035
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29036
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29037
        
 
29038
# check trigger-4 success:      1
 
29039
DROP TRIGGER trg_1;
 
29040
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29041
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29042
f_charbig = 'just inserted'
 
29043
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29044
DELETE FROM t0_aux
 
29045
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29046
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29047
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29048
'just inserted' FROM t0_template
 
29049
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29050
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29051
BEGIN
 
29052
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29053
f_charbig = 'updated by trigger'
 
29054
      WHERE f_int1 = new.f_int1;
 
29055
END|
 
29056
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29057
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29058
        
 
29059
# check trigger-5 success:      1
 
29060
DROP TRIGGER trg_1;
 
29061
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29062
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29063
f_charbig = 'just inserted'
 
29064
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29065
DELETE FROM t0_aux
 
29066
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29067
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29068
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29069
'just inserted' FROM t0_template
 
29070
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29071
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29072
BEGIN
 
29073
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29074
f_charbig = 'updated by trigger'
 
29075
      WHERE f_int1 = - old.f_int1;
 
29076
END|
 
29077
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29078
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29079
        
 
29080
# check trigger-6 success:      1
 
29081
DROP TRIGGER trg_1;
 
29082
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29083
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29084
f_charbig = 'just inserted'
 
29085
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29086
DELETE FROM t0_aux
 
29087
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29088
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29089
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29090
'just inserted' FROM t0_template
 
29091
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29092
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
29093
BEGIN
 
29094
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29095
f_charbig = 'updated by trigger'
 
29096
      WHERE f_int1 = - old.f_int1;
 
29097
END|
 
29098
DELETE FROM t0_aux
 
29099
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29100
        
 
29101
# check trigger-7 success:      1
 
29102
DROP TRIGGER trg_1;
 
29103
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29104
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29105
f_charbig = 'just inserted'
 
29106
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29107
DELETE FROM t0_aux
 
29108
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29109
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29110
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29111
'just inserted' FROM t0_template
 
29112
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29113
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
29114
BEGIN
 
29115
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29116
f_charbig = 'updated by trigger'
 
29117
      WHERE f_int1 = - old.f_int1;
 
29118
END|
 
29119
DELETE FROM t0_aux
 
29120
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29121
        
 
29122
# check trigger-8 success:      1
 
29123
DROP TRIGGER trg_1;
 
29124
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29125
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29126
f_charbig = 'just inserted'
 
29127
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29128
DELETE FROM t0_aux
 
29129
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29130
DELETE FROM t1
 
29131
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29132
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29133
BEGIN
 
29134
SET new.f_int1 = old.f_int1 + @max_row,
 
29135
new.f_int2 = old.f_int2 - @max_row,
 
29136
new.f_charbig = '####updated per update trigger####';
 
29137
END|
 
29138
UPDATE t1
 
29139
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29140
f_charbig = '####updated per update statement itself####';
 
29141
        
 
29142
# check trigger-9 success:      1
 
29143
DROP TRIGGER trg_2;
 
29144
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29145
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29146
f_charbig = CONCAT('===',f_char1,'===');
 
29147
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29148
BEGIN
 
29149
SET new.f_int1 = new.f_int1 + @max_row,
 
29150
new.f_int2 = new.f_int2 - @max_row,
 
29151
new.f_charbig = '####updated per update trigger####';
 
29152
END|
 
29153
UPDATE t1
 
29154
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29155
f_charbig = '####updated per update statement itself####';
 
29156
        
 
29157
# check trigger-10 success:     1
 
29158
DROP TRIGGER trg_2;
 
29159
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29160
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29161
f_charbig = CONCAT('===',f_char1,'===');
 
29162
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29163
BEGIN
 
29164
SET new.f_int1 = @my_max1 + @counter,
 
29165
new.f_int2 = @my_min2 - @counter,
 
29166
new.f_charbig = '####updated per insert trigger####';
 
29167
SET @counter = @counter + 1;
 
29168
END|
 
29169
SET @counter = 1;
 
29170
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29171
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29172
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29173
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29174
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29175
ORDER BY f_int1;
 
29176
DROP TRIGGER trg_3;
 
29177
        
 
29178
# check trigger-11 success:     1
 
29179
DELETE FROM t1
 
29180
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29181
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29182
AND f_charbig = '####updated per insert trigger####';
 
29183
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29184
BEGIN
 
29185
SET new.f_int1 = @my_max1 + @counter,
 
29186
new.f_int2 = @my_min2 - @counter,
 
29187
new.f_charbig = '####updated per insert trigger####';
 
29188
SET @counter = @counter + 1;
 
29189
END|
 
29190
SET @counter = 1;
 
29191
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29192
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
29193
SELECT CAST(f_int1 AS CHAR),
 
29194
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29195
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29196
ORDER BY f_int1;
 
29197
DROP TRIGGER trg_3;
 
29198
        
 
29199
# check trigger-12 success:     1
 
29200
DELETE FROM t1
 
29201
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29202
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29203
AND f_charbig = '####updated per insert trigger####';
 
29204
ANALYZE  TABLE t1;
 
29205
Table   Op      Msg_type        Msg_text
 
29206
test.t1 analyze status  OK
 
29207
CHECK    TABLE t1 EXTENDED;
 
29208
Table   Op      Msg_type        Msg_text
 
29209
test.t1 check   status  OK
 
29210
CHECKSUM TABLE t1 EXTENDED;
 
29211
Table   Checksum
 
29212
test.t1 <some_value>
 
29213
OPTIMIZE TABLE t1;
 
29214
Table   Op      Msg_type        Msg_text
 
29215
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
29216
test.t1 optimize        status  OK
 
29217
# check layout success:    1
 
29218
REPAIR   TABLE t1 EXTENDED;
 
29219
Table   Op      Msg_type        Msg_text
 
29220
test.t1 repair  note    The storage engine for the table doesn't support repair
 
29221
# check layout success:    1
 
29222
TRUNCATE t1;
 
29223
        
 
29224
# check TRUNCATE success:       1
 
29225
# check layout success:    1
 
29226
# End usability test (inc/partition_check.inc)
 
29227
DROP TABLE t1;
 
29228
DROP TABLE IF EXISTS t1;
 
29229
CREATE TABLE t1 (
 
29230
f_int1 INTEGER,
 
29231
f_int2 INTEGER,
 
29232
f_char1 CHAR(20),
 
29233
f_char2 CHAR(20),
 
29234
f_charbig VARCHAR(1000)
 
29235
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
29236
)
 
29237
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
29238
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29239
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29240
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
29241
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
29242
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29243
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29244
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29245
# Start usability test (inc/partition_check.inc)
 
29246
create_command
 
29247
SHOW CREATE TABLE t1;
 
29248
Table   Create Table
 
29249
t1      CREATE TABLE `t1` (
 
29250
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
29251
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
29252
  `f_char1` char(20) DEFAULT NULL,
 
29253
  `f_char2` char(20) DEFAULT NULL,
 
29254
  `f_charbig` varchar(1000) DEFAULT NULL
 
29255
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
29256
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
 
29257
PARTITIONS 2 */
 
29258
 
 
29259
# check prerequisites-1 success:    1
 
29260
# check COUNT(*) success:    1
 
29261
# check MIN/MAX(f_int1) success:    1
 
29262
# check MIN/MAX(f_int2) success:    1
 
29263
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29264
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29265
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
29266
WHERE f_int1 IN (2,3);
 
29267
# check prerequisites-3 success:    1
 
29268
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
29269
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
29270
# check read via f_int1 success: 1
 
29271
# check read via f_int2 success: 1
 
29272
        
 
29273
# check multiple-1 success:     1
 
29274
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
29275
        
 
29276
# check multiple-2 success:     1
 
29277
INSERT INTO t1 SELECT * FROM t0_template
 
29278
WHERE MOD(f_int1,3) = 0;
 
29279
        
 
29280
# check multiple-3 success:     1
 
29281
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
29282
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
29283
AND @max_row_div2 + @max_row_div4;
 
29284
        
 
29285
# check multiple-4 success:     1
 
29286
DELETE FROM t1
 
29287
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
29288
AND @max_row_div2 + @max_row_div4 + @max_row;
 
29289
        
 
29290
# check multiple-5 success:     1
 
29291
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
29292
INSERT INTO t1
 
29293
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29294
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29295
f_charbig = '#SINGLE#';
 
29296
        
 
29297
# check single-1 success:       1
 
29298
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
29299
INSERT INTO t1
 
29300
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29301
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29302
f_charbig = '#SINGLE#';
 
29303
        
 
29304
# check single-2 success:       1
 
29305
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
29306
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
29307
UPDATE t1 SET f_int1 = @cur_value2
 
29308
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
29309
        
 
29310
# check single-3 success:       1
 
29311
SET @cur_value1= -1;
 
29312
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
29313
UPDATE t1 SET f_int1 = @cur_value1
 
29314
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
29315
        
 
29316
# check single-4 success:       1
 
29317
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
29318
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
29319
        
 
29320
# check single-5 success:       1
 
29321
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
29322
        
 
29323
# check single-6 success:       1
 
29324
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
29325
        
 
29326
# check single-7 success:       1
 
29327
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
29328
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
29329
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
29330
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
29331
f_charbig = '#NULL#';
 
29332
INSERT INTO t1
 
29333
SET f_int1 = NULL , f_int2 = -@max_row,
 
29334
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
29335
f_charbig = '#NULL#';
 
29336
ERROR 23000: Column 'f_int1' cannot be null
 
29337
# check null success:    1
 
29338
DELETE FROM t1
 
29339
WHERE f_int1 = 0 AND f_int2 = 0
 
29340
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
29341
AND f_charbig = '#NULL#';
 
29342
SET AUTOCOMMIT= 0;
 
29343
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29344
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29345
FROM t0_template source_tab
 
29346
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29347
        
 
29348
# check transactions-1 success:         1
 
29349
COMMIT WORK;
 
29350
        
 
29351
# check transactions-2 success:         1
 
29352
ROLLBACK WORK;
 
29353
        
 
29354
# check transactions-3 success:         1
 
29355
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29356
COMMIT WORK;
 
29357
ROLLBACK WORK;
 
29358
        
 
29359
# check transactions-4 success:         1
 
29360
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29361
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29362
FROM t0_template source_tab
 
29363
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29364
        
 
29365
# check transactions-5 success:         1
 
29366
ROLLBACK WORK;
 
29367
        
 
29368
# check transactions-6 success:         1
 
29369
# INFO: Storage engine used for t1 seems to be transactional.
 
29370
COMMIT;
 
29371
        
 
29372
# check transactions-7 success:         1
 
29373
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29374
COMMIT WORK;
 
29375
SET @@session.sql_mode = 'traditional';
 
29376
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
29377
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29378
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
29379
'', '', 'was inserted' FROM t0_template
 
29380
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29381
ERROR 22012: Division by 0
 
29382
COMMIT;
 
29383
        
 
29384
# check transactions-8 success:         1
 
29385
# INFO: Storage engine used for t1 seems to be able to revert
 
29386
#       changes made by the failing statement.
 
29387
SET @@session.sql_mode = '';
 
29388
SET AUTOCOMMIT= 1;
 
29389
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29390
COMMIT WORK;
 
29391
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
29392
        
 
29393
# check special-1 success:      1
 
29394
UPDATE t1 SET f_charbig = '';
 
29395
        
 
29396
# check special-2 success:      1
 
29397
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
29398
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29399
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
29400
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29401
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29402
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29403
'just inserted' FROM t0_template
 
29404
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29405
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
29406
BEGIN
 
29407
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29408
f_charbig = 'updated by trigger'
 
29409
      WHERE f_int1 = new.f_int1;
 
29410
END|
 
29411
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29412
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29413
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29414
        
 
29415
# check trigger-1 success:      1
 
29416
DROP TRIGGER trg_1;
 
29417
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29418
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29419
f_charbig = 'just inserted'
 
29420
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29421
DELETE FROM t0_aux
 
29422
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29423
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29424
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29425
'just inserted' FROM t0_template
 
29426
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29427
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
29428
BEGIN
 
29429
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29430
f_charbig = 'updated by trigger'
 
29431
      WHERE f_int1 = new.f_int1;
 
29432
END|
 
29433
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29434
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29435
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29436
        
 
29437
# check trigger-2 success:      1
 
29438
DROP TRIGGER trg_1;
 
29439
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29440
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29441
f_charbig = 'just inserted'
 
29442
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29443
DELETE FROM t0_aux
 
29444
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29445
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29446
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29447
'just inserted' FROM t0_template
 
29448
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29449
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29450
BEGIN
 
29451
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29452
f_charbig = 'updated by trigger'
 
29453
      WHERE f_int1 = new.f_int1;
 
29454
END|
 
29455
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29456
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29457
        
 
29458
# check trigger-3 success:      1
 
29459
DROP TRIGGER trg_1;
 
29460
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29461
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29462
f_charbig = 'just inserted'
 
29463
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29464
DELETE FROM t0_aux
 
29465
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29466
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29467
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29468
'just inserted' FROM t0_template
 
29469
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29470
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29471
BEGIN
 
29472
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29473
f_charbig = 'updated by trigger'
 
29474
      WHERE f_int1 = - old.f_int1;
 
29475
END|
 
29476
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29477
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29478
        
 
29479
# check trigger-4 success:      1
 
29480
DROP TRIGGER trg_1;
 
29481
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29482
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29483
f_charbig = 'just inserted'
 
29484
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29485
DELETE FROM t0_aux
 
29486
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29487
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29488
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29489
'just inserted' FROM t0_template
 
29490
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29491
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29492
BEGIN
 
29493
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29494
f_charbig = 'updated by trigger'
 
29495
      WHERE f_int1 = new.f_int1;
 
29496
END|
 
29497
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29498
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29499
        
 
29500
# check trigger-5 success:      1
 
29501
DROP TRIGGER trg_1;
 
29502
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29503
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29504
f_charbig = 'just inserted'
 
29505
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29506
DELETE FROM t0_aux
 
29507
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29508
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29509
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29510
'just inserted' FROM t0_template
 
29511
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29512
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29513
BEGIN
 
29514
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29515
f_charbig = 'updated by trigger'
 
29516
      WHERE f_int1 = - old.f_int1;
 
29517
END|
 
29518
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29519
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29520
        
 
29521
# check trigger-6 success:      1
 
29522
DROP TRIGGER trg_1;
 
29523
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29524
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29525
f_charbig = 'just inserted'
 
29526
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29527
DELETE FROM t0_aux
 
29528
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29529
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29530
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29531
'just inserted' FROM t0_template
 
29532
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29533
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
29534
BEGIN
 
29535
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29536
f_charbig = 'updated by trigger'
 
29537
      WHERE f_int1 = - old.f_int1;
 
29538
END|
 
29539
DELETE FROM t0_aux
 
29540
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29541
        
 
29542
# check trigger-7 success:      1
 
29543
DROP TRIGGER trg_1;
 
29544
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29545
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29546
f_charbig = 'just inserted'
 
29547
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29548
DELETE FROM t0_aux
 
29549
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29550
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29551
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29552
'just inserted' FROM t0_template
 
29553
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29554
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
29555
BEGIN
 
29556
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29557
f_charbig = 'updated by trigger'
 
29558
      WHERE f_int1 = - old.f_int1;
 
29559
END|
 
29560
DELETE FROM t0_aux
 
29561
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29562
        
 
29563
# check trigger-8 success:      1
 
29564
DROP TRIGGER trg_1;
 
29565
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29566
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29567
f_charbig = 'just inserted'
 
29568
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29569
DELETE FROM t0_aux
 
29570
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29571
DELETE FROM t1
 
29572
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29573
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29574
BEGIN
 
29575
SET new.f_int1 = old.f_int1 + @max_row,
 
29576
new.f_int2 = old.f_int2 - @max_row,
 
29577
new.f_charbig = '####updated per update trigger####';
 
29578
END|
 
29579
UPDATE t1
 
29580
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29581
f_charbig = '####updated per update statement itself####';
 
29582
        
 
29583
# check trigger-9 success:      1
 
29584
DROP TRIGGER trg_2;
 
29585
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29586
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29587
f_charbig = CONCAT('===',f_char1,'===');
 
29588
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29589
BEGIN
 
29590
SET new.f_int1 = new.f_int1 + @max_row,
 
29591
new.f_int2 = new.f_int2 - @max_row,
 
29592
new.f_charbig = '####updated per update trigger####';
 
29593
END|
 
29594
UPDATE t1
 
29595
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29596
f_charbig = '####updated per update statement itself####';
 
29597
        
 
29598
# check trigger-10 success:     1
 
29599
DROP TRIGGER trg_2;
 
29600
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29601
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29602
f_charbig = CONCAT('===',f_char1,'===');
 
29603
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29604
BEGIN
 
29605
SET new.f_int1 = @my_max1 + @counter,
 
29606
new.f_int2 = @my_min2 - @counter,
 
29607
new.f_charbig = '####updated per insert trigger####';
 
29608
SET @counter = @counter + 1;
 
29609
END|
 
29610
SET @counter = 1;
 
29611
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29612
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29613
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29614
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29615
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29616
ORDER BY f_int1;
 
29617
DROP TRIGGER trg_3;
 
29618
        
 
29619
# check trigger-11 success:     1
 
29620
DELETE FROM t1
 
29621
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29622
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29623
AND f_charbig = '####updated per insert trigger####';
 
29624
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29625
BEGIN
 
29626
SET new.f_int1 = @my_max1 + @counter,
 
29627
new.f_int2 = @my_min2 - @counter,
 
29628
new.f_charbig = '####updated per insert trigger####';
 
29629
SET @counter = @counter + 1;
 
29630
END|
 
29631
SET @counter = 1;
 
29632
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29633
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
29634
SELECT CAST(f_int1 AS CHAR),
 
29635
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29636
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29637
ORDER BY f_int1;
 
29638
DROP TRIGGER trg_3;
 
29639
        
 
29640
# check trigger-12 success:     1
 
29641
DELETE FROM t1
 
29642
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29643
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29644
AND f_charbig = '####updated per insert trigger####';
 
29645
ANALYZE  TABLE t1;
 
29646
Table   Op      Msg_type        Msg_text
 
29647
test.t1 analyze status  OK
 
29648
CHECK    TABLE t1 EXTENDED;
 
29649
Table   Op      Msg_type        Msg_text
 
29650
test.t1 check   status  OK
 
29651
CHECKSUM TABLE t1 EXTENDED;
 
29652
Table   Checksum
 
29653
test.t1 <some_value>
 
29654
OPTIMIZE TABLE t1;
 
29655
Table   Op      Msg_type        Msg_text
 
29656
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
29657
test.t1 optimize        status  OK
 
29658
# check layout success:    1
 
29659
REPAIR   TABLE t1 EXTENDED;
 
29660
Table   Op      Msg_type        Msg_text
 
29661
test.t1 repair  note    The storage engine for the table doesn't support repair
 
29662
# check layout success:    1
 
29663
TRUNCATE t1;
 
29664
        
 
29665
# check TRUNCATE success:       1
 
29666
# check layout success:    1
 
29667
# End usability test (inc/partition_check.inc)
 
29668
DROP TABLE t1;
 
29669
CREATE TABLE t1 (
 
29670
f_int1 INTEGER,
 
29671
f_int2 INTEGER,
 
29672
f_char1 CHAR(20),
 
29673
f_char2 CHAR(20),
 
29674
f_charbig VARCHAR(1000)
 
29675
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
29676
)
 
29677
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
29678
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29679
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29680
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
29681
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
29682
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29683
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29684
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29685
# Start usability test (inc/partition_check.inc)
 
29686
create_command
 
29687
SHOW CREATE TABLE t1;
 
29688
Table   Create Table
 
29689
t1      CREATE TABLE `t1` (
 
29690
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
29691
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
29692
  `f_char1` char(20) DEFAULT NULL,
 
29693
  `f_char2` char(20) DEFAULT NULL,
 
29694
  `f_charbig` varchar(1000) DEFAULT NULL
 
29695
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
29696
/*!50100 PARTITION BY KEY (f_int1,f_int2)
 
29697
PARTITIONS 5 */
 
29698
 
 
29699
# check prerequisites-1 success:    1
 
29700
# check COUNT(*) success:    1
 
29701
# check MIN/MAX(f_int1) success:    1
 
29702
# check MIN/MAX(f_int2) success:    1
 
29703
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29704
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29705
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
29706
WHERE f_int1 IN (2,3);
 
29707
# check prerequisites-3 success:    1
 
29708
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
29709
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
29710
# check read via f_int1 success: 1
 
29711
# check read via f_int2 success: 1
 
29712
        
 
29713
# check multiple-1 success:     1
 
29714
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
29715
        
 
29716
# check multiple-2 success:     1
 
29717
INSERT INTO t1 SELECT * FROM t0_template
 
29718
WHERE MOD(f_int1,3) = 0;
 
29719
        
 
29720
# check multiple-3 success:     1
 
29721
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
29722
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
29723
AND @max_row_div2 + @max_row_div4;
 
29724
        
 
29725
# check multiple-4 success:     1
 
29726
DELETE FROM t1
 
29727
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
29728
AND @max_row_div2 + @max_row_div4 + @max_row;
 
29729
        
 
29730
# check multiple-5 success:     1
 
29731
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
29732
INSERT INTO t1
 
29733
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29734
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29735
f_charbig = '#SINGLE#';
 
29736
        
 
29737
# check single-1 success:       1
 
29738
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
29739
INSERT INTO t1
 
29740
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29741
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29742
f_charbig = '#SINGLE#';
 
29743
        
 
29744
# check single-2 success:       1
 
29745
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
29746
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
29747
UPDATE t1 SET f_int1 = @cur_value2
 
29748
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
29749
        
 
29750
# check single-3 success:       1
 
29751
SET @cur_value1= -1;
 
29752
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
29753
UPDATE t1 SET f_int1 = @cur_value1
 
29754
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
29755
        
 
29756
# check single-4 success:       1
 
29757
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
29758
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
29759
        
 
29760
# check single-5 success:       1
 
29761
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
29762
        
 
29763
# check single-6 success:       1
 
29764
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
29765
        
 
29766
# check single-7 success:       1
 
29767
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
29768
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
29769
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
29770
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
29771
f_charbig = '#NULL#';
 
29772
INSERT INTO t1
 
29773
SET f_int1 = NULL , f_int2 = -@max_row,
 
29774
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
29775
f_charbig = '#NULL#';
 
29776
ERROR 23000: Column 'f_int1' cannot be null
 
29777
# check null success:    1
 
29778
DELETE FROM t1
 
29779
WHERE f_int1 = 0 AND f_int2 = 0
 
29780
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
29781
AND f_charbig = '#NULL#';
 
29782
SET AUTOCOMMIT= 0;
 
29783
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29784
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29785
FROM t0_template source_tab
 
29786
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29787
        
 
29788
# check transactions-1 success:         1
 
29789
COMMIT WORK;
 
29790
        
 
29791
# check transactions-2 success:         1
 
29792
ROLLBACK WORK;
 
29793
        
 
29794
# check transactions-3 success:         1
 
29795
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29796
COMMIT WORK;
 
29797
ROLLBACK WORK;
 
29798
        
 
29799
# check transactions-4 success:         1
 
29800
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29801
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29802
FROM t0_template source_tab
 
29803
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29804
        
 
29805
# check transactions-5 success:         1
 
29806
ROLLBACK WORK;
 
29807
        
 
29808
# check transactions-6 success:         1
 
29809
# INFO: Storage engine used for t1 seems to be transactional.
 
29810
COMMIT;
 
29811
        
 
29812
# check transactions-7 success:         1
 
29813
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29814
COMMIT WORK;
 
29815
SET @@session.sql_mode = 'traditional';
 
29816
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
29817
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29818
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
29819
'', '', 'was inserted' FROM t0_template
 
29820
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29821
ERROR 22012: Division by 0
 
29822
COMMIT;
 
29823
        
 
29824
# check transactions-8 success:         1
 
29825
# INFO: Storage engine used for t1 seems to be able to revert
 
29826
#       changes made by the failing statement.
 
29827
SET @@session.sql_mode = '';
 
29828
SET AUTOCOMMIT= 1;
 
29829
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29830
COMMIT WORK;
 
29831
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
29832
        
 
29833
# check special-1 success:      1
 
29834
UPDATE t1 SET f_charbig = '';
 
29835
        
 
29836
# check special-2 success:      1
 
29837
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
29838
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29839
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
29840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29841
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29842
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29843
'just inserted' FROM t0_template
 
29844
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29845
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
29846
BEGIN
 
29847
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29848
f_charbig = 'updated by trigger'
 
29849
      WHERE f_int1 = new.f_int1;
 
29850
END|
 
29851
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29852
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29853
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29854
        
 
29855
# check trigger-1 success:      1
 
29856
DROP TRIGGER trg_1;
 
29857
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29858
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29859
f_charbig = 'just inserted'
 
29860
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29861
DELETE FROM t0_aux
 
29862
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29863
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29864
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29865
'just inserted' FROM t0_template
 
29866
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29867
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
29868
BEGIN
 
29869
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29870
f_charbig = 'updated by trigger'
 
29871
      WHERE f_int1 = new.f_int1;
 
29872
END|
 
29873
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29874
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29875
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29876
        
 
29877
# check trigger-2 success:      1
 
29878
DROP TRIGGER trg_1;
 
29879
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29880
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29881
f_charbig = 'just inserted'
 
29882
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29883
DELETE FROM t0_aux
 
29884
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29885
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29886
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29887
'just inserted' FROM t0_template
 
29888
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29889
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29890
BEGIN
 
29891
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29892
f_charbig = 'updated by trigger'
 
29893
      WHERE f_int1 = new.f_int1;
 
29894
END|
 
29895
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29896
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29897
        
 
29898
# check trigger-3 success:      1
 
29899
DROP TRIGGER trg_1;
 
29900
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29901
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29902
f_charbig = 'just inserted'
 
29903
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29904
DELETE FROM t0_aux
 
29905
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29906
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29907
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29908
'just inserted' FROM t0_template
 
29909
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29910
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29911
BEGIN
 
29912
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29913
f_charbig = 'updated by trigger'
 
29914
      WHERE f_int1 = - old.f_int1;
 
29915
END|
 
29916
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29917
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29918
        
 
29919
# check trigger-4 success:      1
 
29920
DROP TRIGGER trg_1;
 
29921
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29922
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29923
f_charbig = 'just inserted'
 
29924
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29925
DELETE FROM t0_aux
 
29926
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29927
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29928
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29929
'just inserted' FROM t0_template
 
29930
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29931
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29932
BEGIN
 
29933
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29934
f_charbig = 'updated by trigger'
 
29935
      WHERE f_int1 = new.f_int1;
 
29936
END|
 
29937
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29938
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29939
        
 
29940
# check trigger-5 success:      1
 
29941
DROP TRIGGER trg_1;
 
29942
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29943
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29944
f_charbig = 'just inserted'
 
29945
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29946
DELETE FROM t0_aux
 
29947
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29948
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29949
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29950
'just inserted' FROM t0_template
 
29951
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29952
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29953
BEGIN
 
29954
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29955
f_charbig = 'updated by trigger'
 
29956
      WHERE f_int1 = - old.f_int1;
 
29957
END|
 
29958
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29959
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29960
        
 
29961
# check trigger-6 success:      1
 
29962
DROP TRIGGER trg_1;
 
29963
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29964
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29965
f_charbig = 'just inserted'
 
29966
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29967
DELETE FROM t0_aux
 
29968
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29969
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29970
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29971
'just inserted' FROM t0_template
 
29972
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29973
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
29974
BEGIN
 
29975
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29976
f_charbig = 'updated by trigger'
 
29977
      WHERE f_int1 = - old.f_int1;
 
29978
END|
 
29979
DELETE FROM t0_aux
 
29980
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29981
        
 
29982
# check trigger-7 success:      1
 
29983
DROP TRIGGER trg_1;
 
29984
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29985
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29986
f_charbig = 'just inserted'
 
29987
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29988
DELETE FROM t0_aux
 
29989
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29990
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29991
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29992
'just inserted' FROM t0_template
 
29993
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29994
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
29995
BEGIN
 
29996
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29997
f_charbig = 'updated by trigger'
 
29998
      WHERE f_int1 = - old.f_int1;
 
29999
END|
 
30000
DELETE FROM t0_aux
 
30001
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30002
        
 
30003
# check trigger-8 success:      1
 
30004
DROP TRIGGER trg_1;
 
30005
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30006
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30007
f_charbig = 'just inserted'
 
30008
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30009
DELETE FROM t0_aux
 
30010
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30011
DELETE FROM t1
 
30012
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30013
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30014
BEGIN
 
30015
SET new.f_int1 = old.f_int1 + @max_row,
 
30016
new.f_int2 = old.f_int2 - @max_row,
 
30017
new.f_charbig = '####updated per update trigger####';
 
30018
END|
 
30019
UPDATE t1
 
30020
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30021
f_charbig = '####updated per update statement itself####';
 
30022
        
 
30023
# check trigger-9 success:      1
 
30024
DROP TRIGGER trg_2;
 
30025
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30026
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30027
f_charbig = CONCAT('===',f_char1,'===');
 
30028
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30029
BEGIN
 
30030
SET new.f_int1 = new.f_int1 + @max_row,
 
30031
new.f_int2 = new.f_int2 - @max_row,
 
30032
new.f_charbig = '####updated per update trigger####';
 
30033
END|
 
30034
UPDATE t1
 
30035
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30036
f_charbig = '####updated per update statement itself####';
 
30037
        
 
30038
# check trigger-10 success:     1
 
30039
DROP TRIGGER trg_2;
 
30040
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30041
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30042
f_charbig = CONCAT('===',f_char1,'===');
 
30043
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30044
BEGIN
 
30045
SET new.f_int1 = @my_max1 + @counter,
 
30046
new.f_int2 = @my_min2 - @counter,
 
30047
new.f_charbig = '####updated per insert trigger####';
 
30048
SET @counter = @counter + 1;
 
30049
END|
 
30050
SET @counter = 1;
 
30051
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30052
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30053
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30054
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30055
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30056
ORDER BY f_int1;
 
30057
DROP TRIGGER trg_3;
 
30058
        
 
30059
# check trigger-11 success:     1
 
30060
DELETE FROM t1
 
30061
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30062
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30063
AND f_charbig = '####updated per insert trigger####';
 
30064
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30065
BEGIN
 
30066
SET new.f_int1 = @my_max1 + @counter,
 
30067
new.f_int2 = @my_min2 - @counter,
 
30068
new.f_charbig = '####updated per insert trigger####';
 
30069
SET @counter = @counter + 1;
 
30070
END|
 
30071
SET @counter = 1;
 
30072
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30073
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
30074
SELECT CAST(f_int1 AS CHAR),
 
30075
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30076
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30077
ORDER BY f_int1;
 
30078
DROP TRIGGER trg_3;
 
30079
        
 
30080
# check trigger-12 success:     1
 
30081
DELETE FROM t1
 
30082
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30083
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30084
AND f_charbig = '####updated per insert trigger####';
 
30085
ANALYZE  TABLE t1;
 
30086
Table   Op      Msg_type        Msg_text
 
30087
test.t1 analyze status  OK
 
30088
CHECK    TABLE t1 EXTENDED;
 
30089
Table   Op      Msg_type        Msg_text
 
30090
test.t1 check   status  OK
 
30091
CHECKSUM TABLE t1 EXTENDED;
 
30092
Table   Checksum
 
30093
test.t1 <some_value>
 
30094
OPTIMIZE TABLE t1;
 
30095
Table   Op      Msg_type        Msg_text
 
30096
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
30097
test.t1 optimize        status  OK
 
30098
# check layout success:    1
 
30099
REPAIR   TABLE t1 EXTENDED;
 
30100
Table   Op      Msg_type        Msg_text
 
30101
test.t1 repair  note    The storage engine for the table doesn't support repair
 
30102
# check layout success:    1
 
30103
TRUNCATE t1;
 
30104
        
 
30105
# check TRUNCATE success:       1
 
30106
# check layout success:    1
 
30107
# End usability test (inc/partition_check.inc)
 
30108
DROP TABLE t1;
 
30109
CREATE TABLE t1 (
 
30110
f_int1 INTEGER,
 
30111
f_int2 INTEGER,
 
30112
f_char1 CHAR(20),
 
30113
f_char2 CHAR(20),
 
30114
f_charbig VARCHAR(1000)
 
30115
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
30116
)
 
30117
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
30118
(PARTITION part_3 VALUES IN (-3),
 
30119
PARTITION part_2 VALUES IN (-2),
 
30120
PARTITION part_1 VALUES IN (-1),
 
30121
PARTITION part_N VALUES IN (NULL),
 
30122
PARTITION part0 VALUES IN (0),
 
30123
PARTITION part1 VALUES IN (1),
 
30124
PARTITION part2 VALUES IN (2),
 
30125
PARTITION part3 VALUES IN (3));
 
30126
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30127
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30128
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
30129
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
30130
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30131
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30132
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30133
# Start usability test (inc/partition_check.inc)
 
30134
create_command
 
30135
SHOW CREATE TABLE t1;
 
30136
Table   Create Table
 
30137
t1      CREATE TABLE `t1` (
 
30138
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
30139
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
30140
  `f_char1` char(20) DEFAULT NULL,
 
30141
  `f_char2` char(20) DEFAULT NULL,
 
30142
  `f_charbig` varchar(1000) DEFAULT NULL
 
30143
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
30144
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
 
30145
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
30146
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
30147
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
30148
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
30149
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
30150
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
30151
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
30152
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
30153
 
 
30154
# check prerequisites-1 success:    1
 
30155
# check COUNT(*) success:    1
 
30156
# check MIN/MAX(f_int1) success:    1
 
30157
# check MIN/MAX(f_int2) success:    1
 
30158
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30159
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30160
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
30161
WHERE f_int1 IN (2,3);
 
30162
# check prerequisites-3 success:    1
 
30163
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
30164
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
30165
# check read via f_int1 success: 1
 
30166
# check read via f_int2 success: 1
 
30167
        
 
30168
# check multiple-1 success:     1
 
30169
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
30170
        
 
30171
# check multiple-2 success:     1
 
30172
INSERT INTO t1 SELECT * FROM t0_template
 
30173
WHERE MOD(f_int1,3) = 0;
 
30174
        
 
30175
# check multiple-3 success:     1
 
30176
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
30177
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
30178
AND @max_row_div2 + @max_row_div4;
 
30179
        
 
30180
# check multiple-4 success:     1
 
30181
DELETE FROM t1
 
30182
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
30183
AND @max_row_div2 + @max_row_div4 + @max_row;
 
30184
        
 
30185
# check multiple-5 success:     1
 
30186
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
30187
INSERT INTO t1
 
30188
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30189
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30190
f_charbig = '#SINGLE#';
 
30191
        
 
30192
# check single-1 success:       1
 
30193
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
30194
INSERT INTO t1
 
30195
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30196
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30197
f_charbig = '#SINGLE#';
 
30198
        
 
30199
# check single-2 success:       1
 
30200
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
30201
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
30202
UPDATE t1 SET f_int1 = @cur_value2
 
30203
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
30204
        
 
30205
# check single-3 success:       1
 
30206
SET @cur_value1= -1;
 
30207
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
30208
UPDATE t1 SET f_int1 = @cur_value1
 
30209
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
30210
        
 
30211
# check single-4 success:       1
 
30212
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
30213
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
30214
        
 
30215
# check single-5 success:       1
 
30216
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
30217
        
 
30218
# check single-6 success:       1
 
30219
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
30220
        
 
30221
# check single-7 success:       1
 
30222
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
30223
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
30224
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
30225
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
30226
f_charbig = '#NULL#';
 
30227
INSERT INTO t1
 
30228
SET f_int1 = NULL , f_int2 = -@max_row,
 
30229
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
30230
f_charbig = '#NULL#';
 
30231
ERROR 23000: Column 'f_int1' cannot be null
 
30232
# check null success:    1
 
30233
DELETE FROM t1
 
30234
WHERE f_int1 = 0 AND f_int2 = 0
 
30235
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
30236
AND f_charbig = '#NULL#';
 
30237
SET AUTOCOMMIT= 0;
 
30238
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30239
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30240
FROM t0_template source_tab
 
30241
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30242
        
 
30243
# check transactions-1 success:         1
 
30244
COMMIT WORK;
 
30245
        
 
30246
# check transactions-2 success:         1
 
30247
ROLLBACK WORK;
 
30248
        
 
30249
# check transactions-3 success:         1
 
30250
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30251
COMMIT WORK;
 
30252
ROLLBACK WORK;
 
30253
        
 
30254
# check transactions-4 success:         1
 
30255
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30256
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30257
FROM t0_template source_tab
 
30258
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30259
        
 
30260
# check transactions-5 success:         1
 
30261
ROLLBACK WORK;
 
30262
        
 
30263
# check transactions-6 success:         1
 
30264
# INFO: Storage engine used for t1 seems to be transactional.
 
30265
COMMIT;
 
30266
        
 
30267
# check transactions-7 success:         1
 
30268
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30269
COMMIT WORK;
 
30270
SET @@session.sql_mode = 'traditional';
 
30271
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
30272
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30273
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
30274
'', '', 'was inserted' FROM t0_template
 
30275
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30276
ERROR 22012: Division by 0
 
30277
COMMIT;
 
30278
        
 
30279
# check transactions-8 success:         1
 
30280
# INFO: Storage engine used for t1 seems to be able to revert
 
30281
#       changes made by the failing statement.
 
30282
SET @@session.sql_mode = '';
 
30283
SET AUTOCOMMIT= 1;
 
30284
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30285
COMMIT WORK;
 
30286
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
30287
        
 
30288
# check special-1 success:      1
 
30289
UPDATE t1 SET f_charbig = '';
 
30290
        
 
30291
# check special-2 success:      1
 
30292
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
30293
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30294
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
30295
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30296
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30297
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30298
'just inserted' FROM t0_template
 
30299
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30300
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
30301
BEGIN
 
30302
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30303
f_charbig = 'updated by trigger'
 
30304
      WHERE f_int1 = new.f_int1;
 
30305
END|
 
30306
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30307
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30308
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30309
        
 
30310
# check trigger-1 success:      1
 
30311
DROP TRIGGER trg_1;
 
30312
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30313
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30314
f_charbig = 'just inserted'
 
30315
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30316
DELETE FROM t0_aux
 
30317
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30318
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30319
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30320
'just inserted' FROM t0_template
 
30321
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30322
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
30323
BEGIN
 
30324
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30325
f_charbig = 'updated by trigger'
 
30326
      WHERE f_int1 = new.f_int1;
 
30327
END|
 
30328
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30329
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30330
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30331
        
 
30332
# check trigger-2 success:      1
 
30333
DROP TRIGGER trg_1;
 
30334
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30335
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30336
f_charbig = 'just inserted'
 
30337
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30338
DELETE FROM t0_aux
 
30339
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30340
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30341
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30342
'just inserted' FROM t0_template
 
30343
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30344
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30345
BEGIN
 
30346
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30347
f_charbig = 'updated by trigger'
 
30348
      WHERE f_int1 = new.f_int1;
 
30349
END|
 
30350
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30351
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30352
        
 
30353
# check trigger-3 success:      1
 
30354
DROP TRIGGER trg_1;
 
30355
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30356
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30357
f_charbig = 'just inserted'
 
30358
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30359
DELETE FROM t0_aux
 
30360
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30361
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30362
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30363
'just inserted' FROM t0_template
 
30364
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30365
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30366
BEGIN
 
30367
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30368
f_charbig = 'updated by trigger'
 
30369
      WHERE f_int1 = - old.f_int1;
 
30370
END|
 
30371
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30372
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30373
        
 
30374
# check trigger-4 success:      1
 
30375
DROP TRIGGER trg_1;
 
30376
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30377
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30378
f_charbig = 'just inserted'
 
30379
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30380
DELETE FROM t0_aux
 
30381
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30382
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30383
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30384
'just inserted' FROM t0_template
 
30385
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30386
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30387
BEGIN
 
30388
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30389
f_charbig = 'updated by trigger'
 
30390
      WHERE f_int1 = new.f_int1;
 
30391
END|
 
30392
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30393
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30394
        
 
30395
# check trigger-5 success:      1
 
30396
DROP TRIGGER trg_1;
 
30397
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30398
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30399
f_charbig = 'just inserted'
 
30400
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30401
DELETE FROM t0_aux
 
30402
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30403
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30404
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30405
'just inserted' FROM t0_template
 
30406
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30407
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30408
BEGIN
 
30409
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30410
f_charbig = 'updated by trigger'
 
30411
      WHERE f_int1 = - old.f_int1;
 
30412
END|
 
30413
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30414
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30415
        
 
30416
# check trigger-6 success:      1
 
30417
DROP TRIGGER trg_1;
 
30418
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30419
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30420
f_charbig = 'just inserted'
 
30421
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30422
DELETE FROM t0_aux
 
30423
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30424
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30425
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30426
'just inserted' FROM t0_template
 
30427
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30428
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
30429
BEGIN
 
30430
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30431
f_charbig = 'updated by trigger'
 
30432
      WHERE f_int1 = - old.f_int1;
 
30433
END|
 
30434
DELETE FROM t0_aux
 
30435
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30436
        
 
30437
# check trigger-7 success:      1
 
30438
DROP TRIGGER trg_1;
 
30439
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30440
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30441
f_charbig = 'just inserted'
 
30442
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30443
DELETE FROM t0_aux
 
30444
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30445
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30446
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30447
'just inserted' FROM t0_template
 
30448
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30449
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
30450
BEGIN
 
30451
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30452
f_charbig = 'updated by trigger'
 
30453
      WHERE f_int1 = - old.f_int1;
 
30454
END|
 
30455
DELETE FROM t0_aux
 
30456
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30457
        
 
30458
# check trigger-8 success:      1
 
30459
DROP TRIGGER trg_1;
 
30460
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30461
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30462
f_charbig = 'just inserted'
 
30463
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30464
DELETE FROM t0_aux
 
30465
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30466
DELETE FROM t1
 
30467
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30468
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30469
BEGIN
 
30470
SET new.f_int1 = old.f_int1 + @max_row,
 
30471
new.f_int2 = old.f_int2 - @max_row,
 
30472
new.f_charbig = '####updated per update trigger####';
 
30473
END|
 
30474
UPDATE t1
 
30475
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30476
f_charbig = '####updated per update statement itself####';
 
30477
        
 
30478
# check trigger-9 success:      1
 
30479
DROP TRIGGER trg_2;
 
30480
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30481
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30482
f_charbig = CONCAT('===',f_char1,'===');
 
30483
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30484
BEGIN
 
30485
SET new.f_int1 = new.f_int1 + @max_row,
 
30486
new.f_int2 = new.f_int2 - @max_row,
 
30487
new.f_charbig = '####updated per update trigger####';
 
30488
END|
 
30489
UPDATE t1
 
30490
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30491
f_charbig = '####updated per update statement itself####';
 
30492
        
 
30493
# check trigger-10 success:     1
 
30494
DROP TRIGGER trg_2;
 
30495
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30496
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30497
f_charbig = CONCAT('===',f_char1,'===');
 
30498
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30499
BEGIN
 
30500
SET new.f_int1 = @my_max1 + @counter,
 
30501
new.f_int2 = @my_min2 - @counter,
 
30502
new.f_charbig = '####updated per insert trigger####';
 
30503
SET @counter = @counter + 1;
 
30504
END|
 
30505
SET @counter = 1;
 
30506
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30507
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30508
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30509
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30510
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30511
ORDER BY f_int1;
 
30512
DROP TRIGGER trg_3;
 
30513
        
 
30514
# check trigger-11 success:     1
 
30515
DELETE FROM t1
 
30516
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30517
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30518
AND f_charbig = '####updated per insert trigger####';
 
30519
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30520
BEGIN
 
30521
SET new.f_int1 = @my_max1 + @counter,
 
30522
new.f_int2 = @my_min2 - @counter,
 
30523
new.f_charbig = '####updated per insert trigger####';
 
30524
SET @counter = @counter + 1;
 
30525
END|
 
30526
SET @counter = 1;
 
30527
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30528
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
30529
SELECT CAST(f_int1 AS CHAR),
 
30530
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30531
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30532
ORDER BY f_int1;
 
30533
DROP TRIGGER trg_3;
 
30534
        
 
30535
# check trigger-12 success:     1
 
30536
DELETE FROM t1
 
30537
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30538
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30539
AND f_charbig = '####updated per insert trigger####';
 
30540
ANALYZE  TABLE t1;
 
30541
Table   Op      Msg_type        Msg_text
 
30542
test.t1 analyze status  OK
 
30543
CHECK    TABLE t1 EXTENDED;
 
30544
Table   Op      Msg_type        Msg_text
 
30545
test.t1 check   status  OK
 
30546
CHECKSUM TABLE t1 EXTENDED;
 
30547
Table   Checksum
 
30548
test.t1 <some_value>
 
30549
OPTIMIZE TABLE t1;
 
30550
Table   Op      Msg_type        Msg_text
 
30551
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
30552
test.t1 optimize        status  OK
 
30553
# check layout success:    1
 
30554
REPAIR   TABLE t1 EXTENDED;
 
30555
Table   Op      Msg_type        Msg_text
 
30556
test.t1 repair  note    The storage engine for the table doesn't support repair
 
30557
# check layout success:    1
 
30558
TRUNCATE t1;
 
30559
        
 
30560
# check TRUNCATE success:       1
 
30561
# check layout success:    1
 
30562
# End usability test (inc/partition_check.inc)
 
30563
DROP TABLE t1;
 
30564
CREATE TABLE t1 (
 
30565
f_int1 INTEGER,
 
30566
f_int2 INTEGER,
 
30567
f_char1 CHAR(20),
 
30568
f_char2 CHAR(20),
 
30569
f_charbig VARCHAR(1000)
 
30570
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
30571
)
 
30572
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
30573
(PARTITION parta VALUES LESS THAN (0),
 
30574
PARTITION partb VALUES LESS THAN (5),
 
30575
PARTITION partc VALUES LESS THAN (10),
 
30576
PARTITION partd VALUES LESS THAN (10 + 5),
 
30577
PARTITION parte VALUES LESS THAN (20),
 
30578
PARTITION partf VALUES LESS THAN (2147483646));
 
30579
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30580
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30581
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
30582
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
30583
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30584
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30585
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30586
# Start usability test (inc/partition_check.inc)
 
30587
create_command
 
30588
SHOW CREATE TABLE t1;
 
30589
Table   Create Table
 
30590
t1      CREATE TABLE `t1` (
 
30591
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
30592
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
30593
  `f_char1` char(20) DEFAULT NULL,
 
30594
  `f_char2` char(20) DEFAULT NULL,
 
30595
  `f_charbig` varchar(1000) DEFAULT NULL
 
30596
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
30597
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
 
30598
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
30599
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
30600
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
30601
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
30602
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
30603
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
30604
 
 
30605
# check prerequisites-1 success:    1
 
30606
# check COUNT(*) success:    1
 
30607
# check MIN/MAX(f_int1) success:    1
 
30608
# check MIN/MAX(f_int2) success:    1
 
30609
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30610
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30611
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
30612
WHERE f_int1 IN (2,3);
 
30613
# check prerequisites-3 success:    1
 
30614
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
30615
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
30616
# check read via f_int1 success: 1
 
30617
# check read via f_int2 success: 1
 
30618
        
 
30619
# check multiple-1 success:     1
 
30620
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
30621
        
 
30622
# check multiple-2 success:     1
 
30623
INSERT INTO t1 SELECT * FROM t0_template
 
30624
WHERE MOD(f_int1,3) = 0;
 
30625
        
 
30626
# check multiple-3 success:     1
 
30627
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
30628
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
30629
AND @max_row_div2 + @max_row_div4;
 
30630
        
 
30631
# check multiple-4 success:     1
 
30632
DELETE FROM t1
 
30633
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
30634
AND @max_row_div2 + @max_row_div4 + @max_row;
 
30635
        
 
30636
# check multiple-5 success:     1
 
30637
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
30638
INSERT INTO t1
 
30639
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30640
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30641
f_charbig = '#SINGLE#';
 
30642
        
 
30643
# check single-1 success:       1
 
30644
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
30645
INSERT INTO t1
 
30646
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30647
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30648
f_charbig = '#SINGLE#';
 
30649
        
 
30650
# check single-2 success:       1
 
30651
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
30652
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
30653
UPDATE t1 SET f_int1 = @cur_value2
 
30654
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
30655
        
 
30656
# check single-3 success:       1
 
30657
SET @cur_value1= -1;
 
30658
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
30659
UPDATE t1 SET f_int1 = @cur_value1
 
30660
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
30661
        
 
30662
# check single-4 success:       1
 
30663
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
30664
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
30665
        
 
30666
# check single-5 success:       1
 
30667
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
30668
        
 
30669
# check single-6 success:       1
 
30670
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
30671
ERROR HY000: Table has no partition for value 2147483647
 
30672
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
30673
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
30674
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
30675
f_charbig = '#NULL#';
 
30676
INSERT INTO t1
 
30677
SET f_int1 = NULL , f_int2 = -@max_row,
 
30678
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
30679
f_charbig = '#NULL#';
 
30680
ERROR 23000: Column 'f_int1' cannot be null
 
30681
# check null success:    1
 
30682
DELETE FROM t1
 
30683
WHERE f_int1 = 0 AND f_int2 = 0
 
30684
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
30685
AND f_charbig = '#NULL#';
 
30686
SET AUTOCOMMIT= 0;
 
30687
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30688
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30689
FROM t0_template source_tab
 
30690
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30691
        
 
30692
# check transactions-1 success:         1
 
30693
COMMIT WORK;
 
30694
        
 
30695
# check transactions-2 success:         1
 
30696
ROLLBACK WORK;
 
30697
        
 
30698
# check transactions-3 success:         1
 
30699
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30700
COMMIT WORK;
 
30701
ROLLBACK WORK;
 
30702
        
 
30703
# check transactions-4 success:         1
 
30704
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30705
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30706
FROM t0_template source_tab
 
30707
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30708
        
 
30709
# check transactions-5 success:         1
 
30710
ROLLBACK WORK;
 
30711
        
 
30712
# check transactions-6 success:         1
 
30713
# INFO: Storage engine used for t1 seems to be transactional.
 
30714
COMMIT;
 
30715
        
 
30716
# check transactions-7 success:         1
 
30717
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30718
COMMIT WORK;
 
30719
SET @@session.sql_mode = 'traditional';
 
30720
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
30721
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30722
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
30723
'', '', 'was inserted' FROM t0_template
 
30724
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30725
ERROR 22012: Division by 0
 
30726
COMMIT;
 
30727
        
 
30728
# check transactions-8 success:         1
 
30729
# INFO: Storage engine used for t1 seems to be able to revert
 
30730
#       changes made by the failing statement.
 
30731
SET @@session.sql_mode = '';
 
30732
SET AUTOCOMMIT= 1;
 
30733
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30734
COMMIT WORK;
 
30735
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
30736
        
 
30737
# check special-1 success:      1
 
30738
UPDATE t1 SET f_charbig = '';
 
30739
        
 
30740
# check special-2 success:      1
 
30741
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
30742
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30743
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
30744
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30745
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30746
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30747
'just inserted' FROM t0_template
 
30748
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30749
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
30750
BEGIN
 
30751
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30752
f_charbig = 'updated by trigger'
 
30753
      WHERE f_int1 = new.f_int1;
 
30754
END|
 
30755
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30756
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30757
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30758
        
 
30759
# check trigger-1 success:      1
 
30760
DROP TRIGGER trg_1;
 
30761
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30762
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30763
f_charbig = 'just inserted'
 
30764
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30765
DELETE FROM t0_aux
 
30766
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30767
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30768
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30769
'just inserted' FROM t0_template
 
30770
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30771
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
30772
BEGIN
 
30773
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30774
f_charbig = 'updated by trigger'
 
30775
      WHERE f_int1 = new.f_int1;
 
30776
END|
 
30777
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30778
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30779
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30780
        
 
30781
# check trigger-2 success:      1
 
30782
DROP TRIGGER trg_1;
 
30783
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30784
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30785
f_charbig = 'just inserted'
 
30786
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30787
DELETE FROM t0_aux
 
30788
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30789
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30790
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30791
'just inserted' FROM t0_template
 
30792
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30793
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30794
BEGIN
 
30795
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30796
f_charbig = 'updated by trigger'
 
30797
      WHERE f_int1 = new.f_int1;
 
30798
END|
 
30799
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30800
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30801
        
 
30802
# check trigger-3 success:      1
 
30803
DROP TRIGGER trg_1;
 
30804
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30805
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30806
f_charbig = 'just inserted'
 
30807
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30808
DELETE FROM t0_aux
 
30809
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30810
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30811
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30812
'just inserted' FROM t0_template
 
30813
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30814
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30815
BEGIN
 
30816
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30817
f_charbig = 'updated by trigger'
 
30818
      WHERE f_int1 = - old.f_int1;
 
30819
END|
 
30820
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30821
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30822
        
 
30823
# check trigger-4 success:      1
 
30824
DROP TRIGGER trg_1;
 
30825
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30826
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30827
f_charbig = 'just inserted'
 
30828
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30829
DELETE FROM t0_aux
 
30830
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30831
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30832
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30833
'just inserted' FROM t0_template
 
30834
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30835
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30836
BEGIN
 
30837
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30838
f_charbig = 'updated by trigger'
 
30839
      WHERE f_int1 = new.f_int1;
 
30840
END|
 
30841
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30842
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30843
        
 
30844
# check trigger-5 success:      1
 
30845
DROP TRIGGER trg_1;
 
30846
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30847
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30848
f_charbig = 'just inserted'
 
30849
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30850
DELETE FROM t0_aux
 
30851
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30852
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30853
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30854
'just inserted' FROM t0_template
 
30855
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30856
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30857
BEGIN
 
30858
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30859
f_charbig = 'updated by trigger'
 
30860
      WHERE f_int1 = - old.f_int1;
 
30861
END|
 
30862
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30863
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30864
        
 
30865
# check trigger-6 success:      1
 
30866
DROP TRIGGER trg_1;
 
30867
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30868
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30869
f_charbig = 'just inserted'
 
30870
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30871
DELETE FROM t0_aux
 
30872
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30873
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30874
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30875
'just inserted' FROM t0_template
 
30876
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30877
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
30878
BEGIN
 
30879
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30880
f_charbig = 'updated by trigger'
 
30881
      WHERE f_int1 = - old.f_int1;
 
30882
END|
 
30883
DELETE FROM t0_aux
 
30884
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30885
        
 
30886
# check trigger-7 success:      1
 
30887
DROP TRIGGER trg_1;
 
30888
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30889
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30890
f_charbig = 'just inserted'
 
30891
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30892
DELETE FROM t0_aux
 
30893
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30894
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30895
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30896
'just inserted' FROM t0_template
 
30897
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30898
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
30899
BEGIN
 
30900
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30901
f_charbig = 'updated by trigger'
 
30902
      WHERE f_int1 = - old.f_int1;
 
30903
END|
 
30904
DELETE FROM t0_aux
 
30905
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30906
        
 
30907
# check trigger-8 success:      1
 
30908
DROP TRIGGER trg_1;
 
30909
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30910
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30911
f_charbig = 'just inserted'
 
30912
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30913
DELETE FROM t0_aux
 
30914
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30915
DELETE FROM t1
 
30916
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30917
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30918
BEGIN
 
30919
SET new.f_int1 = old.f_int1 + @max_row,
 
30920
new.f_int2 = old.f_int2 - @max_row,
 
30921
new.f_charbig = '####updated per update trigger####';
 
30922
END|
 
30923
UPDATE t1
 
30924
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30925
f_charbig = '####updated per update statement itself####';
 
30926
        
 
30927
# check trigger-9 success:      1
 
30928
DROP TRIGGER trg_2;
 
30929
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30930
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30931
f_charbig = CONCAT('===',f_char1,'===');
 
30932
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30933
BEGIN
 
30934
SET new.f_int1 = new.f_int1 + @max_row,
 
30935
new.f_int2 = new.f_int2 - @max_row,
 
30936
new.f_charbig = '####updated per update trigger####';
 
30937
END|
 
30938
UPDATE t1
 
30939
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30940
f_charbig = '####updated per update statement itself####';
 
30941
        
 
30942
# check trigger-10 success:     1
 
30943
DROP TRIGGER trg_2;
 
30944
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30945
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30946
f_charbig = CONCAT('===',f_char1,'===');
 
30947
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30948
BEGIN
 
30949
SET new.f_int1 = @my_max1 + @counter,
 
30950
new.f_int2 = @my_min2 - @counter,
 
30951
new.f_charbig = '####updated per insert trigger####';
 
30952
SET @counter = @counter + 1;
 
30953
END|
 
30954
SET @counter = 1;
 
30955
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30956
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30957
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30958
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30959
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30960
ORDER BY f_int1;
 
30961
DROP TRIGGER trg_3;
 
30962
        
 
30963
# check trigger-11 success:     1
 
30964
DELETE FROM t1
 
30965
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30966
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30967
AND f_charbig = '####updated per insert trigger####';
 
30968
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30969
BEGIN
 
30970
SET new.f_int1 = @my_max1 + @counter,
 
30971
new.f_int2 = @my_min2 - @counter,
 
30972
new.f_charbig = '####updated per insert trigger####';
 
30973
SET @counter = @counter + 1;
 
30974
END|
 
30975
SET @counter = 1;
 
30976
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30977
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
30978
SELECT CAST(f_int1 AS CHAR),
 
30979
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30980
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30981
ORDER BY f_int1;
 
30982
DROP TRIGGER trg_3;
 
30983
        
 
30984
# check trigger-12 success:     1
 
30985
DELETE FROM t1
 
30986
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30987
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30988
AND f_charbig = '####updated per insert trigger####';
 
30989
ANALYZE  TABLE t1;
 
30990
Table   Op      Msg_type        Msg_text
 
30991
test.t1 analyze status  OK
 
30992
CHECK    TABLE t1 EXTENDED;
 
30993
Table   Op      Msg_type        Msg_text
 
30994
test.t1 check   status  OK
 
30995
CHECKSUM TABLE t1 EXTENDED;
 
30996
Table   Checksum
 
30997
test.t1 <some_value>
 
30998
OPTIMIZE TABLE t1;
 
30999
Table   Op      Msg_type        Msg_text
 
31000
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
31001
test.t1 optimize        status  OK
 
31002
# check layout success:    1
 
31003
REPAIR   TABLE t1 EXTENDED;
 
31004
Table   Op      Msg_type        Msg_text
 
31005
test.t1 repair  note    The storage engine for the table doesn't support repair
 
31006
# check layout success:    1
 
31007
TRUNCATE t1;
 
31008
        
 
31009
# check TRUNCATE success:       1
 
31010
# check layout success:    1
 
31011
# End usability test (inc/partition_check.inc)
 
31012
DROP TABLE t1;
 
31013
CREATE TABLE t1 (
 
31014
f_int1 INTEGER,
 
31015
f_int2 INTEGER,
 
31016
f_char1 CHAR(20),
 
31017
f_char2 CHAR(20),
 
31018
f_charbig VARCHAR(1000)
 
31019
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
31020
)
 
31021
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
31022
(PARTITION parta VALUES LESS THAN (0),
 
31023
PARTITION partb VALUES LESS THAN (5),
 
31024
PARTITION partc VALUES LESS THAN (10),
 
31025
PARTITION partd VALUES LESS THAN (2147483646));
 
31026
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31027
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31028
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31029
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
31030
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31031
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31032
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31033
# Start usability test (inc/partition_check.inc)
 
31034
create_command
 
31035
SHOW CREATE TABLE t1;
 
31036
Table   Create Table
 
31037
t1      CREATE TABLE `t1` (
 
31038
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
31039
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
31040
  `f_char1` char(20) DEFAULT NULL,
 
31041
  `f_char2` char(20) DEFAULT NULL,
 
31042
  `f_charbig` varchar(1000) DEFAULT NULL
 
31043
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
31044
/*!50100 PARTITION BY RANGE (f_int1)
 
31045
SUBPARTITION BY HASH (f_int2)
 
31046
SUBPARTITIONS 2
 
31047
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
31048
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
31049
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
31050
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
31051
 
 
31052
# check prerequisites-1 success:    1
 
31053
# check COUNT(*) success:    1
 
31054
# check MIN/MAX(f_int1) success:    1
 
31055
# check MIN/MAX(f_int2) success:    1
 
31056
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31057
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31058
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
31059
WHERE f_int1 IN (2,3);
 
31060
# check prerequisites-3 success:    1
 
31061
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
31062
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
31063
# check read via f_int1 success: 1
 
31064
# check read via f_int2 success: 1
 
31065
        
 
31066
# check multiple-1 success:     1
 
31067
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
31068
        
 
31069
# check multiple-2 success:     1
 
31070
INSERT INTO t1 SELECT * FROM t0_template
 
31071
WHERE MOD(f_int1,3) = 0;
 
31072
        
 
31073
# check multiple-3 success:     1
 
31074
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
31075
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
31076
AND @max_row_div2 + @max_row_div4;
 
31077
        
 
31078
# check multiple-4 success:     1
 
31079
DELETE FROM t1
 
31080
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
31081
AND @max_row_div2 + @max_row_div4 + @max_row;
 
31082
        
 
31083
# check multiple-5 success:     1
 
31084
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
31085
INSERT INTO t1
 
31086
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31087
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31088
f_charbig = '#SINGLE#';
 
31089
        
 
31090
# check single-1 success:       1
 
31091
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
31092
INSERT INTO t1
 
31093
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31094
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31095
f_charbig = '#SINGLE#';
 
31096
        
 
31097
# check single-2 success:       1
 
31098
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
31099
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
31100
UPDATE t1 SET f_int1 = @cur_value2
 
31101
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
31102
        
 
31103
# check single-3 success:       1
 
31104
SET @cur_value1= -1;
 
31105
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
31106
UPDATE t1 SET f_int1 = @cur_value1
 
31107
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
31108
        
 
31109
# check single-4 success:       1
 
31110
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
31111
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
31112
        
 
31113
# check single-5 success:       1
 
31114
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
31115
        
 
31116
# check single-6 success:       1
 
31117
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
31118
ERROR HY000: Table has no partition for value 2147483647
 
31119
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
31120
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
31121
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
31122
f_charbig = '#NULL#';
 
31123
INSERT INTO t1
 
31124
SET f_int1 = NULL , f_int2 = -@max_row,
 
31125
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
31126
f_charbig = '#NULL#';
 
31127
ERROR 23000: Column 'f_int1' cannot be null
 
31128
# check null success:    1
 
31129
DELETE FROM t1
 
31130
WHERE f_int1 = 0 AND f_int2 = 0
 
31131
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
31132
AND f_charbig = '#NULL#';
 
31133
SET AUTOCOMMIT= 0;
 
31134
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31135
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31136
FROM t0_template source_tab
 
31137
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31138
        
 
31139
# check transactions-1 success:         1
 
31140
COMMIT WORK;
 
31141
        
 
31142
# check transactions-2 success:         1
 
31143
ROLLBACK WORK;
 
31144
        
 
31145
# check transactions-3 success:         1
 
31146
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31147
COMMIT WORK;
 
31148
ROLLBACK WORK;
 
31149
        
 
31150
# check transactions-4 success:         1
 
31151
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31152
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31153
FROM t0_template source_tab
 
31154
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31155
        
 
31156
# check transactions-5 success:         1
 
31157
ROLLBACK WORK;
 
31158
        
 
31159
# check transactions-6 success:         1
 
31160
# INFO: Storage engine used for t1 seems to be transactional.
 
31161
COMMIT;
 
31162
        
 
31163
# check transactions-7 success:         1
 
31164
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31165
COMMIT WORK;
 
31166
SET @@session.sql_mode = 'traditional';
 
31167
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
31168
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31169
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
31170
'', '', 'was inserted' FROM t0_template
 
31171
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31172
ERROR 22012: Division by 0
 
31173
COMMIT;
 
31174
        
 
31175
# check transactions-8 success:         1
 
31176
# INFO: Storage engine used for t1 seems to be able to revert
 
31177
#       changes made by the failing statement.
 
31178
SET @@session.sql_mode = '';
 
31179
SET AUTOCOMMIT= 1;
 
31180
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31181
COMMIT WORK;
 
31182
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
31183
        
 
31184
# check special-1 success:      1
 
31185
UPDATE t1 SET f_charbig = '';
 
31186
        
 
31187
# check special-2 success:      1
 
31188
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
31189
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31190
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
31191
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31192
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31193
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31194
'just inserted' FROM t0_template
 
31195
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31196
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
31197
BEGIN
 
31198
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31199
f_charbig = 'updated by trigger'
 
31200
      WHERE f_int1 = new.f_int1;
 
31201
END|
 
31202
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31203
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31204
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31205
        
 
31206
# check trigger-1 success:      1
 
31207
DROP TRIGGER trg_1;
 
31208
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31209
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31210
f_charbig = 'just inserted'
 
31211
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31212
DELETE FROM t0_aux
 
31213
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31214
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31215
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31216
'just inserted' FROM t0_template
 
31217
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31218
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
31219
BEGIN
 
31220
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31221
f_charbig = 'updated by trigger'
 
31222
      WHERE f_int1 = new.f_int1;
 
31223
END|
 
31224
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31225
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31226
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31227
        
 
31228
# check trigger-2 success:      1
 
31229
DROP TRIGGER trg_1;
 
31230
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31231
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31232
f_charbig = 'just inserted'
 
31233
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31234
DELETE FROM t0_aux
 
31235
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31236
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31237
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31238
'just inserted' FROM t0_template
 
31239
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31240
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31241
BEGIN
 
31242
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31243
f_charbig = 'updated by trigger'
 
31244
      WHERE f_int1 = new.f_int1;
 
31245
END|
 
31246
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31247
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31248
        
 
31249
# check trigger-3 success:      1
 
31250
DROP TRIGGER trg_1;
 
31251
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31252
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31253
f_charbig = 'just inserted'
 
31254
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31255
DELETE FROM t0_aux
 
31256
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31257
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31258
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31259
'just inserted' FROM t0_template
 
31260
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31261
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31262
BEGIN
 
31263
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31264
f_charbig = 'updated by trigger'
 
31265
      WHERE f_int1 = - old.f_int1;
 
31266
END|
 
31267
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31268
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31269
        
 
31270
# check trigger-4 success:      1
 
31271
DROP TRIGGER trg_1;
 
31272
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31273
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31274
f_charbig = 'just inserted'
 
31275
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31276
DELETE FROM t0_aux
 
31277
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31278
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31279
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31280
'just inserted' FROM t0_template
 
31281
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31282
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31283
BEGIN
 
31284
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31285
f_charbig = 'updated by trigger'
 
31286
      WHERE f_int1 = new.f_int1;
 
31287
END|
 
31288
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31289
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31290
        
 
31291
# check trigger-5 success:      1
 
31292
DROP TRIGGER trg_1;
 
31293
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31294
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31295
f_charbig = 'just inserted'
 
31296
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31297
DELETE FROM t0_aux
 
31298
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31299
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31300
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31301
'just inserted' FROM t0_template
 
31302
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31303
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31304
BEGIN
 
31305
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31306
f_charbig = 'updated by trigger'
 
31307
      WHERE f_int1 = - old.f_int1;
 
31308
END|
 
31309
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31310
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31311
        
 
31312
# check trigger-6 success:      1
 
31313
DROP TRIGGER trg_1;
 
31314
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31315
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31316
f_charbig = 'just inserted'
 
31317
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31318
DELETE FROM t0_aux
 
31319
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31320
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31321
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31322
'just inserted' FROM t0_template
 
31323
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31324
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
31325
BEGIN
 
31326
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31327
f_charbig = 'updated by trigger'
 
31328
      WHERE f_int1 = - old.f_int1;
 
31329
END|
 
31330
DELETE FROM t0_aux
 
31331
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31332
        
 
31333
# check trigger-7 success:      1
 
31334
DROP TRIGGER trg_1;
 
31335
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31336
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31337
f_charbig = 'just inserted'
 
31338
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31339
DELETE FROM t0_aux
 
31340
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31341
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31342
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31343
'just inserted' FROM t0_template
 
31344
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31345
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
31346
BEGIN
 
31347
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31348
f_charbig = 'updated by trigger'
 
31349
      WHERE f_int1 = - old.f_int1;
 
31350
END|
 
31351
DELETE FROM t0_aux
 
31352
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31353
        
 
31354
# check trigger-8 success:      1
 
31355
DROP TRIGGER trg_1;
 
31356
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31357
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31358
f_charbig = 'just inserted'
 
31359
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31360
DELETE FROM t0_aux
 
31361
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31362
DELETE FROM t1
 
31363
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31364
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31365
BEGIN
 
31366
SET new.f_int1 = old.f_int1 + @max_row,
 
31367
new.f_int2 = old.f_int2 - @max_row,
 
31368
new.f_charbig = '####updated per update trigger####';
 
31369
END|
 
31370
UPDATE t1
 
31371
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31372
f_charbig = '####updated per update statement itself####';
 
31373
        
 
31374
# check trigger-9 success:      1
 
31375
DROP TRIGGER trg_2;
 
31376
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31377
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31378
f_charbig = CONCAT('===',f_char1,'===');
 
31379
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31380
BEGIN
 
31381
SET new.f_int1 = new.f_int1 + @max_row,
 
31382
new.f_int2 = new.f_int2 - @max_row,
 
31383
new.f_charbig = '####updated per update trigger####';
 
31384
END|
 
31385
UPDATE t1
 
31386
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31387
f_charbig = '####updated per update statement itself####';
 
31388
        
 
31389
# check trigger-10 success:     1
 
31390
DROP TRIGGER trg_2;
 
31391
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31392
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31393
f_charbig = CONCAT('===',f_char1,'===');
 
31394
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31395
BEGIN
 
31396
SET new.f_int1 = @my_max1 + @counter,
 
31397
new.f_int2 = @my_min2 - @counter,
 
31398
new.f_charbig = '####updated per insert trigger####';
 
31399
SET @counter = @counter + 1;
 
31400
END|
 
31401
SET @counter = 1;
 
31402
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31403
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31404
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31405
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31406
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31407
ORDER BY f_int1;
 
31408
DROP TRIGGER trg_3;
 
31409
        
 
31410
# check trigger-11 success:     1
 
31411
DELETE FROM t1
 
31412
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31413
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31414
AND f_charbig = '####updated per insert trigger####';
 
31415
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31416
BEGIN
 
31417
SET new.f_int1 = @my_max1 + @counter,
 
31418
new.f_int2 = @my_min2 - @counter,
 
31419
new.f_charbig = '####updated per insert trigger####';
 
31420
SET @counter = @counter + 1;
 
31421
END|
 
31422
SET @counter = 1;
 
31423
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31424
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
31425
SELECT CAST(f_int1 AS CHAR),
 
31426
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31427
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31428
ORDER BY f_int1;
 
31429
DROP TRIGGER trg_3;
 
31430
        
 
31431
# check trigger-12 success:     1
 
31432
DELETE FROM t1
 
31433
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31434
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31435
AND f_charbig = '####updated per insert trigger####';
 
31436
ANALYZE  TABLE t1;
 
31437
Table   Op      Msg_type        Msg_text
 
31438
test.t1 analyze status  OK
 
31439
CHECK    TABLE t1 EXTENDED;
 
31440
Table   Op      Msg_type        Msg_text
 
31441
test.t1 check   status  OK
 
31442
CHECKSUM TABLE t1 EXTENDED;
 
31443
Table   Checksum
 
31444
test.t1 <some_value>
 
31445
OPTIMIZE TABLE t1;
 
31446
Table   Op      Msg_type        Msg_text
 
31447
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
31448
test.t1 optimize        status  OK
 
31449
# check layout success:    1
 
31450
REPAIR   TABLE t1 EXTENDED;
 
31451
Table   Op      Msg_type        Msg_text
 
31452
test.t1 repair  note    The storage engine for the table doesn't support repair
 
31453
# check layout success:    1
 
31454
TRUNCATE t1;
 
31455
        
 
31456
# check TRUNCATE success:       1
 
31457
# check layout success:    1
 
31458
# End usability test (inc/partition_check.inc)
 
31459
DROP TABLE t1;
 
31460
CREATE TABLE t1 (
 
31461
f_int1 INTEGER,
 
31462
f_int2 INTEGER,
 
31463
f_char1 CHAR(20),
 
31464
f_char2 CHAR(20),
 
31465
f_charbig VARCHAR(1000)
 
31466
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
31467
)
 
31468
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
31469
(PARTITION part1 VALUES LESS THAN (0)
 
31470
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
31471
PARTITION part2 VALUES LESS THAN (5)
 
31472
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
31473
PARTITION part3 VALUES LESS THAN (10)
 
31474
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
31475
PARTITION part4 VALUES LESS THAN (2147483646)
 
31476
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
31477
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31478
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31479
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31480
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
31481
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31482
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31483
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31484
# Start usability test (inc/partition_check.inc)
 
31485
create_command
 
31486
SHOW CREATE TABLE t1;
 
31487
Table   Create Table
 
31488
t1      CREATE TABLE `t1` (
 
31489
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
31490
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
31491
  `f_char1` char(20) DEFAULT NULL,
 
31492
  `f_char2` char(20) DEFAULT NULL,
 
31493
  `f_charbig` varchar(1000) DEFAULT NULL
 
31494
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
31495
/*!50100 PARTITION BY RANGE (f_int1)
 
31496
SUBPARTITION BY KEY (f_int2)
 
31497
(PARTITION part1 VALUES LESS THAN (0)
 
31498
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
31499
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
31500
 PARTITION part2 VALUES LESS THAN (5)
 
31501
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
31502
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
31503
 PARTITION part3 VALUES LESS THAN (10)
 
31504
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
31505
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
31506
 PARTITION part4 VALUES LESS THAN (2147483646)
 
31507
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
31508
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
31509
 
 
31510
# check prerequisites-1 success:    1
 
31511
# check COUNT(*) success:    1
 
31512
# check MIN/MAX(f_int1) success:    1
 
31513
# check MIN/MAX(f_int2) success:    1
 
31514
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31515
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31516
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
31517
WHERE f_int1 IN (2,3);
 
31518
# check prerequisites-3 success:    1
 
31519
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
31520
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
31521
# check read via f_int1 success: 1
 
31522
# check read via f_int2 success: 1
 
31523
        
 
31524
# check multiple-1 success:     1
 
31525
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
31526
        
 
31527
# check multiple-2 success:     1
 
31528
INSERT INTO t1 SELECT * FROM t0_template
 
31529
WHERE MOD(f_int1,3) = 0;
 
31530
        
 
31531
# check multiple-3 success:     1
 
31532
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
31533
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
31534
AND @max_row_div2 + @max_row_div4;
 
31535
        
 
31536
# check multiple-4 success:     1
 
31537
DELETE FROM t1
 
31538
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
31539
AND @max_row_div2 + @max_row_div4 + @max_row;
 
31540
        
 
31541
# check multiple-5 success:     1
 
31542
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
31543
INSERT INTO t1
 
31544
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31545
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31546
f_charbig = '#SINGLE#';
 
31547
        
 
31548
# check single-1 success:       1
 
31549
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
31550
INSERT INTO t1
 
31551
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31552
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31553
f_charbig = '#SINGLE#';
 
31554
        
 
31555
# check single-2 success:       1
 
31556
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
31557
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
31558
UPDATE t1 SET f_int1 = @cur_value2
 
31559
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
31560
        
 
31561
# check single-3 success:       1
 
31562
SET @cur_value1= -1;
 
31563
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
31564
UPDATE t1 SET f_int1 = @cur_value1
 
31565
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
31566
        
 
31567
# check single-4 success:       1
 
31568
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
31569
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
31570
        
 
31571
# check single-5 success:       1
 
31572
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
31573
        
 
31574
# check single-6 success:       1
 
31575
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
31576
ERROR HY000: Table has no partition for value 2147483647
 
31577
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
31578
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
31579
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
31580
f_charbig = '#NULL#';
 
31581
INSERT INTO t1
 
31582
SET f_int1 = NULL , f_int2 = -@max_row,
 
31583
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
31584
f_charbig = '#NULL#';
 
31585
ERROR 23000: Column 'f_int1' cannot be null
 
31586
# check null success:    1
 
31587
DELETE FROM t1
 
31588
WHERE f_int1 = 0 AND f_int2 = 0
 
31589
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
31590
AND f_charbig = '#NULL#';
 
31591
SET AUTOCOMMIT= 0;
 
31592
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31593
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31594
FROM t0_template source_tab
 
31595
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31596
        
 
31597
# check transactions-1 success:         1
 
31598
COMMIT WORK;
 
31599
        
 
31600
# check transactions-2 success:         1
 
31601
ROLLBACK WORK;
 
31602
        
 
31603
# check transactions-3 success:         1
 
31604
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31605
COMMIT WORK;
 
31606
ROLLBACK WORK;
 
31607
        
 
31608
# check transactions-4 success:         1
 
31609
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31610
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31611
FROM t0_template source_tab
 
31612
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31613
        
 
31614
# check transactions-5 success:         1
 
31615
ROLLBACK WORK;
 
31616
        
 
31617
# check transactions-6 success:         1
 
31618
# INFO: Storage engine used for t1 seems to be transactional.
 
31619
COMMIT;
 
31620
        
 
31621
# check transactions-7 success:         1
 
31622
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31623
COMMIT WORK;
 
31624
SET @@session.sql_mode = 'traditional';
 
31625
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
31626
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31627
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
31628
'', '', 'was inserted' FROM t0_template
 
31629
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31630
ERROR 22012: Division by 0
 
31631
COMMIT;
 
31632
        
 
31633
# check transactions-8 success:         1
 
31634
# INFO: Storage engine used for t1 seems to be able to revert
 
31635
#       changes made by the failing statement.
 
31636
SET @@session.sql_mode = '';
 
31637
SET AUTOCOMMIT= 1;
 
31638
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31639
COMMIT WORK;
 
31640
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
31641
        
 
31642
# check special-1 success:      1
 
31643
UPDATE t1 SET f_charbig = '';
 
31644
        
 
31645
# check special-2 success:      1
 
31646
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
31647
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31648
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
31649
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31650
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31651
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31652
'just inserted' FROM t0_template
 
31653
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31654
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
31655
BEGIN
 
31656
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31657
f_charbig = 'updated by trigger'
 
31658
      WHERE f_int1 = new.f_int1;
 
31659
END|
 
31660
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31661
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31662
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31663
        
 
31664
# check trigger-1 success:      1
 
31665
DROP TRIGGER trg_1;
 
31666
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31667
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31668
f_charbig = 'just inserted'
 
31669
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31670
DELETE FROM t0_aux
 
31671
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31672
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31673
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31674
'just inserted' FROM t0_template
 
31675
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31676
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
31677
BEGIN
 
31678
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31679
f_charbig = 'updated by trigger'
 
31680
      WHERE f_int1 = new.f_int1;
 
31681
END|
 
31682
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31683
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31684
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31685
        
 
31686
# check trigger-2 success:      1
 
31687
DROP TRIGGER trg_1;
 
31688
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31689
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31690
f_charbig = 'just inserted'
 
31691
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31692
DELETE FROM t0_aux
 
31693
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31694
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31695
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31696
'just inserted' FROM t0_template
 
31697
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31698
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31699
BEGIN
 
31700
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31701
f_charbig = 'updated by trigger'
 
31702
      WHERE f_int1 = new.f_int1;
 
31703
END|
 
31704
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31705
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31706
        
 
31707
# check trigger-3 success:      1
 
31708
DROP TRIGGER trg_1;
 
31709
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31710
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31711
f_charbig = 'just inserted'
 
31712
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31713
DELETE FROM t0_aux
 
31714
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31715
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31716
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31717
'just inserted' FROM t0_template
 
31718
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31719
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31720
BEGIN
 
31721
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31722
f_charbig = 'updated by trigger'
 
31723
      WHERE f_int1 = - old.f_int1;
 
31724
END|
 
31725
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31726
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31727
        
 
31728
# check trigger-4 success:      1
 
31729
DROP TRIGGER trg_1;
 
31730
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31731
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31732
f_charbig = 'just inserted'
 
31733
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31734
DELETE FROM t0_aux
 
31735
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31736
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31737
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31738
'just inserted' FROM t0_template
 
31739
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31740
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31741
BEGIN
 
31742
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31743
f_charbig = 'updated by trigger'
 
31744
      WHERE f_int1 = new.f_int1;
 
31745
END|
 
31746
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31747
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31748
        
 
31749
# check trigger-5 success:      1
 
31750
DROP TRIGGER trg_1;
 
31751
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31752
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31753
f_charbig = 'just inserted'
 
31754
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31755
DELETE FROM t0_aux
 
31756
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31757
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31758
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31759
'just inserted' FROM t0_template
 
31760
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31761
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31762
BEGIN
 
31763
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31764
f_charbig = 'updated by trigger'
 
31765
      WHERE f_int1 = - old.f_int1;
 
31766
END|
 
31767
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31768
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31769
        
 
31770
# check trigger-6 success:      1
 
31771
DROP TRIGGER trg_1;
 
31772
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31773
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31774
f_charbig = 'just inserted'
 
31775
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31776
DELETE FROM t0_aux
 
31777
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31778
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31779
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31780
'just inserted' FROM t0_template
 
31781
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31782
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
31783
BEGIN
 
31784
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31785
f_charbig = 'updated by trigger'
 
31786
      WHERE f_int1 = - old.f_int1;
 
31787
END|
 
31788
DELETE FROM t0_aux
 
31789
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31790
        
 
31791
# check trigger-7 success:      1
 
31792
DROP TRIGGER trg_1;
 
31793
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31794
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31795
f_charbig = 'just inserted'
 
31796
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31797
DELETE FROM t0_aux
 
31798
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31799
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31800
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31801
'just inserted' FROM t0_template
 
31802
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31803
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
31804
BEGIN
 
31805
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31806
f_charbig = 'updated by trigger'
 
31807
      WHERE f_int1 = - old.f_int1;
 
31808
END|
 
31809
DELETE FROM t0_aux
 
31810
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31811
        
 
31812
# check trigger-8 success:      1
 
31813
DROP TRIGGER trg_1;
 
31814
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31815
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31816
f_charbig = 'just inserted'
 
31817
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31818
DELETE FROM t0_aux
 
31819
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31820
DELETE FROM t1
 
31821
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31822
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31823
BEGIN
 
31824
SET new.f_int1 = old.f_int1 + @max_row,
 
31825
new.f_int2 = old.f_int2 - @max_row,
 
31826
new.f_charbig = '####updated per update trigger####';
 
31827
END|
 
31828
UPDATE t1
 
31829
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31830
f_charbig = '####updated per update statement itself####';
 
31831
        
 
31832
# check trigger-9 success:      1
 
31833
DROP TRIGGER trg_2;
 
31834
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31835
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31836
f_charbig = CONCAT('===',f_char1,'===');
 
31837
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31838
BEGIN
 
31839
SET new.f_int1 = new.f_int1 + @max_row,
 
31840
new.f_int2 = new.f_int2 - @max_row,
 
31841
new.f_charbig = '####updated per update trigger####';
 
31842
END|
 
31843
UPDATE t1
 
31844
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31845
f_charbig = '####updated per update statement itself####';
 
31846
        
 
31847
# check trigger-10 success:     1
 
31848
DROP TRIGGER trg_2;
 
31849
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31850
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31851
f_charbig = CONCAT('===',f_char1,'===');
 
31852
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31853
BEGIN
 
31854
SET new.f_int1 = @my_max1 + @counter,
 
31855
new.f_int2 = @my_min2 - @counter,
 
31856
new.f_charbig = '####updated per insert trigger####';
 
31857
SET @counter = @counter + 1;
 
31858
END|
 
31859
SET @counter = 1;
 
31860
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31861
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31862
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31863
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31864
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31865
ORDER BY f_int1;
 
31866
DROP TRIGGER trg_3;
 
31867
        
 
31868
# check trigger-11 success:     1
 
31869
DELETE FROM t1
 
31870
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31871
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31872
AND f_charbig = '####updated per insert trigger####';
 
31873
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31874
BEGIN
 
31875
SET new.f_int1 = @my_max1 + @counter,
 
31876
new.f_int2 = @my_min2 - @counter,
 
31877
new.f_charbig = '####updated per insert trigger####';
 
31878
SET @counter = @counter + 1;
 
31879
END|
 
31880
SET @counter = 1;
 
31881
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31882
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
31883
SELECT CAST(f_int1 AS CHAR),
 
31884
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31885
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31886
ORDER BY f_int1;
 
31887
DROP TRIGGER trg_3;
 
31888
        
 
31889
# check trigger-12 success:     1
 
31890
DELETE FROM t1
 
31891
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31892
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31893
AND f_charbig = '####updated per insert trigger####';
 
31894
ANALYZE  TABLE t1;
 
31895
Table   Op      Msg_type        Msg_text
 
31896
test.t1 analyze status  OK
 
31897
CHECK    TABLE t1 EXTENDED;
 
31898
Table   Op      Msg_type        Msg_text
 
31899
test.t1 check   status  OK
 
31900
CHECKSUM TABLE t1 EXTENDED;
 
31901
Table   Checksum
 
31902
test.t1 <some_value>
 
31903
OPTIMIZE TABLE t1;
 
31904
Table   Op      Msg_type        Msg_text
 
31905
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
31906
test.t1 optimize        status  OK
 
31907
# check layout success:    1
 
31908
REPAIR   TABLE t1 EXTENDED;
 
31909
Table   Op      Msg_type        Msg_text
 
31910
test.t1 repair  note    The storage engine for the table doesn't support repair
 
31911
# check layout success:    1
 
31912
TRUNCATE t1;
 
31913
        
 
31914
# check TRUNCATE success:       1
 
31915
# check layout success:    1
 
31916
# End usability test (inc/partition_check.inc)
 
31917
DROP TABLE t1;
 
31918
CREATE TABLE t1 (
 
31919
f_int1 INTEGER,
 
31920
f_int2 INTEGER,
 
31921
f_char1 CHAR(20),
 
31922
f_char2 CHAR(20),
 
31923
f_charbig VARCHAR(1000)
 
31924
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
31925
)
 
31926
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
31927
(PARTITION part1 VALUES IN (0)
 
31928
(SUBPARTITION sp11, SUBPARTITION sp12),
 
31929
PARTITION part2 VALUES IN (1)
 
31930
(SUBPARTITION sp21, SUBPARTITION sp22),
 
31931
PARTITION part3 VALUES IN (2)
 
31932
(SUBPARTITION sp31, SUBPARTITION sp32),
 
31933
PARTITION part4 VALUES IN (NULL)
 
31934
(SUBPARTITION sp41, SUBPARTITION sp42));
 
31935
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31936
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31937
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31938
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
31939
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31940
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31941
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31942
# Start usability test (inc/partition_check.inc)
 
31943
create_command
 
31944
SHOW CREATE TABLE t1;
 
31945
Table   Create Table
 
31946
t1      CREATE TABLE `t1` (
 
31947
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
31948
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
31949
  `f_char1` char(20) DEFAULT NULL,
 
31950
  `f_char2` char(20) DEFAULT NULL,
 
31951
  `f_charbig` varchar(1000) DEFAULT NULL
 
31952
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
31953
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
31954
SUBPARTITION BY HASH (f_int2 + 1)
 
31955
(PARTITION part1 VALUES IN (0)
 
31956
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
31957
  SUBPARTITION sp12 ENGINE = InnoDB),
 
31958
 PARTITION part2 VALUES IN (1)
 
31959
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
31960
  SUBPARTITION sp22 ENGINE = InnoDB),
 
31961
 PARTITION part3 VALUES IN (2)
 
31962
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
31963
  SUBPARTITION sp32 ENGINE = InnoDB),
 
31964
 PARTITION part4 VALUES IN (NULL)
 
31965
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
31966
  SUBPARTITION sp42 ENGINE = InnoDB)) */
 
31967
 
 
31968
# check prerequisites-1 success:    1
 
31969
# check COUNT(*) success:    1
 
31970
# check MIN/MAX(f_int1) success:    1
 
31971
# check MIN/MAX(f_int2) success:    1
 
31972
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31973
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31974
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
31975
WHERE f_int1 IN (2,3);
 
31976
# check prerequisites-3 success:    1
 
31977
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
31978
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
31979
# check read via f_int1 success: 1
 
31980
# check read via f_int2 success: 1
 
31981
        
 
31982
# check multiple-1 success:     1
 
31983
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
31984
        
 
31985
# check multiple-2 success:     1
 
31986
INSERT INTO t1 SELECT * FROM t0_template
 
31987
WHERE MOD(f_int1,3) = 0;
 
31988
        
 
31989
# check multiple-3 success:     1
 
31990
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
31991
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
31992
AND @max_row_div2 + @max_row_div4;
 
31993
        
 
31994
# check multiple-4 success:     1
 
31995
DELETE FROM t1
 
31996
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
31997
AND @max_row_div2 + @max_row_div4 + @max_row;
 
31998
        
 
31999
# check multiple-5 success:     1
 
32000
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
32001
INSERT INTO t1
 
32002
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32003
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32004
f_charbig = '#SINGLE#';
 
32005
        
 
32006
# check single-1 success:       1
 
32007
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
32008
INSERT INTO t1
 
32009
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32010
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32011
f_charbig = '#SINGLE#';
 
32012
        
 
32013
# check single-2 success:       1
 
32014
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
32015
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
32016
UPDATE t1 SET f_int1 = @cur_value2
 
32017
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
32018
        
 
32019
# check single-3 success:       1
 
32020
SET @cur_value1= -1;
 
32021
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
32022
UPDATE t1 SET f_int1 = @cur_value1
 
32023
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
32024
        
 
32025
# check single-4 success:       1
 
32026
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
32027
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
32028
        
 
32029
# check single-5 success:       1
 
32030
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
32031
        
 
32032
# check single-6 success:       1
 
32033
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
32034
        
 
32035
# check single-7 success:       1
 
32036
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
32037
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
32038
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
32039
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
32040
f_charbig = '#NULL#';
 
32041
INSERT INTO t1
 
32042
SET f_int1 = NULL , f_int2 = -@max_row,
 
32043
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
32044
f_charbig = '#NULL#';
 
32045
ERROR 23000: Column 'f_int1' cannot be null
 
32046
# check null success:    1
 
32047
DELETE FROM t1
 
32048
WHERE f_int1 = 0 AND f_int2 = 0
 
32049
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
32050
AND f_charbig = '#NULL#';
 
32051
SET AUTOCOMMIT= 0;
 
32052
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32053
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32054
FROM t0_template source_tab
 
32055
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32056
        
 
32057
# check transactions-1 success:         1
 
32058
COMMIT WORK;
 
32059
        
 
32060
# check transactions-2 success:         1
 
32061
ROLLBACK WORK;
 
32062
        
 
32063
# check transactions-3 success:         1
 
32064
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32065
COMMIT WORK;
 
32066
ROLLBACK WORK;
 
32067
        
 
32068
# check transactions-4 success:         1
 
32069
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32070
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32071
FROM t0_template source_tab
 
32072
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32073
        
 
32074
# check transactions-5 success:         1
 
32075
ROLLBACK WORK;
 
32076
        
 
32077
# check transactions-6 success:         1
 
32078
# INFO: Storage engine used for t1 seems to be transactional.
 
32079
COMMIT;
 
32080
        
 
32081
# check transactions-7 success:         1
 
32082
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32083
COMMIT WORK;
 
32084
SET @@session.sql_mode = 'traditional';
 
32085
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
32086
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32087
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
32088
'', '', 'was inserted' FROM t0_template
 
32089
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32090
ERROR 22012: Division by 0
 
32091
COMMIT;
 
32092
        
 
32093
# check transactions-8 success:         1
 
32094
# INFO: Storage engine used for t1 seems to be able to revert
 
32095
#       changes made by the failing statement.
 
32096
SET @@session.sql_mode = '';
 
32097
SET AUTOCOMMIT= 1;
 
32098
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32099
COMMIT WORK;
 
32100
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
32101
        
 
32102
# check special-1 success:      1
 
32103
UPDATE t1 SET f_charbig = '';
 
32104
        
 
32105
# check special-2 success:      1
 
32106
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
32107
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32108
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
32109
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32110
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32111
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32112
'just inserted' FROM t0_template
 
32113
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32114
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
32115
BEGIN
 
32116
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32117
f_charbig = 'updated by trigger'
 
32118
      WHERE f_int1 = new.f_int1;
 
32119
END|
 
32120
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32121
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32122
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32123
        
 
32124
# check trigger-1 success:      1
 
32125
DROP TRIGGER trg_1;
 
32126
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32127
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32128
f_charbig = 'just inserted'
 
32129
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32130
DELETE FROM t0_aux
 
32131
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32132
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32133
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32134
'just inserted' FROM t0_template
 
32135
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32136
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
32137
BEGIN
 
32138
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32139
f_charbig = 'updated by trigger'
 
32140
      WHERE f_int1 = new.f_int1;
 
32141
END|
 
32142
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32143
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32144
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32145
        
 
32146
# check trigger-2 success:      1
 
32147
DROP TRIGGER trg_1;
 
32148
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32149
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32150
f_charbig = 'just inserted'
 
32151
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32152
DELETE FROM t0_aux
 
32153
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32154
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32155
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32156
'just inserted' FROM t0_template
 
32157
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32158
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32159
BEGIN
 
32160
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32161
f_charbig = 'updated by trigger'
 
32162
      WHERE f_int1 = new.f_int1;
 
32163
END|
 
32164
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32165
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32166
        
 
32167
# check trigger-3 success:      1
 
32168
DROP TRIGGER trg_1;
 
32169
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32170
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32171
f_charbig = 'just inserted'
 
32172
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32173
DELETE FROM t0_aux
 
32174
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32175
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32176
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32177
'just inserted' FROM t0_template
 
32178
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32179
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32180
BEGIN
 
32181
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32182
f_charbig = 'updated by trigger'
 
32183
      WHERE f_int1 = - old.f_int1;
 
32184
END|
 
32185
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32186
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32187
        
 
32188
# check trigger-4 success:      1
 
32189
DROP TRIGGER trg_1;
 
32190
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32191
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32192
f_charbig = 'just inserted'
 
32193
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32194
DELETE FROM t0_aux
 
32195
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32196
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32197
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32198
'just inserted' FROM t0_template
 
32199
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32200
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32201
BEGIN
 
32202
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32203
f_charbig = 'updated by trigger'
 
32204
      WHERE f_int1 = new.f_int1;
 
32205
END|
 
32206
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32207
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32208
        
 
32209
# check trigger-5 success:      1
 
32210
DROP TRIGGER trg_1;
 
32211
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32212
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32213
f_charbig = 'just inserted'
 
32214
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32215
DELETE FROM t0_aux
 
32216
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32217
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32218
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32219
'just inserted' FROM t0_template
 
32220
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32221
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32222
BEGIN
 
32223
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32224
f_charbig = 'updated by trigger'
 
32225
      WHERE f_int1 = - old.f_int1;
 
32226
END|
 
32227
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32228
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32229
        
 
32230
# check trigger-6 success:      1
 
32231
DROP TRIGGER trg_1;
 
32232
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32233
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32234
f_charbig = 'just inserted'
 
32235
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32236
DELETE FROM t0_aux
 
32237
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32238
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32239
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32240
'just inserted' FROM t0_template
 
32241
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32242
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
32243
BEGIN
 
32244
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32245
f_charbig = 'updated by trigger'
 
32246
      WHERE f_int1 = - old.f_int1;
 
32247
END|
 
32248
DELETE FROM t0_aux
 
32249
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32250
        
 
32251
# check trigger-7 success:      1
 
32252
DROP TRIGGER trg_1;
 
32253
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32254
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32255
f_charbig = 'just inserted'
 
32256
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32257
DELETE FROM t0_aux
 
32258
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32259
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32260
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32261
'just inserted' FROM t0_template
 
32262
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32263
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
32264
BEGIN
 
32265
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32266
f_charbig = 'updated by trigger'
 
32267
      WHERE f_int1 = - old.f_int1;
 
32268
END|
 
32269
DELETE FROM t0_aux
 
32270
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32271
        
 
32272
# check trigger-8 success:      1
 
32273
DROP TRIGGER trg_1;
 
32274
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32275
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32276
f_charbig = 'just inserted'
 
32277
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32278
DELETE FROM t0_aux
 
32279
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32280
DELETE FROM t1
 
32281
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32282
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32283
BEGIN
 
32284
SET new.f_int1 = old.f_int1 + @max_row,
 
32285
new.f_int2 = old.f_int2 - @max_row,
 
32286
new.f_charbig = '####updated per update trigger####';
 
32287
END|
 
32288
UPDATE t1
 
32289
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32290
f_charbig = '####updated per update statement itself####';
 
32291
        
 
32292
# check trigger-9 success:      1
 
32293
DROP TRIGGER trg_2;
 
32294
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32295
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32296
f_charbig = CONCAT('===',f_char1,'===');
 
32297
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32298
BEGIN
 
32299
SET new.f_int1 = new.f_int1 + @max_row,
 
32300
new.f_int2 = new.f_int2 - @max_row,
 
32301
new.f_charbig = '####updated per update trigger####';
 
32302
END|
 
32303
UPDATE t1
 
32304
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32305
f_charbig = '####updated per update statement itself####';
 
32306
        
 
32307
# check trigger-10 success:     1
 
32308
DROP TRIGGER trg_2;
 
32309
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32310
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32311
f_charbig = CONCAT('===',f_char1,'===');
 
32312
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32313
BEGIN
 
32314
SET new.f_int1 = @my_max1 + @counter,
 
32315
new.f_int2 = @my_min2 - @counter,
 
32316
new.f_charbig = '####updated per insert trigger####';
 
32317
SET @counter = @counter + 1;
 
32318
END|
 
32319
SET @counter = 1;
 
32320
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32321
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32322
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32323
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32324
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32325
ORDER BY f_int1;
 
32326
DROP TRIGGER trg_3;
 
32327
        
 
32328
# check trigger-11 success:     1
 
32329
DELETE FROM t1
 
32330
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32331
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32332
AND f_charbig = '####updated per insert trigger####';
 
32333
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32334
BEGIN
 
32335
SET new.f_int1 = @my_max1 + @counter,
 
32336
new.f_int2 = @my_min2 - @counter,
 
32337
new.f_charbig = '####updated per insert trigger####';
 
32338
SET @counter = @counter + 1;
 
32339
END|
 
32340
SET @counter = 1;
 
32341
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32342
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
32343
SELECT CAST(f_int1 AS CHAR),
 
32344
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32345
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32346
ORDER BY f_int1;
 
32347
DROP TRIGGER trg_3;
 
32348
        
 
32349
# check trigger-12 success:     1
 
32350
DELETE FROM t1
 
32351
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32352
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32353
AND f_charbig = '####updated per insert trigger####';
 
32354
ANALYZE  TABLE t1;
 
32355
Table   Op      Msg_type        Msg_text
 
32356
test.t1 analyze status  OK
 
32357
CHECK    TABLE t1 EXTENDED;
 
32358
Table   Op      Msg_type        Msg_text
 
32359
test.t1 check   status  OK
 
32360
CHECKSUM TABLE t1 EXTENDED;
 
32361
Table   Checksum
 
32362
test.t1 <some_value>
 
32363
OPTIMIZE TABLE t1;
 
32364
Table   Op      Msg_type        Msg_text
 
32365
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
32366
test.t1 optimize        status  OK
 
32367
# check layout success:    1
 
32368
REPAIR   TABLE t1 EXTENDED;
 
32369
Table   Op      Msg_type        Msg_text
 
32370
test.t1 repair  note    The storage engine for the table doesn't support repair
 
32371
# check layout success:    1
 
32372
TRUNCATE t1;
 
32373
        
 
32374
# check TRUNCATE success:       1
 
32375
# check layout success:    1
 
32376
# End usability test (inc/partition_check.inc)
 
32377
DROP TABLE t1;
 
32378
CREATE TABLE t1 (
 
32379
f_int1 INTEGER,
 
32380
f_int2 INTEGER,
 
32381
f_char1 CHAR(20),
 
32382
f_char2 CHAR(20),
 
32383
f_charbig VARCHAR(1000)
 
32384
, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
 
32385
)
 
32386
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
32387
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
32388
(PARTITION part1 VALUES IN (0),
 
32389
 PARTITION part2 VALUES IN (1),
 
32390
 PARTITION part3 VALUES IN (NULL));
 
32391
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32392
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
32393
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
32394
ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
 
32395
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32396
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
32397
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
32398
# Start usability test (inc/partition_check.inc)
 
32399
create_command
 
32400
SHOW CREATE TABLE t1;
 
32401
Table   Create Table
 
32402
t1      CREATE TABLE `t1` (
 
32403
  `f_int1` int(11) NOT NULL DEFAULT '0',
 
32404
  `f_int2` int(11) NOT NULL DEFAULT '0',
 
32405
  `f_char1` char(20) DEFAULT NULL,
 
32406
  `f_char2` char(20) DEFAULT NULL,
 
32407
  `f_charbig` varchar(1000) DEFAULT NULL
 
32408
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
32409
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
32410
SUBPARTITION BY KEY (f_int2)
 
32411
SUBPARTITIONS 3
 
32412
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
32413
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
32414
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
32415
 
 
32416
# check prerequisites-1 success:    1
 
32417
# check COUNT(*) success:    1
 
32418
# check MIN/MAX(f_int1) success:    1
 
32419
# check MIN/MAX(f_int2) success:    1
 
32420
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32421
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32422
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
32423
WHERE f_int1 IN (2,3);
 
32424
# check prerequisites-3 success:    1
 
32425
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
32426
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
32427
# check read via f_int1 success: 1
 
32428
# check read via f_int2 success: 1
 
32429
        
 
32430
# check multiple-1 success:     1
 
32431
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
32432
        
 
32433
# check multiple-2 success:     1
 
32434
INSERT INTO t1 SELECT * FROM t0_template
 
32435
WHERE MOD(f_int1,3) = 0;
 
32436
        
 
32437
# check multiple-3 success:     1
 
32438
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
32439
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
32440
AND @max_row_div2 + @max_row_div4;
 
32441
        
 
32442
# check multiple-4 success:     1
 
32443
DELETE FROM t1
 
32444
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
32445
AND @max_row_div2 + @max_row_div4 + @max_row;
 
32446
        
 
32447
# check multiple-5 success:     1
 
32448
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
32449
INSERT INTO t1
 
32450
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32451
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32452
f_charbig = '#SINGLE#';
 
32453
        
 
32454
# check single-1 success:       1
 
32455
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
32456
INSERT INTO t1
 
32457
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32458
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32459
f_charbig = '#SINGLE#';
 
32460
        
 
32461
# check single-2 success:       1
 
32462
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
32463
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
32464
UPDATE t1 SET f_int1 = @cur_value2
 
32465
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
32466
        
 
32467
# check single-3 success:       1
 
32468
SET @cur_value1= -1;
 
32469
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
32470
UPDATE t1 SET f_int1 = @cur_value1
 
32471
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
32472
        
 
32473
# check single-4 success:       1
 
32474
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
32475
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
32476
        
 
32477
# check single-5 success:       1
 
32478
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
32479
        
 
32480
# check single-6 success:       1
 
32481
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
32482
        
 
32483
# check single-7 success:       1
 
32484
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
32485
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
32486
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
32487
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
32488
f_charbig = '#NULL#';
 
32489
INSERT INTO t1
 
32490
SET f_int1 = NULL , f_int2 = -@max_row,
 
32491
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
32492
f_charbig = '#NULL#';
 
32493
ERROR 23000: Column 'f_int1' cannot be null
 
32494
# check null success:    1
 
32495
DELETE FROM t1
 
32496
WHERE f_int1 = 0 AND f_int2 = 0
 
32497
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
32498
AND f_charbig = '#NULL#';
 
32499
SET AUTOCOMMIT= 0;
 
32500
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32501
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32502
FROM t0_template source_tab
 
32503
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32504
        
 
32505
# check transactions-1 success:         1
 
32506
COMMIT WORK;
 
32507
        
 
32508
# check transactions-2 success:         1
 
32509
ROLLBACK WORK;
 
32510
        
 
32511
# check transactions-3 success:         1
 
32512
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32513
COMMIT WORK;
 
32514
ROLLBACK WORK;
 
32515
        
 
32516
# check transactions-4 success:         1
 
32517
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32518
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32519
FROM t0_template source_tab
 
32520
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32521
        
 
32522
# check transactions-5 success:         1
 
32523
ROLLBACK WORK;
 
32524
        
 
32525
# check transactions-6 success:         1
 
32526
# INFO: Storage engine used for t1 seems to be transactional.
 
32527
COMMIT;
 
32528
        
 
32529
# check transactions-7 success:         1
 
32530
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32531
COMMIT WORK;
 
32532
SET @@session.sql_mode = 'traditional';
 
32533
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
32534
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32535
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
32536
'', '', 'was inserted' FROM t0_template
 
32537
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32538
ERROR 22012: Division by 0
 
32539
COMMIT;
 
32540
        
 
32541
# check transactions-8 success:         1
 
32542
# INFO: Storage engine used for t1 seems to be able to revert
 
32543
#       changes made by the failing statement.
 
32544
SET @@session.sql_mode = '';
 
32545
SET AUTOCOMMIT= 1;
 
32546
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32547
COMMIT WORK;
 
32548
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
32549
        
 
32550
# check special-1 success:      1
 
32551
UPDATE t1 SET f_charbig = '';
 
32552
        
 
32553
# check special-2 success:      1
 
32554
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
32555
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32556
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
32557
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32558
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32559
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32560
'just inserted' FROM t0_template
 
32561
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32562
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
32563
BEGIN
 
32564
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32565
f_charbig = 'updated by trigger'
 
32566
      WHERE f_int1 = new.f_int1;
 
32567
END|
 
32568
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32569
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32570
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32571
        
 
32572
# check trigger-1 success:      1
 
32573
DROP TRIGGER trg_1;
 
32574
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32575
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32576
f_charbig = 'just inserted'
 
32577
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32578
DELETE FROM t0_aux
 
32579
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32580
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32581
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32582
'just inserted' FROM t0_template
 
32583
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32584
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
32585
BEGIN
 
32586
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32587
f_charbig = 'updated by trigger'
 
32588
      WHERE f_int1 = new.f_int1;
 
32589
END|
 
32590
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32591
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32592
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32593
        
 
32594
# check trigger-2 success:      1
 
32595
DROP TRIGGER trg_1;
 
32596
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32597
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32598
f_charbig = 'just inserted'
 
32599
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32600
DELETE FROM t0_aux
 
32601
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32602
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32603
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32604
'just inserted' FROM t0_template
 
32605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32606
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32607
BEGIN
 
32608
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32609
f_charbig = 'updated by trigger'
 
32610
      WHERE f_int1 = new.f_int1;
 
32611
END|
 
32612
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32613
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32614
        
 
32615
# check trigger-3 success:      1
 
32616
DROP TRIGGER trg_1;
 
32617
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32618
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32619
f_charbig = 'just inserted'
 
32620
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32621
DELETE FROM t0_aux
 
32622
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32623
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32624
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32625
'just inserted' FROM t0_template
 
32626
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32627
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32628
BEGIN
 
32629
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32630
f_charbig = 'updated by trigger'
 
32631
      WHERE f_int1 = - old.f_int1;
 
32632
END|
 
32633
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32634
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32635
        
 
32636
# check trigger-4 success:      1
 
32637
DROP TRIGGER trg_1;
 
32638
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32639
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32640
f_charbig = 'just inserted'
 
32641
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32642
DELETE FROM t0_aux
 
32643
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32644
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32645
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32646
'just inserted' FROM t0_template
 
32647
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32648
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32649
BEGIN
 
32650
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32651
f_charbig = 'updated by trigger'
 
32652
      WHERE f_int1 = new.f_int1;
 
32653
END|
 
32654
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32655
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32656
        
 
32657
# check trigger-5 success:      1
 
32658
DROP TRIGGER trg_1;
 
32659
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32660
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32661
f_charbig = 'just inserted'
 
32662
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32663
DELETE FROM t0_aux
 
32664
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32665
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32666
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32667
'just inserted' FROM t0_template
 
32668
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32669
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32670
BEGIN
 
32671
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32672
f_charbig = 'updated by trigger'
 
32673
      WHERE f_int1 = - old.f_int1;
 
32674
END|
 
32675
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32676
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32677
        
 
32678
# check trigger-6 success:      1
 
32679
DROP TRIGGER trg_1;
 
32680
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32681
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32682
f_charbig = 'just inserted'
 
32683
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32684
DELETE FROM t0_aux
 
32685
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32686
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32687
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32688
'just inserted' FROM t0_template
 
32689
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32690
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
32691
BEGIN
 
32692
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32693
f_charbig = 'updated by trigger'
 
32694
      WHERE f_int1 = - old.f_int1;
 
32695
END|
 
32696
DELETE FROM t0_aux
 
32697
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32698
        
 
32699
# check trigger-7 success:      1
 
32700
DROP TRIGGER trg_1;
 
32701
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32702
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32703
f_charbig = 'just inserted'
 
32704
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32705
DELETE FROM t0_aux
 
32706
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32707
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32708
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32709
'just inserted' FROM t0_template
 
32710
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32711
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
32712
BEGIN
 
32713
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32714
f_charbig = 'updated by trigger'
 
32715
      WHERE f_int1 = - old.f_int1;
 
32716
END|
 
32717
DELETE FROM t0_aux
 
32718
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32719
        
 
32720
# check trigger-8 success:      1
 
32721
DROP TRIGGER trg_1;
 
32722
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32723
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32724
f_charbig = 'just inserted'
 
32725
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32726
DELETE FROM t0_aux
 
32727
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32728
DELETE FROM t1
 
32729
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32730
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32731
BEGIN
 
32732
SET new.f_int1 = old.f_int1 + @max_row,
 
32733
new.f_int2 = old.f_int2 - @max_row,
 
32734
new.f_charbig = '####updated per update trigger####';
 
32735
END|
 
32736
UPDATE t1
 
32737
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32738
f_charbig = '####updated per update statement itself####';
 
32739
        
 
32740
# check trigger-9 success:      1
 
32741
DROP TRIGGER trg_2;
 
32742
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32743
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32744
f_charbig = CONCAT('===',f_char1,'===');
 
32745
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32746
BEGIN
 
32747
SET new.f_int1 = new.f_int1 + @max_row,
 
32748
new.f_int2 = new.f_int2 - @max_row,
 
32749
new.f_charbig = '####updated per update trigger####';
 
32750
END|
 
32751
UPDATE t1
 
32752
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32753
f_charbig = '####updated per update statement itself####';
 
32754
        
 
32755
# check trigger-10 success:     1
 
32756
DROP TRIGGER trg_2;
 
32757
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32758
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32759
f_charbig = CONCAT('===',f_char1,'===');
 
32760
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32761
BEGIN
 
32762
SET new.f_int1 = @my_max1 + @counter,
 
32763
new.f_int2 = @my_min2 - @counter,
 
32764
new.f_charbig = '####updated per insert trigger####';
 
32765
SET @counter = @counter + 1;
 
32766
END|
 
32767
SET @counter = 1;
 
32768
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32769
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32770
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32771
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32772
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32773
ORDER BY f_int1;
 
32774
DROP TRIGGER trg_3;
 
32775
        
 
32776
# check trigger-11 success:     1
 
32777
DELETE FROM t1
 
32778
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32779
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32780
AND f_charbig = '####updated per insert trigger####';
 
32781
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32782
BEGIN
 
32783
SET new.f_int1 = @my_max1 + @counter,
 
32784
new.f_int2 = @my_min2 - @counter,
 
32785
new.f_charbig = '####updated per insert trigger####';
 
32786
SET @counter = @counter + 1;
 
32787
END|
 
32788
SET @counter = 1;
 
32789
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32790
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
32791
SELECT CAST(f_int1 AS CHAR),
 
32792
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32793
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32794
ORDER BY f_int1;
 
32795
DROP TRIGGER trg_3;
 
32796
        
 
32797
# check trigger-12 success:     1
 
32798
DELETE FROM t1
 
32799
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32800
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32801
AND f_charbig = '####updated per insert trigger####';
 
32802
ANALYZE  TABLE t1;
 
32803
Table   Op      Msg_type        Msg_text
 
32804
test.t1 analyze status  OK
 
32805
CHECK    TABLE t1 EXTENDED;
 
32806
Table   Op      Msg_type        Msg_text
 
32807
test.t1 check   status  OK
 
32808
CHECKSUM TABLE t1 EXTENDED;
 
32809
Table   Checksum
 
32810
test.t1 <some_value>
 
32811
OPTIMIZE TABLE t1;
 
32812
Table   Op      Msg_type        Msg_text
 
32813
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
32814
test.t1 optimize        status  OK
 
32815
# check layout success:    1
 
32816
REPAIR   TABLE t1 EXTENDED;
 
32817
Table   Op      Msg_type        Msg_text
 
32818
test.t1 repair  note    The storage engine for the table doesn't support repair
 
32819
# check layout success:    1
 
32820
TRUNCATE t1;
 
32821
        
 
32822
# check TRUNCATE success:       1
 
32823
# check layout success:    1
 
32824
# End usability test (inc/partition_check.inc)
 
32825
DROP TABLE t1;
 
32826
DROP TABLE IF EXISTS t1;
 
32827
CREATE TABLE t1 (
 
32828
f_int1 INTEGER,
 
32829
f_int2 INTEGER,
 
32830
f_char1 CHAR(20),
 
32831
f_char2 CHAR(20),
 
32832
f_charbig VARCHAR(1000)
 
32833
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
32834
)
 
32835
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
 
32836
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32837
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
32838
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
32839
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
32840
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32841
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
32842
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
32843
# Start usability test (inc/partition_check.inc)
 
32844
create_command
 
32845
SHOW CREATE TABLE t1;
 
32846
Table   Create Table
 
32847
t1      CREATE TABLE `t1` (
 
32848
  `f_int1` int(11) DEFAULT NULL,
 
32849
  `f_int2` int(11) DEFAULT NULL,
 
32850
  `f_char1` char(20) DEFAULT NULL,
 
32851
  `f_char2` char(20) DEFAULT NULL,
 
32852
  `f_charbig` varchar(1000) DEFAULT NULL
 
32853
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
32854
/*!50100 PARTITION BY HASH (f_int1 + f_int2)
 
32855
PARTITIONS 2 */
 
32856
 
 
32857
# check prerequisites-1 success:    1
 
32858
# check COUNT(*) success:    1
 
32859
# check MIN/MAX(f_int1) success:    1
 
32860
# check MIN/MAX(f_int2) success:    1
 
32861
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32862
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32863
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
32864
WHERE f_int1 IN (2,3);
 
32865
# check prerequisites-3 success:    1
 
32866
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
32867
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
32868
# check read via f_int1 success: 1
 
32869
# check read via f_int2 success: 1
 
32870
        
 
32871
# check multiple-1 success:     1
 
32872
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
32873
        
 
32874
# check multiple-2 success:     1
 
32875
INSERT INTO t1 SELECT * FROM t0_template
 
32876
WHERE MOD(f_int1,3) = 0;
 
32877
        
 
32878
# check multiple-3 success:     1
 
32879
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
32880
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
32881
AND @max_row_div2 + @max_row_div4;
 
32882
        
 
32883
# check multiple-4 success:     1
 
32884
DELETE FROM t1
 
32885
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
32886
AND @max_row_div2 + @max_row_div4 + @max_row;
 
32887
        
 
32888
# check multiple-5 success:     1
 
32889
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
32890
INSERT INTO t1
 
32891
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32892
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32893
f_charbig = '#SINGLE#';
 
32894
        
 
32895
# check single-1 success:       1
 
32896
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
32897
INSERT INTO t1
 
32898
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32899
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32900
f_charbig = '#SINGLE#';
 
32901
        
 
32902
# check single-2 success:       1
 
32903
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
32904
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
32905
UPDATE t1 SET f_int1 = @cur_value2
 
32906
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
32907
        
 
32908
# check single-3 success:       1
 
32909
SET @cur_value1= -1;
 
32910
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
32911
UPDATE t1 SET f_int1 = @cur_value1
 
32912
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
32913
        
 
32914
# check single-4 success:       1
 
32915
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
32916
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
32917
        
 
32918
# check single-5 success:       1
 
32919
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
32920
        
 
32921
# check single-6 success:       1
 
32922
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
32923
        
 
32924
# check single-7 success:       1
 
32925
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
32926
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
32927
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
32928
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
32929
f_charbig = '#NULL#';
 
32930
INSERT INTO t1
 
32931
SET f_int1 = NULL , f_int2 = -@max_row,
 
32932
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
32933
f_charbig = '#NULL#';
 
32934
# check null success:    1
 
32935
        
 
32936
# check null-1 success:         1
 
32937
UPDATE t1 SET f_int1 = -@max_row
 
32938
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32939
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32940
        
 
32941
# check null-2 success:         1
 
32942
UPDATE t1 SET f_int1 = NULL
 
32943
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32944
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32945
        
 
32946
# check null-3 success:         1
 
32947
DELETE FROM t1
 
32948
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32949
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32950
        
 
32951
# check null-4 success:         1
 
32952
DELETE FROM t1
 
32953
WHERE f_int1 = 0 AND f_int2 = 0
 
32954
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
32955
AND f_charbig = '#NULL#';
 
32956
SET AUTOCOMMIT= 0;
 
32957
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32958
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32959
FROM t0_template source_tab
 
32960
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32961
        
 
32962
# check transactions-1 success:         1
 
32963
COMMIT WORK;
 
32964
        
 
32965
# check transactions-2 success:         1
 
32966
ROLLBACK WORK;
 
32967
        
 
32968
# check transactions-3 success:         1
 
32969
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32970
COMMIT WORK;
 
32971
ROLLBACK WORK;
 
32972
        
 
32973
# check transactions-4 success:         1
 
32974
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32975
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32976
FROM t0_template source_tab
 
32977
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32978
        
 
32979
# check transactions-5 success:         1
 
32980
ROLLBACK WORK;
 
32981
        
 
32982
# check transactions-6 success:         1
 
32983
# INFO: Storage engine used for t1 seems to be transactional.
 
32984
COMMIT;
 
32985
        
 
32986
# check transactions-7 success:         1
 
32987
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32988
COMMIT WORK;
 
32989
SET @@session.sql_mode = 'traditional';
 
32990
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
32991
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32992
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
32993
'', '', 'was inserted' FROM t0_template
 
32994
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32995
ERROR 22012: Division by 0
 
32996
COMMIT;
 
32997
        
 
32998
# check transactions-8 success:         1
 
32999
# INFO: Storage engine used for t1 seems to be able to revert
 
33000
#       changes made by the failing statement.
 
33001
SET @@session.sql_mode = '';
 
33002
SET AUTOCOMMIT= 1;
 
33003
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33004
COMMIT WORK;
 
33005
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
33006
        
 
33007
# check special-1 success:      1
 
33008
UPDATE t1 SET f_charbig = '';
 
33009
        
 
33010
# check special-2 success:      1
 
33011
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
33012
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33013
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
33014
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33015
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33016
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33017
'just inserted' FROM t0_template
 
33018
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33019
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
33020
BEGIN
 
33021
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33022
f_charbig = 'updated by trigger'
 
33023
      WHERE f_int1 = new.f_int1;
 
33024
END|
 
33025
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33026
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33027
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33028
        
 
33029
# check trigger-1 success:      1
 
33030
DROP TRIGGER trg_1;
 
33031
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33032
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33033
f_charbig = 'just inserted'
 
33034
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33035
DELETE FROM t0_aux
 
33036
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33037
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33038
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33039
'just inserted' FROM t0_template
 
33040
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33041
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
33042
BEGIN
 
33043
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33044
f_charbig = 'updated by trigger'
 
33045
      WHERE f_int1 = new.f_int1;
 
33046
END|
 
33047
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33048
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33049
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33050
        
 
33051
# check trigger-2 success:      1
 
33052
DROP TRIGGER trg_1;
 
33053
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33054
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33055
f_charbig = 'just inserted'
 
33056
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33057
DELETE FROM t0_aux
 
33058
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33059
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33060
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33061
'just inserted' FROM t0_template
 
33062
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33063
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33064
BEGIN
 
33065
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33066
f_charbig = 'updated by trigger'
 
33067
      WHERE f_int1 = new.f_int1;
 
33068
END|
 
33069
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33070
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33071
        
 
33072
# check trigger-3 success:      1
 
33073
DROP TRIGGER trg_1;
 
33074
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33075
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33076
f_charbig = 'just inserted'
 
33077
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33078
DELETE FROM t0_aux
 
33079
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33080
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33081
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33082
'just inserted' FROM t0_template
 
33083
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33084
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33085
BEGIN
 
33086
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33087
f_charbig = 'updated by trigger'
 
33088
      WHERE f_int1 = - old.f_int1;
 
33089
END|
 
33090
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33091
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33092
        
 
33093
# check trigger-4 success:      1
 
33094
DROP TRIGGER trg_1;
 
33095
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33096
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33097
f_charbig = 'just inserted'
 
33098
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33099
DELETE FROM t0_aux
 
33100
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33101
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33102
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33103
'just inserted' FROM t0_template
 
33104
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33105
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
33106
BEGIN
 
33107
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33108
f_charbig = 'updated by trigger'
 
33109
      WHERE f_int1 = new.f_int1;
 
33110
END|
 
33111
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33112
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33113
        
 
33114
# check trigger-5 success:      1
 
33115
DROP TRIGGER trg_1;
 
33116
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33117
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33118
f_charbig = 'just inserted'
 
33119
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33120
DELETE FROM t0_aux
 
33121
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33122
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33123
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33124
'just inserted' FROM t0_template
 
33125
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33126
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
33127
BEGIN
 
33128
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33129
f_charbig = 'updated by trigger'
 
33130
      WHERE f_int1 = - old.f_int1;
 
33131
END|
 
33132
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33133
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33134
        
 
33135
# check trigger-6 success:      1
 
33136
DROP TRIGGER trg_1;
 
33137
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33138
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33139
f_charbig = 'just inserted'
 
33140
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33141
DELETE FROM t0_aux
 
33142
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33143
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33144
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33145
'just inserted' FROM t0_template
 
33146
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33147
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
33148
BEGIN
 
33149
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33150
f_charbig = 'updated by trigger'
 
33151
      WHERE f_int1 = - old.f_int1;
 
33152
END|
 
33153
DELETE FROM t0_aux
 
33154
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33155
        
 
33156
# check trigger-7 success:      1
 
33157
DROP TRIGGER trg_1;
 
33158
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33159
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33160
f_charbig = 'just inserted'
 
33161
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33162
DELETE FROM t0_aux
 
33163
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33164
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33165
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33166
'just inserted' FROM t0_template
 
33167
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33168
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
33169
BEGIN
 
33170
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33171
f_charbig = 'updated by trigger'
 
33172
      WHERE f_int1 = - old.f_int1;
 
33173
END|
 
33174
DELETE FROM t0_aux
 
33175
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33176
        
 
33177
# check trigger-8 success:      1
 
33178
DROP TRIGGER trg_1;
 
33179
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33180
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33181
f_charbig = 'just inserted'
 
33182
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33183
DELETE FROM t0_aux
 
33184
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33185
DELETE FROM t1
 
33186
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33187
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33188
BEGIN
 
33189
SET new.f_int1 = old.f_int1 + @max_row,
 
33190
new.f_int2 = old.f_int2 - @max_row,
 
33191
new.f_charbig = '####updated per update trigger####';
 
33192
END|
 
33193
UPDATE t1
 
33194
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33195
f_charbig = '####updated per update statement itself####';
 
33196
        
 
33197
# check trigger-9 success:      1
 
33198
DROP TRIGGER trg_2;
 
33199
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33200
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33201
f_charbig = CONCAT('===',f_char1,'===');
 
33202
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33203
BEGIN
 
33204
SET new.f_int1 = new.f_int1 + @max_row,
 
33205
new.f_int2 = new.f_int2 - @max_row,
 
33206
new.f_charbig = '####updated per update trigger####';
 
33207
END|
 
33208
UPDATE t1
 
33209
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33210
f_charbig = '####updated per update statement itself####';
 
33211
        
 
33212
# check trigger-10 success:     1
 
33213
DROP TRIGGER trg_2;
 
33214
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33215
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33216
f_charbig = CONCAT('===',f_char1,'===');
 
33217
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33218
BEGIN
 
33219
SET new.f_int1 = @my_max1 + @counter,
 
33220
new.f_int2 = @my_min2 - @counter,
 
33221
new.f_charbig = '####updated per insert trigger####';
 
33222
SET @counter = @counter + 1;
 
33223
END|
 
33224
SET @counter = 1;
 
33225
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33226
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33227
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33228
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33229
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33230
ORDER BY f_int1;
 
33231
DROP TRIGGER trg_3;
 
33232
        
 
33233
# check trigger-11 success:     1
 
33234
DELETE FROM t1
 
33235
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33236
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33237
AND f_charbig = '####updated per insert trigger####';
 
33238
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33239
BEGIN
 
33240
SET new.f_int1 = @my_max1 + @counter,
 
33241
new.f_int2 = @my_min2 - @counter,
 
33242
new.f_charbig = '####updated per insert trigger####';
 
33243
SET @counter = @counter + 1;
 
33244
END|
 
33245
SET @counter = 1;
 
33246
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33247
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
33248
SELECT CAST(f_int1 AS CHAR),
 
33249
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33250
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33251
ORDER BY f_int1;
 
33252
DROP TRIGGER trg_3;
 
33253
        
 
33254
# check trigger-12 success:     1
 
33255
DELETE FROM t1
 
33256
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33257
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33258
AND f_charbig = '####updated per insert trigger####';
 
33259
ANALYZE  TABLE t1;
 
33260
Table   Op      Msg_type        Msg_text
 
33261
test.t1 analyze status  OK
 
33262
CHECK    TABLE t1 EXTENDED;
 
33263
Table   Op      Msg_type        Msg_text
 
33264
test.t1 check   status  OK
 
33265
CHECKSUM TABLE t1 EXTENDED;
 
33266
Table   Checksum
 
33267
test.t1 <some_value>
 
33268
OPTIMIZE TABLE t1;
 
33269
Table   Op      Msg_type        Msg_text
 
33270
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
33271
test.t1 optimize        status  OK
 
33272
# check layout success:    1
 
33273
REPAIR   TABLE t1 EXTENDED;
 
33274
Table   Op      Msg_type        Msg_text
 
33275
test.t1 repair  note    The storage engine for the table doesn't support repair
 
33276
# check layout success:    1
 
33277
TRUNCATE t1;
 
33278
        
 
33279
# check TRUNCATE success:       1
 
33280
# check layout success:    1
 
33281
# End usability test (inc/partition_check.inc)
 
33282
DROP TABLE t1;
 
33283
CREATE TABLE t1 (
 
33284
f_int1 INTEGER,
 
33285
f_int2 INTEGER,
 
33286
f_char1 CHAR(20),
 
33287
f_char2 CHAR(20),
 
33288
f_charbig VARCHAR(1000)
 
33289
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
33290
)
 
33291
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
 
33292
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33293
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
33294
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
33295
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
33296
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33297
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
33298
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
33299
# Start usability test (inc/partition_check.inc)
 
33300
create_command
 
33301
SHOW CREATE TABLE t1;
 
33302
Table   Create Table
 
33303
t1      CREATE TABLE `t1` (
 
33304
  `f_int1` int(11) DEFAULT NULL,
 
33305
  `f_int2` int(11) DEFAULT NULL,
 
33306
  `f_char1` char(20) DEFAULT NULL,
 
33307
  `f_char2` char(20) DEFAULT NULL,
 
33308
  `f_charbig` varchar(1000) DEFAULT NULL
 
33309
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
33310
/*!50100 PARTITION BY KEY (f_int1,f_int2)
 
33311
PARTITIONS 5 */
 
33312
 
 
33313
# check prerequisites-1 success:    1
 
33314
# check COUNT(*) success:    1
 
33315
# check MIN/MAX(f_int1) success:    1
 
33316
# check MIN/MAX(f_int2) success:    1
 
33317
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33318
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33319
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
33320
WHERE f_int1 IN (2,3);
 
33321
# check prerequisites-3 success:    1
 
33322
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
33323
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
33324
# check read via f_int1 success: 1
 
33325
# check read via f_int2 success: 1
 
33326
        
 
33327
# check multiple-1 success:     1
 
33328
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
33329
        
 
33330
# check multiple-2 success:     1
 
33331
INSERT INTO t1 SELECT * FROM t0_template
 
33332
WHERE MOD(f_int1,3) = 0;
 
33333
        
 
33334
# check multiple-3 success:     1
 
33335
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
33336
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
33337
AND @max_row_div2 + @max_row_div4;
 
33338
        
 
33339
# check multiple-4 success:     1
 
33340
DELETE FROM t1
 
33341
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
33342
AND @max_row_div2 + @max_row_div4 + @max_row;
 
33343
        
 
33344
# check multiple-5 success:     1
 
33345
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
33346
INSERT INTO t1
 
33347
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
33348
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
33349
f_charbig = '#SINGLE#';
 
33350
        
 
33351
# check single-1 success:       1
 
33352
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
33353
INSERT INTO t1
 
33354
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
33355
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
33356
f_charbig = '#SINGLE#';
 
33357
        
 
33358
# check single-2 success:       1
 
33359
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
33360
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
33361
UPDATE t1 SET f_int1 = @cur_value2
 
33362
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
33363
        
 
33364
# check single-3 success:       1
 
33365
SET @cur_value1= -1;
 
33366
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
33367
UPDATE t1 SET f_int1 = @cur_value1
 
33368
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
33369
        
 
33370
# check single-4 success:       1
 
33371
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
33372
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
33373
        
 
33374
# check single-5 success:       1
 
33375
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
33376
        
 
33377
# check single-6 success:       1
 
33378
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
33379
        
 
33380
# check single-7 success:       1
 
33381
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
33382
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
33383
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
33384
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
33385
f_charbig = '#NULL#';
 
33386
INSERT INTO t1
 
33387
SET f_int1 = NULL , f_int2 = -@max_row,
 
33388
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
33389
f_charbig = '#NULL#';
 
33390
# check null success:    1
 
33391
        
 
33392
# check null-1 success:         1
 
33393
UPDATE t1 SET f_int1 = -@max_row
 
33394
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33395
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33396
        
 
33397
# check null-2 success:         1
 
33398
UPDATE t1 SET f_int1 = NULL
 
33399
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33400
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33401
        
 
33402
# check null-3 success:         1
 
33403
DELETE FROM t1
 
33404
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33405
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33406
        
 
33407
# check null-4 success:         1
 
33408
DELETE FROM t1
 
33409
WHERE f_int1 = 0 AND f_int2 = 0
 
33410
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
33411
AND f_charbig = '#NULL#';
 
33412
SET AUTOCOMMIT= 0;
 
33413
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33414
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33415
FROM t0_template source_tab
 
33416
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33417
        
 
33418
# check transactions-1 success:         1
 
33419
COMMIT WORK;
 
33420
        
 
33421
# check transactions-2 success:         1
 
33422
ROLLBACK WORK;
 
33423
        
 
33424
# check transactions-3 success:         1
 
33425
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33426
COMMIT WORK;
 
33427
ROLLBACK WORK;
 
33428
        
 
33429
# check transactions-4 success:         1
 
33430
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33431
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33432
FROM t0_template source_tab
 
33433
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33434
        
 
33435
# check transactions-5 success:         1
 
33436
ROLLBACK WORK;
 
33437
        
 
33438
# check transactions-6 success:         1
 
33439
# INFO: Storage engine used for t1 seems to be transactional.
 
33440
COMMIT;
 
33441
        
 
33442
# check transactions-7 success:         1
 
33443
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33444
COMMIT WORK;
 
33445
SET @@session.sql_mode = 'traditional';
 
33446
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
33447
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33448
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
33449
'', '', 'was inserted' FROM t0_template
 
33450
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33451
ERROR 22012: Division by 0
 
33452
COMMIT;
 
33453
        
 
33454
# check transactions-8 success:         1
 
33455
# INFO: Storage engine used for t1 seems to be able to revert
 
33456
#       changes made by the failing statement.
 
33457
SET @@session.sql_mode = '';
 
33458
SET AUTOCOMMIT= 1;
 
33459
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33460
COMMIT WORK;
 
33461
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
33462
        
 
33463
# check special-1 success:      1
 
33464
UPDATE t1 SET f_charbig = '';
 
33465
        
 
33466
# check special-2 success:      1
 
33467
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
33468
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33469
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
33470
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33471
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33472
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33473
'just inserted' FROM t0_template
 
33474
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33475
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
33476
BEGIN
 
33477
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33478
f_charbig = 'updated by trigger'
 
33479
      WHERE f_int1 = new.f_int1;
 
33480
END|
 
33481
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33482
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33483
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33484
        
 
33485
# check trigger-1 success:      1
 
33486
DROP TRIGGER trg_1;
 
33487
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33488
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33489
f_charbig = 'just inserted'
 
33490
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33491
DELETE FROM t0_aux
 
33492
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33493
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33494
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33495
'just inserted' FROM t0_template
 
33496
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33497
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
33498
BEGIN
 
33499
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33500
f_charbig = 'updated by trigger'
 
33501
      WHERE f_int1 = new.f_int1;
 
33502
END|
 
33503
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33504
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33505
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33506
        
 
33507
# check trigger-2 success:      1
 
33508
DROP TRIGGER trg_1;
 
33509
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33510
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33511
f_charbig = 'just inserted'
 
33512
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33513
DELETE FROM t0_aux
 
33514
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33515
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33516
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33517
'just inserted' FROM t0_template
 
33518
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33519
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33520
BEGIN
 
33521
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33522
f_charbig = 'updated by trigger'
 
33523
      WHERE f_int1 = new.f_int1;
 
33524
END|
 
33525
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33526
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33527
        
 
33528
# check trigger-3 success:      1
 
33529
DROP TRIGGER trg_1;
 
33530
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33531
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33532
f_charbig = 'just inserted'
 
33533
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33534
DELETE FROM t0_aux
 
33535
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33536
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33537
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33538
'just inserted' FROM t0_template
 
33539
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33540
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33541
BEGIN
 
33542
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33543
f_charbig = 'updated by trigger'
 
33544
      WHERE f_int1 = - old.f_int1;
 
33545
END|
 
33546
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33547
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33548
        
 
33549
# check trigger-4 success:      1
 
33550
DROP TRIGGER trg_1;
 
33551
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33552
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33553
f_charbig = 'just inserted'
 
33554
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33555
DELETE FROM t0_aux
 
33556
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33557
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33558
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33559
'just inserted' FROM t0_template
 
33560
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33561
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
33562
BEGIN
 
33563
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33564
f_charbig = 'updated by trigger'
 
33565
      WHERE f_int1 = new.f_int1;
 
33566
END|
 
33567
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33568
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33569
        
 
33570
# check trigger-5 success:      1
 
33571
DROP TRIGGER trg_1;
 
33572
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33573
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33574
f_charbig = 'just inserted'
 
33575
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33576
DELETE FROM t0_aux
 
33577
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33578
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33579
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33580
'just inserted' FROM t0_template
 
33581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33582
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
33583
BEGIN
 
33584
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33585
f_charbig = 'updated by trigger'
 
33586
      WHERE f_int1 = - old.f_int1;
 
33587
END|
 
33588
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33589
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33590
        
 
33591
# check trigger-6 success:      1
 
33592
DROP TRIGGER trg_1;
 
33593
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33594
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33595
f_charbig = 'just inserted'
 
33596
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33597
DELETE FROM t0_aux
 
33598
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33599
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33600
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33601
'just inserted' FROM t0_template
 
33602
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33603
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
33604
BEGIN
 
33605
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33606
f_charbig = 'updated by trigger'
 
33607
      WHERE f_int1 = - old.f_int1;
 
33608
END|
 
33609
DELETE FROM t0_aux
 
33610
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33611
        
 
33612
# check trigger-7 success:      1
 
33613
DROP TRIGGER trg_1;
 
33614
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33615
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33616
f_charbig = 'just inserted'
 
33617
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33618
DELETE FROM t0_aux
 
33619
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33620
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33621
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33622
'just inserted' FROM t0_template
 
33623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33624
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
33625
BEGIN
 
33626
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33627
f_charbig = 'updated by trigger'
 
33628
      WHERE f_int1 = - old.f_int1;
 
33629
END|
 
33630
DELETE FROM t0_aux
 
33631
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33632
        
 
33633
# check trigger-8 success:      1
 
33634
DROP TRIGGER trg_1;
 
33635
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33636
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33637
f_charbig = 'just inserted'
 
33638
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33639
DELETE FROM t0_aux
 
33640
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33641
DELETE FROM t1
 
33642
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33643
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33644
BEGIN
 
33645
SET new.f_int1 = old.f_int1 + @max_row,
 
33646
new.f_int2 = old.f_int2 - @max_row,
 
33647
new.f_charbig = '####updated per update trigger####';
 
33648
END|
 
33649
UPDATE t1
 
33650
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33651
f_charbig = '####updated per update statement itself####';
 
33652
        
 
33653
# check trigger-9 success:      1
 
33654
DROP TRIGGER trg_2;
 
33655
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33656
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33657
f_charbig = CONCAT('===',f_char1,'===');
 
33658
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33659
BEGIN
 
33660
SET new.f_int1 = new.f_int1 + @max_row,
 
33661
new.f_int2 = new.f_int2 - @max_row,
 
33662
new.f_charbig = '####updated per update trigger####';
 
33663
END|
 
33664
UPDATE t1
 
33665
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33666
f_charbig = '####updated per update statement itself####';
 
33667
        
 
33668
# check trigger-10 success:     1
 
33669
DROP TRIGGER trg_2;
 
33670
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33671
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33672
f_charbig = CONCAT('===',f_char1,'===');
 
33673
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33674
BEGIN
 
33675
SET new.f_int1 = @my_max1 + @counter,
 
33676
new.f_int2 = @my_min2 - @counter,
 
33677
new.f_charbig = '####updated per insert trigger####';
 
33678
SET @counter = @counter + 1;
 
33679
END|
 
33680
SET @counter = 1;
 
33681
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33682
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33683
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33684
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33685
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33686
ORDER BY f_int1;
 
33687
DROP TRIGGER trg_3;
 
33688
        
 
33689
# check trigger-11 success:     1
 
33690
DELETE FROM t1
 
33691
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33692
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33693
AND f_charbig = '####updated per insert trigger####';
 
33694
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33695
BEGIN
 
33696
SET new.f_int1 = @my_max1 + @counter,
 
33697
new.f_int2 = @my_min2 - @counter,
 
33698
new.f_charbig = '####updated per insert trigger####';
 
33699
SET @counter = @counter + 1;
 
33700
END|
 
33701
SET @counter = 1;
 
33702
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33703
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
33704
SELECT CAST(f_int1 AS CHAR),
 
33705
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33706
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33707
ORDER BY f_int1;
 
33708
DROP TRIGGER trg_3;
 
33709
        
 
33710
# check trigger-12 success:     1
 
33711
DELETE FROM t1
 
33712
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33713
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33714
AND f_charbig = '####updated per insert trigger####';
 
33715
ANALYZE  TABLE t1;
 
33716
Table   Op      Msg_type        Msg_text
 
33717
test.t1 analyze status  OK
 
33718
CHECK    TABLE t1 EXTENDED;
 
33719
Table   Op      Msg_type        Msg_text
 
33720
test.t1 check   status  OK
 
33721
CHECKSUM TABLE t1 EXTENDED;
 
33722
Table   Checksum
 
33723
test.t1 <some_value>
 
33724
OPTIMIZE TABLE t1;
 
33725
Table   Op      Msg_type        Msg_text
 
33726
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
33727
test.t1 optimize        status  OK
 
33728
# check layout success:    1
 
33729
REPAIR   TABLE t1 EXTENDED;
 
33730
Table   Op      Msg_type        Msg_text
 
33731
test.t1 repair  note    The storage engine for the table doesn't support repair
 
33732
# check layout success:    1
 
33733
TRUNCATE t1;
 
33734
        
 
33735
# check TRUNCATE success:       1
 
33736
# check layout success:    1
 
33737
# End usability test (inc/partition_check.inc)
 
33738
DROP TABLE t1;
 
33739
CREATE TABLE t1 (
 
33740
f_int1 INTEGER,
 
33741
f_int2 INTEGER,
 
33742
f_char1 CHAR(20),
 
33743
f_char2 CHAR(20),
 
33744
f_charbig VARCHAR(1000)
 
33745
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
33746
)
 
33747
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
 
33748
(PARTITION part_3 VALUES IN (-3),
 
33749
PARTITION part_2 VALUES IN (-2),
 
33750
PARTITION part_1 VALUES IN (-1),
 
33751
PARTITION part_N VALUES IN (NULL),
 
33752
PARTITION part0 VALUES IN (0),
 
33753
PARTITION part1 VALUES IN (1),
 
33754
PARTITION part2 VALUES IN (2),
 
33755
PARTITION part3 VALUES IN (3));
 
33756
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33757
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
33758
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
33759
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
33760
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33761
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
33762
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
33763
# Start usability test (inc/partition_check.inc)
 
33764
create_command
 
33765
SHOW CREATE TABLE t1;
 
33766
Table   Create Table
 
33767
t1      CREATE TABLE `t1` (
 
33768
  `f_int1` int(11) DEFAULT NULL,
 
33769
  `f_int2` int(11) DEFAULT NULL,
 
33770
  `f_char1` char(20) DEFAULT NULL,
 
33771
  `f_char2` char(20) DEFAULT NULL,
 
33772
  `f_charbig` varchar(1000) DEFAULT NULL
 
33773
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
33774
/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
 
33775
(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
 
33776
 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
 
33777
 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
 
33778
 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
 
33779
 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
 
33780
 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
 
33781
 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
 
33782
 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
33783
 
 
33784
# check prerequisites-1 success:    1
 
33785
# check COUNT(*) success:    1
 
33786
# check MIN/MAX(f_int1) success:    1
 
33787
# check MIN/MAX(f_int2) success:    1
 
33788
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33789
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33790
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
33791
WHERE f_int1 IN (2,3);
 
33792
# check prerequisites-3 success:    1
 
33793
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
33794
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
33795
# check read via f_int1 success: 1
 
33796
# check read via f_int2 success: 1
 
33797
        
 
33798
# check multiple-1 success:     1
 
33799
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
33800
        
 
33801
# check multiple-2 success:     1
 
33802
INSERT INTO t1 SELECT * FROM t0_template
 
33803
WHERE MOD(f_int1,3) = 0;
 
33804
        
 
33805
# check multiple-3 success:     1
 
33806
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
33807
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
33808
AND @max_row_div2 + @max_row_div4;
 
33809
        
 
33810
# check multiple-4 success:     1
 
33811
DELETE FROM t1
 
33812
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
33813
AND @max_row_div2 + @max_row_div4 + @max_row;
 
33814
        
 
33815
# check multiple-5 success:     1
 
33816
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
33817
INSERT INTO t1
 
33818
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
33819
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
33820
f_charbig = '#SINGLE#';
 
33821
        
 
33822
# check single-1 success:       1
 
33823
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
33824
INSERT INTO t1
 
33825
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
33826
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
33827
f_charbig = '#SINGLE#';
 
33828
        
 
33829
# check single-2 success:       1
 
33830
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
33831
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
33832
UPDATE t1 SET f_int1 = @cur_value2
 
33833
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
33834
        
 
33835
# check single-3 success:       1
 
33836
SET @cur_value1= -1;
 
33837
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
33838
UPDATE t1 SET f_int1 = @cur_value1
 
33839
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
33840
        
 
33841
# check single-4 success:       1
 
33842
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
33843
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
33844
        
 
33845
# check single-5 success:       1
 
33846
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
33847
        
 
33848
# check single-6 success:       1
 
33849
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
33850
        
 
33851
# check single-7 success:       1
 
33852
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
33853
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
33854
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
33855
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
33856
f_charbig = '#NULL#';
 
33857
INSERT INTO t1
 
33858
SET f_int1 = NULL , f_int2 = -@max_row,
 
33859
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
33860
f_charbig = '#NULL#';
 
33861
# check null success:    1
 
33862
        
 
33863
# check null-1 success:         1
 
33864
UPDATE t1 SET f_int1 = -@max_row
 
33865
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33866
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33867
        
 
33868
# check null-2 success:         1
 
33869
UPDATE t1 SET f_int1 = NULL
 
33870
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33871
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33872
        
 
33873
# check null-3 success:         1
 
33874
DELETE FROM t1
 
33875
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33876
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33877
        
 
33878
# check null-4 success:         1
 
33879
DELETE FROM t1
 
33880
WHERE f_int1 = 0 AND f_int2 = 0
 
33881
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
33882
AND f_charbig = '#NULL#';
 
33883
SET AUTOCOMMIT= 0;
 
33884
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33885
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33886
FROM t0_template source_tab
 
33887
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33888
        
 
33889
# check transactions-1 success:         1
 
33890
COMMIT WORK;
 
33891
        
 
33892
# check transactions-2 success:         1
 
33893
ROLLBACK WORK;
 
33894
        
 
33895
# check transactions-3 success:         1
 
33896
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33897
COMMIT WORK;
 
33898
ROLLBACK WORK;
 
33899
        
 
33900
# check transactions-4 success:         1
 
33901
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33902
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33903
FROM t0_template source_tab
 
33904
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33905
        
 
33906
# check transactions-5 success:         1
 
33907
ROLLBACK WORK;
 
33908
        
 
33909
# check transactions-6 success:         1
 
33910
# INFO: Storage engine used for t1 seems to be transactional.
 
33911
COMMIT;
 
33912
        
 
33913
# check transactions-7 success:         1
 
33914
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33915
COMMIT WORK;
 
33916
SET @@session.sql_mode = 'traditional';
 
33917
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
33918
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33919
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
33920
'', '', 'was inserted' FROM t0_template
 
33921
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33922
ERROR 22012: Division by 0
 
33923
COMMIT;
 
33924
        
 
33925
# check transactions-8 success:         1
 
33926
# INFO: Storage engine used for t1 seems to be able to revert
 
33927
#       changes made by the failing statement.
 
33928
SET @@session.sql_mode = '';
 
33929
SET AUTOCOMMIT= 1;
 
33930
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33931
COMMIT WORK;
 
33932
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
33933
        
 
33934
# check special-1 success:      1
 
33935
UPDATE t1 SET f_charbig = '';
 
33936
        
 
33937
# check special-2 success:      1
 
33938
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
33939
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33940
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
33941
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33942
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33943
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33944
'just inserted' FROM t0_template
 
33945
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33946
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
33947
BEGIN
 
33948
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33949
f_charbig = 'updated by trigger'
 
33950
      WHERE f_int1 = new.f_int1;
 
33951
END|
 
33952
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33953
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33954
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33955
        
 
33956
# check trigger-1 success:      1
 
33957
DROP TRIGGER trg_1;
 
33958
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33959
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33960
f_charbig = 'just inserted'
 
33961
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33962
DELETE FROM t0_aux
 
33963
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33964
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33965
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33966
'just inserted' FROM t0_template
 
33967
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33968
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
33969
BEGIN
 
33970
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33971
f_charbig = 'updated by trigger'
 
33972
      WHERE f_int1 = new.f_int1;
 
33973
END|
 
33974
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33975
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33976
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33977
        
 
33978
# check trigger-2 success:      1
 
33979
DROP TRIGGER trg_1;
 
33980
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33981
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33982
f_charbig = 'just inserted'
 
33983
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33984
DELETE FROM t0_aux
 
33985
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33986
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33987
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33988
'just inserted' FROM t0_template
 
33989
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33990
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33991
BEGIN
 
33992
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33993
f_charbig = 'updated by trigger'
 
33994
      WHERE f_int1 = new.f_int1;
 
33995
END|
 
33996
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33997
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33998
        
 
33999
# check trigger-3 success:      1
 
34000
DROP TRIGGER trg_1;
 
34001
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34002
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34003
f_charbig = 'just inserted'
 
34004
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34005
DELETE FROM t0_aux
 
34006
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34007
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34008
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34009
'just inserted' FROM t0_template
 
34010
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34011
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34012
BEGIN
 
34013
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34014
f_charbig = 'updated by trigger'
 
34015
      WHERE f_int1 = - old.f_int1;
 
34016
END|
 
34017
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34018
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34019
        
 
34020
# check trigger-4 success:      1
 
34021
DROP TRIGGER trg_1;
 
34022
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34023
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34024
f_charbig = 'just inserted'
 
34025
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34026
DELETE FROM t0_aux
 
34027
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34028
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34029
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34030
'just inserted' FROM t0_template
 
34031
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34032
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34033
BEGIN
 
34034
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34035
f_charbig = 'updated by trigger'
 
34036
      WHERE f_int1 = new.f_int1;
 
34037
END|
 
34038
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34039
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34040
        
 
34041
# check trigger-5 success:      1
 
34042
DROP TRIGGER trg_1;
 
34043
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34044
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34045
f_charbig = 'just inserted'
 
34046
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34047
DELETE FROM t0_aux
 
34048
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34049
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34050
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34051
'just inserted' FROM t0_template
 
34052
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34053
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34054
BEGIN
 
34055
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34056
f_charbig = 'updated by trigger'
 
34057
      WHERE f_int1 = - old.f_int1;
 
34058
END|
 
34059
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34060
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34061
        
 
34062
# check trigger-6 success:      1
 
34063
DROP TRIGGER trg_1;
 
34064
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34065
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34066
f_charbig = 'just inserted'
 
34067
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34068
DELETE FROM t0_aux
 
34069
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34070
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34071
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34072
'just inserted' FROM t0_template
 
34073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34074
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
34075
BEGIN
 
34076
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34077
f_charbig = 'updated by trigger'
 
34078
      WHERE f_int1 = - old.f_int1;
 
34079
END|
 
34080
DELETE FROM t0_aux
 
34081
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34082
        
 
34083
# check trigger-7 success:      1
 
34084
DROP TRIGGER trg_1;
 
34085
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34086
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34087
f_charbig = 'just inserted'
 
34088
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34089
DELETE FROM t0_aux
 
34090
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34091
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34092
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34093
'just inserted' FROM t0_template
 
34094
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34095
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
34096
BEGIN
 
34097
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34098
f_charbig = 'updated by trigger'
 
34099
      WHERE f_int1 = - old.f_int1;
 
34100
END|
 
34101
DELETE FROM t0_aux
 
34102
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34103
        
 
34104
# check trigger-8 success:      1
 
34105
DROP TRIGGER trg_1;
 
34106
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34107
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34108
f_charbig = 'just inserted'
 
34109
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34110
DELETE FROM t0_aux
 
34111
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34112
DELETE FROM t1
 
34113
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34114
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
34115
BEGIN
 
34116
SET new.f_int1 = old.f_int1 + @max_row,
 
34117
new.f_int2 = old.f_int2 - @max_row,
 
34118
new.f_charbig = '####updated per update trigger####';
 
34119
END|
 
34120
UPDATE t1
 
34121
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
34122
f_charbig = '####updated per update statement itself####';
 
34123
        
 
34124
# check trigger-9 success:      1
 
34125
DROP TRIGGER trg_2;
 
34126
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34127
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34128
f_charbig = CONCAT('===',f_char1,'===');
 
34129
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
34130
BEGIN
 
34131
SET new.f_int1 = new.f_int1 + @max_row,
 
34132
new.f_int2 = new.f_int2 - @max_row,
 
34133
new.f_charbig = '####updated per update trigger####';
 
34134
END|
 
34135
UPDATE t1
 
34136
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
34137
f_charbig = '####updated per update statement itself####';
 
34138
        
 
34139
# check trigger-10 success:     1
 
34140
DROP TRIGGER trg_2;
 
34141
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34142
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34143
f_charbig = CONCAT('===',f_char1,'===');
 
34144
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
34145
BEGIN
 
34146
SET new.f_int1 = @my_max1 + @counter,
 
34147
new.f_int2 = @my_min2 - @counter,
 
34148
new.f_charbig = '####updated per insert trigger####';
 
34149
SET @counter = @counter + 1;
 
34150
END|
 
34151
SET @counter = 1;
 
34152
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
34153
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34154
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
34155
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
34156
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
34157
ORDER BY f_int1;
 
34158
DROP TRIGGER trg_3;
 
34159
        
 
34160
# check trigger-11 success:     1
 
34161
DELETE FROM t1
 
34162
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
34163
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
34164
AND f_charbig = '####updated per insert trigger####';
 
34165
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
34166
BEGIN
 
34167
SET new.f_int1 = @my_max1 + @counter,
 
34168
new.f_int2 = @my_min2 - @counter,
 
34169
new.f_charbig = '####updated per insert trigger####';
 
34170
SET @counter = @counter + 1;
 
34171
END|
 
34172
SET @counter = 1;
 
34173
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
34174
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
34175
SELECT CAST(f_int1 AS CHAR),
 
34176
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
34177
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
34178
ORDER BY f_int1;
 
34179
DROP TRIGGER trg_3;
 
34180
        
 
34181
# check trigger-12 success:     1
 
34182
DELETE FROM t1
 
34183
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
34184
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
34185
AND f_charbig = '####updated per insert trigger####';
 
34186
ANALYZE  TABLE t1;
 
34187
Table   Op      Msg_type        Msg_text
 
34188
test.t1 analyze status  OK
 
34189
CHECK    TABLE t1 EXTENDED;
 
34190
Table   Op      Msg_type        Msg_text
 
34191
test.t1 check   status  OK
 
34192
CHECKSUM TABLE t1 EXTENDED;
 
34193
Table   Checksum
 
34194
test.t1 <some_value>
 
34195
OPTIMIZE TABLE t1;
 
34196
Table   Op      Msg_type        Msg_text
 
34197
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
34198
test.t1 optimize        status  OK
 
34199
# check layout success:    1
 
34200
REPAIR   TABLE t1 EXTENDED;
 
34201
Table   Op      Msg_type        Msg_text
 
34202
test.t1 repair  note    The storage engine for the table doesn't support repair
 
34203
# check layout success:    1
 
34204
TRUNCATE t1;
 
34205
        
 
34206
# check TRUNCATE success:       1
 
34207
# check layout success:    1
 
34208
# End usability test (inc/partition_check.inc)
 
34209
DROP TABLE t1;
 
34210
CREATE TABLE t1 (
 
34211
f_int1 INTEGER,
 
34212
f_int2 INTEGER,
 
34213
f_char1 CHAR(20),
 
34214
f_char2 CHAR(20),
 
34215
f_charbig VARCHAR(1000)
 
34216
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
34217
)
 
34218
PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
 
34219
(PARTITION parta VALUES LESS THAN (0),
 
34220
PARTITION partb VALUES LESS THAN (5),
 
34221
PARTITION partc VALUES LESS THAN (10),
 
34222
PARTITION partd VALUES LESS THAN (10 + 5),
 
34223
PARTITION parte VALUES LESS THAN (20),
 
34224
PARTITION partf VALUES LESS THAN (2147483646));
 
34225
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34226
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
34227
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
34228
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
34229
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34230
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
34231
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
34232
# Start usability test (inc/partition_check.inc)
 
34233
create_command
 
34234
SHOW CREATE TABLE t1;
 
34235
Table   Create Table
 
34236
t1      CREATE TABLE `t1` (
 
34237
  `f_int1` int(11) DEFAULT NULL,
 
34238
  `f_int2` int(11) DEFAULT NULL,
 
34239
  `f_char1` char(20) DEFAULT NULL,
 
34240
  `f_char2` char(20) DEFAULT NULL,
 
34241
  `f_charbig` varchar(1000) DEFAULT NULL
 
34242
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
34243
/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
 
34244
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
34245
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
34246
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
34247
 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
 
34248
 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
 
34249
 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
34250
 
 
34251
# check prerequisites-1 success:    1
 
34252
# check COUNT(*) success:    1
 
34253
# check MIN/MAX(f_int1) success:    1
 
34254
# check MIN/MAX(f_int2) success:    1
 
34255
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34256
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
34257
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
34258
WHERE f_int1 IN (2,3);
 
34259
# check prerequisites-3 success:    1
 
34260
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
34261
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
34262
# check read via f_int1 success: 1
 
34263
# check read via f_int2 success: 1
 
34264
        
 
34265
# check multiple-1 success:     1
 
34266
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
34267
        
 
34268
# check multiple-2 success:     1
 
34269
INSERT INTO t1 SELECT * FROM t0_template
 
34270
WHERE MOD(f_int1,3) = 0;
 
34271
        
 
34272
# check multiple-3 success:     1
 
34273
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
34274
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
34275
AND @max_row_div2 + @max_row_div4;
 
34276
        
 
34277
# check multiple-4 success:     1
 
34278
DELETE FROM t1
 
34279
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
34280
AND @max_row_div2 + @max_row_div4 + @max_row;
 
34281
        
 
34282
# check multiple-5 success:     1
 
34283
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
34284
INSERT INTO t1
 
34285
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
34286
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
34287
f_charbig = '#SINGLE#';
 
34288
        
 
34289
# check single-1 success:       1
 
34290
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
34291
INSERT INTO t1
 
34292
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
34293
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
34294
f_charbig = '#SINGLE#';
 
34295
        
 
34296
# check single-2 success:       1
 
34297
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
34298
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
34299
UPDATE t1 SET f_int1 = @cur_value2
 
34300
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
34301
        
 
34302
# check single-3 success:       1
 
34303
SET @cur_value1= -1;
 
34304
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
34305
UPDATE t1 SET f_int1 = @cur_value1
 
34306
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
34307
        
 
34308
# check single-4 success:       1
 
34309
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
34310
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
34311
        
 
34312
# check single-5 success:       1
 
34313
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
34314
        
 
34315
# check single-6 success:       1
 
34316
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
34317
ERROR HY000: Table has no partition for value 2147483647
 
34318
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
34319
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
34320
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
34321
f_charbig = '#NULL#';
 
34322
INSERT INTO t1
 
34323
SET f_int1 = NULL , f_int2 = -@max_row,
 
34324
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
34325
f_charbig = '#NULL#';
 
34326
# check null success:    1
 
34327
        
 
34328
# check null-1 success:         1
 
34329
UPDATE t1 SET f_int1 = -@max_row
 
34330
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34331
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34332
        
 
34333
# check null-2 success:         1
 
34334
UPDATE t1 SET f_int1 = NULL
 
34335
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34336
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34337
        
 
34338
# check null-3 success:         1
 
34339
DELETE FROM t1
 
34340
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34341
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34342
        
 
34343
# check null-4 success:         1
 
34344
DELETE FROM t1
 
34345
WHERE f_int1 = 0 AND f_int2 = 0
 
34346
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
34347
AND f_charbig = '#NULL#';
 
34348
SET AUTOCOMMIT= 0;
 
34349
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34350
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34351
FROM t0_template source_tab
 
34352
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34353
        
 
34354
# check transactions-1 success:         1
 
34355
COMMIT WORK;
 
34356
        
 
34357
# check transactions-2 success:         1
 
34358
ROLLBACK WORK;
 
34359
        
 
34360
# check transactions-3 success:         1
 
34361
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34362
COMMIT WORK;
 
34363
ROLLBACK WORK;
 
34364
        
 
34365
# check transactions-4 success:         1
 
34366
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34367
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34368
FROM t0_template source_tab
 
34369
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34370
        
 
34371
# check transactions-5 success:         1
 
34372
ROLLBACK WORK;
 
34373
        
 
34374
# check transactions-6 success:         1
 
34375
# INFO: Storage engine used for t1 seems to be transactional.
 
34376
COMMIT;
 
34377
        
 
34378
# check transactions-7 success:         1
 
34379
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34380
COMMIT WORK;
 
34381
SET @@session.sql_mode = 'traditional';
 
34382
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
34383
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34384
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
34385
'', '', 'was inserted' FROM t0_template
 
34386
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34387
ERROR 22012: Division by 0
 
34388
COMMIT;
 
34389
        
 
34390
# check transactions-8 success:         1
 
34391
# INFO: Storage engine used for t1 seems to be able to revert
 
34392
#       changes made by the failing statement.
 
34393
SET @@session.sql_mode = '';
 
34394
SET AUTOCOMMIT= 1;
 
34395
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34396
COMMIT WORK;
 
34397
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
34398
        
 
34399
# check special-1 success:      1
 
34400
UPDATE t1 SET f_charbig = '';
 
34401
        
 
34402
# check special-2 success:      1
 
34403
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
34404
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34405
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
34406
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34407
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34408
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34409
'just inserted' FROM t0_template
 
34410
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34411
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
34412
BEGIN
 
34413
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34414
f_charbig = 'updated by trigger'
 
34415
      WHERE f_int1 = new.f_int1;
 
34416
END|
 
34417
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34418
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34419
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34420
        
 
34421
# check trigger-1 success:      1
 
34422
DROP TRIGGER trg_1;
 
34423
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34424
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34425
f_charbig = 'just inserted'
 
34426
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34427
DELETE FROM t0_aux
 
34428
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34429
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34430
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34431
'just inserted' FROM t0_template
 
34432
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34433
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
34434
BEGIN
 
34435
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34436
f_charbig = 'updated by trigger'
 
34437
      WHERE f_int1 = new.f_int1;
 
34438
END|
 
34439
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34440
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34441
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34442
        
 
34443
# check trigger-2 success:      1
 
34444
DROP TRIGGER trg_1;
 
34445
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34446
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34447
f_charbig = 'just inserted'
 
34448
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34449
DELETE FROM t0_aux
 
34450
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34451
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34452
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34453
'just inserted' FROM t0_template
 
34454
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34455
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34456
BEGIN
 
34457
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34458
f_charbig = 'updated by trigger'
 
34459
      WHERE f_int1 = new.f_int1;
 
34460
END|
 
34461
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34462
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34463
        
 
34464
# check trigger-3 success:      1
 
34465
DROP TRIGGER trg_1;
 
34466
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34467
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34468
f_charbig = 'just inserted'
 
34469
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34470
DELETE FROM t0_aux
 
34471
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34472
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34473
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34474
'just inserted' FROM t0_template
 
34475
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34476
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34477
BEGIN
 
34478
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34479
f_charbig = 'updated by trigger'
 
34480
      WHERE f_int1 = - old.f_int1;
 
34481
END|
 
34482
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34483
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34484
        
 
34485
# check trigger-4 success:      1
 
34486
DROP TRIGGER trg_1;
 
34487
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34488
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34489
f_charbig = 'just inserted'
 
34490
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34491
DELETE FROM t0_aux
 
34492
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34493
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34494
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34495
'just inserted' FROM t0_template
 
34496
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34497
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34498
BEGIN
 
34499
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34500
f_charbig = 'updated by trigger'
 
34501
      WHERE f_int1 = new.f_int1;
 
34502
END|
 
34503
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34504
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34505
        
 
34506
# check trigger-5 success:      1
 
34507
DROP TRIGGER trg_1;
 
34508
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34509
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34510
f_charbig = 'just inserted'
 
34511
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34512
DELETE FROM t0_aux
 
34513
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34514
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34515
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34516
'just inserted' FROM t0_template
 
34517
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34518
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34519
BEGIN
 
34520
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34521
f_charbig = 'updated by trigger'
 
34522
      WHERE f_int1 = - old.f_int1;
 
34523
END|
 
34524
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34525
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34526
        
 
34527
# check trigger-6 success:      1
 
34528
DROP TRIGGER trg_1;
 
34529
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34530
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34531
f_charbig = 'just inserted'
 
34532
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34533
DELETE FROM t0_aux
 
34534
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34535
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34536
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34537
'just inserted' FROM t0_template
 
34538
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34539
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
34540
BEGIN
 
34541
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34542
f_charbig = 'updated by trigger'
 
34543
      WHERE f_int1 = - old.f_int1;
 
34544
END|
 
34545
DELETE FROM t0_aux
 
34546
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34547
        
 
34548
# check trigger-7 success:      1
 
34549
DROP TRIGGER trg_1;
 
34550
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34551
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34552
f_charbig = 'just inserted'
 
34553
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34554
DELETE FROM t0_aux
 
34555
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34556
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34557
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34558
'just inserted' FROM t0_template
 
34559
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34560
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
34561
BEGIN
 
34562
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34563
f_charbig = 'updated by trigger'
 
34564
      WHERE f_int1 = - old.f_int1;
 
34565
END|
 
34566
DELETE FROM t0_aux
 
34567
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34568
        
 
34569
# check trigger-8 success:      1
 
34570
DROP TRIGGER trg_1;
 
34571
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34572
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34573
f_charbig = 'just inserted'
 
34574
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34575
DELETE FROM t0_aux
 
34576
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34577
DELETE FROM t1
 
34578
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34579
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
34580
BEGIN
 
34581
SET new.f_int1 = old.f_int1 + @max_row,
 
34582
new.f_int2 = old.f_int2 - @max_row,
 
34583
new.f_charbig = '####updated per update trigger####';
 
34584
END|
 
34585
UPDATE t1
 
34586
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
34587
f_charbig = '####updated per update statement itself####';
 
34588
        
 
34589
# check trigger-9 success:      1
 
34590
DROP TRIGGER trg_2;
 
34591
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34592
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34593
f_charbig = CONCAT('===',f_char1,'===');
 
34594
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
34595
BEGIN
 
34596
SET new.f_int1 = new.f_int1 + @max_row,
 
34597
new.f_int2 = new.f_int2 - @max_row,
 
34598
new.f_charbig = '####updated per update trigger####';
 
34599
END|
 
34600
UPDATE t1
 
34601
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
34602
f_charbig = '####updated per update statement itself####';
 
34603
        
 
34604
# check trigger-10 success:     1
 
34605
DROP TRIGGER trg_2;
 
34606
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34607
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34608
f_charbig = CONCAT('===',f_char1,'===');
 
34609
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
34610
BEGIN
 
34611
SET new.f_int1 = @my_max1 + @counter,
 
34612
new.f_int2 = @my_min2 - @counter,
 
34613
new.f_charbig = '####updated per insert trigger####';
 
34614
SET @counter = @counter + 1;
 
34615
END|
 
34616
SET @counter = 1;
 
34617
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
34618
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34619
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
34620
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
34621
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
34622
ORDER BY f_int1;
 
34623
DROP TRIGGER trg_3;
 
34624
        
 
34625
# check trigger-11 success:     1
 
34626
DELETE FROM t1
 
34627
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
34628
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
34629
AND f_charbig = '####updated per insert trigger####';
 
34630
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
34631
BEGIN
 
34632
SET new.f_int1 = @my_max1 + @counter,
 
34633
new.f_int2 = @my_min2 - @counter,
 
34634
new.f_charbig = '####updated per insert trigger####';
 
34635
SET @counter = @counter + 1;
 
34636
END|
 
34637
SET @counter = 1;
 
34638
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
34639
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
34640
SELECT CAST(f_int1 AS CHAR),
 
34641
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
34642
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
34643
ORDER BY f_int1;
 
34644
DROP TRIGGER trg_3;
 
34645
        
 
34646
# check trigger-12 success:     1
 
34647
DELETE FROM t1
 
34648
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
34649
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
34650
AND f_charbig = '####updated per insert trigger####';
 
34651
ANALYZE  TABLE t1;
 
34652
Table   Op      Msg_type        Msg_text
 
34653
test.t1 analyze status  OK
 
34654
CHECK    TABLE t1 EXTENDED;
 
34655
Table   Op      Msg_type        Msg_text
 
34656
test.t1 check   status  OK
 
34657
CHECKSUM TABLE t1 EXTENDED;
 
34658
Table   Checksum
 
34659
test.t1 <some_value>
 
34660
OPTIMIZE TABLE t1;
 
34661
Table   Op      Msg_type        Msg_text
 
34662
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
34663
test.t1 optimize        status  OK
 
34664
# check layout success:    1
 
34665
REPAIR   TABLE t1 EXTENDED;
 
34666
Table   Op      Msg_type        Msg_text
 
34667
test.t1 repair  note    The storage engine for the table doesn't support repair
 
34668
# check layout success:    1
 
34669
TRUNCATE t1;
 
34670
        
 
34671
# check TRUNCATE success:       1
 
34672
# check layout success:    1
 
34673
# End usability test (inc/partition_check.inc)
 
34674
DROP TABLE t1;
 
34675
CREATE TABLE t1 (
 
34676
f_int1 INTEGER,
 
34677
f_int2 INTEGER,
 
34678
f_char1 CHAR(20),
 
34679
f_char2 CHAR(20),
 
34680
f_charbig VARCHAR(1000)
 
34681
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
34682
)
 
34683
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
 
34684
(PARTITION parta VALUES LESS THAN (0),
 
34685
PARTITION partb VALUES LESS THAN (5),
 
34686
PARTITION partc VALUES LESS THAN (10),
 
34687
PARTITION partd VALUES LESS THAN (2147483646));
 
34688
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34689
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
34690
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
34691
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
34692
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34693
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
34694
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
34695
# Start usability test (inc/partition_check.inc)
 
34696
create_command
 
34697
SHOW CREATE TABLE t1;
 
34698
Table   Create Table
 
34699
t1      CREATE TABLE `t1` (
 
34700
  `f_int1` int(11) DEFAULT NULL,
 
34701
  `f_int2` int(11) DEFAULT NULL,
 
34702
  `f_char1` char(20) DEFAULT NULL,
 
34703
  `f_char2` char(20) DEFAULT NULL,
 
34704
  `f_charbig` varchar(1000) DEFAULT NULL
 
34705
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
34706
/*!50100 PARTITION BY RANGE (f_int1)
 
34707
SUBPARTITION BY HASH (f_int2)
 
34708
SUBPARTITIONS 2
 
34709
(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
 
34710
 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
 
34711
 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
 
34712
 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
34713
 
 
34714
# check prerequisites-1 success:    1
 
34715
# check COUNT(*) success:    1
 
34716
# check MIN/MAX(f_int1) success:    1
 
34717
# check MIN/MAX(f_int2) success:    1
 
34718
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34719
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
34720
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
34721
WHERE f_int1 IN (2,3);
 
34722
# check prerequisites-3 success:    1
 
34723
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
34724
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
34725
# check read via f_int1 success: 1
 
34726
# check read via f_int2 success: 1
 
34727
        
 
34728
# check multiple-1 success:     1
 
34729
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
34730
        
 
34731
# check multiple-2 success:     1
 
34732
INSERT INTO t1 SELECT * FROM t0_template
 
34733
WHERE MOD(f_int1,3) = 0;
 
34734
        
 
34735
# check multiple-3 success:     1
 
34736
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
34737
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
34738
AND @max_row_div2 + @max_row_div4;
 
34739
        
 
34740
# check multiple-4 success:     1
 
34741
DELETE FROM t1
 
34742
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
34743
AND @max_row_div2 + @max_row_div4 + @max_row;
 
34744
        
 
34745
# check multiple-5 success:     1
 
34746
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
34747
INSERT INTO t1
 
34748
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
34749
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
34750
f_charbig = '#SINGLE#';
 
34751
        
 
34752
# check single-1 success:       1
 
34753
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
34754
INSERT INTO t1
 
34755
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
34756
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
34757
f_charbig = '#SINGLE#';
 
34758
        
 
34759
# check single-2 success:       1
 
34760
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
34761
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
34762
UPDATE t1 SET f_int1 = @cur_value2
 
34763
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
34764
        
 
34765
# check single-3 success:       1
 
34766
SET @cur_value1= -1;
 
34767
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
34768
UPDATE t1 SET f_int1 = @cur_value1
 
34769
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
34770
        
 
34771
# check single-4 success:       1
 
34772
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
34773
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
34774
        
 
34775
# check single-5 success:       1
 
34776
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
34777
        
 
34778
# check single-6 success:       1
 
34779
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
34780
ERROR HY000: Table has no partition for value 2147483647
 
34781
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
34782
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
34783
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
34784
f_charbig = '#NULL#';
 
34785
INSERT INTO t1
 
34786
SET f_int1 = NULL , f_int2 = -@max_row,
 
34787
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
34788
f_charbig = '#NULL#';
 
34789
# check null success:    1
 
34790
        
 
34791
# check null-1 success:         1
 
34792
UPDATE t1 SET f_int1 = -@max_row
 
34793
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34794
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34795
        
 
34796
# check null-2 success:         1
 
34797
UPDATE t1 SET f_int1 = NULL
 
34798
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34799
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34800
        
 
34801
# check null-3 success:         1
 
34802
DELETE FROM t1
 
34803
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34804
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34805
        
 
34806
# check null-4 success:         1
 
34807
DELETE FROM t1
 
34808
WHERE f_int1 = 0 AND f_int2 = 0
 
34809
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
34810
AND f_charbig = '#NULL#';
 
34811
SET AUTOCOMMIT= 0;
 
34812
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34813
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34814
FROM t0_template source_tab
 
34815
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34816
        
 
34817
# check transactions-1 success:         1
 
34818
COMMIT WORK;
 
34819
        
 
34820
# check transactions-2 success:         1
 
34821
ROLLBACK WORK;
 
34822
        
 
34823
# check transactions-3 success:         1
 
34824
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34825
COMMIT WORK;
 
34826
ROLLBACK WORK;
 
34827
        
 
34828
# check transactions-4 success:         1
 
34829
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34830
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34831
FROM t0_template source_tab
 
34832
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34833
        
 
34834
# check transactions-5 success:         1
 
34835
ROLLBACK WORK;
 
34836
        
 
34837
# check transactions-6 success:         1
 
34838
# INFO: Storage engine used for t1 seems to be transactional.
 
34839
COMMIT;
 
34840
        
 
34841
# check transactions-7 success:         1
 
34842
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34843
COMMIT WORK;
 
34844
SET @@session.sql_mode = 'traditional';
 
34845
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
34846
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34847
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
34848
'', '', 'was inserted' FROM t0_template
 
34849
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34850
ERROR 22012: Division by 0
 
34851
COMMIT;
 
34852
        
 
34853
# check transactions-8 success:         1
 
34854
# INFO: Storage engine used for t1 seems to be able to revert
 
34855
#       changes made by the failing statement.
 
34856
SET @@session.sql_mode = '';
 
34857
SET AUTOCOMMIT= 1;
 
34858
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34859
COMMIT WORK;
 
34860
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
34861
        
 
34862
# check special-1 success:      1
 
34863
UPDATE t1 SET f_charbig = '';
 
34864
        
 
34865
# check special-2 success:      1
 
34866
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
34867
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34868
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
34869
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34870
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34871
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34872
'just inserted' FROM t0_template
 
34873
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34874
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
34875
BEGIN
 
34876
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34877
f_charbig = 'updated by trigger'
 
34878
      WHERE f_int1 = new.f_int1;
 
34879
END|
 
34880
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34881
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34882
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34883
        
 
34884
# check trigger-1 success:      1
 
34885
DROP TRIGGER trg_1;
 
34886
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34887
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34888
f_charbig = 'just inserted'
 
34889
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34890
DELETE FROM t0_aux
 
34891
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34892
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34893
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34894
'just inserted' FROM t0_template
 
34895
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34896
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
34897
BEGIN
 
34898
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34899
f_charbig = 'updated by trigger'
 
34900
      WHERE f_int1 = new.f_int1;
 
34901
END|
 
34902
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34903
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34904
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34905
        
 
34906
# check trigger-2 success:      1
 
34907
DROP TRIGGER trg_1;
 
34908
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34909
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34910
f_charbig = 'just inserted'
 
34911
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34912
DELETE FROM t0_aux
 
34913
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34914
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34915
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34916
'just inserted' FROM t0_template
 
34917
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34918
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34919
BEGIN
 
34920
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34921
f_charbig = 'updated by trigger'
 
34922
      WHERE f_int1 = new.f_int1;
 
34923
END|
 
34924
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34925
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34926
        
 
34927
# check trigger-3 success:      1
 
34928
DROP TRIGGER trg_1;
 
34929
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34930
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34931
f_charbig = 'just inserted'
 
34932
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34933
DELETE FROM t0_aux
 
34934
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34935
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34936
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34937
'just inserted' FROM t0_template
 
34938
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34939
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34940
BEGIN
 
34941
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34942
f_charbig = 'updated by trigger'
 
34943
      WHERE f_int1 = - old.f_int1;
 
34944
END|
 
34945
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34946
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34947
        
 
34948
# check trigger-4 success:      1
 
34949
DROP TRIGGER trg_1;
 
34950
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34951
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34952
f_charbig = 'just inserted'
 
34953
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34954
DELETE FROM t0_aux
 
34955
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34956
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34957
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34958
'just inserted' FROM t0_template
 
34959
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34960
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34961
BEGIN
 
34962
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34963
f_charbig = 'updated by trigger'
 
34964
      WHERE f_int1 = new.f_int1;
 
34965
END|
 
34966
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34967
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34968
        
 
34969
# check trigger-5 success:      1
 
34970
DROP TRIGGER trg_1;
 
34971
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34972
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34973
f_charbig = 'just inserted'
 
34974
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34975
DELETE FROM t0_aux
 
34976
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34977
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34978
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34979
'just inserted' FROM t0_template
 
34980
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34981
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34982
BEGIN
 
34983
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34984
f_charbig = 'updated by trigger'
 
34985
      WHERE f_int1 = - old.f_int1;
 
34986
END|
 
34987
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34988
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34989
        
 
34990
# check trigger-6 success:      1
 
34991
DROP TRIGGER trg_1;
 
34992
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34993
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34994
f_charbig = 'just inserted'
 
34995
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34996
DELETE FROM t0_aux
 
34997
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34998
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34999
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35000
'just inserted' FROM t0_template
 
35001
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35002
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
35003
BEGIN
 
35004
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35005
f_charbig = 'updated by trigger'
 
35006
      WHERE f_int1 = - old.f_int1;
 
35007
END|
 
35008
DELETE FROM t0_aux
 
35009
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35010
        
 
35011
# check trigger-7 success:      1
 
35012
DROP TRIGGER trg_1;
 
35013
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35014
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35015
f_charbig = 'just inserted'
 
35016
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35017
DELETE FROM t0_aux
 
35018
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35019
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35020
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35021
'just inserted' FROM t0_template
 
35022
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35023
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
35024
BEGIN
 
35025
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35026
f_charbig = 'updated by trigger'
 
35027
      WHERE f_int1 = - old.f_int1;
 
35028
END|
 
35029
DELETE FROM t0_aux
 
35030
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35031
        
 
35032
# check trigger-8 success:      1
 
35033
DROP TRIGGER trg_1;
 
35034
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35035
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35036
f_charbig = 'just inserted'
 
35037
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35038
DELETE FROM t0_aux
 
35039
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35040
DELETE FROM t1
 
35041
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35042
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
35043
BEGIN
 
35044
SET new.f_int1 = old.f_int1 + @max_row,
 
35045
new.f_int2 = old.f_int2 - @max_row,
 
35046
new.f_charbig = '####updated per update trigger####';
 
35047
END|
 
35048
UPDATE t1
 
35049
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
35050
f_charbig = '####updated per update statement itself####';
 
35051
        
 
35052
# check trigger-9 success:      1
 
35053
DROP TRIGGER trg_2;
 
35054
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35055
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35056
f_charbig = CONCAT('===',f_char1,'===');
 
35057
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
35058
BEGIN
 
35059
SET new.f_int1 = new.f_int1 + @max_row,
 
35060
new.f_int2 = new.f_int2 - @max_row,
 
35061
new.f_charbig = '####updated per update trigger####';
 
35062
END|
 
35063
UPDATE t1
 
35064
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
35065
f_charbig = '####updated per update statement itself####';
 
35066
        
 
35067
# check trigger-10 success:     1
 
35068
DROP TRIGGER trg_2;
 
35069
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35070
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35071
f_charbig = CONCAT('===',f_char1,'===');
 
35072
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
35073
BEGIN
 
35074
SET new.f_int1 = @my_max1 + @counter,
 
35075
new.f_int2 = @my_min2 - @counter,
 
35076
new.f_charbig = '####updated per insert trigger####';
 
35077
SET @counter = @counter + 1;
 
35078
END|
 
35079
SET @counter = 1;
 
35080
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
35081
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35082
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
35083
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
35084
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
35085
ORDER BY f_int1;
 
35086
DROP TRIGGER trg_3;
 
35087
        
 
35088
# check trigger-11 success:     1
 
35089
DELETE FROM t1
 
35090
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
35091
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
35092
AND f_charbig = '####updated per insert trigger####';
 
35093
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
35094
BEGIN
 
35095
SET new.f_int1 = @my_max1 + @counter,
 
35096
new.f_int2 = @my_min2 - @counter,
 
35097
new.f_charbig = '####updated per insert trigger####';
 
35098
SET @counter = @counter + 1;
 
35099
END|
 
35100
SET @counter = 1;
 
35101
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
35102
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
35103
SELECT CAST(f_int1 AS CHAR),
 
35104
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
35105
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
35106
ORDER BY f_int1;
 
35107
DROP TRIGGER trg_3;
 
35108
        
 
35109
# check trigger-12 success:     1
 
35110
DELETE FROM t1
 
35111
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
35112
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
35113
AND f_charbig = '####updated per insert trigger####';
 
35114
ANALYZE  TABLE t1;
 
35115
Table   Op      Msg_type        Msg_text
 
35116
test.t1 analyze status  OK
 
35117
CHECK    TABLE t1 EXTENDED;
 
35118
Table   Op      Msg_type        Msg_text
 
35119
test.t1 check   status  OK
 
35120
CHECKSUM TABLE t1 EXTENDED;
 
35121
Table   Checksum
 
35122
test.t1 <some_value>
 
35123
OPTIMIZE TABLE t1;
 
35124
Table   Op      Msg_type        Msg_text
 
35125
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
35126
test.t1 optimize        status  OK
 
35127
# check layout success:    1
 
35128
REPAIR   TABLE t1 EXTENDED;
 
35129
Table   Op      Msg_type        Msg_text
 
35130
test.t1 repair  note    The storage engine for the table doesn't support repair
 
35131
# check layout success:    1
 
35132
TRUNCATE t1;
 
35133
        
 
35134
# check TRUNCATE success:       1
 
35135
# check layout success:    1
 
35136
# End usability test (inc/partition_check.inc)
 
35137
DROP TABLE t1;
 
35138
CREATE TABLE t1 (
 
35139
f_int1 INTEGER,
 
35140
f_int2 INTEGER,
 
35141
f_char1 CHAR(20),
 
35142
f_char2 CHAR(20),
 
35143
f_charbig VARCHAR(1000)
 
35144
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
35145
)
 
35146
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
 
35147
(PARTITION part1 VALUES LESS THAN (0)
 
35148
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
35149
PARTITION part2 VALUES LESS THAN (5)
 
35150
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
35151
PARTITION part3 VALUES LESS THAN (10)
 
35152
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
35153
PARTITION part4 VALUES LESS THAN (2147483646)
 
35154
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
35155
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35156
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
35157
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
35158
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
35159
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35160
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
35161
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
35162
# Start usability test (inc/partition_check.inc)
 
35163
create_command
 
35164
SHOW CREATE TABLE t1;
 
35165
Table   Create Table
 
35166
t1      CREATE TABLE `t1` (
 
35167
  `f_int1` int(11) DEFAULT NULL,
 
35168
  `f_int2` int(11) DEFAULT NULL,
 
35169
  `f_char1` char(20) DEFAULT NULL,
 
35170
  `f_char2` char(20) DEFAULT NULL,
 
35171
  `f_charbig` varchar(1000) DEFAULT NULL
 
35172
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
35173
/*!50100 PARTITION BY RANGE (f_int1)
 
35174
SUBPARTITION BY KEY (f_int2)
 
35175
(PARTITION part1 VALUES LESS THAN (0)
 
35176
 (SUBPARTITION subpart11 ENGINE = InnoDB,
 
35177
  SUBPARTITION subpart12 ENGINE = InnoDB),
 
35178
 PARTITION part2 VALUES LESS THAN (5)
 
35179
 (SUBPARTITION subpart21 ENGINE = InnoDB,
 
35180
  SUBPARTITION subpart22 ENGINE = InnoDB),
 
35181
 PARTITION part3 VALUES LESS THAN (10)
 
35182
 (SUBPARTITION subpart31 ENGINE = InnoDB,
 
35183
  SUBPARTITION subpart32 ENGINE = InnoDB),
 
35184
 PARTITION part4 VALUES LESS THAN (2147483646)
 
35185
 (SUBPARTITION subpart41 ENGINE = InnoDB,
 
35186
  SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
35187
 
 
35188
# check prerequisites-1 success:    1
 
35189
# check COUNT(*) success:    1
 
35190
# check MIN/MAX(f_int1) success:    1
 
35191
# check MIN/MAX(f_int2) success:    1
 
35192
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35193
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
35194
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
35195
WHERE f_int1 IN (2,3);
 
35196
# check prerequisites-3 success:    1
 
35197
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
35198
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
35199
# check read via f_int1 success: 1
 
35200
# check read via f_int2 success: 1
 
35201
        
 
35202
# check multiple-1 success:     1
 
35203
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
35204
        
 
35205
# check multiple-2 success:     1
 
35206
INSERT INTO t1 SELECT * FROM t0_template
 
35207
WHERE MOD(f_int1,3) = 0;
 
35208
        
 
35209
# check multiple-3 success:     1
 
35210
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
35211
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
35212
AND @max_row_div2 + @max_row_div4;
 
35213
        
 
35214
# check multiple-4 success:     1
 
35215
DELETE FROM t1
 
35216
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
35217
AND @max_row_div2 + @max_row_div4 + @max_row;
 
35218
        
 
35219
# check multiple-5 success:     1
 
35220
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
35221
INSERT INTO t1
 
35222
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
35223
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
35224
f_charbig = '#SINGLE#';
 
35225
        
 
35226
# check single-1 success:       1
 
35227
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
35228
INSERT INTO t1
 
35229
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
35230
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
35231
f_charbig = '#SINGLE#';
 
35232
        
 
35233
# check single-2 success:       1
 
35234
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
35235
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
35236
UPDATE t1 SET f_int1 = @cur_value2
 
35237
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
35238
        
 
35239
# check single-3 success:       1
 
35240
SET @cur_value1= -1;
 
35241
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
35242
UPDATE t1 SET f_int1 = @cur_value1
 
35243
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
35244
        
 
35245
# check single-4 success:       1
 
35246
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
35247
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
35248
        
 
35249
# check single-5 success:       1
 
35250
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
35251
        
 
35252
# check single-6 success:       1
 
35253
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
35254
ERROR HY000: Table has no partition for value 2147483647
 
35255
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
35256
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
35257
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
35258
f_charbig = '#NULL#';
 
35259
INSERT INTO t1
 
35260
SET f_int1 = NULL , f_int2 = -@max_row,
 
35261
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
35262
f_charbig = '#NULL#';
 
35263
# check null success:    1
 
35264
        
 
35265
# check null-1 success:         1
 
35266
UPDATE t1 SET f_int1 = -@max_row
 
35267
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
35268
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
35269
        
 
35270
# check null-2 success:         1
 
35271
UPDATE t1 SET f_int1 = NULL
 
35272
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
35273
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
35274
        
 
35275
# check null-3 success:         1
 
35276
DELETE FROM t1
 
35277
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
35278
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
35279
        
 
35280
# check null-4 success:         1
 
35281
DELETE FROM t1
 
35282
WHERE f_int1 = 0 AND f_int2 = 0
 
35283
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
35284
AND f_charbig = '#NULL#';
 
35285
SET AUTOCOMMIT= 0;
 
35286
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35287
SELECT f_int1, f_int1, '', '', 'was inserted'
 
35288
FROM t0_template source_tab
 
35289
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35290
        
 
35291
# check transactions-1 success:         1
 
35292
COMMIT WORK;
 
35293
        
 
35294
# check transactions-2 success:         1
 
35295
ROLLBACK WORK;
 
35296
        
 
35297
# check transactions-3 success:         1
 
35298
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35299
COMMIT WORK;
 
35300
ROLLBACK WORK;
 
35301
        
 
35302
# check transactions-4 success:         1
 
35303
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35304
SELECT f_int1, f_int1, '', '', 'was inserted'
 
35305
FROM t0_template source_tab
 
35306
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35307
        
 
35308
# check transactions-5 success:         1
 
35309
ROLLBACK WORK;
 
35310
        
 
35311
# check transactions-6 success:         1
 
35312
# INFO: Storage engine used for t1 seems to be transactional.
 
35313
COMMIT;
 
35314
        
 
35315
# check transactions-7 success:         1
 
35316
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35317
COMMIT WORK;
 
35318
SET @@session.sql_mode = 'traditional';
 
35319
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
35320
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35321
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
35322
'', '', 'was inserted' FROM t0_template
 
35323
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35324
ERROR 22012: Division by 0
 
35325
COMMIT;
 
35326
        
 
35327
# check transactions-8 success:         1
 
35328
# INFO: Storage engine used for t1 seems to be able to revert
 
35329
#       changes made by the failing statement.
 
35330
SET @@session.sql_mode = '';
 
35331
SET AUTOCOMMIT= 1;
 
35332
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35333
COMMIT WORK;
 
35334
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
35335
        
 
35336
# check special-1 success:      1
 
35337
UPDATE t1 SET f_charbig = '';
 
35338
        
 
35339
# check special-2 success:      1
 
35340
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
35341
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35342
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
35343
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35344
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35345
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35346
'just inserted' FROM t0_template
 
35347
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35348
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
35349
BEGIN
 
35350
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35351
f_charbig = 'updated by trigger'
 
35352
      WHERE f_int1 = new.f_int1;
 
35353
END|
 
35354
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35355
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
35356
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35357
        
 
35358
# check trigger-1 success:      1
 
35359
DROP TRIGGER trg_1;
 
35360
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35361
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35362
f_charbig = 'just inserted'
 
35363
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35364
DELETE FROM t0_aux
 
35365
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35366
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35367
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35368
'just inserted' FROM t0_template
 
35369
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35370
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
35371
BEGIN
 
35372
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35373
f_charbig = 'updated by trigger'
 
35374
      WHERE f_int1 = new.f_int1;
 
35375
END|
 
35376
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35377
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
35378
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35379
        
 
35380
# check trigger-2 success:      1
 
35381
DROP TRIGGER trg_1;
 
35382
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35383
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35384
f_charbig = 'just inserted'
 
35385
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35386
DELETE FROM t0_aux
 
35387
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35388
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35389
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35390
'just inserted' FROM t0_template
 
35391
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35392
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
35393
BEGIN
 
35394
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35395
f_charbig = 'updated by trigger'
 
35396
      WHERE f_int1 = new.f_int1;
 
35397
END|
 
35398
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35399
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35400
        
 
35401
# check trigger-3 success:      1
 
35402
DROP TRIGGER trg_1;
 
35403
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35404
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35405
f_charbig = 'just inserted'
 
35406
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35407
DELETE FROM t0_aux
 
35408
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35409
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35410
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35411
'just inserted' FROM t0_template
 
35412
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35413
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
35414
BEGIN
 
35415
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35416
f_charbig = 'updated by trigger'
 
35417
      WHERE f_int1 = - old.f_int1;
 
35418
END|
 
35419
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35420
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35421
        
 
35422
# check trigger-4 success:      1
 
35423
DROP TRIGGER trg_1;
 
35424
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35425
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35426
f_charbig = 'just inserted'
 
35427
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35428
DELETE FROM t0_aux
 
35429
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35430
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35431
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35432
'just inserted' FROM t0_template
 
35433
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35434
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
35435
BEGIN
 
35436
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35437
f_charbig = 'updated by trigger'
 
35438
      WHERE f_int1 = new.f_int1;
 
35439
END|
 
35440
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35441
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35442
        
 
35443
# check trigger-5 success:      1
 
35444
DROP TRIGGER trg_1;
 
35445
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35446
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35447
f_charbig = 'just inserted'
 
35448
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35449
DELETE FROM t0_aux
 
35450
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35451
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35452
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35453
'just inserted' FROM t0_template
 
35454
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35455
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
35456
BEGIN
 
35457
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35458
f_charbig = 'updated by trigger'
 
35459
      WHERE f_int1 = - old.f_int1;
 
35460
END|
 
35461
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35462
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35463
        
 
35464
# check trigger-6 success:      1
 
35465
DROP TRIGGER trg_1;
 
35466
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35467
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35468
f_charbig = 'just inserted'
 
35469
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35470
DELETE FROM t0_aux
 
35471
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35472
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35473
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35474
'just inserted' FROM t0_template
 
35475
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35476
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
35477
BEGIN
 
35478
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35479
f_charbig = 'updated by trigger'
 
35480
      WHERE f_int1 = - old.f_int1;
 
35481
END|
 
35482
DELETE FROM t0_aux
 
35483
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35484
        
 
35485
# check trigger-7 success:      1
 
35486
DROP TRIGGER trg_1;
 
35487
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35488
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35489
f_charbig = 'just inserted'
 
35490
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35491
DELETE FROM t0_aux
 
35492
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35493
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35494
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35495
'just inserted' FROM t0_template
 
35496
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35497
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
35498
BEGIN
 
35499
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35500
f_charbig = 'updated by trigger'
 
35501
      WHERE f_int1 = - old.f_int1;
 
35502
END|
 
35503
DELETE FROM t0_aux
 
35504
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35505
        
 
35506
# check trigger-8 success:      1
 
35507
DROP TRIGGER trg_1;
 
35508
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35509
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35510
f_charbig = 'just inserted'
 
35511
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35512
DELETE FROM t0_aux
 
35513
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35514
DELETE FROM t1
 
35515
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35516
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
35517
BEGIN
 
35518
SET new.f_int1 = old.f_int1 + @max_row,
 
35519
new.f_int2 = old.f_int2 - @max_row,
 
35520
new.f_charbig = '####updated per update trigger####';
 
35521
END|
 
35522
UPDATE t1
 
35523
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
35524
f_charbig = '####updated per update statement itself####';
 
35525
        
 
35526
# check trigger-9 success:      1
 
35527
DROP TRIGGER trg_2;
 
35528
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35529
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35530
f_charbig = CONCAT('===',f_char1,'===');
 
35531
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
35532
BEGIN
 
35533
SET new.f_int1 = new.f_int1 + @max_row,
 
35534
new.f_int2 = new.f_int2 - @max_row,
 
35535
new.f_charbig = '####updated per update trigger####';
 
35536
END|
 
35537
UPDATE t1
 
35538
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
35539
f_charbig = '####updated per update statement itself####';
 
35540
        
 
35541
# check trigger-10 success:     1
 
35542
DROP TRIGGER trg_2;
 
35543
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35544
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35545
f_charbig = CONCAT('===',f_char1,'===');
 
35546
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
35547
BEGIN
 
35548
SET new.f_int1 = @my_max1 + @counter,
 
35549
new.f_int2 = @my_min2 - @counter,
 
35550
new.f_charbig = '####updated per insert trigger####';
 
35551
SET @counter = @counter + 1;
 
35552
END|
 
35553
SET @counter = 1;
 
35554
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
35555
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35556
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
35557
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
35558
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
35559
ORDER BY f_int1;
 
35560
DROP TRIGGER trg_3;
 
35561
        
 
35562
# check trigger-11 success:     1
 
35563
DELETE FROM t1
 
35564
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
35565
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
35566
AND f_charbig = '####updated per insert trigger####';
 
35567
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
35568
BEGIN
 
35569
SET new.f_int1 = @my_max1 + @counter,
 
35570
new.f_int2 = @my_min2 - @counter,
 
35571
new.f_charbig = '####updated per insert trigger####';
 
35572
SET @counter = @counter + 1;
 
35573
END|
 
35574
SET @counter = 1;
 
35575
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
35576
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
35577
SELECT CAST(f_int1 AS CHAR),
 
35578
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
35579
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
35580
ORDER BY f_int1;
 
35581
DROP TRIGGER trg_3;
 
35582
        
 
35583
# check trigger-12 success:     1
 
35584
DELETE FROM t1
 
35585
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
35586
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
35587
AND f_charbig = '####updated per insert trigger####';
 
35588
ANALYZE  TABLE t1;
 
35589
Table   Op      Msg_type        Msg_text
 
35590
test.t1 analyze status  OK
 
35591
CHECK    TABLE t1 EXTENDED;
 
35592
Table   Op      Msg_type        Msg_text
 
35593
test.t1 check   status  OK
 
35594
CHECKSUM TABLE t1 EXTENDED;
 
35595
Table   Checksum
 
35596
test.t1 <some_value>
 
35597
OPTIMIZE TABLE t1;
 
35598
Table   Op      Msg_type        Msg_text
 
35599
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
35600
test.t1 optimize        status  OK
 
35601
# check layout success:    1
 
35602
REPAIR   TABLE t1 EXTENDED;
 
35603
Table   Op      Msg_type        Msg_text
 
35604
test.t1 repair  note    The storage engine for the table doesn't support repair
 
35605
# check layout success:    1
 
35606
TRUNCATE t1;
 
35607
        
 
35608
# check TRUNCATE success:       1
 
35609
# check layout success:    1
 
35610
# End usability test (inc/partition_check.inc)
 
35611
DROP TABLE t1;
 
35612
CREATE TABLE t1 (
 
35613
f_int1 INTEGER,
 
35614
f_int2 INTEGER,
 
35615
f_char1 CHAR(20),
 
35616
f_char2 CHAR(20),
 
35617
f_charbig VARCHAR(1000)
 
35618
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
35619
)
 
35620
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
 
35621
(PARTITION part1 VALUES IN (0)
 
35622
(SUBPARTITION sp11, SUBPARTITION sp12),
 
35623
PARTITION part2 VALUES IN (1)
 
35624
(SUBPARTITION sp21, SUBPARTITION sp22),
 
35625
PARTITION part3 VALUES IN (2)
 
35626
(SUBPARTITION sp31, SUBPARTITION sp32),
 
35627
PARTITION part4 VALUES IN (NULL)
 
35628
(SUBPARTITION sp41, SUBPARTITION sp42));
 
35629
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35630
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
35631
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
35632
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
35633
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35634
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
35635
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
35636
# Start usability test (inc/partition_check.inc)
 
35637
create_command
 
35638
SHOW CREATE TABLE t1;
 
35639
Table   Create Table
 
35640
t1      CREATE TABLE `t1` (
 
35641
  `f_int1` int(11) DEFAULT NULL,
 
35642
  `f_int2` int(11) DEFAULT NULL,
 
35643
  `f_char1` char(20) DEFAULT NULL,
 
35644
  `f_char2` char(20) DEFAULT NULL,
 
35645
  `f_charbig` varchar(1000) DEFAULT NULL
 
35646
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
35647
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
 
35648
SUBPARTITION BY HASH (f_int2 + 1)
 
35649
(PARTITION part1 VALUES IN (0)
 
35650
 (SUBPARTITION sp11 ENGINE = InnoDB,
 
35651
  SUBPARTITION sp12 ENGINE = InnoDB),
 
35652
 PARTITION part2 VALUES IN (1)
 
35653
 (SUBPARTITION sp21 ENGINE = InnoDB,
 
35654
  SUBPARTITION sp22 ENGINE = InnoDB),
 
35655
 PARTITION part3 VALUES IN (2)
 
35656
 (SUBPARTITION sp31 ENGINE = InnoDB,
 
35657
  SUBPARTITION sp32 ENGINE = InnoDB),
 
35658
 PARTITION part4 VALUES IN (NULL)
 
35659
 (SUBPARTITION sp41 ENGINE = InnoDB,
 
35660
  SUBPARTITION sp42 ENGINE = InnoDB)) */
 
35661
 
 
35662
# check prerequisites-1 success:    1
 
35663
# check COUNT(*) success:    1
 
35664
# check MIN/MAX(f_int1) success:    1
 
35665
# check MIN/MAX(f_int2) success:    1
 
35666
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35667
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
35668
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
35669
WHERE f_int1 IN (2,3);
 
35670
# check prerequisites-3 success:    1
 
35671
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
35672
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
35673
# check read via f_int1 success: 1
 
35674
# check read via f_int2 success: 1
 
35675
        
 
35676
# check multiple-1 success:     1
 
35677
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
35678
        
 
35679
# check multiple-2 success:     1
 
35680
INSERT INTO t1 SELECT * FROM t0_template
 
35681
WHERE MOD(f_int1,3) = 0;
 
35682
        
 
35683
# check multiple-3 success:     1
 
35684
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
35685
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
35686
AND @max_row_div2 + @max_row_div4;
 
35687
        
 
35688
# check multiple-4 success:     1
 
35689
DELETE FROM t1
 
35690
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
35691
AND @max_row_div2 + @max_row_div4 + @max_row;
 
35692
        
 
35693
# check multiple-5 success:     1
 
35694
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
35695
INSERT INTO t1
 
35696
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
35697
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
35698
f_charbig = '#SINGLE#';
 
35699
        
 
35700
# check single-1 success:       1
 
35701
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
35702
INSERT INTO t1
 
35703
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
35704
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
35705
f_charbig = '#SINGLE#';
 
35706
        
 
35707
# check single-2 success:       1
 
35708
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
35709
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
35710
UPDATE t1 SET f_int1 = @cur_value2
 
35711
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
35712
        
 
35713
# check single-3 success:       1
 
35714
SET @cur_value1= -1;
 
35715
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
35716
UPDATE t1 SET f_int1 = @cur_value1
 
35717
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
35718
        
 
35719
# check single-4 success:       1
 
35720
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
35721
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
35722
        
 
35723
# check single-5 success:       1
 
35724
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
35725
        
 
35726
# check single-6 success:       1
 
35727
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
35728
        
 
35729
# check single-7 success:       1
 
35730
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
35731
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
35732
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
35733
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
35734
f_charbig = '#NULL#';
 
35735
INSERT INTO t1
 
35736
SET f_int1 = NULL , f_int2 = -@max_row,
 
35737
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
35738
f_charbig = '#NULL#';
 
35739
# check null success:    1
 
35740
        
 
35741
# check null-1 success:         1
 
35742
UPDATE t1 SET f_int1 = -@max_row
 
35743
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
35744
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
35745
        
 
35746
# check null-2 success:         1
 
35747
UPDATE t1 SET f_int1 = NULL
 
35748
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
35749
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
35750
        
 
35751
# check null-3 success:         1
 
35752
DELETE FROM t1
 
35753
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
35754
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
35755
        
 
35756
# check null-4 success:         1
 
35757
DELETE FROM t1
 
35758
WHERE f_int1 = 0 AND f_int2 = 0
 
35759
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
35760
AND f_charbig = '#NULL#';
 
35761
SET AUTOCOMMIT= 0;
 
35762
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35763
SELECT f_int1, f_int1, '', '', 'was inserted'
 
35764
FROM t0_template source_tab
 
35765
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35766
        
 
35767
# check transactions-1 success:         1
 
35768
COMMIT WORK;
 
35769
        
 
35770
# check transactions-2 success:         1
 
35771
ROLLBACK WORK;
 
35772
        
 
35773
# check transactions-3 success:         1
 
35774
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35775
COMMIT WORK;
 
35776
ROLLBACK WORK;
 
35777
        
 
35778
# check transactions-4 success:         1
 
35779
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35780
SELECT f_int1, f_int1, '', '', 'was inserted'
 
35781
FROM t0_template source_tab
 
35782
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35783
        
 
35784
# check transactions-5 success:         1
 
35785
ROLLBACK WORK;
 
35786
        
 
35787
# check transactions-6 success:         1
 
35788
# INFO: Storage engine used for t1 seems to be transactional.
 
35789
COMMIT;
 
35790
        
 
35791
# check transactions-7 success:         1
 
35792
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35793
COMMIT WORK;
 
35794
SET @@session.sql_mode = 'traditional';
 
35795
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
35796
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35797
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
35798
'', '', 'was inserted' FROM t0_template
 
35799
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35800
ERROR 22012: Division by 0
 
35801
COMMIT;
 
35802
        
 
35803
# check transactions-8 success:         1
 
35804
# INFO: Storage engine used for t1 seems to be able to revert
 
35805
#       changes made by the failing statement.
 
35806
SET @@session.sql_mode = '';
 
35807
SET AUTOCOMMIT= 1;
 
35808
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35809
COMMIT WORK;
 
35810
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
35811
        
 
35812
# check special-1 success:      1
 
35813
UPDATE t1 SET f_charbig = '';
 
35814
        
 
35815
# check special-2 success:      1
 
35816
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
35817
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35818
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
35819
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35820
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35821
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35822
'just inserted' FROM t0_template
 
35823
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35824
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
35825
BEGIN
 
35826
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35827
f_charbig = 'updated by trigger'
 
35828
      WHERE f_int1 = new.f_int1;
 
35829
END|
 
35830
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35831
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
35832
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35833
        
 
35834
# check trigger-1 success:      1
 
35835
DROP TRIGGER trg_1;
 
35836
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35837
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35838
f_charbig = 'just inserted'
 
35839
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35840
DELETE FROM t0_aux
 
35841
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35842
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35843
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35844
'just inserted' FROM t0_template
 
35845
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35846
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
35847
BEGIN
 
35848
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35849
f_charbig = 'updated by trigger'
 
35850
      WHERE f_int1 = new.f_int1;
 
35851
END|
 
35852
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35853
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
35854
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35855
        
 
35856
# check trigger-2 success:      1
 
35857
DROP TRIGGER trg_1;
 
35858
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35859
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35860
f_charbig = 'just inserted'
 
35861
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35862
DELETE FROM t0_aux
 
35863
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35864
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35865
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35866
'just inserted' FROM t0_template
 
35867
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35868
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
35869
BEGIN
 
35870
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35871
f_charbig = 'updated by trigger'
 
35872
      WHERE f_int1 = new.f_int1;
 
35873
END|
 
35874
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35875
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35876
        
 
35877
# check trigger-3 success:      1
 
35878
DROP TRIGGER trg_1;
 
35879
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35880
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35881
f_charbig = 'just inserted'
 
35882
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35883
DELETE FROM t0_aux
 
35884
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35885
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35886
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35887
'just inserted' FROM t0_template
 
35888
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35889
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
35890
BEGIN
 
35891
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35892
f_charbig = 'updated by trigger'
 
35893
      WHERE f_int1 = - old.f_int1;
 
35894
END|
 
35895
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35896
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35897
        
 
35898
# check trigger-4 success:      1
 
35899
DROP TRIGGER trg_1;
 
35900
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35901
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35902
f_charbig = 'just inserted'
 
35903
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35904
DELETE FROM t0_aux
 
35905
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35906
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35907
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35908
'just inserted' FROM t0_template
 
35909
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35910
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
35911
BEGIN
 
35912
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35913
f_charbig = 'updated by trigger'
 
35914
      WHERE f_int1 = new.f_int1;
 
35915
END|
 
35916
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35917
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35918
        
 
35919
# check trigger-5 success:      1
 
35920
DROP TRIGGER trg_1;
 
35921
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35922
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35923
f_charbig = 'just inserted'
 
35924
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35925
DELETE FROM t0_aux
 
35926
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35927
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35928
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35929
'just inserted' FROM t0_template
 
35930
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35931
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
35932
BEGIN
 
35933
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35934
f_charbig = 'updated by trigger'
 
35935
      WHERE f_int1 = - old.f_int1;
 
35936
END|
 
35937
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35938
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35939
        
 
35940
# check trigger-6 success:      1
 
35941
DROP TRIGGER trg_1;
 
35942
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35943
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35944
f_charbig = 'just inserted'
 
35945
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35946
DELETE FROM t0_aux
 
35947
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35948
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35949
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35950
'just inserted' FROM t0_template
 
35951
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35952
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
35953
BEGIN
 
35954
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35955
f_charbig = 'updated by trigger'
 
35956
      WHERE f_int1 = - old.f_int1;
 
35957
END|
 
35958
DELETE FROM t0_aux
 
35959
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35960
        
 
35961
# check trigger-7 success:      1
 
35962
DROP TRIGGER trg_1;
 
35963
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35964
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35965
f_charbig = 'just inserted'
 
35966
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35967
DELETE FROM t0_aux
 
35968
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35969
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35970
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35971
'just inserted' FROM t0_template
 
35972
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35973
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
35974
BEGIN
 
35975
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35976
f_charbig = 'updated by trigger'
 
35977
      WHERE f_int1 = - old.f_int1;
 
35978
END|
 
35979
DELETE FROM t0_aux
 
35980
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35981
        
 
35982
# check trigger-8 success:      1
 
35983
DROP TRIGGER trg_1;
 
35984
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35985
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35986
f_charbig = 'just inserted'
 
35987
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35988
DELETE FROM t0_aux
 
35989
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35990
DELETE FROM t1
 
35991
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35992
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
35993
BEGIN
 
35994
SET new.f_int1 = old.f_int1 + @max_row,
 
35995
new.f_int2 = old.f_int2 - @max_row,
 
35996
new.f_charbig = '####updated per update trigger####';
 
35997
END|
 
35998
UPDATE t1
 
35999
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
36000
f_charbig = '####updated per update statement itself####';
 
36001
        
 
36002
# check trigger-9 success:      1
 
36003
DROP TRIGGER trg_2;
 
36004
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36005
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36006
f_charbig = CONCAT('===',f_char1,'===');
 
36007
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
36008
BEGIN
 
36009
SET new.f_int1 = new.f_int1 + @max_row,
 
36010
new.f_int2 = new.f_int2 - @max_row,
 
36011
new.f_charbig = '####updated per update trigger####';
 
36012
END|
 
36013
UPDATE t1
 
36014
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
36015
f_charbig = '####updated per update statement itself####';
 
36016
        
 
36017
# check trigger-10 success:     1
 
36018
DROP TRIGGER trg_2;
 
36019
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36020
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36021
f_charbig = CONCAT('===',f_char1,'===');
 
36022
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
36023
BEGIN
 
36024
SET new.f_int1 = @my_max1 + @counter,
 
36025
new.f_int2 = @my_min2 - @counter,
 
36026
new.f_charbig = '####updated per insert trigger####';
 
36027
SET @counter = @counter + 1;
 
36028
END|
 
36029
SET @counter = 1;
 
36030
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
36031
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36032
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
36033
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
36034
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
36035
ORDER BY f_int1;
 
36036
DROP TRIGGER trg_3;
 
36037
        
 
36038
# check trigger-11 success:     1
 
36039
DELETE FROM t1
 
36040
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
36041
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
36042
AND f_charbig = '####updated per insert trigger####';
 
36043
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
36044
BEGIN
 
36045
SET new.f_int1 = @my_max1 + @counter,
 
36046
new.f_int2 = @my_min2 - @counter,
 
36047
new.f_charbig = '####updated per insert trigger####';
 
36048
SET @counter = @counter + 1;
 
36049
END|
 
36050
SET @counter = 1;
 
36051
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
36052
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
36053
SELECT CAST(f_int1 AS CHAR),
 
36054
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
36055
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
36056
ORDER BY f_int1;
 
36057
DROP TRIGGER trg_3;
 
36058
        
 
36059
# check trigger-12 success:     1
 
36060
DELETE FROM t1
 
36061
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
36062
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
36063
AND f_charbig = '####updated per insert trigger####';
 
36064
ANALYZE  TABLE t1;
 
36065
Table   Op      Msg_type        Msg_text
 
36066
test.t1 analyze status  OK
 
36067
CHECK    TABLE t1 EXTENDED;
 
36068
Table   Op      Msg_type        Msg_text
 
36069
test.t1 check   status  OK
 
36070
CHECKSUM TABLE t1 EXTENDED;
 
36071
Table   Checksum
 
36072
test.t1 <some_value>
 
36073
OPTIMIZE TABLE t1;
 
36074
Table   Op      Msg_type        Msg_text
 
36075
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
36076
test.t1 optimize        status  OK
 
36077
# check layout success:    1
 
36078
REPAIR   TABLE t1 EXTENDED;
 
36079
Table   Op      Msg_type        Msg_text
 
36080
test.t1 repair  note    The storage engine for the table doesn't support repair
 
36081
# check layout success:    1
 
36082
TRUNCATE t1;
 
36083
        
 
36084
# check TRUNCATE success:       1
 
36085
# check layout success:    1
 
36086
# End usability test (inc/partition_check.inc)
 
36087
DROP TABLE t1;
 
36088
CREATE TABLE t1 (
 
36089
f_int1 INTEGER,
 
36090
f_int2 INTEGER,
 
36091
f_char1 CHAR(20),
 
36092
f_char2 CHAR(20),
 
36093
f_charbig VARCHAR(1000)
 
36094
, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
 
36095
)
 
36096
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
36097
SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
 
36098
(PARTITION part1 VALUES IN (0),
 
36099
 PARTITION part2 VALUES IN (1),
 
36100
 PARTITION part3 VALUES IN (NULL));
 
36101
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36102
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
36103
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
36104
ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
 
36105
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36106
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
36107
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
36108
# Start usability test (inc/partition_check.inc)
 
36109
create_command
 
36110
SHOW CREATE TABLE t1;
 
36111
Table   Create Table
 
36112
t1      CREATE TABLE `t1` (
 
36113
  `f_int1` int(11) DEFAULT NULL,
 
36114
  `f_int2` int(11) DEFAULT NULL,
 
36115
  `f_char1` char(20) DEFAULT NULL,
 
36116
  `f_char2` char(20) DEFAULT NULL,
 
36117
  `f_charbig` varchar(1000) DEFAULT NULL
 
36118
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
36119
/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
 
36120
SUBPARTITION BY KEY (f_int2)
 
36121
SUBPARTITIONS 3
 
36122
(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
 
36123
 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
 
36124
 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
 
36125
 
 
36126
# check prerequisites-1 success:    1
 
36127
# check COUNT(*) success:    1
 
36128
# check MIN/MAX(f_int1) success:    1
 
36129
# check MIN/MAX(f_int2) success:    1
 
36130
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36131
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
36132
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
36133
WHERE f_int1 IN (2,3);
 
36134
# check prerequisites-3 success:    1
 
36135
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
36136
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
36137
# check read via f_int1 success: 1
 
36138
# check read via f_int2 success: 1
 
36139
        
 
36140
# check multiple-1 success:     1
 
36141
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
36142
        
 
36143
# check multiple-2 success:     1
 
36144
INSERT INTO t1 SELECT * FROM t0_template
 
36145
WHERE MOD(f_int1,3) = 0;
 
36146
        
 
36147
# check multiple-3 success:     1
 
36148
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
36149
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
36150
AND @max_row_div2 + @max_row_div4;
 
36151
        
 
36152
# check multiple-4 success:     1
 
36153
DELETE FROM t1
 
36154
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
36155
AND @max_row_div2 + @max_row_div4 + @max_row;
 
36156
        
 
36157
# check multiple-5 success:     1
 
36158
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
36159
INSERT INTO t1
 
36160
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
36161
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
36162
f_charbig = '#SINGLE#';
 
36163
        
 
36164
# check single-1 success:       1
 
36165
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
36166
INSERT INTO t1
 
36167
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
36168
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
36169
f_charbig = '#SINGLE#';
 
36170
        
 
36171
# check single-2 success:       1
 
36172
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
36173
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
36174
UPDATE t1 SET f_int1 = @cur_value2
 
36175
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
36176
        
 
36177
# check single-3 success:       1
 
36178
SET @cur_value1= -1;
 
36179
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
36180
UPDATE t1 SET f_int1 = @cur_value1
 
36181
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
36182
        
 
36183
# check single-4 success:       1
 
36184
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
36185
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
36186
        
 
36187
# check single-5 success:       1
 
36188
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
36189
        
 
36190
# check single-6 success:       1
 
36191
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
36192
        
 
36193
# check single-7 success:       1
 
36194
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
36195
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
36196
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
36197
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
36198
f_charbig = '#NULL#';
 
36199
INSERT INTO t1
 
36200
SET f_int1 = NULL , f_int2 = -@max_row,
 
36201
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
36202
f_charbig = '#NULL#';
 
36203
# check null success:    1
 
36204
        
 
36205
# check null-1 success:         1
 
36206
UPDATE t1 SET f_int1 = -@max_row
 
36207
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
36208
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
36209
        
 
36210
# check null-2 success:         1
 
36211
UPDATE t1 SET f_int1 = NULL
 
36212
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
36213
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
36214
        
 
36215
# check null-3 success:         1
 
36216
DELETE FROM t1
 
36217
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
36218
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
36219
        
 
36220
# check null-4 success:         1
 
36221
DELETE FROM t1
 
36222
WHERE f_int1 = 0 AND f_int2 = 0
 
36223
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
36224
AND f_charbig = '#NULL#';
 
36225
SET AUTOCOMMIT= 0;
 
36226
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36227
SELECT f_int1, f_int1, '', '', 'was inserted'
 
36228
FROM t0_template source_tab
 
36229
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
36230
        
 
36231
# check transactions-1 success:         1
 
36232
COMMIT WORK;
 
36233
        
 
36234
# check transactions-2 success:         1
 
36235
ROLLBACK WORK;
 
36236
        
 
36237
# check transactions-3 success:         1
 
36238
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36239
COMMIT WORK;
 
36240
ROLLBACK WORK;
 
36241
        
 
36242
# check transactions-4 success:         1
 
36243
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36244
SELECT f_int1, f_int1, '', '', 'was inserted'
 
36245
FROM t0_template source_tab
 
36246
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
36247
        
 
36248
# check transactions-5 success:         1
 
36249
ROLLBACK WORK;
 
36250
        
 
36251
# check transactions-6 success:         1
 
36252
# INFO: Storage engine used for t1 seems to be transactional.
 
36253
COMMIT;
 
36254
        
 
36255
# check transactions-7 success:         1
 
36256
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36257
COMMIT WORK;
 
36258
SET @@session.sql_mode = 'traditional';
 
36259
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
36260
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36261
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
36262
'', '', 'was inserted' FROM t0_template
 
36263
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
36264
ERROR 22012: Division by 0
 
36265
COMMIT;
 
36266
        
 
36267
# check transactions-8 success:         1
 
36268
# INFO: Storage engine used for t1 seems to be able to revert
 
36269
#       changes made by the failing statement.
 
36270
SET @@session.sql_mode = '';
 
36271
SET AUTOCOMMIT= 1;
 
36272
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36273
COMMIT WORK;
 
36274
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
36275
        
 
36276
# check special-1 success:      1
 
36277
UPDATE t1 SET f_charbig = '';
 
36278
        
 
36279
# check special-2 success:      1
 
36280
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
36281
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36282
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
36283
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36284
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36285
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36286
'just inserted' FROM t0_template
 
36287
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36288
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
36289
BEGIN
 
36290
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36291
f_charbig = 'updated by trigger'
 
36292
      WHERE f_int1 = new.f_int1;
 
36293
END|
 
36294
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36295
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
36296
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36297
        
 
36298
# check trigger-1 success:      1
 
36299
DROP TRIGGER trg_1;
 
36300
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36301
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36302
f_charbig = 'just inserted'
 
36303
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36304
DELETE FROM t0_aux
 
36305
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36306
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36307
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36308
'just inserted' FROM t0_template
 
36309
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36310
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
36311
BEGIN
 
36312
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36313
f_charbig = 'updated by trigger'
 
36314
      WHERE f_int1 = new.f_int1;
 
36315
END|
 
36316
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36317
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
36318
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36319
        
 
36320
# check trigger-2 success:      1
 
36321
DROP TRIGGER trg_1;
 
36322
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36323
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36324
f_charbig = 'just inserted'
 
36325
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36326
DELETE FROM t0_aux
 
36327
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36328
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36329
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36330
'just inserted' FROM t0_template
 
36331
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36332
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
36333
BEGIN
 
36334
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36335
f_charbig = 'updated by trigger'
 
36336
      WHERE f_int1 = new.f_int1;
 
36337
END|
 
36338
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36339
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36340
        
 
36341
# check trigger-3 success:      1
 
36342
DROP TRIGGER trg_1;
 
36343
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36344
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36345
f_charbig = 'just inserted'
 
36346
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36347
DELETE FROM t0_aux
 
36348
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36349
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36350
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36351
'just inserted' FROM t0_template
 
36352
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36353
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
36354
BEGIN
 
36355
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36356
f_charbig = 'updated by trigger'
 
36357
      WHERE f_int1 = - old.f_int1;
 
36358
END|
 
36359
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36360
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36361
        
 
36362
# check trigger-4 success:      1
 
36363
DROP TRIGGER trg_1;
 
36364
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36365
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36366
f_charbig = 'just inserted'
 
36367
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36368
DELETE FROM t0_aux
 
36369
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36370
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36371
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36372
'just inserted' FROM t0_template
 
36373
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36374
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
36375
BEGIN
 
36376
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36377
f_charbig = 'updated by trigger'
 
36378
      WHERE f_int1 = new.f_int1;
 
36379
END|
 
36380
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36381
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36382
        
 
36383
# check trigger-5 success:      1
 
36384
DROP TRIGGER trg_1;
 
36385
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36386
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36387
f_charbig = 'just inserted'
 
36388
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36389
DELETE FROM t0_aux
 
36390
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36391
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36392
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36393
'just inserted' FROM t0_template
 
36394
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36395
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
36396
BEGIN
 
36397
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36398
f_charbig = 'updated by trigger'
 
36399
      WHERE f_int1 = - old.f_int1;
 
36400
END|
 
36401
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36402
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36403
        
 
36404
# check trigger-6 success:      1
 
36405
DROP TRIGGER trg_1;
 
36406
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36407
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36408
f_charbig = 'just inserted'
 
36409
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36410
DELETE FROM t0_aux
 
36411
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36412
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36413
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36414
'just inserted' FROM t0_template
 
36415
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36416
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
36417
BEGIN
 
36418
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36419
f_charbig = 'updated by trigger'
 
36420
      WHERE f_int1 = - old.f_int1;
 
36421
END|
 
36422
DELETE FROM t0_aux
 
36423
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36424
        
 
36425
# check trigger-7 success:      1
 
36426
DROP TRIGGER trg_1;
 
36427
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36428
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36429
f_charbig = 'just inserted'
 
36430
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36431
DELETE FROM t0_aux
 
36432
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36433
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36434
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36435
'just inserted' FROM t0_template
 
36436
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36437
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
36438
BEGIN
 
36439
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36440
f_charbig = 'updated by trigger'
 
36441
      WHERE f_int1 = - old.f_int1;
 
36442
END|
 
36443
DELETE FROM t0_aux
 
36444
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36445
        
 
36446
# check trigger-8 success:      1
 
36447
DROP TRIGGER trg_1;
 
36448
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36449
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36450
f_charbig = 'just inserted'
 
36451
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36452
DELETE FROM t0_aux
 
36453
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36454
DELETE FROM t1
 
36455
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36456
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
36457
BEGIN
 
36458
SET new.f_int1 = old.f_int1 + @max_row,
 
36459
new.f_int2 = old.f_int2 - @max_row,
 
36460
new.f_charbig = '####updated per update trigger####';
 
36461
END|
 
36462
UPDATE t1
 
36463
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
36464
f_charbig = '####updated per update statement itself####';
 
36465
        
 
36466
# check trigger-9 success:      1
 
36467
DROP TRIGGER trg_2;
 
36468
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36469
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36470
f_charbig = CONCAT('===',f_char1,'===');
 
36471
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
36472
BEGIN
 
36473
SET new.f_int1 = new.f_int1 + @max_row,
 
36474
new.f_int2 = new.f_int2 - @max_row,
 
36475
new.f_charbig = '####updated per update trigger####';
 
36476
END|
 
36477
UPDATE t1
 
36478
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
36479
f_charbig = '####updated per update statement itself####';
 
36480
        
 
36481
# check trigger-10 success:     1
 
36482
DROP TRIGGER trg_2;
 
36483
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36484
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36485
f_charbig = CONCAT('===',f_char1,'===');
 
36486
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
36487
BEGIN
 
36488
SET new.f_int1 = @my_max1 + @counter,
 
36489
new.f_int2 = @my_min2 - @counter,
 
36490
new.f_charbig = '####updated per insert trigger####';
 
36491
SET @counter = @counter + 1;
 
36492
END|
 
36493
SET @counter = 1;
 
36494
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
36495
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36496
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
36497
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
36498
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
36499
ORDER BY f_int1;
 
36500
DROP TRIGGER trg_3;
 
36501
        
 
36502
# check trigger-11 success:     1
 
36503
DELETE FROM t1
 
36504
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
36505
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
36506
AND f_charbig = '####updated per insert trigger####';
 
36507
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
36508
BEGIN
 
36509
SET new.f_int1 = @my_max1 + @counter,
 
36510
new.f_int2 = @my_min2 - @counter,
 
36511
new.f_charbig = '####updated per insert trigger####';
 
36512
SET @counter = @counter + 1;
 
36513
END|
 
36514
SET @counter = 1;
 
36515
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
36516
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
36517
SELECT CAST(f_int1 AS CHAR),
 
36518
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
36519
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
36520
ORDER BY f_int1;
 
36521
DROP TRIGGER trg_3;
 
36522
        
 
36523
# check trigger-12 success:     1
 
36524
DELETE FROM t1
 
36525
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
36526
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
36527
AND f_charbig = '####updated per insert trigger####';
 
36528
ANALYZE  TABLE t1;
 
36529
Table   Op      Msg_type        Msg_text
 
36530
test.t1 analyze status  OK
 
36531
CHECK    TABLE t1 EXTENDED;
 
36532
Table   Op      Msg_type        Msg_text
 
36533
test.t1 check   status  OK
 
36534
CHECKSUM TABLE t1 EXTENDED;
 
36535
Table   Checksum
 
36536
test.t1 <some_value>
 
36537
OPTIMIZE TABLE t1;
 
36538
Table   Op      Msg_type        Msg_text
 
36539
test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
 
36540
test.t1 optimize        status  OK
 
36541
# check layout success:    1
 
36542
REPAIR   TABLE t1 EXTENDED;
 
36543
Table   Op      Msg_type        Msg_text
 
36544
test.t1 repair  note    The storage engine for the table doesn't support repair
 
36545
# check layout success:    1
 
36546
TRUNCATE t1;
 
36547
        
 
36548
# check TRUNCATE success:       1
 
36549
# check layout success:    1
 
36550
# End usability test (inc/partition_check.inc)
 
36551
DROP TABLE t1;
 
36552
DROP VIEW  IF EXISTS v1;
 
36553
DROP TABLE IF EXISTS t1;
 
36554
DROP TABLE IF EXISTS t0_aux;
 
36555
DROP TABLE IF EXISTS t0_definition;
 
36556
DROP TABLE IF EXISTS t0_template;