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

« back to all changes in this revision

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

  • Committer: brian
  • Date: 2008-06-25 05:29:13 UTC
  • Revision ID: brian@localhost.localdomain-20080625052913-6upwo0jsrl4lnapl
clean slate

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
SET @max_row = 20;
 
2
SET @@session.storage_engine = '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
#  1.1.1.12    ALTER TABLE <maintenance> PARTITION
 
43
#========================================================================
 
44
#------------------------------------------------------------------------
 
45
#  1   ALTER ... ANALYZE PARTITION
 
46
#------------------------------------------------------------------------
 
47
#  1.1 ALTER ... ANALYZE PARTITION part_1;
 
48
DROP TABLE IF EXISTS t1;
 
49
CREATE TABLE t1 (
 
50
f_int1 INTEGER,
 
51
f_int2 INTEGER,
 
52
f_char1 CHAR(20),
 
53
f_char2 CHAR(20),
 
54
f_charbig VARCHAR(1000)
 
55
 
 
56
)
 
57
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_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 ANALYZE PARTITION part_1;
 
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) DEFAULT NULL,
 
71
  `f_int2` int(11) DEFAULT NULL,
 
72
  `f_char1` char(20) DEFAULT NULL,
 
73
  `f_char2` char(20) DEFAULT NULL,
 
74
  `f_charbig` varchar(1000) DEFAULT NULL
 
75
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
 
76
 
 
77
# check prerequisites-1 success:    1
 
78
# check COUNT(*) success:    1
 
79
# check MIN/MAX(f_int1) success:    1
 
80
# check MIN/MAX(f_int2) success:    1
 
81
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
82
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
83
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
84
WHERE f_int1 IN (2,3);
 
85
# check prerequisites-3 success:    1
 
86
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
87
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
88
# check read via f_int1 success: 1
 
89
# check read via f_int2 success: 1
 
90
        
 
91
# check multiple-1 success:     1
 
92
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
93
        
 
94
# check multiple-2 success:     1
 
95
INSERT INTO t1 SELECT * FROM t0_template
 
96
WHERE MOD(f_int1,3) = 0;
 
97
        
 
98
# check multiple-3 success:     1
 
99
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
100
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
101
AND @max_row_div2 + @max_row_div4;
 
102
        
 
103
# check multiple-4 success:     1
 
104
DELETE FROM t1
 
105
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
106
AND @max_row_div2 + @max_row_div4 + @max_row;
 
107
        
 
108
# check multiple-5 success:     1
 
109
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
110
INSERT INTO t1
 
111
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
112
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
113
f_charbig = '#SINGLE#';
 
114
        
 
115
# check single-1 success:       1
 
116
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
117
INSERT INTO t1
 
118
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
119
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
120
f_charbig = '#SINGLE#';
 
121
        
 
122
# check single-2 success:       1
 
123
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
124
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
125
UPDATE t1 SET f_int1 = @cur_value2
 
126
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
127
        
 
128
# check single-3 success:       1
 
129
SET @cur_value1= -1;
 
130
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
131
UPDATE t1 SET f_int1 = @cur_value1
 
132
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
133
        
 
134
# check single-4 success:       1
 
135
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
136
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
137
        
 
138
# check single-5 success:       1
 
139
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
140
        
 
141
# check single-6 success:       1
 
142
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
143
        
 
144
# check single-7 success:       1
 
145
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
146
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
147
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
148
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
149
f_charbig = '#NULL#';
 
150
INSERT INTO t1
 
151
SET f_int1 = NULL , f_int2 = -@max_row,
 
152
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
153
f_charbig = '#NULL#';
 
154
# check null success:    1
 
155
        
 
156
# check null-1 success:         1
 
157
UPDATE t1 SET f_int1 = -@max_row
 
158
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
159
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
160
        
 
161
# check null-2 success:         1
 
162
UPDATE t1 SET f_int1 = NULL
 
163
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
164
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
165
        
 
166
# check null-3 success:         1
 
167
DELETE FROM t1
 
168
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
169
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
170
        
 
171
# check null-4 success:         1
 
172
DELETE FROM t1
 
173
WHERE f_int1 = 0 AND f_int2 = 0
 
174
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
175
AND f_charbig = '#NULL#';
 
176
SET AUTOCOMMIT= 0;
 
177
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
178
SELECT f_int1, f_int1, '', '', 'was inserted'
 
179
FROM t0_template source_tab
 
180
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
181
        
 
182
# check transactions-1 success:         1
 
183
COMMIT WORK;
 
184
        
 
185
# check transactions-2 success:         1
 
186
ROLLBACK WORK;
 
187
        
 
188
# check transactions-3 success:         1
 
189
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
190
COMMIT WORK;
 
191
ROLLBACK WORK;
 
192
        
 
193
# check transactions-4 success:         1
 
194
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
195
SELECT f_int1, f_int1, '', '', 'was inserted'
 
196
FROM t0_template source_tab
 
197
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
198
        
 
199
# check transactions-5 success:         1
 
200
ROLLBACK WORK;
 
201
        
 
202
# check transactions-6 success:         1
 
203
# INFO: Storage engine used for t1 seems to be transactional.
 
204
COMMIT;
 
205
        
 
206
# check transactions-7 success:         1
 
207
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
208
COMMIT WORK;
 
209
SET @@session.sql_mode = 'traditional';
 
210
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
211
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
212
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
213
'', '', 'was inserted' FROM t0_template
 
214
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
215
ERROR 22012: Division by 0
 
216
COMMIT;
 
217
        
 
218
# check transactions-8 success:         1
 
219
# INFO: Storage engine used for t1 seems to be able to revert
 
220
#       changes made by the failing statement.
 
221
SET @@session.sql_mode = '';
 
222
SET AUTOCOMMIT= 1;
 
223
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
224
COMMIT WORK;
 
225
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
226
        
 
227
# check special-1 success:      1
 
228
UPDATE t1 SET f_charbig = '';
 
229
        
 
230
# check special-2 success:      1
 
231
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
232
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
233
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
234
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
235
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
236
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
237
'just inserted' FROM t0_template
 
238
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
239
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
240
BEGIN
 
241
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
242
f_charbig = 'updated by trigger'
 
243
      WHERE f_int1 = new.f_int1;
 
244
END|
 
245
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
246
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
247
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
248
        
 
249
# check trigger-1 success:      1
 
250
DROP TRIGGER trg_1;
 
251
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
252
f_int2 = CAST(f_char1 AS SIGNED INT),
 
253
f_charbig = 'just inserted'
 
254
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
255
DELETE FROM t0_aux
 
256
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
257
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
258
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
259
'just inserted' FROM t0_template
 
260
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
261
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
262
BEGIN
 
263
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
264
f_charbig = 'updated by trigger'
 
265
      WHERE f_int1 = new.f_int1;
 
266
END|
 
267
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
268
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
269
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
270
        
 
271
# check trigger-2 success:      1
 
272
DROP TRIGGER trg_1;
 
273
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
274
f_int2 = CAST(f_char1 AS SIGNED INT),
 
275
f_charbig = 'just inserted'
 
276
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
277
DELETE FROM t0_aux
 
278
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
279
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
280
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
281
'just inserted' FROM t0_template
 
282
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
283
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
284
BEGIN
 
285
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
286
f_charbig = 'updated by trigger'
 
287
      WHERE f_int1 = new.f_int1;
 
288
END|
 
289
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
290
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
291
        
 
292
# check trigger-3 success:      1
 
293
DROP TRIGGER trg_1;
 
294
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
295
f_int2 = CAST(f_char1 AS SIGNED INT),
 
296
f_charbig = 'just inserted'
 
297
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
298
DELETE FROM t0_aux
 
299
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
300
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
301
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
302
'just inserted' FROM t0_template
 
303
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
304
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
305
BEGIN
 
306
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
307
f_charbig = 'updated by trigger'
 
308
      WHERE f_int1 = - old.f_int1;
 
309
END|
 
310
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
311
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
312
        
 
313
# check trigger-4 success:      1
 
314
DROP TRIGGER trg_1;
 
315
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
316
f_int2 = CAST(f_char1 AS SIGNED INT),
 
317
f_charbig = 'just inserted'
 
318
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
319
DELETE FROM t0_aux
 
320
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
321
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
322
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
323
'just inserted' FROM t0_template
 
324
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
325
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
326
BEGIN
 
327
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
328
f_charbig = 'updated by trigger'
 
329
      WHERE f_int1 = new.f_int1;
 
330
END|
 
331
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
332
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
333
        
 
334
# check trigger-5 success:      1
 
335
DROP TRIGGER trg_1;
 
336
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
337
f_int2 = CAST(f_char1 AS SIGNED INT),
 
338
f_charbig = 'just inserted'
 
339
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
340
DELETE FROM t0_aux
 
341
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
342
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
343
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
344
'just inserted' FROM t0_template
 
345
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
346
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
347
BEGIN
 
348
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
349
f_charbig = 'updated by trigger'
 
350
      WHERE f_int1 = - old.f_int1;
 
351
END|
 
352
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
353
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
354
        
 
355
# check trigger-6 success:      1
 
356
DROP TRIGGER trg_1;
 
357
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
358
f_int2 = CAST(f_char1 AS SIGNED INT),
 
359
f_charbig = 'just inserted'
 
360
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
361
DELETE FROM t0_aux
 
362
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
363
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
364
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
365
'just inserted' FROM t0_template
 
366
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
367
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
368
BEGIN
 
369
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
370
f_charbig = 'updated by trigger'
 
371
      WHERE f_int1 = - old.f_int1;
 
372
END|
 
373
DELETE FROM t0_aux
 
374
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
375
        
 
376
# check trigger-7 success:      1
 
377
DROP TRIGGER trg_1;
 
378
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
379
f_int2 = CAST(f_char1 AS SIGNED INT),
 
380
f_charbig = 'just inserted'
 
381
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
382
DELETE FROM t0_aux
 
383
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
384
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
385
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
386
'just inserted' FROM t0_template
 
387
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
388
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
389
BEGIN
 
390
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
391
f_charbig = 'updated by trigger'
 
392
      WHERE f_int1 = - old.f_int1;
 
393
END|
 
394
DELETE FROM t0_aux
 
395
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
396
        
 
397
# check trigger-8 success:      1
 
398
DROP TRIGGER trg_1;
 
399
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
400
f_int2 = CAST(f_char1 AS SIGNED INT),
 
401
f_charbig = 'just inserted'
 
402
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
403
DELETE FROM t0_aux
 
404
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
405
DELETE FROM t1
 
406
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
407
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
408
BEGIN
 
409
SET new.f_int1 = old.f_int1 + @max_row,
 
410
new.f_int2 = old.f_int2 - @max_row,
 
411
new.f_charbig = '####updated per update trigger####';
 
412
END|
 
413
UPDATE t1
 
414
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
415
f_charbig = '####updated per update statement itself####';
 
416
        
 
417
# check trigger-9 success:      1
 
418
DROP TRIGGER trg_2;
 
419
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
420
f_int2 = CAST(f_char1 AS SIGNED INT),
 
421
f_charbig = CONCAT('===',f_char1,'===');
 
422
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
423
BEGIN
 
424
SET new.f_int1 = new.f_int1 + @max_row,
 
425
new.f_int2 = new.f_int2 - @max_row,
 
426
new.f_charbig = '####updated per update trigger####';
 
427
END|
 
428
UPDATE t1
 
429
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
430
f_charbig = '####updated per update statement itself####';
 
431
        
 
432
# check trigger-10 success:     1
 
433
DROP TRIGGER trg_2;
 
434
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
435
f_int2 = CAST(f_char1 AS SIGNED INT),
 
436
f_charbig = CONCAT('===',f_char1,'===');
 
437
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
438
BEGIN
 
439
SET new.f_int1 = @my_max1 + @counter,
 
440
new.f_int2 = @my_min2 - @counter,
 
441
new.f_charbig = '####updated per insert trigger####';
 
442
SET @counter = @counter + 1;
 
443
END|
 
444
SET @counter = 1;
 
445
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
446
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
447
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
448
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
449
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
450
ORDER BY f_int1;
 
451
DROP TRIGGER trg_3;
 
452
        
 
453
# check trigger-11 success:     1
 
454
DELETE FROM t1
 
455
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
456
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
457
AND f_charbig = '####updated per insert trigger####';
 
458
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
459
BEGIN
 
460
SET new.f_int1 = @my_max1 + @counter,
 
461
new.f_int2 = @my_min2 - @counter,
 
462
new.f_charbig = '####updated per insert trigger####';
 
463
SET @counter = @counter + 1;
 
464
END|
 
465
SET @counter = 1;
 
466
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
467
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
468
SELECT CAST(f_int1 AS CHAR),
 
469
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
470
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
471
ORDER BY f_int1;
 
472
DROP TRIGGER trg_3;
 
473
        
 
474
# check trigger-12 success:     1
 
475
DELETE FROM t1
 
476
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
477
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
478
AND f_charbig = '####updated per insert trigger####';
 
479
ANALYZE  TABLE t1;
 
480
Table   Op      Msg_type        Msg_text
 
481
test.t1 analyze status  OK
 
482
CHECK    TABLE t1 EXTENDED;
 
483
Table   Op      Msg_type        Msg_text
 
484
test.t1 check   status  OK
 
485
CHECKSUM TABLE t1 EXTENDED;
 
486
Table   Checksum
 
487
test.t1 <some_value>
 
488
OPTIMIZE TABLE t1;
 
489
Table   Op      Msg_type        Msg_text
 
490
test.t1 optimize        status  OK
 
491
# check layout success:    1
 
492
REPAIR   TABLE t1 EXTENDED;
 
493
Table   Op      Msg_type        Msg_text
 
494
test.t1 repair  note    The storage engine for the table doesn't support repair
 
495
# check layout success:    1
 
496
TRUNCATE t1;
 
497
        
 
498
# check TRUNCATE success:       1
 
499
# check layout success:    1
 
500
# End usability test (inc/partition_check.inc)
 
501
DROP TABLE t1;
 
502
CREATE TABLE t1 (
 
503
f_int1 INTEGER,
 
504
f_int2 INTEGER,
 
505
f_char1 CHAR(20),
 
506
f_char2 CHAR(20),
 
507
f_charbig VARCHAR(1000)
 
508
 
 
509
)
 
510
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
511
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
512
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
513
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
514
ALTER TABLE t1 ANALYZE PARTITION part_1;
 
515
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
516
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
517
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
518
# Start usability test (inc/partition_check.inc)
 
519
create_command
 
520
SHOW CREATE TABLE t1;
 
521
Table   Create Table
 
522
t1      CREATE TABLE `t1` (
 
523
  `f_int1` int(11) DEFAULT NULL,
 
524
  `f_int2` int(11) DEFAULT NULL,
 
525
  `f_char1` char(20) DEFAULT NULL,
 
526
  `f_char2` char(20) DEFAULT NULL,
 
527
  `f_charbig` varchar(1000) DEFAULT NULL
 
528
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
 
529
 
 
530
# check prerequisites-1 success:    1
 
531
# check COUNT(*) success:    1
 
532
# check MIN/MAX(f_int1) success:    1
 
533
# check MIN/MAX(f_int2) success:    1
 
534
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
535
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
536
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
537
WHERE f_int1 IN (2,3);
 
538
# check prerequisites-3 success:    1
 
539
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
540
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
541
# check read via f_int1 success: 1
 
542
# check read via f_int2 success: 1
 
543
        
 
544
# check multiple-1 success:     1
 
545
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
546
        
 
547
# check multiple-2 success:     1
 
548
INSERT INTO t1 SELECT * FROM t0_template
 
549
WHERE MOD(f_int1,3) = 0;
 
550
        
 
551
# check multiple-3 success:     1
 
552
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
553
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
554
AND @max_row_div2 + @max_row_div4;
 
555
        
 
556
# check multiple-4 success:     1
 
557
DELETE FROM t1
 
558
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
559
AND @max_row_div2 + @max_row_div4 + @max_row;
 
560
        
 
561
# check multiple-5 success:     1
 
562
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
563
INSERT INTO t1
 
564
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
565
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
566
f_charbig = '#SINGLE#';
 
567
        
 
568
# check single-1 success:       1
 
569
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
570
INSERT INTO t1
 
571
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
572
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
573
f_charbig = '#SINGLE#';
 
574
        
 
575
# check single-2 success:       1
 
576
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
577
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
578
UPDATE t1 SET f_int1 = @cur_value2
 
579
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
580
        
 
581
# check single-3 success:       1
 
582
SET @cur_value1= -1;
 
583
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
584
UPDATE t1 SET f_int1 = @cur_value1
 
585
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
586
        
 
587
# check single-4 success:       1
 
588
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
589
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
590
        
 
591
# check single-5 success:       1
 
592
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
593
        
 
594
# check single-6 success:       1
 
595
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
596
        
 
597
# check single-7 success:       1
 
598
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
599
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
600
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
601
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
602
f_charbig = '#NULL#';
 
603
INSERT INTO t1
 
604
SET f_int1 = NULL , f_int2 = -@max_row,
 
605
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
606
f_charbig = '#NULL#';
 
607
# check null success:    1
 
608
        
 
609
# check null-1 success:         1
 
610
UPDATE t1 SET f_int1 = -@max_row
 
611
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
612
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
613
        
 
614
# check null-2 success:         1
 
615
UPDATE t1 SET f_int1 = NULL
 
616
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
617
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
618
        
 
619
# check null-3 success:         1
 
620
DELETE FROM t1
 
621
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
622
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
623
        
 
624
# check null-4 success:         1
 
625
DELETE FROM t1
 
626
WHERE f_int1 = 0 AND f_int2 = 0
 
627
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
628
AND f_charbig = '#NULL#';
 
629
SET AUTOCOMMIT= 0;
 
630
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
631
SELECT f_int1, f_int1, '', '', 'was inserted'
 
632
FROM t0_template source_tab
 
633
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
634
        
 
635
# check transactions-1 success:         1
 
636
COMMIT WORK;
 
637
        
 
638
# check transactions-2 success:         1
 
639
ROLLBACK WORK;
 
640
        
 
641
# check transactions-3 success:         1
 
642
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
643
COMMIT WORK;
 
644
ROLLBACK WORK;
 
645
        
 
646
# check transactions-4 success:         1
 
647
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
648
SELECT f_int1, f_int1, '', '', 'was inserted'
 
649
FROM t0_template source_tab
 
650
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
651
        
 
652
# check transactions-5 success:         1
 
653
ROLLBACK WORK;
 
654
        
 
655
# check transactions-6 success:         1
 
656
# INFO: Storage engine used for t1 seems to be transactional.
 
657
COMMIT;
 
658
        
 
659
# check transactions-7 success:         1
 
660
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
661
COMMIT WORK;
 
662
SET @@session.sql_mode = 'traditional';
 
663
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
664
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
665
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
666
'', '', 'was inserted' FROM t0_template
 
667
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
668
ERROR 22012: Division by 0
 
669
COMMIT;
 
670
        
 
671
# check transactions-8 success:         1
 
672
# INFO: Storage engine used for t1 seems to be able to revert
 
673
#       changes made by the failing statement.
 
674
SET @@session.sql_mode = '';
 
675
SET AUTOCOMMIT= 1;
 
676
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
677
COMMIT WORK;
 
678
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
679
        
 
680
# check special-1 success:      1
 
681
UPDATE t1 SET f_charbig = '';
 
682
        
 
683
# check special-2 success:      1
 
684
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
685
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
686
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
687
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
688
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
689
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
690
'just inserted' FROM t0_template
 
691
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
692
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
693
BEGIN
 
694
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
695
f_charbig = 'updated by trigger'
 
696
      WHERE f_int1 = new.f_int1;
 
697
END|
 
698
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
699
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
700
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
701
        
 
702
# check trigger-1 success:      1
 
703
DROP TRIGGER trg_1;
 
704
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
705
f_int2 = CAST(f_char1 AS SIGNED INT),
 
706
f_charbig = 'just inserted'
 
707
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
708
DELETE FROM t0_aux
 
709
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
710
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
711
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
712
'just inserted' FROM t0_template
 
713
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
714
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
715
BEGIN
 
716
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
717
f_charbig = 'updated by trigger'
 
718
      WHERE f_int1 = new.f_int1;
 
719
END|
 
720
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
721
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
722
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
723
        
 
724
# check trigger-2 success:      1
 
725
DROP TRIGGER trg_1;
 
726
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
727
f_int2 = CAST(f_char1 AS SIGNED INT),
 
728
f_charbig = 'just inserted'
 
729
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
730
DELETE FROM t0_aux
 
731
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
732
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
733
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
734
'just inserted' FROM t0_template
 
735
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
736
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
737
BEGIN
 
738
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
739
f_charbig = 'updated by trigger'
 
740
      WHERE f_int1 = new.f_int1;
 
741
END|
 
742
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
743
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
744
        
 
745
# check trigger-3 success:      1
 
746
DROP TRIGGER trg_1;
 
747
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
748
f_int2 = CAST(f_char1 AS SIGNED INT),
 
749
f_charbig = 'just inserted'
 
750
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
751
DELETE FROM t0_aux
 
752
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
753
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
754
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
755
'just inserted' FROM t0_template
 
756
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
757
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
758
BEGIN
 
759
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
760
f_charbig = 'updated by trigger'
 
761
      WHERE f_int1 = - old.f_int1;
 
762
END|
 
763
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
764
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
765
        
 
766
# check trigger-4 success:      1
 
767
DROP TRIGGER trg_1;
 
768
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
769
f_int2 = CAST(f_char1 AS SIGNED INT),
 
770
f_charbig = 'just inserted'
 
771
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
772
DELETE FROM t0_aux
 
773
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
774
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
775
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
776
'just inserted' FROM t0_template
 
777
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
778
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
779
BEGIN
 
780
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
781
f_charbig = 'updated by trigger'
 
782
      WHERE f_int1 = new.f_int1;
 
783
END|
 
784
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
785
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
786
        
 
787
# check trigger-5 success:      1
 
788
DROP TRIGGER trg_1;
 
789
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
790
f_int2 = CAST(f_char1 AS SIGNED INT),
 
791
f_charbig = 'just inserted'
 
792
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
793
DELETE FROM t0_aux
 
794
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
795
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
796
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
797
'just inserted' FROM t0_template
 
798
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
799
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
800
BEGIN
 
801
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
802
f_charbig = 'updated by trigger'
 
803
      WHERE f_int1 = - old.f_int1;
 
804
END|
 
805
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
806
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
807
        
 
808
# check trigger-6 success:      1
 
809
DROP TRIGGER trg_1;
 
810
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
811
f_int2 = CAST(f_char1 AS SIGNED INT),
 
812
f_charbig = 'just inserted'
 
813
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
814
DELETE FROM t0_aux
 
815
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
816
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
817
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
818
'just inserted' FROM t0_template
 
819
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
820
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
821
BEGIN
 
822
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
823
f_charbig = 'updated by trigger'
 
824
      WHERE f_int1 = - old.f_int1;
 
825
END|
 
826
DELETE FROM t0_aux
 
827
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
828
        
 
829
# check trigger-7 success:      1
 
830
DROP TRIGGER trg_1;
 
831
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
832
f_int2 = CAST(f_char1 AS SIGNED INT),
 
833
f_charbig = 'just inserted'
 
834
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
835
DELETE FROM t0_aux
 
836
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
837
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
838
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
839
'just inserted' FROM t0_template
 
840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
841
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
842
BEGIN
 
843
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
844
f_charbig = 'updated by trigger'
 
845
      WHERE f_int1 = - old.f_int1;
 
846
END|
 
847
DELETE FROM t0_aux
 
848
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
849
        
 
850
# check trigger-8 success:      1
 
851
DROP TRIGGER trg_1;
 
852
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
853
f_int2 = CAST(f_char1 AS SIGNED INT),
 
854
f_charbig = 'just inserted'
 
855
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
856
DELETE FROM t0_aux
 
857
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
858
DELETE FROM t1
 
859
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
860
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
861
BEGIN
 
862
SET new.f_int1 = old.f_int1 + @max_row,
 
863
new.f_int2 = old.f_int2 - @max_row,
 
864
new.f_charbig = '####updated per update trigger####';
 
865
END|
 
866
UPDATE t1
 
867
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
868
f_charbig = '####updated per update statement itself####';
 
869
        
 
870
# check trigger-9 success:      1
 
871
DROP TRIGGER trg_2;
 
872
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
873
f_int2 = CAST(f_char1 AS SIGNED INT),
 
874
f_charbig = CONCAT('===',f_char1,'===');
 
875
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
876
BEGIN
 
877
SET new.f_int1 = new.f_int1 + @max_row,
 
878
new.f_int2 = new.f_int2 - @max_row,
 
879
new.f_charbig = '####updated per update trigger####';
 
880
END|
 
881
UPDATE t1
 
882
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
883
f_charbig = '####updated per update statement itself####';
 
884
        
 
885
# check trigger-10 success:     1
 
886
DROP TRIGGER trg_2;
 
887
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
888
f_int2 = CAST(f_char1 AS SIGNED INT),
 
889
f_charbig = CONCAT('===',f_char1,'===');
 
890
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
891
BEGIN
 
892
SET new.f_int1 = @my_max1 + @counter,
 
893
new.f_int2 = @my_min2 - @counter,
 
894
new.f_charbig = '####updated per insert trigger####';
 
895
SET @counter = @counter + 1;
 
896
END|
 
897
SET @counter = 1;
 
898
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
899
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
900
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
901
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
902
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
903
ORDER BY f_int1;
 
904
DROP TRIGGER trg_3;
 
905
        
 
906
# check trigger-11 success:     1
 
907
DELETE FROM t1
 
908
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
909
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
910
AND f_charbig = '####updated per insert trigger####';
 
911
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
912
BEGIN
 
913
SET new.f_int1 = @my_max1 + @counter,
 
914
new.f_int2 = @my_min2 - @counter,
 
915
new.f_charbig = '####updated per insert trigger####';
 
916
SET @counter = @counter + 1;
 
917
END|
 
918
SET @counter = 1;
 
919
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
920
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
921
SELECT CAST(f_int1 AS CHAR),
 
922
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
923
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
924
ORDER BY f_int1;
 
925
DROP TRIGGER trg_3;
 
926
        
 
927
# check trigger-12 success:     1
 
928
DELETE FROM t1
 
929
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
930
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
931
AND f_charbig = '####updated per insert trigger####';
 
932
ANALYZE  TABLE t1;
 
933
Table   Op      Msg_type        Msg_text
 
934
test.t1 analyze status  OK
 
935
CHECK    TABLE t1 EXTENDED;
 
936
Table   Op      Msg_type        Msg_text
 
937
test.t1 check   status  OK
 
938
CHECKSUM TABLE t1 EXTENDED;
 
939
Table   Checksum
 
940
test.t1 <some_value>
 
941
OPTIMIZE TABLE t1;
 
942
Table   Op      Msg_type        Msg_text
 
943
test.t1 optimize        status  OK
 
944
# check layout success:    1
 
945
REPAIR   TABLE t1 EXTENDED;
 
946
Table   Op      Msg_type        Msg_text
 
947
test.t1 repair  note    The storage engine for the table doesn't support repair
 
948
# check layout success:    1
 
949
TRUNCATE t1;
 
950
        
 
951
# check TRUNCATE success:       1
 
952
# check layout success:    1
 
953
# End usability test (inc/partition_check.inc)
 
954
DROP TABLE t1;
 
955
CREATE TABLE t1 (
 
956
f_int1 INTEGER,
 
957
f_int2 INTEGER,
 
958
f_char1 CHAR(20),
 
959
f_char2 CHAR(20),
 
960
f_charbig VARCHAR(1000)
 
961
 
 
962
)
 
963
PARTITION BY LIST(MOD(f_int1,4))
 
964
(PARTITION part_3 VALUES IN (-3),
 
965
PARTITION part_2 VALUES IN (-2),
 
966
PARTITION part_1 VALUES IN (-1),
 
967
PARTITION part_N VALUES IN (NULL),
 
968
PARTITION part0 VALUES IN (0),
 
969
PARTITION part1 VALUES IN (1),
 
970
PARTITION part2 VALUES IN (2),
 
971
PARTITION part3 VALUES IN (3));
 
972
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
973
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
974
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
975
ALTER TABLE t1 ANALYZE PARTITION part_1;
 
976
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
977
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
978
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
979
# Start usability test (inc/partition_check.inc)
 
980
create_command
 
981
SHOW CREATE TABLE t1;
 
982
Table   Create Table
 
983
t1      CREATE TABLE `t1` (
 
984
  `f_int1` int(11) DEFAULT NULL,
 
985
  `f_int2` int(11) DEFAULT NULL,
 
986
  `f_char1` char(20) DEFAULT NULL,
 
987
  `f_char2` char(20) DEFAULT NULL,
 
988
  `f_charbig` varchar(1000) DEFAULT NULL
 
989
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
990
 
 
991
# check prerequisites-1 success:    1
 
992
# check COUNT(*) success:    1
 
993
# check MIN/MAX(f_int1) success:    1
 
994
# check MIN/MAX(f_int2) success:    1
 
995
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
996
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
997
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
998
WHERE f_int1 IN (2,3);
 
999
# check prerequisites-3 success:    1
 
1000
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1001
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
1002
# check read via f_int1 success: 1
 
1003
# check read via f_int2 success: 1
 
1004
        
 
1005
# check multiple-1 success:     1
 
1006
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1007
        
 
1008
# check multiple-2 success:     1
 
1009
INSERT INTO t1 SELECT * FROM t0_template
 
1010
WHERE MOD(f_int1,3) = 0;
 
1011
        
 
1012
# check multiple-3 success:     1
 
1013
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1014
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1015
AND @max_row_div2 + @max_row_div4;
 
1016
        
 
1017
# check multiple-4 success:     1
 
1018
DELETE FROM t1
 
1019
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1020
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1021
        
 
1022
# check multiple-5 success:     1
 
1023
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1024
INSERT INTO t1
 
1025
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1026
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1027
f_charbig = '#SINGLE#';
 
1028
        
 
1029
# check single-1 success:       1
 
1030
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1031
INSERT INTO t1
 
1032
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1033
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1034
f_charbig = '#SINGLE#';
 
1035
        
 
1036
# check single-2 success:       1
 
1037
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1038
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1039
UPDATE t1 SET f_int1 = @cur_value2
 
1040
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1041
        
 
1042
# check single-3 success:       1
 
1043
SET @cur_value1= -1;
 
1044
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1045
UPDATE t1 SET f_int1 = @cur_value1
 
1046
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1047
        
 
1048
# check single-4 success:       1
 
1049
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1050
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1051
        
 
1052
# check single-5 success:       1
 
1053
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1054
        
 
1055
# check single-6 success:       1
 
1056
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1057
        
 
1058
# check single-7 success:       1
 
1059
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
1060
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1061
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1062
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1063
f_charbig = '#NULL#';
 
1064
INSERT INTO t1
 
1065
SET f_int1 = NULL , f_int2 = -@max_row,
 
1066
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1067
f_charbig = '#NULL#';
 
1068
# check null success:    1
 
1069
        
 
1070
# check null-1 success:         1
 
1071
UPDATE t1 SET f_int1 = -@max_row
 
1072
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1073
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1074
        
 
1075
# check null-2 success:         1
 
1076
UPDATE t1 SET f_int1 = NULL
 
1077
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1078
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1079
        
 
1080
# check null-3 success:         1
 
1081
DELETE FROM t1
 
1082
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1083
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1084
        
 
1085
# check null-4 success:         1
 
1086
DELETE FROM t1
 
1087
WHERE f_int1 = 0 AND f_int2 = 0
 
1088
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1089
AND f_charbig = '#NULL#';
 
1090
SET AUTOCOMMIT= 0;
 
1091
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1092
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1093
FROM t0_template source_tab
 
1094
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1095
        
 
1096
# check transactions-1 success:         1
 
1097
COMMIT WORK;
 
1098
        
 
1099
# check transactions-2 success:         1
 
1100
ROLLBACK WORK;
 
1101
        
 
1102
# check transactions-3 success:         1
 
1103
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1104
COMMIT WORK;
 
1105
ROLLBACK WORK;
 
1106
        
 
1107
# check transactions-4 success:         1
 
1108
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1109
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1110
FROM t0_template source_tab
 
1111
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1112
        
 
1113
# check transactions-5 success:         1
 
1114
ROLLBACK WORK;
 
1115
        
 
1116
# check transactions-6 success:         1
 
1117
# INFO: Storage engine used for t1 seems to be transactional.
 
1118
COMMIT;
 
1119
        
 
1120
# check transactions-7 success:         1
 
1121
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1122
COMMIT WORK;
 
1123
SET @@session.sql_mode = 'traditional';
 
1124
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1125
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1126
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1127
'', '', 'was inserted' FROM t0_template
 
1128
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1129
ERROR 22012: Division by 0
 
1130
COMMIT;
 
1131
        
 
1132
# check transactions-8 success:         1
 
1133
# INFO: Storage engine used for t1 seems to be able to revert
 
1134
#       changes made by the failing statement.
 
1135
SET @@session.sql_mode = '';
 
1136
SET AUTOCOMMIT= 1;
 
1137
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1138
COMMIT WORK;
 
1139
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
1140
        
 
1141
# check special-1 success:      1
 
1142
UPDATE t1 SET f_charbig = '';
 
1143
        
 
1144
# check special-2 success:      1
 
1145
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
1146
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1147
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
1148
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1149
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1150
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1151
'just inserted' FROM t0_template
 
1152
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1153
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
1154
BEGIN
 
1155
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1156
f_charbig = 'updated by trigger'
 
1157
      WHERE f_int1 = new.f_int1;
 
1158
END|
 
1159
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1160
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1161
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1162
        
 
1163
# check trigger-1 success:      1
 
1164
DROP TRIGGER trg_1;
 
1165
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1166
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1167
f_charbig = 'just inserted'
 
1168
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1169
DELETE FROM t0_aux
 
1170
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1171
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1172
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1173
'just inserted' FROM t0_template
 
1174
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1175
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1176
BEGIN
 
1177
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1178
f_charbig = 'updated by trigger'
 
1179
      WHERE f_int1 = new.f_int1;
 
1180
END|
 
1181
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1182
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1183
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1184
        
 
1185
# check trigger-2 success:      1
 
1186
DROP TRIGGER trg_1;
 
1187
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1188
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1189
f_charbig = 'just inserted'
 
1190
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1191
DELETE FROM t0_aux
 
1192
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1193
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1194
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1195
'just inserted' FROM t0_template
 
1196
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1197
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1198
BEGIN
 
1199
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1200
f_charbig = 'updated by trigger'
 
1201
      WHERE f_int1 = new.f_int1;
 
1202
END|
 
1203
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1204
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1205
        
 
1206
# check trigger-3 success:      1
 
1207
DROP TRIGGER trg_1;
 
1208
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1209
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1210
f_charbig = 'just inserted'
 
1211
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1212
DELETE FROM t0_aux
 
1213
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1214
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1215
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1216
'just inserted' FROM t0_template
 
1217
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1218
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1219
BEGIN
 
1220
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1221
f_charbig = 'updated by trigger'
 
1222
      WHERE f_int1 = - old.f_int1;
 
1223
END|
 
1224
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1225
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1226
        
 
1227
# check trigger-4 success:      1
 
1228
DROP TRIGGER trg_1;
 
1229
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1230
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1231
f_charbig = 'just inserted'
 
1232
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1233
DELETE FROM t0_aux
 
1234
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1235
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1236
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1237
'just inserted' FROM t0_template
 
1238
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1239
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1240
BEGIN
 
1241
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1242
f_charbig = 'updated by trigger'
 
1243
      WHERE f_int1 = new.f_int1;
 
1244
END|
 
1245
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1246
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1247
        
 
1248
# check trigger-5 success:      1
 
1249
DROP TRIGGER trg_1;
 
1250
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1251
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1252
f_charbig = 'just inserted'
 
1253
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1254
DELETE FROM t0_aux
 
1255
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1256
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1257
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1258
'just inserted' FROM t0_template
 
1259
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1260
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1261
BEGIN
 
1262
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1263
f_charbig = 'updated by trigger'
 
1264
      WHERE f_int1 = - old.f_int1;
 
1265
END|
 
1266
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1267
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1268
        
 
1269
# check trigger-6 success:      1
 
1270
DROP TRIGGER trg_1;
 
1271
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1272
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1273
f_charbig = 'just inserted'
 
1274
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1275
DELETE FROM t0_aux
 
1276
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1277
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1278
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1279
'just inserted' FROM t0_template
 
1280
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1281
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1282
BEGIN
 
1283
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1284
f_charbig = 'updated by trigger'
 
1285
      WHERE f_int1 = - old.f_int1;
 
1286
END|
 
1287
DELETE FROM t0_aux
 
1288
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1289
        
 
1290
# check trigger-7 success:      1
 
1291
DROP TRIGGER trg_1;
 
1292
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1293
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1294
f_charbig = 'just inserted'
 
1295
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1296
DELETE FROM t0_aux
 
1297
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1298
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1299
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1300
'just inserted' FROM t0_template
 
1301
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1302
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1303
BEGIN
 
1304
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1305
f_charbig = 'updated by trigger'
 
1306
      WHERE f_int1 = - old.f_int1;
 
1307
END|
 
1308
DELETE FROM t0_aux
 
1309
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1310
        
 
1311
# check trigger-8 success:      1
 
1312
DROP TRIGGER trg_1;
 
1313
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1314
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1315
f_charbig = 'just inserted'
 
1316
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1317
DELETE FROM t0_aux
 
1318
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1319
DELETE FROM t1
 
1320
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1321
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1322
BEGIN
 
1323
SET new.f_int1 = old.f_int1 + @max_row,
 
1324
new.f_int2 = old.f_int2 - @max_row,
 
1325
new.f_charbig = '####updated per update trigger####';
 
1326
END|
 
1327
UPDATE t1
 
1328
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1329
f_charbig = '####updated per update statement itself####';
 
1330
        
 
1331
# check trigger-9 success:      1
 
1332
DROP TRIGGER trg_2;
 
1333
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1334
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1335
f_charbig = CONCAT('===',f_char1,'===');
 
1336
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1337
BEGIN
 
1338
SET new.f_int1 = new.f_int1 + @max_row,
 
1339
new.f_int2 = new.f_int2 - @max_row,
 
1340
new.f_charbig = '####updated per update trigger####';
 
1341
END|
 
1342
UPDATE t1
 
1343
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1344
f_charbig = '####updated per update statement itself####';
 
1345
        
 
1346
# check trigger-10 success:     1
 
1347
DROP TRIGGER trg_2;
 
1348
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1349
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1350
f_charbig = CONCAT('===',f_char1,'===');
 
1351
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1352
BEGIN
 
1353
SET new.f_int1 = @my_max1 + @counter,
 
1354
new.f_int2 = @my_min2 - @counter,
 
1355
new.f_charbig = '####updated per insert trigger####';
 
1356
SET @counter = @counter + 1;
 
1357
END|
 
1358
SET @counter = 1;
 
1359
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1360
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1361
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1362
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1363
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1364
ORDER BY f_int1;
 
1365
DROP TRIGGER trg_3;
 
1366
        
 
1367
# check trigger-11 success:     1
 
1368
DELETE FROM t1
 
1369
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1370
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1371
AND f_charbig = '####updated per insert trigger####';
 
1372
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1373
BEGIN
 
1374
SET new.f_int1 = @my_max1 + @counter,
 
1375
new.f_int2 = @my_min2 - @counter,
 
1376
new.f_charbig = '####updated per insert trigger####';
 
1377
SET @counter = @counter + 1;
 
1378
END|
 
1379
SET @counter = 1;
 
1380
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1381
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1382
SELECT CAST(f_int1 AS CHAR),
 
1383
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1384
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1385
ORDER BY f_int1;
 
1386
DROP TRIGGER trg_3;
 
1387
        
 
1388
# check trigger-12 success:     1
 
1389
DELETE FROM t1
 
1390
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1391
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1392
AND f_charbig = '####updated per insert trigger####';
 
1393
ANALYZE  TABLE t1;
 
1394
Table   Op      Msg_type        Msg_text
 
1395
test.t1 analyze status  OK
 
1396
CHECK    TABLE t1 EXTENDED;
 
1397
Table   Op      Msg_type        Msg_text
 
1398
test.t1 check   status  OK
 
1399
CHECKSUM TABLE t1 EXTENDED;
 
1400
Table   Checksum
 
1401
test.t1 <some_value>
 
1402
OPTIMIZE TABLE t1;
 
1403
Table   Op      Msg_type        Msg_text
 
1404
test.t1 optimize        status  OK
 
1405
# check layout success:    1
 
1406
REPAIR   TABLE t1 EXTENDED;
 
1407
Table   Op      Msg_type        Msg_text
 
1408
test.t1 repair  note    The storage engine for the table doesn't support repair
 
1409
# check layout success:    1
 
1410
TRUNCATE t1;
 
1411
        
 
1412
# check TRUNCATE success:       1
 
1413
# check layout success:    1
 
1414
# End usability test (inc/partition_check.inc)
 
1415
DROP TABLE t1;
 
1416
CREATE TABLE t1 (
 
1417
f_int1 INTEGER,
 
1418
f_int2 INTEGER,
 
1419
f_char1 CHAR(20),
 
1420
f_char2 CHAR(20),
 
1421
f_charbig VARCHAR(1000)
 
1422
 
 
1423
)
 
1424
PARTITION BY RANGE(f_int1)
 
1425
(PARTITION parta VALUES LESS THAN (0),
 
1426
PARTITION part_1 VALUES LESS THAN (5),
 
1427
PARTITION part_2 VALUES LESS THAN (10),
 
1428
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
1429
PARTITION part_4 VALUES LESS THAN (20),
 
1430
PARTITION part_5 VALUES LESS THAN (2147483646));
 
1431
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1432
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1433
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
1434
ALTER TABLE t1 ANALYZE PARTITION part_1;
 
1435
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1436
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1437
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1438
# Start usability test (inc/partition_check.inc)
 
1439
create_command
 
1440
SHOW CREATE TABLE t1;
 
1441
Table   Create Table
 
1442
t1      CREATE TABLE `t1` (
 
1443
  `f_int1` int(11) DEFAULT NULL,
 
1444
  `f_int2` int(11) DEFAULT NULL,
 
1445
  `f_char1` char(20) DEFAULT NULL,
 
1446
  `f_char2` char(20) DEFAULT NULL,
 
1447
  `f_charbig` varchar(1000) DEFAULT NULL
 
1448
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
1449
 
 
1450
# check prerequisites-1 success:    1
 
1451
# check COUNT(*) success:    1
 
1452
# check MIN/MAX(f_int1) success:    1
 
1453
# check MIN/MAX(f_int2) success:    1
 
1454
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1455
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1456
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1457
WHERE f_int1 IN (2,3);
 
1458
# check prerequisites-3 success:    1
 
1459
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1460
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
1461
# check read via f_int1 success: 1
 
1462
# check read via f_int2 success: 1
 
1463
        
 
1464
# check multiple-1 success:     1
 
1465
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1466
        
 
1467
# check multiple-2 success:     1
 
1468
INSERT INTO t1 SELECT * FROM t0_template
 
1469
WHERE MOD(f_int1,3) = 0;
 
1470
        
 
1471
# check multiple-3 success:     1
 
1472
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1473
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1474
AND @max_row_div2 + @max_row_div4;
 
1475
        
 
1476
# check multiple-4 success:     1
 
1477
DELETE FROM t1
 
1478
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1479
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1480
        
 
1481
# check multiple-5 success:     1
 
1482
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1483
INSERT INTO t1
 
1484
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1485
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1486
f_charbig = '#SINGLE#';
 
1487
        
 
1488
# check single-1 success:       1
 
1489
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1490
INSERT INTO t1
 
1491
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1492
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1493
f_charbig = '#SINGLE#';
 
1494
        
 
1495
# check single-2 success:       1
 
1496
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1497
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1498
UPDATE t1 SET f_int1 = @cur_value2
 
1499
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1500
        
 
1501
# check single-3 success:       1
 
1502
SET @cur_value1= -1;
 
1503
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1504
UPDATE t1 SET f_int1 = @cur_value1
 
1505
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1506
        
 
1507
# check single-4 success:       1
 
1508
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1509
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1510
        
 
1511
# check single-5 success:       1
 
1512
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1513
        
 
1514
# check single-6 success:       1
 
1515
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1516
ERROR HY000: Table has no partition for value 2147483647
 
1517
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1518
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1519
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1520
f_charbig = '#NULL#';
 
1521
INSERT INTO t1
 
1522
SET f_int1 = NULL , f_int2 = -@max_row,
 
1523
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1524
f_charbig = '#NULL#';
 
1525
# check null success:    1
 
1526
        
 
1527
# check null-1 success:         1
 
1528
UPDATE t1 SET f_int1 = -@max_row
 
1529
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1530
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1531
        
 
1532
# check null-2 success:         1
 
1533
UPDATE t1 SET f_int1 = NULL
 
1534
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1535
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1536
        
 
1537
# check null-3 success:         1
 
1538
DELETE FROM t1
 
1539
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1540
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1541
        
 
1542
# check null-4 success:         1
 
1543
DELETE FROM t1
 
1544
WHERE f_int1 = 0 AND f_int2 = 0
 
1545
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1546
AND f_charbig = '#NULL#';
 
1547
SET AUTOCOMMIT= 0;
 
1548
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1549
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1550
FROM t0_template source_tab
 
1551
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1552
        
 
1553
# check transactions-1 success:         1
 
1554
COMMIT WORK;
 
1555
        
 
1556
# check transactions-2 success:         1
 
1557
ROLLBACK WORK;
 
1558
        
 
1559
# check transactions-3 success:         1
 
1560
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1561
COMMIT WORK;
 
1562
ROLLBACK WORK;
 
1563
        
 
1564
# check transactions-4 success:         1
 
1565
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1566
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1567
FROM t0_template source_tab
 
1568
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1569
        
 
1570
# check transactions-5 success:         1
 
1571
ROLLBACK WORK;
 
1572
        
 
1573
# check transactions-6 success:         1
 
1574
# INFO: Storage engine used for t1 seems to be transactional.
 
1575
COMMIT;
 
1576
        
 
1577
# check transactions-7 success:         1
 
1578
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1579
COMMIT WORK;
 
1580
SET @@session.sql_mode = 'traditional';
 
1581
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1582
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1583
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1584
'', '', 'was inserted' FROM t0_template
 
1585
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1586
ERROR 22012: Division by 0
 
1587
COMMIT;
 
1588
        
 
1589
# check transactions-8 success:         1
 
1590
# INFO: Storage engine used for t1 seems to be able to revert
 
1591
#       changes made by the failing statement.
 
1592
SET @@session.sql_mode = '';
 
1593
SET AUTOCOMMIT= 1;
 
1594
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1595
COMMIT WORK;
 
1596
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
1597
        
 
1598
# check special-1 success:      1
 
1599
UPDATE t1 SET f_charbig = '';
 
1600
        
 
1601
# check special-2 success:      1
 
1602
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
1603
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1604
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
1605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1606
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1607
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1608
'just inserted' FROM t0_template
 
1609
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1610
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
1611
BEGIN
 
1612
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1613
f_charbig = 'updated by trigger'
 
1614
      WHERE f_int1 = new.f_int1;
 
1615
END|
 
1616
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1617
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1618
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1619
        
 
1620
# check trigger-1 success:      1
 
1621
DROP TRIGGER trg_1;
 
1622
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1623
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1624
f_charbig = 'just inserted'
 
1625
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1626
DELETE FROM t0_aux
 
1627
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1628
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1629
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1630
'just inserted' FROM t0_template
 
1631
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1632
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1633
BEGIN
 
1634
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1635
f_charbig = 'updated by trigger'
 
1636
      WHERE f_int1 = new.f_int1;
 
1637
END|
 
1638
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1639
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1640
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1641
        
 
1642
# check trigger-2 success:      1
 
1643
DROP TRIGGER trg_1;
 
1644
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1645
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1646
f_charbig = 'just inserted'
 
1647
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1648
DELETE FROM t0_aux
 
1649
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1650
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1651
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1652
'just inserted' FROM t0_template
 
1653
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1654
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1655
BEGIN
 
1656
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1657
f_charbig = 'updated by trigger'
 
1658
      WHERE f_int1 = new.f_int1;
 
1659
END|
 
1660
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1661
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1662
        
 
1663
# check trigger-3 success:      1
 
1664
DROP TRIGGER trg_1;
 
1665
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1666
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1667
f_charbig = 'just inserted'
 
1668
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1669
DELETE FROM t0_aux
 
1670
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1671
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1672
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1673
'just inserted' FROM t0_template
 
1674
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1675
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1676
BEGIN
 
1677
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1678
f_charbig = 'updated by trigger'
 
1679
      WHERE f_int1 = - old.f_int1;
 
1680
END|
 
1681
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1682
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1683
        
 
1684
# check trigger-4 success:      1
 
1685
DROP TRIGGER trg_1;
 
1686
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1687
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1688
f_charbig = 'just inserted'
 
1689
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1690
DELETE FROM t0_aux
 
1691
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1692
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1693
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1694
'just inserted' FROM t0_template
 
1695
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1696
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1697
BEGIN
 
1698
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1699
f_charbig = 'updated by trigger'
 
1700
      WHERE f_int1 = new.f_int1;
 
1701
END|
 
1702
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1703
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1704
        
 
1705
# check trigger-5 success:      1
 
1706
DROP TRIGGER trg_1;
 
1707
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1708
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1709
f_charbig = 'just inserted'
 
1710
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1711
DELETE FROM t0_aux
 
1712
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1713
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1714
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1715
'just inserted' FROM t0_template
 
1716
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1717
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1718
BEGIN
 
1719
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1720
f_charbig = 'updated by trigger'
 
1721
      WHERE f_int1 = - old.f_int1;
 
1722
END|
 
1723
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1724
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1725
        
 
1726
# check trigger-6 success:      1
 
1727
DROP TRIGGER trg_1;
 
1728
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1729
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1730
f_charbig = 'just inserted'
 
1731
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1732
DELETE FROM t0_aux
 
1733
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1734
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1735
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1736
'just inserted' FROM t0_template
 
1737
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1738
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1739
BEGIN
 
1740
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1741
f_charbig = 'updated by trigger'
 
1742
      WHERE f_int1 = - old.f_int1;
 
1743
END|
 
1744
DELETE FROM t0_aux
 
1745
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1746
        
 
1747
# check trigger-7 success:      1
 
1748
DROP TRIGGER trg_1;
 
1749
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1750
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1751
f_charbig = 'just inserted'
 
1752
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1753
DELETE FROM t0_aux
 
1754
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1755
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1756
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1757
'just inserted' FROM t0_template
 
1758
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1759
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1760
BEGIN
 
1761
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1762
f_charbig = 'updated by trigger'
 
1763
      WHERE f_int1 = - old.f_int1;
 
1764
END|
 
1765
DELETE FROM t0_aux
 
1766
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1767
        
 
1768
# check trigger-8 success:      1
 
1769
DROP TRIGGER trg_1;
 
1770
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1771
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1772
f_charbig = 'just inserted'
 
1773
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1774
DELETE FROM t0_aux
 
1775
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1776
DELETE FROM t1
 
1777
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1778
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1779
BEGIN
 
1780
SET new.f_int1 = old.f_int1 + @max_row,
 
1781
new.f_int2 = old.f_int2 - @max_row,
 
1782
new.f_charbig = '####updated per update trigger####';
 
1783
END|
 
1784
UPDATE t1
 
1785
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1786
f_charbig = '####updated per update statement itself####';
 
1787
        
 
1788
# check trigger-9 success:      1
 
1789
DROP TRIGGER trg_2;
 
1790
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1791
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1792
f_charbig = CONCAT('===',f_char1,'===');
 
1793
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1794
BEGIN
 
1795
SET new.f_int1 = new.f_int1 + @max_row,
 
1796
new.f_int2 = new.f_int2 - @max_row,
 
1797
new.f_charbig = '####updated per update trigger####';
 
1798
END|
 
1799
UPDATE t1
 
1800
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1801
f_charbig = '####updated per update statement itself####';
 
1802
        
 
1803
# check trigger-10 success:     1
 
1804
DROP TRIGGER trg_2;
 
1805
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1806
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1807
f_charbig = CONCAT('===',f_char1,'===');
 
1808
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1809
BEGIN
 
1810
SET new.f_int1 = @my_max1 + @counter,
 
1811
new.f_int2 = @my_min2 - @counter,
 
1812
new.f_charbig = '####updated per insert trigger####';
 
1813
SET @counter = @counter + 1;
 
1814
END|
 
1815
SET @counter = 1;
 
1816
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1817
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1818
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1819
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1820
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1821
ORDER BY f_int1;
 
1822
DROP TRIGGER trg_3;
 
1823
        
 
1824
# check trigger-11 success:     1
 
1825
DELETE FROM t1
 
1826
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1827
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1828
AND f_charbig = '####updated per insert trigger####';
 
1829
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1830
BEGIN
 
1831
SET new.f_int1 = @my_max1 + @counter,
 
1832
new.f_int2 = @my_min2 - @counter,
 
1833
new.f_charbig = '####updated per insert trigger####';
 
1834
SET @counter = @counter + 1;
 
1835
END|
 
1836
SET @counter = 1;
 
1837
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1838
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1839
SELECT CAST(f_int1 AS CHAR),
 
1840
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1841
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1842
ORDER BY f_int1;
 
1843
DROP TRIGGER trg_3;
 
1844
        
 
1845
# check trigger-12 success:     1
 
1846
DELETE FROM t1
 
1847
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1848
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1849
AND f_charbig = '####updated per insert trigger####';
 
1850
ANALYZE  TABLE t1;
 
1851
Table   Op      Msg_type        Msg_text
 
1852
test.t1 analyze status  OK
 
1853
CHECK    TABLE t1 EXTENDED;
 
1854
Table   Op      Msg_type        Msg_text
 
1855
test.t1 check   status  OK
 
1856
CHECKSUM TABLE t1 EXTENDED;
 
1857
Table   Checksum
 
1858
test.t1 <some_value>
 
1859
OPTIMIZE TABLE t1;
 
1860
Table   Op      Msg_type        Msg_text
 
1861
test.t1 optimize        status  OK
 
1862
# check layout success:    1
 
1863
REPAIR   TABLE t1 EXTENDED;
 
1864
Table   Op      Msg_type        Msg_text
 
1865
test.t1 repair  note    The storage engine for the table doesn't support repair
 
1866
# check layout success:    1
 
1867
TRUNCATE t1;
 
1868
        
 
1869
# check TRUNCATE success:       1
 
1870
# check layout success:    1
 
1871
# End usability test (inc/partition_check.inc)
 
1872
DROP TABLE t1;
 
1873
CREATE TABLE t1 (
 
1874
f_int1 INTEGER,
 
1875
f_int2 INTEGER,
 
1876
f_char1 CHAR(20),
 
1877
f_char2 CHAR(20),
 
1878
f_charbig VARCHAR(1000)
 
1879
 
 
1880
)
 
1881
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
1882
(PARTITION part_1 VALUES LESS THAN (0),
 
1883
PARTITION part_2 VALUES LESS THAN (5),
 
1884
PARTITION part_3 VALUES LESS THAN (10),
 
1885
PARTITION part_4 VALUES LESS THAN (2147483646));
 
1886
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1887
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1888
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
1889
ALTER TABLE t1 ANALYZE PARTITION part_1;
 
1890
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1891
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1892
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1893
# Start usability test (inc/partition_check.inc)
 
1894
create_command
 
1895
SHOW CREATE TABLE t1;
 
1896
Table   Create Table
 
1897
t1      CREATE TABLE `t1` (
 
1898
  `f_int1` int(11) DEFAULT NULL,
 
1899
  `f_int2` int(11) DEFAULT NULL,
 
1900
  `f_char1` char(20) DEFAULT NULL,
 
1901
  `f_char2` char(20) DEFAULT NULL,
 
1902
  `f_charbig` varchar(1000) DEFAULT NULL
 
1903
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
1904
 
 
1905
# check prerequisites-1 success:    1
 
1906
# check COUNT(*) success:    1
 
1907
# check MIN/MAX(f_int1) success:    1
 
1908
# check MIN/MAX(f_int2) success:    1
 
1909
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1910
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1911
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1912
WHERE f_int1 IN (2,3);
 
1913
# check prerequisites-3 success:    1
 
1914
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1915
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
1916
# check read via f_int1 success: 1
 
1917
# check read via f_int2 success: 1
 
1918
        
 
1919
# check multiple-1 success:     1
 
1920
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1921
        
 
1922
# check multiple-2 success:     1
 
1923
INSERT INTO t1 SELECT * FROM t0_template
 
1924
WHERE MOD(f_int1,3) = 0;
 
1925
        
 
1926
# check multiple-3 success:     1
 
1927
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1928
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1929
AND @max_row_div2 + @max_row_div4;
 
1930
        
 
1931
# check multiple-4 success:     1
 
1932
DELETE FROM t1
 
1933
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1934
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1935
        
 
1936
# check multiple-5 success:     1
 
1937
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1938
INSERT INTO t1
 
1939
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1940
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1941
f_charbig = '#SINGLE#';
 
1942
        
 
1943
# check single-1 success:       1
 
1944
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1945
INSERT INTO t1
 
1946
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1947
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1948
f_charbig = '#SINGLE#';
 
1949
        
 
1950
# check single-2 success:       1
 
1951
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1952
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1953
UPDATE t1 SET f_int1 = @cur_value2
 
1954
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1955
        
 
1956
# check single-3 success:       1
 
1957
SET @cur_value1= -1;
 
1958
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1959
UPDATE t1 SET f_int1 = @cur_value1
 
1960
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1961
        
 
1962
# check single-4 success:       1
 
1963
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1964
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1965
        
 
1966
# check single-5 success:       1
 
1967
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1968
        
 
1969
# check single-6 success:       1
 
1970
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1971
        
 
1972
# check single-7 success:       1
 
1973
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
1974
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1975
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1976
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1977
f_charbig = '#NULL#';
 
1978
INSERT INTO t1
 
1979
SET f_int1 = NULL , f_int2 = -@max_row,
 
1980
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1981
f_charbig = '#NULL#';
 
1982
# check null success:    1
 
1983
        
 
1984
# check null-1 success:         1
 
1985
UPDATE t1 SET f_int1 = -@max_row
 
1986
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1987
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1988
        
 
1989
# check null-2 success:         1
 
1990
UPDATE t1 SET f_int1 = NULL
 
1991
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1992
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1993
        
 
1994
# check null-3 success:         1
 
1995
DELETE FROM t1
 
1996
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1997
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1998
        
 
1999
# check null-4 success:         1
 
2000
DELETE FROM t1
 
2001
WHERE f_int1 = 0 AND f_int2 = 0
 
2002
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2003
AND f_charbig = '#NULL#';
 
2004
SET AUTOCOMMIT= 0;
 
2005
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2006
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2007
FROM t0_template source_tab
 
2008
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2009
        
 
2010
# check transactions-1 success:         1
 
2011
COMMIT WORK;
 
2012
        
 
2013
# check transactions-2 success:         1
 
2014
ROLLBACK WORK;
 
2015
        
 
2016
# check transactions-3 success:         1
 
2017
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2018
COMMIT WORK;
 
2019
ROLLBACK WORK;
 
2020
        
 
2021
# check transactions-4 success:         1
 
2022
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2023
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2024
FROM t0_template source_tab
 
2025
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2026
        
 
2027
# check transactions-5 success:         1
 
2028
ROLLBACK WORK;
 
2029
        
 
2030
# check transactions-6 success:         1
 
2031
# INFO: Storage engine used for t1 seems to be transactional.
 
2032
COMMIT;
 
2033
        
 
2034
# check transactions-7 success:         1
 
2035
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2036
COMMIT WORK;
 
2037
SET @@session.sql_mode = 'traditional';
 
2038
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2039
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2040
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2041
'', '', 'was inserted' FROM t0_template
 
2042
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2043
ERROR 22012: Division by 0
 
2044
COMMIT;
 
2045
        
 
2046
# check transactions-8 success:         1
 
2047
# INFO: Storage engine used for t1 seems to be able to revert
 
2048
#       changes made by the failing statement.
 
2049
SET @@session.sql_mode = '';
 
2050
SET AUTOCOMMIT= 1;
 
2051
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2052
COMMIT WORK;
 
2053
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2054
        
 
2055
# check special-1 success:      1
 
2056
UPDATE t1 SET f_charbig = '';
 
2057
        
 
2058
# check special-2 success:      1
 
2059
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2060
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2061
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2062
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2063
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2064
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2065
'just inserted' FROM t0_template
 
2066
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2067
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2068
BEGIN
 
2069
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2070
f_charbig = 'updated by trigger'
 
2071
      WHERE f_int1 = new.f_int1;
 
2072
END|
 
2073
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2074
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2075
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2076
        
 
2077
# check trigger-1 success:      1
 
2078
DROP TRIGGER trg_1;
 
2079
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2080
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2081
f_charbig = 'just inserted'
 
2082
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2083
DELETE FROM t0_aux
 
2084
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2085
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2086
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2087
'just inserted' FROM t0_template
 
2088
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2089
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2090
BEGIN
 
2091
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2092
f_charbig = 'updated by trigger'
 
2093
      WHERE f_int1 = new.f_int1;
 
2094
END|
 
2095
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2096
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2097
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2098
        
 
2099
# check trigger-2 success:      1
 
2100
DROP TRIGGER trg_1;
 
2101
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2102
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2103
f_charbig = 'just inserted'
 
2104
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2105
DELETE FROM t0_aux
 
2106
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2107
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2108
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2109
'just inserted' FROM t0_template
 
2110
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2111
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2112
BEGIN
 
2113
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2114
f_charbig = 'updated by trigger'
 
2115
      WHERE f_int1 = new.f_int1;
 
2116
END|
 
2117
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2118
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2119
        
 
2120
# check trigger-3 success:      1
 
2121
DROP TRIGGER trg_1;
 
2122
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2123
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2124
f_charbig = 'just inserted'
 
2125
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2126
DELETE FROM t0_aux
 
2127
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2128
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2129
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2130
'just inserted' FROM t0_template
 
2131
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2132
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2133
BEGIN
 
2134
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2135
f_charbig = 'updated by trigger'
 
2136
      WHERE f_int1 = - old.f_int1;
 
2137
END|
 
2138
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2139
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2140
        
 
2141
# check trigger-4 success:      1
 
2142
DROP TRIGGER trg_1;
 
2143
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2144
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2145
f_charbig = 'just inserted'
 
2146
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2147
DELETE FROM t0_aux
 
2148
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2149
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2150
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2151
'just inserted' FROM t0_template
 
2152
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2153
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2154
BEGIN
 
2155
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2156
f_charbig = 'updated by trigger'
 
2157
      WHERE f_int1 = new.f_int1;
 
2158
END|
 
2159
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2160
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2161
        
 
2162
# check trigger-5 success:      1
 
2163
DROP TRIGGER trg_1;
 
2164
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2165
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2166
f_charbig = 'just inserted'
 
2167
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2168
DELETE FROM t0_aux
 
2169
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2170
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2171
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2172
'just inserted' FROM t0_template
 
2173
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2174
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2175
BEGIN
 
2176
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2177
f_charbig = 'updated by trigger'
 
2178
      WHERE f_int1 = - old.f_int1;
 
2179
END|
 
2180
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2181
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2182
        
 
2183
# check trigger-6 success:      1
 
2184
DROP TRIGGER trg_1;
 
2185
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2186
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2187
f_charbig = 'just inserted'
 
2188
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2189
DELETE FROM t0_aux
 
2190
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2191
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2192
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2193
'just inserted' FROM t0_template
 
2194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2195
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2196
BEGIN
 
2197
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2198
f_charbig = 'updated by trigger'
 
2199
      WHERE f_int1 = - old.f_int1;
 
2200
END|
 
2201
DELETE FROM t0_aux
 
2202
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2203
        
 
2204
# check trigger-7 success:      1
 
2205
DROP TRIGGER trg_1;
 
2206
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2207
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2208
f_charbig = 'just inserted'
 
2209
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2210
DELETE FROM t0_aux
 
2211
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2212
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2213
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2214
'just inserted' FROM t0_template
 
2215
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2216
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2217
BEGIN
 
2218
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2219
f_charbig = 'updated by trigger'
 
2220
      WHERE f_int1 = - old.f_int1;
 
2221
END|
 
2222
DELETE FROM t0_aux
 
2223
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2224
        
 
2225
# check trigger-8 success:      1
 
2226
DROP TRIGGER trg_1;
 
2227
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2228
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2229
f_charbig = 'just inserted'
 
2230
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2231
DELETE FROM t0_aux
 
2232
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2233
DELETE FROM t1
 
2234
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2235
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2236
BEGIN
 
2237
SET new.f_int1 = old.f_int1 + @max_row,
 
2238
new.f_int2 = old.f_int2 - @max_row,
 
2239
new.f_charbig = '####updated per update trigger####';
 
2240
END|
 
2241
UPDATE t1
 
2242
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2243
f_charbig = '####updated per update statement itself####';
 
2244
        
 
2245
# check trigger-9 success:      1
 
2246
DROP TRIGGER trg_2;
 
2247
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2248
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2249
f_charbig = CONCAT('===',f_char1,'===');
 
2250
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2251
BEGIN
 
2252
SET new.f_int1 = new.f_int1 + @max_row,
 
2253
new.f_int2 = new.f_int2 - @max_row,
 
2254
new.f_charbig = '####updated per update trigger####';
 
2255
END|
 
2256
UPDATE t1
 
2257
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2258
f_charbig = '####updated per update statement itself####';
 
2259
        
 
2260
# check trigger-10 success:     1
 
2261
DROP TRIGGER trg_2;
 
2262
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2263
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2264
f_charbig = CONCAT('===',f_char1,'===');
 
2265
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2266
BEGIN
 
2267
SET new.f_int1 = @my_max1 + @counter,
 
2268
new.f_int2 = @my_min2 - @counter,
 
2269
new.f_charbig = '####updated per insert trigger####';
 
2270
SET @counter = @counter + 1;
 
2271
END|
 
2272
SET @counter = 1;
 
2273
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2274
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2275
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2276
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2277
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2278
ORDER BY f_int1;
 
2279
DROP TRIGGER trg_3;
 
2280
        
 
2281
# check trigger-11 success:     1
 
2282
DELETE FROM t1
 
2283
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2284
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2285
AND f_charbig = '####updated per insert trigger####';
 
2286
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2287
BEGIN
 
2288
SET new.f_int1 = @my_max1 + @counter,
 
2289
new.f_int2 = @my_min2 - @counter,
 
2290
new.f_charbig = '####updated per insert trigger####';
 
2291
SET @counter = @counter + 1;
 
2292
END|
 
2293
SET @counter = 1;
 
2294
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2295
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2296
SELECT CAST(f_int1 AS CHAR),
 
2297
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2298
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2299
ORDER BY f_int1;
 
2300
DROP TRIGGER trg_3;
 
2301
        
 
2302
# check trigger-12 success:     1
 
2303
DELETE FROM t1
 
2304
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2305
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2306
AND f_charbig = '####updated per insert trigger####';
 
2307
ANALYZE  TABLE t1;
 
2308
Table   Op      Msg_type        Msg_text
 
2309
test.t1 analyze status  OK
 
2310
CHECK    TABLE t1 EXTENDED;
 
2311
Table   Op      Msg_type        Msg_text
 
2312
test.t1 check   status  OK
 
2313
CHECKSUM TABLE t1 EXTENDED;
 
2314
Table   Checksum
 
2315
test.t1 <some_value>
 
2316
OPTIMIZE TABLE t1;
 
2317
Table   Op      Msg_type        Msg_text
 
2318
test.t1 optimize        status  OK
 
2319
# check layout success:    1
 
2320
REPAIR   TABLE t1 EXTENDED;
 
2321
Table   Op      Msg_type        Msg_text
 
2322
test.t1 repair  note    The storage engine for the table doesn't support repair
 
2323
# check layout success:    1
 
2324
TRUNCATE t1;
 
2325
        
 
2326
# check TRUNCATE success:       1
 
2327
# check layout success:    1
 
2328
# End usability test (inc/partition_check.inc)
 
2329
DROP TABLE t1;
 
2330
CREATE TABLE t1 (
 
2331
f_int1 INTEGER,
 
2332
f_int2 INTEGER,
 
2333
f_char1 CHAR(20),
 
2334
f_char2 CHAR(20),
 
2335
f_charbig VARCHAR(1000)
 
2336
 
 
2337
)
 
2338
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
2339
(PARTITION part_1 VALUES LESS THAN (0)
 
2340
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
2341
PARTITION part_2 VALUES LESS THAN (5)
 
2342
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
2343
PARTITION part_3 VALUES LESS THAN (10)
 
2344
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
2345
PARTITION part_4 VALUES LESS THAN (2147483646)
 
2346
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
2347
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2348
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2349
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
2350
ALTER TABLE t1 ANALYZE PARTITION part_1;
 
2351
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2352
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2353
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2354
# Start usability test (inc/partition_check.inc)
 
2355
create_command
 
2356
SHOW CREATE TABLE t1;
 
2357
Table   Create Table
 
2358
t1      CREATE TABLE `t1` (
 
2359
  `f_int1` int(11) DEFAULT NULL,
 
2360
  `f_int2` int(11) DEFAULT NULL,
 
2361
  `f_char1` char(20) DEFAULT NULL,
 
2362
  `f_char2` char(20) DEFAULT NULL,
 
2363
  `f_charbig` varchar(1000) DEFAULT NULL
 
2364
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
2365
 
 
2366
# check prerequisites-1 success:    1
 
2367
# check COUNT(*) success:    1
 
2368
# check MIN/MAX(f_int1) success:    1
 
2369
# check MIN/MAX(f_int2) success:    1
 
2370
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2371
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2372
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2373
WHERE f_int1 IN (2,3);
 
2374
# check prerequisites-3 success:    1
 
2375
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2376
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
2377
# check read via f_int1 success: 1
 
2378
# check read via f_int2 success: 1
 
2379
        
 
2380
# check multiple-1 success:     1
 
2381
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2382
        
 
2383
# check multiple-2 success:     1
 
2384
INSERT INTO t1 SELECT * FROM t0_template
 
2385
WHERE MOD(f_int1,3) = 0;
 
2386
        
 
2387
# check multiple-3 success:     1
 
2388
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2389
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2390
AND @max_row_div2 + @max_row_div4;
 
2391
        
 
2392
# check multiple-4 success:     1
 
2393
DELETE FROM t1
 
2394
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2395
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2396
        
 
2397
# check multiple-5 success:     1
 
2398
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2399
INSERT INTO t1
 
2400
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2401
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2402
f_charbig = '#SINGLE#';
 
2403
        
 
2404
# check single-1 success:       1
 
2405
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2406
INSERT INTO t1
 
2407
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2408
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2409
f_charbig = '#SINGLE#';
 
2410
        
 
2411
# check single-2 success:       1
 
2412
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2413
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2414
UPDATE t1 SET f_int1 = @cur_value2
 
2415
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2416
        
 
2417
# check single-3 success:       1
 
2418
SET @cur_value1= -1;
 
2419
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2420
UPDATE t1 SET f_int1 = @cur_value1
 
2421
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2422
        
 
2423
# check single-4 success:       1
 
2424
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2425
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2426
        
 
2427
# check single-5 success:       1
 
2428
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2429
        
 
2430
# check single-6 success:       1
 
2431
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2432
ERROR HY000: Table has no partition for value 2147483647
 
2433
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2434
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2435
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2436
f_charbig = '#NULL#';
 
2437
INSERT INTO t1
 
2438
SET f_int1 = NULL , f_int2 = -@max_row,
 
2439
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2440
f_charbig = '#NULL#';
 
2441
# check null success:    1
 
2442
        
 
2443
# check null-1 success:         1
 
2444
UPDATE t1 SET f_int1 = -@max_row
 
2445
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2446
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2447
        
 
2448
# check null-2 success:         1
 
2449
UPDATE t1 SET f_int1 = NULL
 
2450
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2451
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2452
        
 
2453
# check null-3 success:         1
 
2454
DELETE FROM t1
 
2455
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2456
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2457
        
 
2458
# check null-4 success:         1
 
2459
DELETE FROM t1
 
2460
WHERE f_int1 = 0 AND f_int2 = 0
 
2461
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2462
AND f_charbig = '#NULL#';
 
2463
SET AUTOCOMMIT= 0;
 
2464
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2465
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2466
FROM t0_template source_tab
 
2467
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2468
        
 
2469
# check transactions-1 success:         1
 
2470
COMMIT WORK;
 
2471
        
 
2472
# check transactions-2 success:         1
 
2473
ROLLBACK WORK;
 
2474
        
 
2475
# check transactions-3 success:         1
 
2476
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2477
COMMIT WORK;
 
2478
ROLLBACK WORK;
 
2479
        
 
2480
# check transactions-4 success:         1
 
2481
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2482
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2483
FROM t0_template source_tab
 
2484
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2485
        
 
2486
# check transactions-5 success:         1
 
2487
ROLLBACK WORK;
 
2488
        
 
2489
# check transactions-6 success:         1
 
2490
# INFO: Storage engine used for t1 seems to be transactional.
 
2491
COMMIT;
 
2492
        
 
2493
# check transactions-7 success:         1
 
2494
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2495
COMMIT WORK;
 
2496
SET @@session.sql_mode = 'traditional';
 
2497
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2498
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2499
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2500
'', '', 'was inserted' FROM t0_template
 
2501
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2502
ERROR 22012: Division by 0
 
2503
COMMIT;
 
2504
        
 
2505
# check transactions-8 success:         1
 
2506
# INFO: Storage engine used for t1 seems to be able to revert
 
2507
#       changes made by the failing statement.
 
2508
SET @@session.sql_mode = '';
 
2509
SET AUTOCOMMIT= 1;
 
2510
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2511
COMMIT WORK;
 
2512
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2513
        
 
2514
# check special-1 success:      1
 
2515
UPDATE t1 SET f_charbig = '';
 
2516
        
 
2517
# check special-2 success:      1
 
2518
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2519
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2520
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2521
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2522
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2523
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2524
'just inserted' FROM t0_template
 
2525
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2526
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2527
BEGIN
 
2528
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2529
f_charbig = 'updated by trigger'
 
2530
      WHERE f_int1 = new.f_int1;
 
2531
END|
 
2532
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2533
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2534
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2535
        
 
2536
# check trigger-1 success:      1
 
2537
DROP TRIGGER trg_1;
 
2538
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2539
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2540
f_charbig = 'just inserted'
 
2541
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2542
DELETE FROM t0_aux
 
2543
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2544
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2545
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2546
'just inserted' FROM t0_template
 
2547
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2548
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2549
BEGIN
 
2550
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2551
f_charbig = 'updated by trigger'
 
2552
      WHERE f_int1 = new.f_int1;
 
2553
END|
 
2554
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2555
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2556
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2557
        
 
2558
# check trigger-2 success:      1
 
2559
DROP TRIGGER trg_1;
 
2560
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2561
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2562
f_charbig = 'just inserted'
 
2563
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2564
DELETE FROM t0_aux
 
2565
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2566
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2567
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2568
'just inserted' FROM t0_template
 
2569
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2570
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2571
BEGIN
 
2572
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2573
f_charbig = 'updated by trigger'
 
2574
      WHERE f_int1 = new.f_int1;
 
2575
END|
 
2576
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2577
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2578
        
 
2579
# check trigger-3 success:      1
 
2580
DROP TRIGGER trg_1;
 
2581
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2582
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2583
f_charbig = 'just inserted'
 
2584
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2585
DELETE FROM t0_aux
 
2586
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2587
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2588
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2589
'just inserted' FROM t0_template
 
2590
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2591
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2592
BEGIN
 
2593
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2594
f_charbig = 'updated by trigger'
 
2595
      WHERE f_int1 = - old.f_int1;
 
2596
END|
 
2597
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2598
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2599
        
 
2600
# check trigger-4 success:      1
 
2601
DROP TRIGGER trg_1;
 
2602
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2603
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2604
f_charbig = 'just inserted'
 
2605
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2606
DELETE FROM t0_aux
 
2607
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2608
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2609
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2610
'just inserted' FROM t0_template
 
2611
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2612
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2613
BEGIN
 
2614
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2615
f_charbig = 'updated by trigger'
 
2616
      WHERE f_int1 = new.f_int1;
 
2617
END|
 
2618
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2619
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2620
        
 
2621
# check trigger-5 success:      1
 
2622
DROP TRIGGER trg_1;
 
2623
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2624
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2625
f_charbig = 'just inserted'
 
2626
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2627
DELETE FROM t0_aux
 
2628
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2629
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2630
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2631
'just inserted' FROM t0_template
 
2632
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2633
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2634
BEGIN
 
2635
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2636
f_charbig = 'updated by trigger'
 
2637
      WHERE f_int1 = - old.f_int1;
 
2638
END|
 
2639
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2640
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2641
        
 
2642
# check trigger-6 success:      1
 
2643
DROP TRIGGER trg_1;
 
2644
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2645
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2646
f_charbig = 'just inserted'
 
2647
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2648
DELETE FROM t0_aux
 
2649
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2650
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2651
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2652
'just inserted' FROM t0_template
 
2653
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2654
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2655
BEGIN
 
2656
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2657
f_charbig = 'updated by trigger'
 
2658
      WHERE f_int1 = - old.f_int1;
 
2659
END|
 
2660
DELETE FROM t0_aux
 
2661
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2662
        
 
2663
# check trigger-7 success:      1
 
2664
DROP TRIGGER trg_1;
 
2665
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2666
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2667
f_charbig = 'just inserted'
 
2668
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2669
DELETE FROM t0_aux
 
2670
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2671
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2672
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2673
'just inserted' FROM t0_template
 
2674
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2675
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2676
BEGIN
 
2677
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2678
f_charbig = 'updated by trigger'
 
2679
      WHERE f_int1 = - old.f_int1;
 
2680
END|
 
2681
DELETE FROM t0_aux
 
2682
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2683
        
 
2684
# check trigger-8 success:      1
 
2685
DROP TRIGGER trg_1;
 
2686
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2687
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2688
f_charbig = 'just inserted'
 
2689
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2690
DELETE FROM t0_aux
 
2691
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2692
DELETE FROM t1
 
2693
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2694
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2695
BEGIN
 
2696
SET new.f_int1 = old.f_int1 + @max_row,
 
2697
new.f_int2 = old.f_int2 - @max_row,
 
2698
new.f_charbig = '####updated per update trigger####';
 
2699
END|
 
2700
UPDATE t1
 
2701
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2702
f_charbig = '####updated per update statement itself####';
 
2703
        
 
2704
# check trigger-9 success:      1
 
2705
DROP TRIGGER trg_2;
 
2706
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2707
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2708
f_charbig = CONCAT('===',f_char1,'===');
 
2709
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2710
BEGIN
 
2711
SET new.f_int1 = new.f_int1 + @max_row,
 
2712
new.f_int2 = new.f_int2 - @max_row,
 
2713
new.f_charbig = '####updated per update trigger####';
 
2714
END|
 
2715
UPDATE t1
 
2716
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2717
f_charbig = '####updated per update statement itself####';
 
2718
        
 
2719
# check trigger-10 success:     1
 
2720
DROP TRIGGER trg_2;
 
2721
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2722
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2723
f_charbig = CONCAT('===',f_char1,'===');
 
2724
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2725
BEGIN
 
2726
SET new.f_int1 = @my_max1 + @counter,
 
2727
new.f_int2 = @my_min2 - @counter,
 
2728
new.f_charbig = '####updated per insert trigger####';
 
2729
SET @counter = @counter + 1;
 
2730
END|
 
2731
SET @counter = 1;
 
2732
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2733
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2734
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2735
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2736
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2737
ORDER BY f_int1;
 
2738
DROP TRIGGER trg_3;
 
2739
        
 
2740
# check trigger-11 success:     1
 
2741
DELETE FROM t1
 
2742
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2743
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2744
AND f_charbig = '####updated per insert trigger####';
 
2745
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2746
BEGIN
 
2747
SET new.f_int1 = @my_max1 + @counter,
 
2748
new.f_int2 = @my_min2 - @counter,
 
2749
new.f_charbig = '####updated per insert trigger####';
 
2750
SET @counter = @counter + 1;
 
2751
END|
 
2752
SET @counter = 1;
 
2753
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2754
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2755
SELECT CAST(f_int1 AS CHAR),
 
2756
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2757
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2758
ORDER BY f_int1;
 
2759
DROP TRIGGER trg_3;
 
2760
        
 
2761
# check trigger-12 success:     1
 
2762
DELETE FROM t1
 
2763
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2764
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2765
AND f_charbig = '####updated per insert trigger####';
 
2766
ANALYZE  TABLE t1;
 
2767
Table   Op      Msg_type        Msg_text
 
2768
test.t1 analyze status  OK
 
2769
CHECK    TABLE t1 EXTENDED;
 
2770
Table   Op      Msg_type        Msg_text
 
2771
test.t1 check   status  OK
 
2772
CHECKSUM TABLE t1 EXTENDED;
 
2773
Table   Checksum
 
2774
test.t1 <some_value>
 
2775
OPTIMIZE TABLE t1;
 
2776
Table   Op      Msg_type        Msg_text
 
2777
test.t1 optimize        status  OK
 
2778
# check layout success:    1
 
2779
REPAIR   TABLE t1 EXTENDED;
 
2780
Table   Op      Msg_type        Msg_text
 
2781
test.t1 repair  note    The storage engine for the table doesn't support repair
 
2782
# check layout success:    1
 
2783
TRUNCATE t1;
 
2784
        
 
2785
# check TRUNCATE success:       1
 
2786
# check layout success:    1
 
2787
# End usability test (inc/partition_check.inc)
 
2788
DROP TABLE t1;
 
2789
CREATE TABLE t1 (
 
2790
f_int1 INTEGER,
 
2791
f_int2 INTEGER,
 
2792
f_char1 CHAR(20),
 
2793
f_char2 CHAR(20),
 
2794
f_charbig VARCHAR(1000)
 
2795
 
 
2796
)
 
2797
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
2798
(PARTITION part_1 VALUES IN (0)
 
2799
(SUBPARTITION sp11, SUBPARTITION sp12),
 
2800
PARTITION part_2 VALUES IN (1)
 
2801
(SUBPARTITION sp21, SUBPARTITION sp22),
 
2802
PARTITION part_3 VALUES IN (2)
 
2803
(SUBPARTITION sp31, SUBPARTITION sp32),
 
2804
PARTITION part_4 VALUES IN (NULL)
 
2805
(SUBPARTITION sp41, SUBPARTITION sp42));
 
2806
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2807
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2808
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
2809
ALTER TABLE t1 ANALYZE PARTITION part_1;
 
2810
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2811
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2812
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2813
# Start usability test (inc/partition_check.inc)
 
2814
create_command
 
2815
SHOW CREATE TABLE t1;
 
2816
Table   Create Table
 
2817
t1      CREATE TABLE `t1` (
 
2818
  `f_int1` int(11) DEFAULT NULL,
 
2819
  `f_int2` int(11) DEFAULT NULL,
 
2820
  `f_char1` char(20) DEFAULT NULL,
 
2821
  `f_char2` char(20) DEFAULT NULL,
 
2822
  `f_charbig` varchar(1000) DEFAULT NULL
 
2823
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
2824
 
 
2825
# check prerequisites-1 success:    1
 
2826
# check COUNT(*) success:    1
 
2827
# check MIN/MAX(f_int1) success:    1
 
2828
# check MIN/MAX(f_int2) success:    1
 
2829
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2830
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2831
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2832
WHERE f_int1 IN (2,3);
 
2833
# check prerequisites-3 success:    1
 
2834
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2835
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
2836
# check read via f_int1 success: 1
 
2837
# check read via f_int2 success: 1
 
2838
        
 
2839
# check multiple-1 success:     1
 
2840
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2841
        
 
2842
# check multiple-2 success:     1
 
2843
INSERT INTO t1 SELECT * FROM t0_template
 
2844
WHERE MOD(f_int1,3) = 0;
 
2845
        
 
2846
# check multiple-3 success:     1
 
2847
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2848
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2849
AND @max_row_div2 + @max_row_div4;
 
2850
        
 
2851
# check multiple-4 success:     1
 
2852
DELETE FROM t1
 
2853
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2854
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2855
        
 
2856
# check multiple-5 success:     1
 
2857
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2858
INSERT INTO t1
 
2859
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2860
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2861
f_charbig = '#SINGLE#';
 
2862
        
 
2863
# check single-1 success:       1
 
2864
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2865
INSERT INTO t1
 
2866
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2867
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2868
f_charbig = '#SINGLE#';
 
2869
        
 
2870
# check single-2 success:       1
 
2871
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2872
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2873
UPDATE t1 SET f_int1 = @cur_value2
 
2874
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2875
        
 
2876
# check single-3 success:       1
 
2877
SET @cur_value1= -1;
 
2878
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2879
UPDATE t1 SET f_int1 = @cur_value1
 
2880
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2881
        
 
2882
# check single-4 success:       1
 
2883
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2884
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2885
        
 
2886
# check single-5 success:       1
 
2887
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2888
        
 
2889
# check single-6 success:       1
 
2890
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2891
        
 
2892
# check single-7 success:       1
 
2893
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
2894
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2895
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2896
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2897
f_charbig = '#NULL#';
 
2898
INSERT INTO t1
 
2899
SET f_int1 = NULL , f_int2 = -@max_row,
 
2900
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2901
f_charbig = '#NULL#';
 
2902
# check null success:    1
 
2903
        
 
2904
# check null-1 success:         1
 
2905
UPDATE t1 SET f_int1 = -@max_row
 
2906
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2907
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2908
        
 
2909
# check null-2 success:         1
 
2910
UPDATE t1 SET f_int1 = NULL
 
2911
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2912
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2913
        
 
2914
# check null-3 success:         1
 
2915
DELETE FROM t1
 
2916
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2917
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2918
        
 
2919
# check null-4 success:         1
 
2920
DELETE FROM t1
 
2921
WHERE f_int1 = 0 AND f_int2 = 0
 
2922
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2923
AND f_charbig = '#NULL#';
 
2924
SET AUTOCOMMIT= 0;
 
2925
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2926
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2927
FROM t0_template source_tab
 
2928
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2929
        
 
2930
# check transactions-1 success:         1
 
2931
COMMIT WORK;
 
2932
        
 
2933
# check transactions-2 success:         1
 
2934
ROLLBACK WORK;
 
2935
        
 
2936
# check transactions-3 success:         1
 
2937
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2938
COMMIT WORK;
 
2939
ROLLBACK WORK;
 
2940
        
 
2941
# check transactions-4 success:         1
 
2942
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2943
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2944
FROM t0_template source_tab
 
2945
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2946
        
 
2947
# check transactions-5 success:         1
 
2948
ROLLBACK WORK;
 
2949
        
 
2950
# check transactions-6 success:         1
 
2951
# INFO: Storage engine used for t1 seems to be transactional.
 
2952
COMMIT;
 
2953
        
 
2954
# check transactions-7 success:         1
 
2955
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2956
COMMIT WORK;
 
2957
SET @@session.sql_mode = 'traditional';
 
2958
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2959
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2960
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2961
'', '', 'was inserted' FROM t0_template
 
2962
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2963
ERROR 22012: Division by 0
 
2964
COMMIT;
 
2965
        
 
2966
# check transactions-8 success:         1
 
2967
# INFO: Storage engine used for t1 seems to be able to revert
 
2968
#       changes made by the failing statement.
 
2969
SET @@session.sql_mode = '';
 
2970
SET AUTOCOMMIT= 1;
 
2971
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2972
COMMIT WORK;
 
2973
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2974
        
 
2975
# check special-1 success:      1
 
2976
UPDATE t1 SET f_charbig = '';
 
2977
        
 
2978
# check special-2 success:      1
 
2979
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2980
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2981
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2982
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2983
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2984
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2985
'just inserted' FROM t0_template
 
2986
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2987
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2988
BEGIN
 
2989
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2990
f_charbig = 'updated by trigger'
 
2991
      WHERE f_int1 = new.f_int1;
 
2992
END|
 
2993
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2994
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2995
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2996
        
 
2997
# check trigger-1 success:      1
 
2998
DROP TRIGGER trg_1;
 
2999
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3000
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3001
f_charbig = 'just inserted'
 
3002
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3003
DELETE FROM t0_aux
 
3004
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3005
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3006
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3007
'just inserted' FROM t0_template
 
3008
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3009
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3010
BEGIN
 
3011
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3012
f_charbig = 'updated by trigger'
 
3013
      WHERE f_int1 = new.f_int1;
 
3014
END|
 
3015
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3016
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3017
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3018
        
 
3019
# check trigger-2 success:      1
 
3020
DROP TRIGGER trg_1;
 
3021
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3022
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3023
f_charbig = 'just inserted'
 
3024
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3025
DELETE FROM t0_aux
 
3026
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3027
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3028
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3029
'just inserted' FROM t0_template
 
3030
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3031
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3032
BEGIN
 
3033
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3034
f_charbig = 'updated by trigger'
 
3035
      WHERE f_int1 = new.f_int1;
 
3036
END|
 
3037
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3038
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3039
        
 
3040
# check trigger-3 success:      1
 
3041
DROP TRIGGER trg_1;
 
3042
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3043
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3044
f_charbig = 'just inserted'
 
3045
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3046
DELETE FROM t0_aux
 
3047
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3048
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3049
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3050
'just inserted' FROM t0_template
 
3051
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3052
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3053
BEGIN
 
3054
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3055
f_charbig = 'updated by trigger'
 
3056
      WHERE f_int1 = - old.f_int1;
 
3057
END|
 
3058
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3059
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3060
        
 
3061
# check trigger-4 success:      1
 
3062
DROP TRIGGER trg_1;
 
3063
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3064
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3065
f_charbig = 'just inserted'
 
3066
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3067
DELETE FROM t0_aux
 
3068
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3069
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3070
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3071
'just inserted' FROM t0_template
 
3072
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3073
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3074
BEGIN
 
3075
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3076
f_charbig = 'updated by trigger'
 
3077
      WHERE f_int1 = new.f_int1;
 
3078
END|
 
3079
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3080
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3081
        
 
3082
# check trigger-5 success:      1
 
3083
DROP TRIGGER trg_1;
 
3084
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3085
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3086
f_charbig = 'just inserted'
 
3087
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3088
DELETE FROM t0_aux
 
3089
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3090
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3091
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3092
'just inserted' FROM t0_template
 
3093
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3094
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3095
BEGIN
 
3096
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3097
f_charbig = 'updated by trigger'
 
3098
      WHERE f_int1 = - old.f_int1;
 
3099
END|
 
3100
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3101
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3102
        
 
3103
# check trigger-6 success:      1
 
3104
DROP TRIGGER trg_1;
 
3105
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3106
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3107
f_charbig = 'just inserted'
 
3108
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3109
DELETE FROM t0_aux
 
3110
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3111
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3112
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3113
'just inserted' FROM t0_template
 
3114
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3115
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3116
BEGIN
 
3117
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3118
f_charbig = 'updated by trigger'
 
3119
      WHERE f_int1 = - old.f_int1;
 
3120
END|
 
3121
DELETE FROM t0_aux
 
3122
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3123
        
 
3124
# check trigger-7 success:      1
 
3125
DROP TRIGGER trg_1;
 
3126
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3127
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3128
f_charbig = 'just inserted'
 
3129
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3130
DELETE FROM t0_aux
 
3131
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3132
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3133
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3134
'just inserted' FROM t0_template
 
3135
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3136
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3137
BEGIN
 
3138
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3139
f_charbig = 'updated by trigger'
 
3140
      WHERE f_int1 = - old.f_int1;
 
3141
END|
 
3142
DELETE FROM t0_aux
 
3143
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3144
        
 
3145
# check trigger-8 success:      1
 
3146
DROP TRIGGER trg_1;
 
3147
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3148
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3149
f_charbig = 'just inserted'
 
3150
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3151
DELETE FROM t0_aux
 
3152
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3153
DELETE FROM t1
 
3154
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3155
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3156
BEGIN
 
3157
SET new.f_int1 = old.f_int1 + @max_row,
 
3158
new.f_int2 = old.f_int2 - @max_row,
 
3159
new.f_charbig = '####updated per update trigger####';
 
3160
END|
 
3161
UPDATE t1
 
3162
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3163
f_charbig = '####updated per update statement itself####';
 
3164
        
 
3165
# check trigger-9 success:      1
 
3166
DROP TRIGGER trg_2;
 
3167
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3168
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3169
f_charbig = CONCAT('===',f_char1,'===');
 
3170
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3171
BEGIN
 
3172
SET new.f_int1 = new.f_int1 + @max_row,
 
3173
new.f_int2 = new.f_int2 - @max_row,
 
3174
new.f_charbig = '####updated per update trigger####';
 
3175
END|
 
3176
UPDATE t1
 
3177
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3178
f_charbig = '####updated per update statement itself####';
 
3179
        
 
3180
# check trigger-10 success:     1
 
3181
DROP TRIGGER trg_2;
 
3182
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3183
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3184
f_charbig = CONCAT('===',f_char1,'===');
 
3185
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3186
BEGIN
 
3187
SET new.f_int1 = @my_max1 + @counter,
 
3188
new.f_int2 = @my_min2 - @counter,
 
3189
new.f_charbig = '####updated per insert trigger####';
 
3190
SET @counter = @counter + 1;
 
3191
END|
 
3192
SET @counter = 1;
 
3193
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3194
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3195
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3196
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3197
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3198
ORDER BY f_int1;
 
3199
DROP TRIGGER trg_3;
 
3200
        
 
3201
# check trigger-11 success:     1
 
3202
DELETE FROM t1
 
3203
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3204
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3205
AND f_charbig = '####updated per insert trigger####';
 
3206
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3207
BEGIN
 
3208
SET new.f_int1 = @my_max1 + @counter,
 
3209
new.f_int2 = @my_min2 - @counter,
 
3210
new.f_charbig = '####updated per insert trigger####';
 
3211
SET @counter = @counter + 1;
 
3212
END|
 
3213
SET @counter = 1;
 
3214
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3215
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3216
SELECT CAST(f_int1 AS CHAR),
 
3217
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3218
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3219
ORDER BY f_int1;
 
3220
DROP TRIGGER trg_3;
 
3221
        
 
3222
# check trigger-12 success:     1
 
3223
DELETE FROM t1
 
3224
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3225
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3226
AND f_charbig = '####updated per insert trigger####';
 
3227
ANALYZE  TABLE t1;
 
3228
Table   Op      Msg_type        Msg_text
 
3229
test.t1 analyze status  OK
 
3230
CHECK    TABLE t1 EXTENDED;
 
3231
Table   Op      Msg_type        Msg_text
 
3232
test.t1 check   status  OK
 
3233
CHECKSUM TABLE t1 EXTENDED;
 
3234
Table   Checksum
 
3235
test.t1 <some_value>
 
3236
OPTIMIZE TABLE t1;
 
3237
Table   Op      Msg_type        Msg_text
 
3238
test.t1 optimize        status  OK
 
3239
# check layout success:    1
 
3240
REPAIR   TABLE t1 EXTENDED;
 
3241
Table   Op      Msg_type        Msg_text
 
3242
test.t1 repair  note    The storage engine for the table doesn't support repair
 
3243
# check layout success:    1
 
3244
TRUNCATE t1;
 
3245
        
 
3246
# check TRUNCATE success:       1
 
3247
# check layout success:    1
 
3248
# End usability test (inc/partition_check.inc)
 
3249
DROP TABLE t1;
 
3250
CREATE TABLE t1 (
 
3251
f_int1 INTEGER,
 
3252
f_int2 INTEGER,
 
3253
f_char1 CHAR(20),
 
3254
f_char2 CHAR(20),
 
3255
f_charbig VARCHAR(1000)
 
3256
 
 
3257
)
 
3258
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
3259
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
3260
(PARTITION part_1 VALUES IN (0),
 
3261
 PARTITION part_2 VALUES IN (1),
 
3262
 PARTITION part_3 VALUES IN (NULL));
 
3263
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3264
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3265
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
3266
ALTER TABLE t1 ANALYZE PARTITION part_1;
 
3267
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3268
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3269
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3270
# Start usability test (inc/partition_check.inc)
 
3271
create_command
 
3272
SHOW CREATE TABLE t1;
 
3273
Table   Create Table
 
3274
t1      CREATE TABLE `t1` (
 
3275
  `f_int1` int(11) DEFAULT NULL,
 
3276
  `f_int2` int(11) DEFAULT NULL,
 
3277
  `f_char1` char(20) DEFAULT NULL,
 
3278
  `f_char2` char(20) DEFAULT NULL,
 
3279
  `f_charbig` varchar(1000) DEFAULT NULL
 
3280
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
 
3281
 
 
3282
# check prerequisites-1 success:    1
 
3283
# check COUNT(*) success:    1
 
3284
# check MIN/MAX(f_int1) success:    1
 
3285
# check MIN/MAX(f_int2) success:    1
 
3286
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3287
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3288
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3289
WHERE f_int1 IN (2,3);
 
3290
# check prerequisites-3 success:    1
 
3291
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3292
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
3293
# check read via f_int1 success: 1
 
3294
# check read via f_int2 success: 1
 
3295
        
 
3296
# check multiple-1 success:     1
 
3297
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3298
        
 
3299
# check multiple-2 success:     1
 
3300
INSERT INTO t1 SELECT * FROM t0_template
 
3301
WHERE MOD(f_int1,3) = 0;
 
3302
        
 
3303
# check multiple-3 success:     1
 
3304
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3305
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3306
AND @max_row_div2 + @max_row_div4;
 
3307
        
 
3308
# check multiple-4 success:     1
 
3309
DELETE FROM t1
 
3310
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3311
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3312
        
 
3313
# check multiple-5 success:     1
 
3314
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3315
INSERT INTO t1
 
3316
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3317
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3318
f_charbig = '#SINGLE#';
 
3319
        
 
3320
# check single-1 success:       1
 
3321
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3322
INSERT INTO t1
 
3323
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3324
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3325
f_charbig = '#SINGLE#';
 
3326
        
 
3327
# check single-2 success:       1
 
3328
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3329
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3330
UPDATE t1 SET f_int1 = @cur_value2
 
3331
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3332
        
 
3333
# check single-3 success:       1
 
3334
SET @cur_value1= -1;
 
3335
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3336
UPDATE t1 SET f_int1 = @cur_value1
 
3337
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3338
        
 
3339
# check single-4 success:       1
 
3340
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3341
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3342
        
 
3343
# check single-5 success:       1
 
3344
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3345
        
 
3346
# check single-6 success:       1
 
3347
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3348
        
 
3349
# check single-7 success:       1
 
3350
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
3351
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3352
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3353
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3354
f_charbig = '#NULL#';
 
3355
INSERT INTO t1
 
3356
SET f_int1 = NULL , f_int2 = -@max_row,
 
3357
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3358
f_charbig = '#NULL#';
 
3359
# check null success:    1
 
3360
        
 
3361
# check null-1 success:         1
 
3362
UPDATE t1 SET f_int1 = -@max_row
 
3363
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3364
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3365
        
 
3366
# check null-2 success:         1
 
3367
UPDATE t1 SET f_int1 = NULL
 
3368
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3369
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3370
        
 
3371
# check null-3 success:         1
 
3372
DELETE FROM t1
 
3373
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3374
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3375
        
 
3376
# check null-4 success:         1
 
3377
DELETE FROM t1
 
3378
WHERE f_int1 = 0 AND f_int2 = 0
 
3379
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3380
AND f_charbig = '#NULL#';
 
3381
SET AUTOCOMMIT= 0;
 
3382
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3383
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3384
FROM t0_template source_tab
 
3385
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3386
        
 
3387
# check transactions-1 success:         1
 
3388
COMMIT WORK;
 
3389
        
 
3390
# check transactions-2 success:         1
 
3391
ROLLBACK WORK;
 
3392
        
 
3393
# check transactions-3 success:         1
 
3394
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3395
COMMIT WORK;
 
3396
ROLLBACK WORK;
 
3397
        
 
3398
# check transactions-4 success:         1
 
3399
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3400
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3401
FROM t0_template source_tab
 
3402
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3403
        
 
3404
# check transactions-5 success:         1
 
3405
ROLLBACK WORK;
 
3406
        
 
3407
# check transactions-6 success:         1
 
3408
# INFO: Storage engine used for t1 seems to be transactional.
 
3409
COMMIT;
 
3410
        
 
3411
# check transactions-7 success:         1
 
3412
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3413
COMMIT WORK;
 
3414
SET @@session.sql_mode = 'traditional';
 
3415
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3416
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3417
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3418
'', '', 'was inserted' FROM t0_template
 
3419
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3420
ERROR 22012: Division by 0
 
3421
COMMIT;
 
3422
        
 
3423
# check transactions-8 success:         1
 
3424
# INFO: Storage engine used for t1 seems to be able to revert
 
3425
#       changes made by the failing statement.
 
3426
SET @@session.sql_mode = '';
 
3427
SET AUTOCOMMIT= 1;
 
3428
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3429
COMMIT WORK;
 
3430
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3431
        
 
3432
# check special-1 success:      1
 
3433
UPDATE t1 SET f_charbig = '';
 
3434
        
 
3435
# check special-2 success:      1
 
3436
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3437
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3438
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3439
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3440
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3441
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3442
'just inserted' FROM t0_template
 
3443
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3444
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3445
BEGIN
 
3446
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3447
f_charbig = 'updated by trigger'
 
3448
      WHERE f_int1 = new.f_int1;
 
3449
END|
 
3450
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3451
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3452
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3453
        
 
3454
# check trigger-1 success:      1
 
3455
DROP TRIGGER trg_1;
 
3456
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3457
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3458
f_charbig = 'just inserted'
 
3459
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3460
DELETE FROM t0_aux
 
3461
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3462
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3463
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3464
'just inserted' FROM t0_template
 
3465
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3466
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3467
BEGIN
 
3468
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3469
f_charbig = 'updated by trigger'
 
3470
      WHERE f_int1 = new.f_int1;
 
3471
END|
 
3472
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3473
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3474
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3475
        
 
3476
# check trigger-2 success:      1
 
3477
DROP TRIGGER trg_1;
 
3478
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3479
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3480
f_charbig = 'just inserted'
 
3481
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3482
DELETE FROM t0_aux
 
3483
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3484
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3485
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3486
'just inserted' FROM t0_template
 
3487
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3488
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3489
BEGIN
 
3490
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3491
f_charbig = 'updated by trigger'
 
3492
      WHERE f_int1 = new.f_int1;
 
3493
END|
 
3494
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3495
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3496
        
 
3497
# check trigger-3 success:      1
 
3498
DROP TRIGGER trg_1;
 
3499
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3500
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3501
f_charbig = 'just inserted'
 
3502
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3503
DELETE FROM t0_aux
 
3504
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3505
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3506
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3507
'just inserted' FROM t0_template
 
3508
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3509
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3510
BEGIN
 
3511
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3512
f_charbig = 'updated by trigger'
 
3513
      WHERE f_int1 = - old.f_int1;
 
3514
END|
 
3515
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3516
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3517
        
 
3518
# check trigger-4 success:      1
 
3519
DROP TRIGGER trg_1;
 
3520
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3521
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3522
f_charbig = 'just inserted'
 
3523
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3524
DELETE FROM t0_aux
 
3525
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3526
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3527
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3528
'just inserted' FROM t0_template
 
3529
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3530
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3531
BEGIN
 
3532
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3533
f_charbig = 'updated by trigger'
 
3534
      WHERE f_int1 = new.f_int1;
 
3535
END|
 
3536
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3537
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3538
        
 
3539
# check trigger-5 success:      1
 
3540
DROP TRIGGER trg_1;
 
3541
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3542
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3543
f_charbig = 'just inserted'
 
3544
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3545
DELETE FROM t0_aux
 
3546
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3547
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3548
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3549
'just inserted' FROM t0_template
 
3550
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3551
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3552
BEGIN
 
3553
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3554
f_charbig = 'updated by trigger'
 
3555
      WHERE f_int1 = - old.f_int1;
 
3556
END|
 
3557
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3558
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3559
        
 
3560
# check trigger-6 success:      1
 
3561
DROP TRIGGER trg_1;
 
3562
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3563
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3564
f_charbig = 'just inserted'
 
3565
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3566
DELETE FROM t0_aux
 
3567
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3568
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3569
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3570
'just inserted' FROM t0_template
 
3571
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3572
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3573
BEGIN
 
3574
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3575
f_charbig = 'updated by trigger'
 
3576
      WHERE f_int1 = - old.f_int1;
 
3577
END|
 
3578
DELETE FROM t0_aux
 
3579
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3580
        
 
3581
# check trigger-7 success:      1
 
3582
DROP TRIGGER trg_1;
 
3583
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3584
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3585
f_charbig = 'just inserted'
 
3586
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3587
DELETE FROM t0_aux
 
3588
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3589
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3590
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3591
'just inserted' FROM t0_template
 
3592
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3593
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3594
BEGIN
 
3595
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3596
f_charbig = 'updated by trigger'
 
3597
      WHERE f_int1 = - old.f_int1;
 
3598
END|
 
3599
DELETE FROM t0_aux
 
3600
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3601
        
 
3602
# check trigger-8 success:      1
 
3603
DROP TRIGGER trg_1;
 
3604
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3605
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3606
f_charbig = 'just inserted'
 
3607
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3608
DELETE FROM t0_aux
 
3609
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3610
DELETE FROM t1
 
3611
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3612
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3613
BEGIN
 
3614
SET new.f_int1 = old.f_int1 + @max_row,
 
3615
new.f_int2 = old.f_int2 - @max_row,
 
3616
new.f_charbig = '####updated per update trigger####';
 
3617
END|
 
3618
UPDATE t1
 
3619
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3620
f_charbig = '####updated per update statement itself####';
 
3621
        
 
3622
# check trigger-9 success:      1
 
3623
DROP TRIGGER trg_2;
 
3624
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3625
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3626
f_charbig = CONCAT('===',f_char1,'===');
 
3627
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3628
BEGIN
 
3629
SET new.f_int1 = new.f_int1 + @max_row,
 
3630
new.f_int2 = new.f_int2 - @max_row,
 
3631
new.f_charbig = '####updated per update trigger####';
 
3632
END|
 
3633
UPDATE t1
 
3634
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3635
f_charbig = '####updated per update statement itself####';
 
3636
        
 
3637
# check trigger-10 success:     1
 
3638
DROP TRIGGER trg_2;
 
3639
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3640
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3641
f_charbig = CONCAT('===',f_char1,'===');
 
3642
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3643
BEGIN
 
3644
SET new.f_int1 = @my_max1 + @counter,
 
3645
new.f_int2 = @my_min2 - @counter,
 
3646
new.f_charbig = '####updated per insert trigger####';
 
3647
SET @counter = @counter + 1;
 
3648
END|
 
3649
SET @counter = 1;
 
3650
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3651
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3652
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3653
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3654
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3655
ORDER BY f_int1;
 
3656
DROP TRIGGER trg_3;
 
3657
        
 
3658
# check trigger-11 success:     1
 
3659
DELETE FROM t1
 
3660
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3661
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3662
AND f_charbig = '####updated per insert trigger####';
 
3663
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3664
BEGIN
 
3665
SET new.f_int1 = @my_max1 + @counter,
 
3666
new.f_int2 = @my_min2 - @counter,
 
3667
new.f_charbig = '####updated per insert trigger####';
 
3668
SET @counter = @counter + 1;
 
3669
END|
 
3670
SET @counter = 1;
 
3671
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3672
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3673
SELECT CAST(f_int1 AS CHAR),
 
3674
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3675
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3676
ORDER BY f_int1;
 
3677
DROP TRIGGER trg_3;
 
3678
        
 
3679
# check trigger-12 success:     1
 
3680
DELETE FROM t1
 
3681
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3682
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3683
AND f_charbig = '####updated per insert trigger####';
 
3684
ANALYZE  TABLE t1;
 
3685
Table   Op      Msg_type        Msg_text
 
3686
test.t1 analyze status  OK
 
3687
CHECK    TABLE t1 EXTENDED;
 
3688
Table   Op      Msg_type        Msg_text
 
3689
test.t1 check   status  OK
 
3690
CHECKSUM TABLE t1 EXTENDED;
 
3691
Table   Checksum
 
3692
test.t1 <some_value>
 
3693
OPTIMIZE TABLE t1;
 
3694
Table   Op      Msg_type        Msg_text
 
3695
test.t1 optimize        status  OK
 
3696
# check layout success:    1
 
3697
REPAIR   TABLE t1 EXTENDED;
 
3698
Table   Op      Msg_type        Msg_text
 
3699
test.t1 repair  note    The storage engine for the table doesn't support repair
 
3700
# check layout success:    1
 
3701
TRUNCATE t1;
 
3702
        
 
3703
# check TRUNCATE success:       1
 
3704
# check layout success:    1
 
3705
# End usability test (inc/partition_check.inc)
 
3706
DROP TABLE t1;
 
3707
#  1.2 ALTER ... ANALYZE PARTITION part_1,part_2;
 
3708
DROP TABLE IF EXISTS t1;
 
3709
CREATE TABLE t1 (
 
3710
f_int1 INTEGER,
 
3711
f_int2 INTEGER,
 
3712
f_char1 CHAR(20),
 
3713
f_char2 CHAR(20),
 
3714
f_charbig VARCHAR(1000)
 
3715
 
 
3716
)
 
3717
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
3718
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3719
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3720
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
3721
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
 
3722
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3723
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3724
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3725
# Start usability test (inc/partition_check.inc)
 
3726
create_command
 
3727
SHOW CREATE TABLE t1;
 
3728
Table   Create Table
 
3729
t1      CREATE TABLE `t1` (
 
3730
  `f_int1` int(11) DEFAULT NULL,
 
3731
  `f_int2` int(11) DEFAULT NULL,
 
3732
  `f_char1` char(20) DEFAULT NULL,
 
3733
  `f_char2` char(20) DEFAULT NULL,
 
3734
  `f_charbig` varchar(1000) DEFAULT NULL
 
3735
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
 
3736
 
 
3737
# check prerequisites-1 success:    1
 
3738
# check COUNT(*) success:    1
 
3739
# check MIN/MAX(f_int1) success:    1
 
3740
# check MIN/MAX(f_int2) success:    1
 
3741
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3742
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3743
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3744
WHERE f_int1 IN (2,3);
 
3745
# check prerequisites-3 success:    1
 
3746
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3747
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
3748
# check read via f_int1 success: 1
 
3749
# check read via f_int2 success: 1
 
3750
        
 
3751
# check multiple-1 success:     1
 
3752
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3753
        
 
3754
# check multiple-2 success:     1
 
3755
INSERT INTO t1 SELECT * FROM t0_template
 
3756
WHERE MOD(f_int1,3) = 0;
 
3757
        
 
3758
# check multiple-3 success:     1
 
3759
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3760
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3761
AND @max_row_div2 + @max_row_div4;
 
3762
        
 
3763
# check multiple-4 success:     1
 
3764
DELETE FROM t1
 
3765
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3766
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3767
        
 
3768
# check multiple-5 success:     1
 
3769
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3770
INSERT INTO t1
 
3771
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3772
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3773
f_charbig = '#SINGLE#';
 
3774
        
 
3775
# check single-1 success:       1
 
3776
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3777
INSERT INTO t1
 
3778
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3779
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3780
f_charbig = '#SINGLE#';
 
3781
        
 
3782
# check single-2 success:       1
 
3783
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3784
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3785
UPDATE t1 SET f_int1 = @cur_value2
 
3786
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3787
        
 
3788
# check single-3 success:       1
 
3789
SET @cur_value1= -1;
 
3790
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3791
UPDATE t1 SET f_int1 = @cur_value1
 
3792
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3793
        
 
3794
# check single-4 success:       1
 
3795
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3796
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3797
        
 
3798
# check single-5 success:       1
 
3799
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3800
        
 
3801
# check single-6 success:       1
 
3802
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3803
        
 
3804
# check single-7 success:       1
 
3805
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
3806
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3807
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3808
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3809
f_charbig = '#NULL#';
 
3810
INSERT INTO t1
 
3811
SET f_int1 = NULL , f_int2 = -@max_row,
 
3812
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3813
f_charbig = '#NULL#';
 
3814
# check null success:    1
 
3815
        
 
3816
# check null-1 success:         1
 
3817
UPDATE t1 SET f_int1 = -@max_row
 
3818
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3819
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3820
        
 
3821
# check null-2 success:         1
 
3822
UPDATE t1 SET f_int1 = NULL
 
3823
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3824
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3825
        
 
3826
# check null-3 success:         1
 
3827
DELETE FROM t1
 
3828
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3829
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3830
        
 
3831
# check null-4 success:         1
 
3832
DELETE FROM t1
 
3833
WHERE f_int1 = 0 AND f_int2 = 0
 
3834
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3835
AND f_charbig = '#NULL#';
 
3836
SET AUTOCOMMIT= 0;
 
3837
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3838
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3839
FROM t0_template source_tab
 
3840
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3841
        
 
3842
# check transactions-1 success:         1
 
3843
COMMIT WORK;
 
3844
        
 
3845
# check transactions-2 success:         1
 
3846
ROLLBACK WORK;
 
3847
        
 
3848
# check transactions-3 success:         1
 
3849
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3850
COMMIT WORK;
 
3851
ROLLBACK WORK;
 
3852
        
 
3853
# check transactions-4 success:         1
 
3854
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3855
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3856
FROM t0_template source_tab
 
3857
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3858
        
 
3859
# check transactions-5 success:         1
 
3860
ROLLBACK WORK;
 
3861
        
 
3862
# check transactions-6 success:         1
 
3863
# INFO: Storage engine used for t1 seems to be transactional.
 
3864
COMMIT;
 
3865
        
 
3866
# check transactions-7 success:         1
 
3867
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3868
COMMIT WORK;
 
3869
SET @@session.sql_mode = 'traditional';
 
3870
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3871
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3872
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3873
'', '', 'was inserted' FROM t0_template
 
3874
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3875
ERROR 22012: Division by 0
 
3876
COMMIT;
 
3877
        
 
3878
# check transactions-8 success:         1
 
3879
# INFO: Storage engine used for t1 seems to be able to revert
 
3880
#       changes made by the failing statement.
 
3881
SET @@session.sql_mode = '';
 
3882
SET AUTOCOMMIT= 1;
 
3883
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3884
COMMIT WORK;
 
3885
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3886
        
 
3887
# check special-1 success:      1
 
3888
UPDATE t1 SET f_charbig = '';
 
3889
        
 
3890
# check special-2 success:      1
 
3891
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3892
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3893
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3894
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3895
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3896
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3897
'just inserted' FROM t0_template
 
3898
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3899
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3900
BEGIN
 
3901
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3902
f_charbig = 'updated by trigger'
 
3903
      WHERE f_int1 = new.f_int1;
 
3904
END|
 
3905
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3906
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3907
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3908
        
 
3909
# check trigger-1 success:      1
 
3910
DROP TRIGGER trg_1;
 
3911
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3912
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3913
f_charbig = 'just inserted'
 
3914
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3915
DELETE FROM t0_aux
 
3916
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3917
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3918
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3919
'just inserted' FROM t0_template
 
3920
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3921
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3922
BEGIN
 
3923
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3924
f_charbig = 'updated by trigger'
 
3925
      WHERE f_int1 = new.f_int1;
 
3926
END|
 
3927
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3928
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3929
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3930
        
 
3931
# check trigger-2 success:      1
 
3932
DROP TRIGGER trg_1;
 
3933
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3934
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3935
f_charbig = 'just inserted'
 
3936
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3937
DELETE FROM t0_aux
 
3938
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3939
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3940
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3941
'just inserted' FROM t0_template
 
3942
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3943
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3944
BEGIN
 
3945
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3946
f_charbig = 'updated by trigger'
 
3947
      WHERE f_int1 = new.f_int1;
 
3948
END|
 
3949
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3950
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3951
        
 
3952
# check trigger-3 success:      1
 
3953
DROP TRIGGER trg_1;
 
3954
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3955
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3956
f_charbig = 'just inserted'
 
3957
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3958
DELETE FROM t0_aux
 
3959
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3960
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3961
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3962
'just inserted' FROM t0_template
 
3963
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3964
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3965
BEGIN
 
3966
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3967
f_charbig = 'updated by trigger'
 
3968
      WHERE f_int1 = - old.f_int1;
 
3969
END|
 
3970
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3971
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3972
        
 
3973
# check trigger-4 success:      1
 
3974
DROP TRIGGER trg_1;
 
3975
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3976
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3977
f_charbig = 'just inserted'
 
3978
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3979
DELETE FROM t0_aux
 
3980
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3981
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3982
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3983
'just inserted' FROM t0_template
 
3984
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3985
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3986
BEGIN
 
3987
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3988
f_charbig = 'updated by trigger'
 
3989
      WHERE f_int1 = new.f_int1;
 
3990
END|
 
3991
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3992
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3993
        
 
3994
# check trigger-5 success:      1
 
3995
DROP TRIGGER trg_1;
 
3996
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3997
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3998
f_charbig = 'just inserted'
 
3999
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4000
DELETE FROM t0_aux
 
4001
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4002
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4003
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4004
'just inserted' FROM t0_template
 
4005
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4006
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4007
BEGIN
 
4008
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4009
f_charbig = 'updated by trigger'
 
4010
      WHERE f_int1 = - old.f_int1;
 
4011
END|
 
4012
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4013
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4014
        
 
4015
# check trigger-6 success:      1
 
4016
DROP TRIGGER trg_1;
 
4017
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4018
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4019
f_charbig = 'just inserted'
 
4020
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4021
DELETE FROM t0_aux
 
4022
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4023
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4024
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4025
'just inserted' FROM t0_template
 
4026
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4027
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4028
BEGIN
 
4029
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4030
f_charbig = 'updated by trigger'
 
4031
      WHERE f_int1 = - old.f_int1;
 
4032
END|
 
4033
DELETE FROM t0_aux
 
4034
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4035
        
 
4036
# check trigger-7 success:      1
 
4037
DROP TRIGGER trg_1;
 
4038
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4039
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4040
f_charbig = 'just inserted'
 
4041
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4042
DELETE FROM t0_aux
 
4043
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4044
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4045
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4046
'just inserted' FROM t0_template
 
4047
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4048
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4049
BEGIN
 
4050
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4051
f_charbig = 'updated by trigger'
 
4052
      WHERE f_int1 = - old.f_int1;
 
4053
END|
 
4054
DELETE FROM t0_aux
 
4055
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4056
        
 
4057
# check trigger-8 success:      1
 
4058
DROP TRIGGER trg_1;
 
4059
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4060
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4061
f_charbig = 'just inserted'
 
4062
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4063
DELETE FROM t0_aux
 
4064
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4065
DELETE FROM t1
 
4066
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4067
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4068
BEGIN
 
4069
SET new.f_int1 = old.f_int1 + @max_row,
 
4070
new.f_int2 = old.f_int2 - @max_row,
 
4071
new.f_charbig = '####updated per update trigger####';
 
4072
END|
 
4073
UPDATE t1
 
4074
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4075
f_charbig = '####updated per update statement itself####';
 
4076
        
 
4077
# check trigger-9 success:      1
 
4078
DROP TRIGGER trg_2;
 
4079
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4080
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4081
f_charbig = CONCAT('===',f_char1,'===');
 
4082
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4083
BEGIN
 
4084
SET new.f_int1 = new.f_int1 + @max_row,
 
4085
new.f_int2 = new.f_int2 - @max_row,
 
4086
new.f_charbig = '####updated per update trigger####';
 
4087
END|
 
4088
UPDATE t1
 
4089
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4090
f_charbig = '####updated per update statement itself####';
 
4091
        
 
4092
# check trigger-10 success:     1
 
4093
DROP TRIGGER trg_2;
 
4094
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4095
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4096
f_charbig = CONCAT('===',f_char1,'===');
 
4097
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4098
BEGIN
 
4099
SET new.f_int1 = @my_max1 + @counter,
 
4100
new.f_int2 = @my_min2 - @counter,
 
4101
new.f_charbig = '####updated per insert trigger####';
 
4102
SET @counter = @counter + 1;
 
4103
END|
 
4104
SET @counter = 1;
 
4105
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4106
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4107
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4108
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4109
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4110
ORDER BY f_int1;
 
4111
DROP TRIGGER trg_3;
 
4112
        
 
4113
# check trigger-11 success:     1
 
4114
DELETE FROM t1
 
4115
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4116
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4117
AND f_charbig = '####updated per insert trigger####';
 
4118
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4119
BEGIN
 
4120
SET new.f_int1 = @my_max1 + @counter,
 
4121
new.f_int2 = @my_min2 - @counter,
 
4122
new.f_charbig = '####updated per insert trigger####';
 
4123
SET @counter = @counter + 1;
 
4124
END|
 
4125
SET @counter = 1;
 
4126
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4127
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4128
SELECT CAST(f_int1 AS CHAR),
 
4129
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4130
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4131
ORDER BY f_int1;
 
4132
DROP TRIGGER trg_3;
 
4133
        
 
4134
# check trigger-12 success:     1
 
4135
DELETE FROM t1
 
4136
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4137
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4138
AND f_charbig = '####updated per insert trigger####';
 
4139
ANALYZE  TABLE t1;
 
4140
Table   Op      Msg_type        Msg_text
 
4141
test.t1 analyze status  OK
 
4142
CHECK    TABLE t1 EXTENDED;
 
4143
Table   Op      Msg_type        Msg_text
 
4144
test.t1 check   status  OK
 
4145
CHECKSUM TABLE t1 EXTENDED;
 
4146
Table   Checksum
 
4147
test.t1 <some_value>
 
4148
OPTIMIZE TABLE t1;
 
4149
Table   Op      Msg_type        Msg_text
 
4150
test.t1 optimize        status  OK
 
4151
# check layout success:    1
 
4152
REPAIR   TABLE t1 EXTENDED;
 
4153
Table   Op      Msg_type        Msg_text
 
4154
test.t1 repair  note    The storage engine for the table doesn't support repair
 
4155
# check layout success:    1
 
4156
TRUNCATE t1;
 
4157
        
 
4158
# check TRUNCATE success:       1
 
4159
# check layout success:    1
 
4160
# End usability test (inc/partition_check.inc)
 
4161
DROP TABLE t1;
 
4162
CREATE TABLE t1 (
 
4163
f_int1 INTEGER,
 
4164
f_int2 INTEGER,
 
4165
f_char1 CHAR(20),
 
4166
f_char2 CHAR(20),
 
4167
f_charbig VARCHAR(1000)
 
4168
 
 
4169
)
 
4170
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
4171
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4172
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4173
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
4174
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
 
4175
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4176
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4177
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4178
# Start usability test (inc/partition_check.inc)
 
4179
create_command
 
4180
SHOW CREATE TABLE t1;
 
4181
Table   Create Table
 
4182
t1      CREATE TABLE `t1` (
 
4183
  `f_int1` int(11) DEFAULT NULL,
 
4184
  `f_int2` int(11) DEFAULT NULL,
 
4185
  `f_char1` char(20) DEFAULT NULL,
 
4186
  `f_char2` char(20) DEFAULT NULL,
 
4187
  `f_charbig` varchar(1000) DEFAULT NULL
 
4188
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
 
4189
 
 
4190
# check prerequisites-1 success:    1
 
4191
# check COUNT(*) success:    1
 
4192
# check MIN/MAX(f_int1) success:    1
 
4193
# check MIN/MAX(f_int2) success:    1
 
4194
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4195
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4196
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
4197
WHERE f_int1 IN (2,3);
 
4198
# check prerequisites-3 success:    1
 
4199
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4200
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
4201
# check read via f_int1 success: 1
 
4202
# check read via f_int2 success: 1
 
4203
        
 
4204
# check multiple-1 success:     1
 
4205
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
4206
        
 
4207
# check multiple-2 success:     1
 
4208
INSERT INTO t1 SELECT * FROM t0_template
 
4209
WHERE MOD(f_int1,3) = 0;
 
4210
        
 
4211
# check multiple-3 success:     1
 
4212
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
4213
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
4214
AND @max_row_div2 + @max_row_div4;
 
4215
        
 
4216
# check multiple-4 success:     1
 
4217
DELETE FROM t1
 
4218
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4219
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4220
        
 
4221
# check multiple-5 success:     1
 
4222
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4223
INSERT INTO t1
 
4224
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4225
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4226
f_charbig = '#SINGLE#';
 
4227
        
 
4228
# check single-1 success:       1
 
4229
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4230
INSERT INTO t1
 
4231
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4232
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4233
f_charbig = '#SINGLE#';
 
4234
        
 
4235
# check single-2 success:       1
 
4236
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4237
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4238
UPDATE t1 SET f_int1 = @cur_value2
 
4239
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4240
        
 
4241
# check single-3 success:       1
 
4242
SET @cur_value1= -1;
 
4243
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4244
UPDATE t1 SET f_int1 = @cur_value1
 
4245
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4246
        
 
4247
# check single-4 success:       1
 
4248
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4249
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4250
        
 
4251
# check single-5 success:       1
 
4252
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4253
        
 
4254
# check single-6 success:       1
 
4255
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4256
        
 
4257
# check single-7 success:       1
 
4258
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4259
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4260
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4261
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4262
f_charbig = '#NULL#';
 
4263
INSERT INTO t1
 
4264
SET f_int1 = NULL , f_int2 = -@max_row,
 
4265
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4266
f_charbig = '#NULL#';
 
4267
# check null success:    1
 
4268
        
 
4269
# check null-1 success:         1
 
4270
UPDATE t1 SET f_int1 = -@max_row
 
4271
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4272
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4273
        
 
4274
# check null-2 success:         1
 
4275
UPDATE t1 SET f_int1 = NULL
 
4276
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4277
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4278
        
 
4279
# check null-3 success:         1
 
4280
DELETE FROM t1
 
4281
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4282
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4283
        
 
4284
# check null-4 success:         1
 
4285
DELETE FROM t1
 
4286
WHERE f_int1 = 0 AND f_int2 = 0
 
4287
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4288
AND f_charbig = '#NULL#';
 
4289
SET AUTOCOMMIT= 0;
 
4290
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4291
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4292
FROM t0_template source_tab
 
4293
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4294
        
 
4295
# check transactions-1 success:         1
 
4296
COMMIT WORK;
 
4297
        
 
4298
# check transactions-2 success:         1
 
4299
ROLLBACK WORK;
 
4300
        
 
4301
# check transactions-3 success:         1
 
4302
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4303
COMMIT WORK;
 
4304
ROLLBACK WORK;
 
4305
        
 
4306
# check transactions-4 success:         1
 
4307
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4308
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4309
FROM t0_template source_tab
 
4310
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4311
        
 
4312
# check transactions-5 success:         1
 
4313
ROLLBACK WORK;
 
4314
        
 
4315
# check transactions-6 success:         1
 
4316
# INFO: Storage engine used for t1 seems to be transactional.
 
4317
COMMIT;
 
4318
        
 
4319
# check transactions-7 success:         1
 
4320
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4321
COMMIT WORK;
 
4322
SET @@session.sql_mode = 'traditional';
 
4323
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4324
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4325
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4326
'', '', 'was inserted' FROM t0_template
 
4327
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4328
ERROR 22012: Division by 0
 
4329
COMMIT;
 
4330
        
 
4331
# check transactions-8 success:         1
 
4332
# INFO: Storage engine used for t1 seems to be able to revert
 
4333
#       changes made by the failing statement.
 
4334
SET @@session.sql_mode = '';
 
4335
SET AUTOCOMMIT= 1;
 
4336
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4337
COMMIT WORK;
 
4338
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4339
        
 
4340
# check special-1 success:      1
 
4341
UPDATE t1 SET f_charbig = '';
 
4342
        
 
4343
# check special-2 success:      1
 
4344
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4345
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4346
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4347
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4348
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4349
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4350
'just inserted' FROM t0_template
 
4351
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4352
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4353
BEGIN
 
4354
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4355
f_charbig = 'updated by trigger'
 
4356
      WHERE f_int1 = new.f_int1;
 
4357
END|
 
4358
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4359
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4360
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4361
        
 
4362
# check trigger-1 success:      1
 
4363
DROP TRIGGER trg_1;
 
4364
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4365
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4366
f_charbig = 'just inserted'
 
4367
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4368
DELETE FROM t0_aux
 
4369
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4370
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4371
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4372
'just inserted' FROM t0_template
 
4373
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4374
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4375
BEGIN
 
4376
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4377
f_charbig = 'updated by trigger'
 
4378
      WHERE f_int1 = new.f_int1;
 
4379
END|
 
4380
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4381
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4382
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4383
        
 
4384
# check trigger-2 success:      1
 
4385
DROP TRIGGER trg_1;
 
4386
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4387
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4388
f_charbig = 'just inserted'
 
4389
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4390
DELETE FROM t0_aux
 
4391
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4392
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4393
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4394
'just inserted' FROM t0_template
 
4395
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4396
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4397
BEGIN
 
4398
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4399
f_charbig = 'updated by trigger'
 
4400
      WHERE f_int1 = new.f_int1;
 
4401
END|
 
4402
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4403
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4404
        
 
4405
# check trigger-3 success:      1
 
4406
DROP TRIGGER trg_1;
 
4407
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4408
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4409
f_charbig = 'just inserted'
 
4410
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4411
DELETE FROM t0_aux
 
4412
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4413
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4414
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4415
'just inserted' FROM t0_template
 
4416
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4417
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4418
BEGIN
 
4419
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4420
f_charbig = 'updated by trigger'
 
4421
      WHERE f_int1 = - old.f_int1;
 
4422
END|
 
4423
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4424
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4425
        
 
4426
# check trigger-4 success:      1
 
4427
DROP TRIGGER trg_1;
 
4428
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4429
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4430
f_charbig = 'just inserted'
 
4431
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4432
DELETE FROM t0_aux
 
4433
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4434
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4435
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4436
'just inserted' FROM t0_template
 
4437
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4438
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4439
BEGIN
 
4440
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4441
f_charbig = 'updated by trigger'
 
4442
      WHERE f_int1 = new.f_int1;
 
4443
END|
 
4444
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4445
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4446
        
 
4447
# check trigger-5 success:      1
 
4448
DROP TRIGGER trg_1;
 
4449
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4450
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4451
f_charbig = 'just inserted'
 
4452
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4453
DELETE FROM t0_aux
 
4454
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4455
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4456
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4457
'just inserted' FROM t0_template
 
4458
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4459
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4460
BEGIN
 
4461
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4462
f_charbig = 'updated by trigger'
 
4463
      WHERE f_int1 = - old.f_int1;
 
4464
END|
 
4465
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4466
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4467
        
 
4468
# check trigger-6 success:      1
 
4469
DROP TRIGGER trg_1;
 
4470
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4471
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4472
f_charbig = 'just inserted'
 
4473
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4474
DELETE FROM t0_aux
 
4475
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4476
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4477
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4478
'just inserted' FROM t0_template
 
4479
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4480
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4481
BEGIN
 
4482
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4483
f_charbig = 'updated by trigger'
 
4484
      WHERE f_int1 = - old.f_int1;
 
4485
END|
 
4486
DELETE FROM t0_aux
 
4487
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4488
        
 
4489
# check trigger-7 success:      1
 
4490
DROP TRIGGER trg_1;
 
4491
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4492
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4493
f_charbig = 'just inserted'
 
4494
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4495
DELETE FROM t0_aux
 
4496
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4497
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4498
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4499
'just inserted' FROM t0_template
 
4500
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4501
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4502
BEGIN
 
4503
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4504
f_charbig = 'updated by trigger'
 
4505
      WHERE f_int1 = - old.f_int1;
 
4506
END|
 
4507
DELETE FROM t0_aux
 
4508
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4509
        
 
4510
# check trigger-8 success:      1
 
4511
DROP TRIGGER trg_1;
 
4512
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4513
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4514
f_charbig = 'just inserted'
 
4515
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4516
DELETE FROM t0_aux
 
4517
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4518
DELETE FROM t1
 
4519
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4520
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4521
BEGIN
 
4522
SET new.f_int1 = old.f_int1 + @max_row,
 
4523
new.f_int2 = old.f_int2 - @max_row,
 
4524
new.f_charbig = '####updated per update trigger####';
 
4525
END|
 
4526
UPDATE t1
 
4527
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4528
f_charbig = '####updated per update statement itself####';
 
4529
        
 
4530
# check trigger-9 success:      1
 
4531
DROP TRIGGER trg_2;
 
4532
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4533
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4534
f_charbig = CONCAT('===',f_char1,'===');
 
4535
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4536
BEGIN
 
4537
SET new.f_int1 = new.f_int1 + @max_row,
 
4538
new.f_int2 = new.f_int2 - @max_row,
 
4539
new.f_charbig = '####updated per update trigger####';
 
4540
END|
 
4541
UPDATE t1
 
4542
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4543
f_charbig = '####updated per update statement itself####';
 
4544
        
 
4545
# check trigger-10 success:     1
 
4546
DROP TRIGGER trg_2;
 
4547
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4548
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4549
f_charbig = CONCAT('===',f_char1,'===');
 
4550
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4551
BEGIN
 
4552
SET new.f_int1 = @my_max1 + @counter,
 
4553
new.f_int2 = @my_min2 - @counter,
 
4554
new.f_charbig = '####updated per insert trigger####';
 
4555
SET @counter = @counter + 1;
 
4556
END|
 
4557
SET @counter = 1;
 
4558
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4559
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4560
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4561
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4562
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4563
ORDER BY f_int1;
 
4564
DROP TRIGGER trg_3;
 
4565
        
 
4566
# check trigger-11 success:     1
 
4567
DELETE FROM t1
 
4568
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4569
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4570
AND f_charbig = '####updated per insert trigger####';
 
4571
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4572
BEGIN
 
4573
SET new.f_int1 = @my_max1 + @counter,
 
4574
new.f_int2 = @my_min2 - @counter,
 
4575
new.f_charbig = '####updated per insert trigger####';
 
4576
SET @counter = @counter + 1;
 
4577
END|
 
4578
SET @counter = 1;
 
4579
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4580
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4581
SELECT CAST(f_int1 AS CHAR),
 
4582
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4583
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4584
ORDER BY f_int1;
 
4585
DROP TRIGGER trg_3;
 
4586
        
 
4587
# check trigger-12 success:     1
 
4588
DELETE FROM t1
 
4589
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4590
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4591
AND f_charbig = '####updated per insert trigger####';
 
4592
ANALYZE  TABLE t1;
 
4593
Table   Op      Msg_type        Msg_text
 
4594
test.t1 analyze status  OK
 
4595
CHECK    TABLE t1 EXTENDED;
 
4596
Table   Op      Msg_type        Msg_text
 
4597
test.t1 check   status  OK
 
4598
CHECKSUM TABLE t1 EXTENDED;
 
4599
Table   Checksum
 
4600
test.t1 <some_value>
 
4601
OPTIMIZE TABLE t1;
 
4602
Table   Op      Msg_type        Msg_text
 
4603
test.t1 optimize        status  OK
 
4604
# check layout success:    1
 
4605
REPAIR   TABLE t1 EXTENDED;
 
4606
Table   Op      Msg_type        Msg_text
 
4607
test.t1 repair  note    The storage engine for the table doesn't support repair
 
4608
# check layout success:    1
 
4609
TRUNCATE t1;
 
4610
        
 
4611
# check TRUNCATE success:       1
 
4612
# check layout success:    1
 
4613
# End usability test (inc/partition_check.inc)
 
4614
DROP TABLE t1;
 
4615
CREATE TABLE t1 (
 
4616
f_int1 INTEGER,
 
4617
f_int2 INTEGER,
 
4618
f_char1 CHAR(20),
 
4619
f_char2 CHAR(20),
 
4620
f_charbig VARCHAR(1000)
 
4621
 
 
4622
)
 
4623
PARTITION BY LIST(MOD(f_int1,4))
 
4624
(PARTITION part_3 VALUES IN (-3),
 
4625
PARTITION part_2 VALUES IN (-2),
 
4626
PARTITION part_1 VALUES IN (-1),
 
4627
PARTITION part_N VALUES IN (NULL),
 
4628
PARTITION part0 VALUES IN (0),
 
4629
PARTITION part1 VALUES IN (1),
 
4630
PARTITION part2 VALUES IN (2),
 
4631
PARTITION part3 VALUES IN (3));
 
4632
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4633
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4634
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
4635
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
 
4636
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4637
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4638
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4639
# Start usability test (inc/partition_check.inc)
 
4640
create_command
 
4641
SHOW CREATE TABLE t1;
 
4642
Table   Create Table
 
4643
t1      CREATE TABLE `t1` (
 
4644
  `f_int1` int(11) DEFAULT NULL,
 
4645
  `f_int2` int(11) DEFAULT NULL,
 
4646
  `f_char1` char(20) DEFAULT NULL,
 
4647
  `f_char2` char(20) DEFAULT NULL,
 
4648
  `f_charbig` varchar(1000) DEFAULT NULL
 
4649
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
4650
 
 
4651
# check prerequisites-1 success:    1
 
4652
# check COUNT(*) success:    1
 
4653
# check MIN/MAX(f_int1) success:    1
 
4654
# check MIN/MAX(f_int2) success:    1
 
4655
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4656
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4657
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
4658
WHERE f_int1 IN (2,3);
 
4659
# check prerequisites-3 success:    1
 
4660
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4661
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
4662
# check read via f_int1 success: 1
 
4663
# check read via f_int2 success: 1
 
4664
        
 
4665
# check multiple-1 success:     1
 
4666
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
4667
        
 
4668
# check multiple-2 success:     1
 
4669
INSERT INTO t1 SELECT * FROM t0_template
 
4670
WHERE MOD(f_int1,3) = 0;
 
4671
        
 
4672
# check multiple-3 success:     1
 
4673
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
4674
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
4675
AND @max_row_div2 + @max_row_div4;
 
4676
        
 
4677
# check multiple-4 success:     1
 
4678
DELETE FROM t1
 
4679
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4680
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4681
        
 
4682
# check multiple-5 success:     1
 
4683
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4684
INSERT INTO t1
 
4685
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4686
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4687
f_charbig = '#SINGLE#';
 
4688
        
 
4689
# check single-1 success:       1
 
4690
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4691
INSERT INTO t1
 
4692
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4693
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4694
f_charbig = '#SINGLE#';
 
4695
        
 
4696
# check single-2 success:       1
 
4697
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4698
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4699
UPDATE t1 SET f_int1 = @cur_value2
 
4700
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4701
        
 
4702
# check single-3 success:       1
 
4703
SET @cur_value1= -1;
 
4704
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4705
UPDATE t1 SET f_int1 = @cur_value1
 
4706
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4707
        
 
4708
# check single-4 success:       1
 
4709
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4710
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4711
        
 
4712
# check single-5 success:       1
 
4713
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4714
        
 
4715
# check single-6 success:       1
 
4716
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4717
        
 
4718
# check single-7 success:       1
 
4719
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4720
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4721
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4722
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4723
f_charbig = '#NULL#';
 
4724
INSERT INTO t1
 
4725
SET f_int1 = NULL , f_int2 = -@max_row,
 
4726
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4727
f_charbig = '#NULL#';
 
4728
# check null success:    1
 
4729
        
 
4730
# check null-1 success:         1
 
4731
UPDATE t1 SET f_int1 = -@max_row
 
4732
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4733
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4734
        
 
4735
# check null-2 success:         1
 
4736
UPDATE t1 SET f_int1 = NULL
 
4737
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4738
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4739
        
 
4740
# check null-3 success:         1
 
4741
DELETE FROM t1
 
4742
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4743
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4744
        
 
4745
# check null-4 success:         1
 
4746
DELETE FROM t1
 
4747
WHERE f_int1 = 0 AND f_int2 = 0
 
4748
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4749
AND f_charbig = '#NULL#';
 
4750
SET AUTOCOMMIT= 0;
 
4751
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4752
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4753
FROM t0_template source_tab
 
4754
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4755
        
 
4756
# check transactions-1 success:         1
 
4757
COMMIT WORK;
 
4758
        
 
4759
# check transactions-2 success:         1
 
4760
ROLLBACK WORK;
 
4761
        
 
4762
# check transactions-3 success:         1
 
4763
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4764
COMMIT WORK;
 
4765
ROLLBACK WORK;
 
4766
        
 
4767
# check transactions-4 success:         1
 
4768
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4769
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4770
FROM t0_template source_tab
 
4771
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4772
        
 
4773
# check transactions-5 success:         1
 
4774
ROLLBACK WORK;
 
4775
        
 
4776
# check transactions-6 success:         1
 
4777
# INFO: Storage engine used for t1 seems to be transactional.
 
4778
COMMIT;
 
4779
        
 
4780
# check transactions-7 success:         1
 
4781
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4782
COMMIT WORK;
 
4783
SET @@session.sql_mode = 'traditional';
 
4784
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4785
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4786
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4787
'', '', 'was inserted' FROM t0_template
 
4788
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4789
ERROR 22012: Division by 0
 
4790
COMMIT;
 
4791
        
 
4792
# check transactions-8 success:         1
 
4793
# INFO: Storage engine used for t1 seems to be able to revert
 
4794
#       changes made by the failing statement.
 
4795
SET @@session.sql_mode = '';
 
4796
SET AUTOCOMMIT= 1;
 
4797
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4798
COMMIT WORK;
 
4799
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4800
        
 
4801
# check special-1 success:      1
 
4802
UPDATE t1 SET f_charbig = '';
 
4803
        
 
4804
# check special-2 success:      1
 
4805
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4806
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4807
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4808
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4809
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4810
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4811
'just inserted' FROM t0_template
 
4812
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4813
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4814
BEGIN
 
4815
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4816
f_charbig = 'updated by trigger'
 
4817
      WHERE f_int1 = new.f_int1;
 
4818
END|
 
4819
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4820
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4821
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4822
        
 
4823
# check trigger-1 success:      1
 
4824
DROP TRIGGER trg_1;
 
4825
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4826
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4827
f_charbig = 'just inserted'
 
4828
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4829
DELETE FROM t0_aux
 
4830
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4831
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4832
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4833
'just inserted' FROM t0_template
 
4834
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4835
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4836
BEGIN
 
4837
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4838
f_charbig = 'updated by trigger'
 
4839
      WHERE f_int1 = new.f_int1;
 
4840
END|
 
4841
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4842
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4843
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4844
        
 
4845
# check trigger-2 success:      1
 
4846
DROP TRIGGER trg_1;
 
4847
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4848
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4849
f_charbig = 'just inserted'
 
4850
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4851
DELETE FROM t0_aux
 
4852
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4853
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4854
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4855
'just inserted' FROM t0_template
 
4856
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4857
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4858
BEGIN
 
4859
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4860
f_charbig = 'updated by trigger'
 
4861
      WHERE f_int1 = new.f_int1;
 
4862
END|
 
4863
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4864
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4865
        
 
4866
# check trigger-3 success:      1
 
4867
DROP TRIGGER trg_1;
 
4868
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4869
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4870
f_charbig = 'just inserted'
 
4871
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4872
DELETE FROM t0_aux
 
4873
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4874
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4875
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4876
'just inserted' FROM t0_template
 
4877
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4878
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4879
BEGIN
 
4880
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4881
f_charbig = 'updated by trigger'
 
4882
      WHERE f_int1 = - old.f_int1;
 
4883
END|
 
4884
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4885
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4886
        
 
4887
# check trigger-4 success:      1
 
4888
DROP TRIGGER trg_1;
 
4889
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4890
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4891
f_charbig = 'just inserted'
 
4892
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4893
DELETE FROM t0_aux
 
4894
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4895
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4896
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4897
'just inserted' FROM t0_template
 
4898
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4899
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4900
BEGIN
 
4901
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4902
f_charbig = 'updated by trigger'
 
4903
      WHERE f_int1 = new.f_int1;
 
4904
END|
 
4905
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4906
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4907
        
 
4908
# check trigger-5 success:      1
 
4909
DROP TRIGGER trg_1;
 
4910
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4911
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4912
f_charbig = 'just inserted'
 
4913
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4914
DELETE FROM t0_aux
 
4915
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4916
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4917
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4918
'just inserted' FROM t0_template
 
4919
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4920
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4921
BEGIN
 
4922
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4923
f_charbig = 'updated by trigger'
 
4924
      WHERE f_int1 = - old.f_int1;
 
4925
END|
 
4926
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4927
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4928
        
 
4929
# check trigger-6 success:      1
 
4930
DROP TRIGGER trg_1;
 
4931
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4932
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4933
f_charbig = 'just inserted'
 
4934
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4935
DELETE FROM t0_aux
 
4936
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4937
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4938
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4939
'just inserted' FROM t0_template
 
4940
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4941
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4942
BEGIN
 
4943
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4944
f_charbig = 'updated by trigger'
 
4945
      WHERE f_int1 = - old.f_int1;
 
4946
END|
 
4947
DELETE FROM t0_aux
 
4948
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4949
        
 
4950
# check trigger-7 success:      1
 
4951
DROP TRIGGER trg_1;
 
4952
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4953
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4954
f_charbig = 'just inserted'
 
4955
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4956
DELETE FROM t0_aux
 
4957
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4958
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4959
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4960
'just inserted' FROM t0_template
 
4961
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4962
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4963
BEGIN
 
4964
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4965
f_charbig = 'updated by trigger'
 
4966
      WHERE f_int1 = - old.f_int1;
 
4967
END|
 
4968
DELETE FROM t0_aux
 
4969
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4970
        
 
4971
# check trigger-8 success:      1
 
4972
DROP TRIGGER trg_1;
 
4973
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4974
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4975
f_charbig = 'just inserted'
 
4976
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4977
DELETE FROM t0_aux
 
4978
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4979
DELETE FROM t1
 
4980
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4981
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4982
BEGIN
 
4983
SET new.f_int1 = old.f_int1 + @max_row,
 
4984
new.f_int2 = old.f_int2 - @max_row,
 
4985
new.f_charbig = '####updated per update trigger####';
 
4986
END|
 
4987
UPDATE t1
 
4988
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4989
f_charbig = '####updated per update statement itself####';
 
4990
        
 
4991
# check trigger-9 success:      1
 
4992
DROP TRIGGER trg_2;
 
4993
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4994
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4995
f_charbig = CONCAT('===',f_char1,'===');
 
4996
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4997
BEGIN
 
4998
SET new.f_int1 = new.f_int1 + @max_row,
 
4999
new.f_int2 = new.f_int2 - @max_row,
 
5000
new.f_charbig = '####updated per update trigger####';
 
5001
END|
 
5002
UPDATE t1
 
5003
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5004
f_charbig = '####updated per update statement itself####';
 
5005
        
 
5006
# check trigger-10 success:     1
 
5007
DROP TRIGGER trg_2;
 
5008
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5009
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5010
f_charbig = CONCAT('===',f_char1,'===');
 
5011
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5012
BEGIN
 
5013
SET new.f_int1 = @my_max1 + @counter,
 
5014
new.f_int2 = @my_min2 - @counter,
 
5015
new.f_charbig = '####updated per insert trigger####';
 
5016
SET @counter = @counter + 1;
 
5017
END|
 
5018
SET @counter = 1;
 
5019
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5020
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5021
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5022
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5023
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5024
ORDER BY f_int1;
 
5025
DROP TRIGGER trg_3;
 
5026
        
 
5027
# check trigger-11 success:     1
 
5028
DELETE FROM t1
 
5029
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5030
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5031
AND f_charbig = '####updated per insert trigger####';
 
5032
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5033
BEGIN
 
5034
SET new.f_int1 = @my_max1 + @counter,
 
5035
new.f_int2 = @my_min2 - @counter,
 
5036
new.f_charbig = '####updated per insert trigger####';
 
5037
SET @counter = @counter + 1;
 
5038
END|
 
5039
SET @counter = 1;
 
5040
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5041
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5042
SELECT CAST(f_int1 AS CHAR),
 
5043
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5044
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5045
ORDER BY f_int1;
 
5046
DROP TRIGGER trg_3;
 
5047
        
 
5048
# check trigger-12 success:     1
 
5049
DELETE FROM t1
 
5050
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5051
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5052
AND f_charbig = '####updated per insert trigger####';
 
5053
ANALYZE  TABLE t1;
 
5054
Table   Op      Msg_type        Msg_text
 
5055
test.t1 analyze status  OK
 
5056
CHECK    TABLE t1 EXTENDED;
 
5057
Table   Op      Msg_type        Msg_text
 
5058
test.t1 check   status  OK
 
5059
CHECKSUM TABLE t1 EXTENDED;
 
5060
Table   Checksum
 
5061
test.t1 <some_value>
 
5062
OPTIMIZE TABLE t1;
 
5063
Table   Op      Msg_type        Msg_text
 
5064
test.t1 optimize        status  OK
 
5065
# check layout success:    1
 
5066
REPAIR   TABLE t1 EXTENDED;
 
5067
Table   Op      Msg_type        Msg_text
 
5068
test.t1 repair  note    The storage engine for the table doesn't support repair
 
5069
# check layout success:    1
 
5070
TRUNCATE t1;
 
5071
        
 
5072
# check TRUNCATE success:       1
 
5073
# check layout success:    1
 
5074
# End usability test (inc/partition_check.inc)
 
5075
DROP TABLE t1;
 
5076
CREATE TABLE t1 (
 
5077
f_int1 INTEGER,
 
5078
f_int2 INTEGER,
 
5079
f_char1 CHAR(20),
 
5080
f_char2 CHAR(20),
 
5081
f_charbig VARCHAR(1000)
 
5082
 
 
5083
)
 
5084
PARTITION BY RANGE(f_int1)
 
5085
(PARTITION parta VALUES LESS THAN (0),
 
5086
PARTITION part_1 VALUES LESS THAN (5),
 
5087
PARTITION part_2 VALUES LESS THAN (10),
 
5088
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
5089
PARTITION part_4 VALUES LESS THAN (20),
 
5090
PARTITION part_5 VALUES LESS THAN (2147483646));
 
5091
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5092
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5093
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
5094
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
 
5095
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5096
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5097
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5098
# Start usability test (inc/partition_check.inc)
 
5099
create_command
 
5100
SHOW CREATE TABLE t1;
 
5101
Table   Create Table
 
5102
t1      CREATE TABLE `t1` (
 
5103
  `f_int1` int(11) DEFAULT NULL,
 
5104
  `f_int2` int(11) DEFAULT NULL,
 
5105
  `f_char1` char(20) DEFAULT NULL,
 
5106
  `f_char2` char(20) DEFAULT NULL,
 
5107
  `f_charbig` varchar(1000) DEFAULT NULL
 
5108
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
5109
 
 
5110
# check prerequisites-1 success:    1
 
5111
# check COUNT(*) success:    1
 
5112
# check MIN/MAX(f_int1) success:    1
 
5113
# check MIN/MAX(f_int2) success:    1
 
5114
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5115
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5116
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5117
WHERE f_int1 IN (2,3);
 
5118
# check prerequisites-3 success:    1
 
5119
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5120
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
5121
# check read via f_int1 success: 1
 
5122
# check read via f_int2 success: 1
 
5123
        
 
5124
# check multiple-1 success:     1
 
5125
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5126
        
 
5127
# check multiple-2 success:     1
 
5128
INSERT INTO t1 SELECT * FROM t0_template
 
5129
WHERE MOD(f_int1,3) = 0;
 
5130
        
 
5131
# check multiple-3 success:     1
 
5132
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5133
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5134
AND @max_row_div2 + @max_row_div4;
 
5135
        
 
5136
# check multiple-4 success:     1
 
5137
DELETE FROM t1
 
5138
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5139
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5140
        
 
5141
# check multiple-5 success:     1
 
5142
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5143
INSERT INTO t1
 
5144
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5145
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5146
f_charbig = '#SINGLE#';
 
5147
        
 
5148
# check single-1 success:       1
 
5149
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5150
INSERT INTO t1
 
5151
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5152
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5153
f_charbig = '#SINGLE#';
 
5154
        
 
5155
# check single-2 success:       1
 
5156
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5157
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5158
UPDATE t1 SET f_int1 = @cur_value2
 
5159
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5160
        
 
5161
# check single-3 success:       1
 
5162
SET @cur_value1= -1;
 
5163
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5164
UPDATE t1 SET f_int1 = @cur_value1
 
5165
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5166
        
 
5167
# check single-4 success:       1
 
5168
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5169
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5170
        
 
5171
# check single-5 success:       1
 
5172
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5173
        
 
5174
# check single-6 success:       1
 
5175
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5176
ERROR HY000: Table has no partition for value 2147483647
 
5177
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5178
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5179
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5180
f_charbig = '#NULL#';
 
5181
INSERT INTO t1
 
5182
SET f_int1 = NULL , f_int2 = -@max_row,
 
5183
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5184
f_charbig = '#NULL#';
 
5185
# check null success:    1
 
5186
        
 
5187
# check null-1 success:         1
 
5188
UPDATE t1 SET f_int1 = -@max_row
 
5189
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5190
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5191
        
 
5192
# check null-2 success:         1
 
5193
UPDATE t1 SET f_int1 = NULL
 
5194
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5195
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5196
        
 
5197
# check null-3 success:         1
 
5198
DELETE FROM t1
 
5199
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5200
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5201
        
 
5202
# check null-4 success:         1
 
5203
DELETE FROM t1
 
5204
WHERE f_int1 = 0 AND f_int2 = 0
 
5205
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5206
AND f_charbig = '#NULL#';
 
5207
SET AUTOCOMMIT= 0;
 
5208
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5209
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5210
FROM t0_template source_tab
 
5211
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5212
        
 
5213
# check transactions-1 success:         1
 
5214
COMMIT WORK;
 
5215
        
 
5216
# check transactions-2 success:         1
 
5217
ROLLBACK WORK;
 
5218
        
 
5219
# check transactions-3 success:         1
 
5220
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5221
COMMIT WORK;
 
5222
ROLLBACK WORK;
 
5223
        
 
5224
# check transactions-4 success:         1
 
5225
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5226
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5227
FROM t0_template source_tab
 
5228
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5229
        
 
5230
# check transactions-5 success:         1
 
5231
ROLLBACK WORK;
 
5232
        
 
5233
# check transactions-6 success:         1
 
5234
# INFO: Storage engine used for t1 seems to be transactional.
 
5235
COMMIT;
 
5236
        
 
5237
# check transactions-7 success:         1
 
5238
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5239
COMMIT WORK;
 
5240
SET @@session.sql_mode = 'traditional';
 
5241
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5242
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5243
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5244
'', '', 'was inserted' FROM t0_template
 
5245
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5246
ERROR 22012: Division by 0
 
5247
COMMIT;
 
5248
        
 
5249
# check transactions-8 success:         1
 
5250
# INFO: Storage engine used for t1 seems to be able to revert
 
5251
#       changes made by the failing statement.
 
5252
SET @@session.sql_mode = '';
 
5253
SET AUTOCOMMIT= 1;
 
5254
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5255
COMMIT WORK;
 
5256
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5257
        
 
5258
# check special-1 success:      1
 
5259
UPDATE t1 SET f_charbig = '';
 
5260
        
 
5261
# check special-2 success:      1
 
5262
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5263
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5264
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5265
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5266
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5267
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5268
'just inserted' FROM t0_template
 
5269
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5270
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5271
BEGIN
 
5272
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5273
f_charbig = 'updated by trigger'
 
5274
      WHERE f_int1 = new.f_int1;
 
5275
END|
 
5276
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5277
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5278
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5279
        
 
5280
# check trigger-1 success:      1
 
5281
DROP TRIGGER trg_1;
 
5282
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5283
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5284
f_charbig = 'just inserted'
 
5285
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5286
DELETE FROM t0_aux
 
5287
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5288
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5289
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5290
'just inserted' FROM t0_template
 
5291
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5292
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5293
BEGIN
 
5294
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5295
f_charbig = 'updated by trigger'
 
5296
      WHERE f_int1 = new.f_int1;
 
5297
END|
 
5298
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5299
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5300
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5301
        
 
5302
# check trigger-2 success:      1
 
5303
DROP TRIGGER trg_1;
 
5304
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5305
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5306
f_charbig = 'just inserted'
 
5307
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5308
DELETE FROM t0_aux
 
5309
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5310
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5311
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5312
'just inserted' FROM t0_template
 
5313
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5314
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5315
BEGIN
 
5316
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5317
f_charbig = 'updated by trigger'
 
5318
      WHERE f_int1 = new.f_int1;
 
5319
END|
 
5320
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5321
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5322
        
 
5323
# check trigger-3 success:      1
 
5324
DROP TRIGGER trg_1;
 
5325
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5326
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5327
f_charbig = 'just inserted'
 
5328
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5329
DELETE FROM t0_aux
 
5330
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5331
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5332
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5333
'just inserted' FROM t0_template
 
5334
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5335
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5336
BEGIN
 
5337
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5338
f_charbig = 'updated by trigger'
 
5339
      WHERE f_int1 = - old.f_int1;
 
5340
END|
 
5341
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5342
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5343
        
 
5344
# check trigger-4 success:      1
 
5345
DROP TRIGGER trg_1;
 
5346
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5347
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5348
f_charbig = 'just inserted'
 
5349
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5350
DELETE FROM t0_aux
 
5351
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5352
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5353
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5354
'just inserted' FROM t0_template
 
5355
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5356
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5357
BEGIN
 
5358
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5359
f_charbig = 'updated by trigger'
 
5360
      WHERE f_int1 = new.f_int1;
 
5361
END|
 
5362
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5363
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5364
        
 
5365
# check trigger-5 success:      1
 
5366
DROP TRIGGER trg_1;
 
5367
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5368
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5369
f_charbig = 'just inserted'
 
5370
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5371
DELETE FROM t0_aux
 
5372
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5373
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5374
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5375
'just inserted' FROM t0_template
 
5376
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5377
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5378
BEGIN
 
5379
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5380
f_charbig = 'updated by trigger'
 
5381
      WHERE f_int1 = - old.f_int1;
 
5382
END|
 
5383
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5384
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5385
        
 
5386
# check trigger-6 success:      1
 
5387
DROP TRIGGER trg_1;
 
5388
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5389
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5390
f_charbig = 'just inserted'
 
5391
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5392
DELETE FROM t0_aux
 
5393
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5394
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5395
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5396
'just inserted' FROM t0_template
 
5397
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5398
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5399
BEGIN
 
5400
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5401
f_charbig = 'updated by trigger'
 
5402
      WHERE f_int1 = - old.f_int1;
 
5403
END|
 
5404
DELETE FROM t0_aux
 
5405
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5406
        
 
5407
# check trigger-7 success:      1
 
5408
DROP TRIGGER trg_1;
 
5409
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5410
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5411
f_charbig = 'just inserted'
 
5412
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5413
DELETE FROM t0_aux
 
5414
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5415
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5416
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5417
'just inserted' FROM t0_template
 
5418
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5419
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5420
BEGIN
 
5421
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5422
f_charbig = 'updated by trigger'
 
5423
      WHERE f_int1 = - old.f_int1;
 
5424
END|
 
5425
DELETE FROM t0_aux
 
5426
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5427
        
 
5428
# check trigger-8 success:      1
 
5429
DROP TRIGGER trg_1;
 
5430
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5431
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5432
f_charbig = 'just inserted'
 
5433
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5434
DELETE FROM t0_aux
 
5435
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5436
DELETE FROM t1
 
5437
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5438
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5439
BEGIN
 
5440
SET new.f_int1 = old.f_int1 + @max_row,
 
5441
new.f_int2 = old.f_int2 - @max_row,
 
5442
new.f_charbig = '####updated per update trigger####';
 
5443
END|
 
5444
UPDATE t1
 
5445
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5446
f_charbig = '####updated per update statement itself####';
 
5447
        
 
5448
# check trigger-9 success:      1
 
5449
DROP TRIGGER trg_2;
 
5450
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5451
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5452
f_charbig = CONCAT('===',f_char1,'===');
 
5453
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5454
BEGIN
 
5455
SET new.f_int1 = new.f_int1 + @max_row,
 
5456
new.f_int2 = new.f_int2 - @max_row,
 
5457
new.f_charbig = '####updated per update trigger####';
 
5458
END|
 
5459
UPDATE t1
 
5460
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5461
f_charbig = '####updated per update statement itself####';
 
5462
        
 
5463
# check trigger-10 success:     1
 
5464
DROP TRIGGER trg_2;
 
5465
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5466
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5467
f_charbig = CONCAT('===',f_char1,'===');
 
5468
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5469
BEGIN
 
5470
SET new.f_int1 = @my_max1 + @counter,
 
5471
new.f_int2 = @my_min2 - @counter,
 
5472
new.f_charbig = '####updated per insert trigger####';
 
5473
SET @counter = @counter + 1;
 
5474
END|
 
5475
SET @counter = 1;
 
5476
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5477
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5478
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5479
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5480
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5481
ORDER BY f_int1;
 
5482
DROP TRIGGER trg_3;
 
5483
        
 
5484
# check trigger-11 success:     1
 
5485
DELETE FROM t1
 
5486
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5487
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5488
AND f_charbig = '####updated per insert trigger####';
 
5489
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5490
BEGIN
 
5491
SET new.f_int1 = @my_max1 + @counter,
 
5492
new.f_int2 = @my_min2 - @counter,
 
5493
new.f_charbig = '####updated per insert trigger####';
 
5494
SET @counter = @counter + 1;
 
5495
END|
 
5496
SET @counter = 1;
 
5497
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5498
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5499
SELECT CAST(f_int1 AS CHAR),
 
5500
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5501
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5502
ORDER BY f_int1;
 
5503
DROP TRIGGER trg_3;
 
5504
        
 
5505
# check trigger-12 success:     1
 
5506
DELETE FROM t1
 
5507
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5508
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5509
AND f_charbig = '####updated per insert trigger####';
 
5510
ANALYZE  TABLE t1;
 
5511
Table   Op      Msg_type        Msg_text
 
5512
test.t1 analyze status  OK
 
5513
CHECK    TABLE t1 EXTENDED;
 
5514
Table   Op      Msg_type        Msg_text
 
5515
test.t1 check   status  OK
 
5516
CHECKSUM TABLE t1 EXTENDED;
 
5517
Table   Checksum
 
5518
test.t1 <some_value>
 
5519
OPTIMIZE TABLE t1;
 
5520
Table   Op      Msg_type        Msg_text
 
5521
test.t1 optimize        status  OK
 
5522
# check layout success:    1
 
5523
REPAIR   TABLE t1 EXTENDED;
 
5524
Table   Op      Msg_type        Msg_text
 
5525
test.t1 repair  note    The storage engine for the table doesn't support repair
 
5526
# check layout success:    1
 
5527
TRUNCATE t1;
 
5528
        
 
5529
# check TRUNCATE success:       1
 
5530
# check layout success:    1
 
5531
# End usability test (inc/partition_check.inc)
 
5532
DROP TABLE t1;
 
5533
CREATE TABLE t1 (
 
5534
f_int1 INTEGER,
 
5535
f_int2 INTEGER,
 
5536
f_char1 CHAR(20),
 
5537
f_char2 CHAR(20),
 
5538
f_charbig VARCHAR(1000)
 
5539
 
 
5540
)
 
5541
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
5542
(PARTITION part_1 VALUES LESS THAN (0),
 
5543
PARTITION part_2 VALUES LESS THAN (5),
 
5544
PARTITION part_3 VALUES LESS THAN (10),
 
5545
PARTITION part_4 VALUES LESS THAN (2147483646));
 
5546
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5547
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5548
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
5549
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
 
5550
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5551
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5552
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5553
# Start usability test (inc/partition_check.inc)
 
5554
create_command
 
5555
SHOW CREATE TABLE t1;
 
5556
Table   Create Table
 
5557
t1      CREATE TABLE `t1` (
 
5558
  `f_int1` int(11) DEFAULT NULL,
 
5559
  `f_int2` int(11) DEFAULT NULL,
 
5560
  `f_char1` char(20) DEFAULT NULL,
 
5561
  `f_char2` char(20) DEFAULT NULL,
 
5562
  `f_charbig` varchar(1000) DEFAULT NULL
 
5563
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
5564
 
 
5565
# check prerequisites-1 success:    1
 
5566
# check COUNT(*) success:    1
 
5567
# check MIN/MAX(f_int1) success:    1
 
5568
# check MIN/MAX(f_int2) success:    1
 
5569
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5570
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5571
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5572
WHERE f_int1 IN (2,3);
 
5573
# check prerequisites-3 success:    1
 
5574
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5575
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
5576
# check read via f_int1 success: 1
 
5577
# check read via f_int2 success: 1
 
5578
        
 
5579
# check multiple-1 success:     1
 
5580
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5581
        
 
5582
# check multiple-2 success:     1
 
5583
INSERT INTO t1 SELECT * FROM t0_template
 
5584
WHERE MOD(f_int1,3) = 0;
 
5585
        
 
5586
# check multiple-3 success:     1
 
5587
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5588
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5589
AND @max_row_div2 + @max_row_div4;
 
5590
        
 
5591
# check multiple-4 success:     1
 
5592
DELETE FROM t1
 
5593
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5594
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5595
        
 
5596
# check multiple-5 success:     1
 
5597
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5598
INSERT INTO t1
 
5599
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5600
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5601
f_charbig = '#SINGLE#';
 
5602
        
 
5603
# check single-1 success:       1
 
5604
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5605
INSERT INTO t1
 
5606
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5607
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5608
f_charbig = '#SINGLE#';
 
5609
        
 
5610
# check single-2 success:       1
 
5611
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5612
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5613
UPDATE t1 SET f_int1 = @cur_value2
 
5614
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5615
        
 
5616
# check single-3 success:       1
 
5617
SET @cur_value1= -1;
 
5618
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5619
UPDATE t1 SET f_int1 = @cur_value1
 
5620
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5621
        
 
5622
# check single-4 success:       1
 
5623
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5624
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5625
        
 
5626
# check single-5 success:       1
 
5627
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5628
        
 
5629
# check single-6 success:       1
 
5630
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5631
        
 
5632
# check single-7 success:       1
 
5633
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
5634
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5635
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5636
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5637
f_charbig = '#NULL#';
 
5638
INSERT INTO t1
 
5639
SET f_int1 = NULL , f_int2 = -@max_row,
 
5640
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5641
f_charbig = '#NULL#';
 
5642
# check null success:    1
 
5643
        
 
5644
# check null-1 success:         1
 
5645
UPDATE t1 SET f_int1 = -@max_row
 
5646
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5647
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5648
        
 
5649
# check null-2 success:         1
 
5650
UPDATE t1 SET f_int1 = NULL
 
5651
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5652
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5653
        
 
5654
# check null-3 success:         1
 
5655
DELETE FROM t1
 
5656
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5657
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5658
        
 
5659
# check null-4 success:         1
 
5660
DELETE FROM t1
 
5661
WHERE f_int1 = 0 AND f_int2 = 0
 
5662
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5663
AND f_charbig = '#NULL#';
 
5664
SET AUTOCOMMIT= 0;
 
5665
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5666
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5667
FROM t0_template source_tab
 
5668
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5669
        
 
5670
# check transactions-1 success:         1
 
5671
COMMIT WORK;
 
5672
        
 
5673
# check transactions-2 success:         1
 
5674
ROLLBACK WORK;
 
5675
        
 
5676
# check transactions-3 success:         1
 
5677
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5678
COMMIT WORK;
 
5679
ROLLBACK WORK;
 
5680
        
 
5681
# check transactions-4 success:         1
 
5682
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5683
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5684
FROM t0_template source_tab
 
5685
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5686
        
 
5687
# check transactions-5 success:         1
 
5688
ROLLBACK WORK;
 
5689
        
 
5690
# check transactions-6 success:         1
 
5691
# INFO: Storage engine used for t1 seems to be transactional.
 
5692
COMMIT;
 
5693
        
 
5694
# check transactions-7 success:         1
 
5695
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5696
COMMIT WORK;
 
5697
SET @@session.sql_mode = 'traditional';
 
5698
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5699
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5700
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5701
'', '', 'was inserted' FROM t0_template
 
5702
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5703
ERROR 22012: Division by 0
 
5704
COMMIT;
 
5705
        
 
5706
# check transactions-8 success:         1
 
5707
# INFO: Storage engine used for t1 seems to be able to revert
 
5708
#       changes made by the failing statement.
 
5709
SET @@session.sql_mode = '';
 
5710
SET AUTOCOMMIT= 1;
 
5711
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5712
COMMIT WORK;
 
5713
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5714
        
 
5715
# check special-1 success:      1
 
5716
UPDATE t1 SET f_charbig = '';
 
5717
        
 
5718
# check special-2 success:      1
 
5719
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5720
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5721
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5722
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5723
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5724
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5725
'just inserted' FROM t0_template
 
5726
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5727
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5728
BEGIN
 
5729
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5730
f_charbig = 'updated by trigger'
 
5731
      WHERE f_int1 = new.f_int1;
 
5732
END|
 
5733
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5734
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5735
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5736
        
 
5737
# check trigger-1 success:      1
 
5738
DROP TRIGGER trg_1;
 
5739
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5740
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5741
f_charbig = 'just inserted'
 
5742
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5743
DELETE FROM t0_aux
 
5744
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5745
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5746
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5747
'just inserted' FROM t0_template
 
5748
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5749
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5750
BEGIN
 
5751
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5752
f_charbig = 'updated by trigger'
 
5753
      WHERE f_int1 = new.f_int1;
 
5754
END|
 
5755
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5756
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5757
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5758
        
 
5759
# check trigger-2 success:      1
 
5760
DROP TRIGGER trg_1;
 
5761
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5762
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5763
f_charbig = 'just inserted'
 
5764
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5765
DELETE FROM t0_aux
 
5766
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5767
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5768
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5769
'just inserted' FROM t0_template
 
5770
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5771
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5772
BEGIN
 
5773
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5774
f_charbig = 'updated by trigger'
 
5775
      WHERE f_int1 = new.f_int1;
 
5776
END|
 
5777
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5778
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5779
        
 
5780
# check trigger-3 success:      1
 
5781
DROP TRIGGER trg_1;
 
5782
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5783
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5784
f_charbig = 'just inserted'
 
5785
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5786
DELETE FROM t0_aux
 
5787
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5788
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5789
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5790
'just inserted' FROM t0_template
 
5791
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5792
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5793
BEGIN
 
5794
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5795
f_charbig = 'updated by trigger'
 
5796
      WHERE f_int1 = - old.f_int1;
 
5797
END|
 
5798
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5799
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5800
        
 
5801
# check trigger-4 success:      1
 
5802
DROP TRIGGER trg_1;
 
5803
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5804
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5805
f_charbig = 'just inserted'
 
5806
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5807
DELETE FROM t0_aux
 
5808
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5809
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5810
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5811
'just inserted' FROM t0_template
 
5812
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5813
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5814
BEGIN
 
5815
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5816
f_charbig = 'updated by trigger'
 
5817
      WHERE f_int1 = new.f_int1;
 
5818
END|
 
5819
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5820
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5821
        
 
5822
# check trigger-5 success:      1
 
5823
DROP TRIGGER trg_1;
 
5824
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5825
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5826
f_charbig = 'just inserted'
 
5827
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5828
DELETE FROM t0_aux
 
5829
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5830
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5831
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5832
'just inserted' FROM t0_template
 
5833
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5834
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5835
BEGIN
 
5836
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5837
f_charbig = 'updated by trigger'
 
5838
      WHERE f_int1 = - old.f_int1;
 
5839
END|
 
5840
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5841
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5842
        
 
5843
# check trigger-6 success:      1
 
5844
DROP TRIGGER trg_1;
 
5845
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5846
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5847
f_charbig = 'just inserted'
 
5848
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5849
DELETE FROM t0_aux
 
5850
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5851
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5852
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5853
'just inserted' FROM t0_template
 
5854
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5855
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5856
BEGIN
 
5857
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5858
f_charbig = 'updated by trigger'
 
5859
      WHERE f_int1 = - old.f_int1;
 
5860
END|
 
5861
DELETE FROM t0_aux
 
5862
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5863
        
 
5864
# check trigger-7 success:      1
 
5865
DROP TRIGGER trg_1;
 
5866
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5867
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5868
f_charbig = 'just inserted'
 
5869
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5870
DELETE FROM t0_aux
 
5871
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5872
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5873
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5874
'just inserted' FROM t0_template
 
5875
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5876
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5877
BEGIN
 
5878
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5879
f_charbig = 'updated by trigger'
 
5880
      WHERE f_int1 = - old.f_int1;
 
5881
END|
 
5882
DELETE FROM t0_aux
 
5883
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5884
        
 
5885
# check trigger-8 success:      1
 
5886
DROP TRIGGER trg_1;
 
5887
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5888
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5889
f_charbig = 'just inserted'
 
5890
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5891
DELETE FROM t0_aux
 
5892
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5893
DELETE FROM t1
 
5894
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5895
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5896
BEGIN
 
5897
SET new.f_int1 = old.f_int1 + @max_row,
 
5898
new.f_int2 = old.f_int2 - @max_row,
 
5899
new.f_charbig = '####updated per update trigger####';
 
5900
END|
 
5901
UPDATE t1
 
5902
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5903
f_charbig = '####updated per update statement itself####';
 
5904
        
 
5905
# check trigger-9 success:      1
 
5906
DROP TRIGGER trg_2;
 
5907
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5908
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5909
f_charbig = CONCAT('===',f_char1,'===');
 
5910
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5911
BEGIN
 
5912
SET new.f_int1 = new.f_int1 + @max_row,
 
5913
new.f_int2 = new.f_int2 - @max_row,
 
5914
new.f_charbig = '####updated per update trigger####';
 
5915
END|
 
5916
UPDATE t1
 
5917
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5918
f_charbig = '####updated per update statement itself####';
 
5919
        
 
5920
# check trigger-10 success:     1
 
5921
DROP TRIGGER trg_2;
 
5922
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5923
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5924
f_charbig = CONCAT('===',f_char1,'===');
 
5925
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5926
BEGIN
 
5927
SET new.f_int1 = @my_max1 + @counter,
 
5928
new.f_int2 = @my_min2 - @counter,
 
5929
new.f_charbig = '####updated per insert trigger####';
 
5930
SET @counter = @counter + 1;
 
5931
END|
 
5932
SET @counter = 1;
 
5933
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5934
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5935
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5936
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5937
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5938
ORDER BY f_int1;
 
5939
DROP TRIGGER trg_3;
 
5940
        
 
5941
# check trigger-11 success:     1
 
5942
DELETE FROM t1
 
5943
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5944
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5945
AND f_charbig = '####updated per insert trigger####';
 
5946
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5947
BEGIN
 
5948
SET new.f_int1 = @my_max1 + @counter,
 
5949
new.f_int2 = @my_min2 - @counter,
 
5950
new.f_charbig = '####updated per insert trigger####';
 
5951
SET @counter = @counter + 1;
 
5952
END|
 
5953
SET @counter = 1;
 
5954
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5955
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5956
SELECT CAST(f_int1 AS CHAR),
 
5957
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5958
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5959
ORDER BY f_int1;
 
5960
DROP TRIGGER trg_3;
 
5961
        
 
5962
# check trigger-12 success:     1
 
5963
DELETE FROM t1
 
5964
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5965
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5966
AND f_charbig = '####updated per insert trigger####';
 
5967
ANALYZE  TABLE t1;
 
5968
Table   Op      Msg_type        Msg_text
 
5969
test.t1 analyze status  OK
 
5970
CHECK    TABLE t1 EXTENDED;
 
5971
Table   Op      Msg_type        Msg_text
 
5972
test.t1 check   status  OK
 
5973
CHECKSUM TABLE t1 EXTENDED;
 
5974
Table   Checksum
 
5975
test.t1 <some_value>
 
5976
OPTIMIZE TABLE t1;
 
5977
Table   Op      Msg_type        Msg_text
 
5978
test.t1 optimize        status  OK
 
5979
# check layout success:    1
 
5980
REPAIR   TABLE t1 EXTENDED;
 
5981
Table   Op      Msg_type        Msg_text
 
5982
test.t1 repair  note    The storage engine for the table doesn't support repair
 
5983
# check layout success:    1
 
5984
TRUNCATE t1;
 
5985
        
 
5986
# check TRUNCATE success:       1
 
5987
# check layout success:    1
 
5988
# End usability test (inc/partition_check.inc)
 
5989
DROP TABLE t1;
 
5990
CREATE TABLE t1 (
 
5991
f_int1 INTEGER,
 
5992
f_int2 INTEGER,
 
5993
f_char1 CHAR(20),
 
5994
f_char2 CHAR(20),
 
5995
f_charbig VARCHAR(1000)
 
5996
 
 
5997
)
 
5998
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
5999
(PARTITION part_1 VALUES LESS THAN (0)
 
6000
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
6001
PARTITION part_2 VALUES LESS THAN (5)
 
6002
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
6003
PARTITION part_3 VALUES LESS THAN (10)
 
6004
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
6005
PARTITION part_4 VALUES LESS THAN (2147483646)
 
6006
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
6007
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6008
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6009
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
6010
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
 
6011
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6012
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6013
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6014
# Start usability test (inc/partition_check.inc)
 
6015
create_command
 
6016
SHOW CREATE TABLE t1;
 
6017
Table   Create Table
 
6018
t1      CREATE TABLE `t1` (
 
6019
  `f_int1` int(11) DEFAULT NULL,
 
6020
  `f_int2` int(11) DEFAULT NULL,
 
6021
  `f_char1` char(20) DEFAULT NULL,
 
6022
  `f_char2` char(20) DEFAULT NULL,
 
6023
  `f_charbig` varchar(1000) DEFAULT NULL
 
6024
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
6025
 
 
6026
# check prerequisites-1 success:    1
 
6027
# check COUNT(*) success:    1
 
6028
# check MIN/MAX(f_int1) success:    1
 
6029
# check MIN/MAX(f_int2) success:    1
 
6030
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6031
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6032
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6033
WHERE f_int1 IN (2,3);
 
6034
# check prerequisites-3 success:    1
 
6035
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6036
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
6037
# check read via f_int1 success: 1
 
6038
# check read via f_int2 success: 1
 
6039
        
 
6040
# check multiple-1 success:     1
 
6041
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6042
        
 
6043
# check multiple-2 success:     1
 
6044
INSERT INTO t1 SELECT * FROM t0_template
 
6045
WHERE MOD(f_int1,3) = 0;
 
6046
        
 
6047
# check multiple-3 success:     1
 
6048
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6049
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6050
AND @max_row_div2 + @max_row_div4;
 
6051
        
 
6052
# check multiple-4 success:     1
 
6053
DELETE FROM t1
 
6054
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6055
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6056
        
 
6057
# check multiple-5 success:     1
 
6058
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6059
INSERT INTO t1
 
6060
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6061
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6062
f_charbig = '#SINGLE#';
 
6063
        
 
6064
# check single-1 success:       1
 
6065
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6066
INSERT INTO t1
 
6067
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6068
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6069
f_charbig = '#SINGLE#';
 
6070
        
 
6071
# check single-2 success:       1
 
6072
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6073
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6074
UPDATE t1 SET f_int1 = @cur_value2
 
6075
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6076
        
 
6077
# check single-3 success:       1
 
6078
SET @cur_value1= -1;
 
6079
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6080
UPDATE t1 SET f_int1 = @cur_value1
 
6081
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6082
        
 
6083
# check single-4 success:       1
 
6084
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6085
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6086
        
 
6087
# check single-5 success:       1
 
6088
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6089
        
 
6090
# check single-6 success:       1
 
6091
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6092
ERROR HY000: Table has no partition for value 2147483647
 
6093
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6094
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6095
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6096
f_charbig = '#NULL#';
 
6097
INSERT INTO t1
 
6098
SET f_int1 = NULL , f_int2 = -@max_row,
 
6099
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6100
f_charbig = '#NULL#';
 
6101
# check null success:    1
 
6102
        
 
6103
# check null-1 success:         1
 
6104
UPDATE t1 SET f_int1 = -@max_row
 
6105
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6106
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6107
        
 
6108
# check null-2 success:         1
 
6109
UPDATE t1 SET f_int1 = NULL
 
6110
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6111
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6112
        
 
6113
# check null-3 success:         1
 
6114
DELETE FROM t1
 
6115
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6116
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6117
        
 
6118
# check null-4 success:         1
 
6119
DELETE FROM t1
 
6120
WHERE f_int1 = 0 AND f_int2 = 0
 
6121
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6122
AND f_charbig = '#NULL#';
 
6123
SET AUTOCOMMIT= 0;
 
6124
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6125
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6126
FROM t0_template source_tab
 
6127
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6128
        
 
6129
# check transactions-1 success:         1
 
6130
COMMIT WORK;
 
6131
        
 
6132
# check transactions-2 success:         1
 
6133
ROLLBACK WORK;
 
6134
        
 
6135
# check transactions-3 success:         1
 
6136
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6137
COMMIT WORK;
 
6138
ROLLBACK WORK;
 
6139
        
 
6140
# check transactions-4 success:         1
 
6141
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6142
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6143
FROM t0_template source_tab
 
6144
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6145
        
 
6146
# check transactions-5 success:         1
 
6147
ROLLBACK WORK;
 
6148
        
 
6149
# check transactions-6 success:         1
 
6150
# INFO: Storage engine used for t1 seems to be transactional.
 
6151
COMMIT;
 
6152
        
 
6153
# check transactions-7 success:         1
 
6154
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6155
COMMIT WORK;
 
6156
SET @@session.sql_mode = 'traditional';
 
6157
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6158
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6159
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6160
'', '', 'was inserted' FROM t0_template
 
6161
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6162
ERROR 22012: Division by 0
 
6163
COMMIT;
 
6164
        
 
6165
# check transactions-8 success:         1
 
6166
# INFO: Storage engine used for t1 seems to be able to revert
 
6167
#       changes made by the failing statement.
 
6168
SET @@session.sql_mode = '';
 
6169
SET AUTOCOMMIT= 1;
 
6170
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6171
COMMIT WORK;
 
6172
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6173
        
 
6174
# check special-1 success:      1
 
6175
UPDATE t1 SET f_charbig = '';
 
6176
        
 
6177
# check special-2 success:      1
 
6178
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6179
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6180
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6181
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6182
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6183
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6184
'just inserted' FROM t0_template
 
6185
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6186
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6187
BEGIN
 
6188
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6189
f_charbig = 'updated by trigger'
 
6190
      WHERE f_int1 = new.f_int1;
 
6191
END|
 
6192
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6193
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6195
        
 
6196
# check trigger-1 success:      1
 
6197
DROP TRIGGER trg_1;
 
6198
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6199
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6200
f_charbig = 'just inserted'
 
6201
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6202
DELETE FROM t0_aux
 
6203
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6204
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6205
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6206
'just inserted' FROM t0_template
 
6207
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6208
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6209
BEGIN
 
6210
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6211
f_charbig = 'updated by trigger'
 
6212
      WHERE f_int1 = new.f_int1;
 
6213
END|
 
6214
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6215
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6216
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6217
        
 
6218
# check trigger-2 success:      1
 
6219
DROP TRIGGER trg_1;
 
6220
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6221
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6222
f_charbig = 'just inserted'
 
6223
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6224
DELETE FROM t0_aux
 
6225
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6226
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6227
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6228
'just inserted' FROM t0_template
 
6229
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6230
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6231
BEGIN
 
6232
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6233
f_charbig = 'updated by trigger'
 
6234
      WHERE f_int1 = new.f_int1;
 
6235
END|
 
6236
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6237
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6238
        
 
6239
# check trigger-3 success:      1
 
6240
DROP TRIGGER trg_1;
 
6241
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6242
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6243
f_charbig = 'just inserted'
 
6244
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6245
DELETE FROM t0_aux
 
6246
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6247
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6248
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6249
'just inserted' FROM t0_template
 
6250
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6251
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6252
BEGIN
 
6253
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6254
f_charbig = 'updated by trigger'
 
6255
      WHERE f_int1 = - old.f_int1;
 
6256
END|
 
6257
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6258
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6259
        
 
6260
# check trigger-4 success:      1
 
6261
DROP TRIGGER trg_1;
 
6262
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6263
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6264
f_charbig = 'just inserted'
 
6265
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6266
DELETE FROM t0_aux
 
6267
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6268
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6269
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6270
'just inserted' FROM t0_template
 
6271
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6272
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6273
BEGIN
 
6274
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6275
f_charbig = 'updated by trigger'
 
6276
      WHERE f_int1 = new.f_int1;
 
6277
END|
 
6278
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6279
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6280
        
 
6281
# check trigger-5 success:      1
 
6282
DROP TRIGGER trg_1;
 
6283
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6284
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6285
f_charbig = 'just inserted'
 
6286
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6287
DELETE FROM t0_aux
 
6288
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6289
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6290
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6291
'just inserted' FROM t0_template
 
6292
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6293
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6294
BEGIN
 
6295
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6296
f_charbig = 'updated by trigger'
 
6297
      WHERE f_int1 = - old.f_int1;
 
6298
END|
 
6299
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6300
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6301
        
 
6302
# check trigger-6 success:      1
 
6303
DROP TRIGGER trg_1;
 
6304
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6305
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6306
f_charbig = 'just inserted'
 
6307
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6308
DELETE FROM t0_aux
 
6309
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6310
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6311
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6312
'just inserted' FROM t0_template
 
6313
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6314
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
6315
BEGIN
 
6316
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6317
f_charbig = 'updated by trigger'
 
6318
      WHERE f_int1 = - old.f_int1;
 
6319
END|
 
6320
DELETE FROM t0_aux
 
6321
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6322
        
 
6323
# check trigger-7 success:      1
 
6324
DROP TRIGGER trg_1;
 
6325
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6326
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6327
f_charbig = 'just inserted'
 
6328
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6329
DELETE FROM t0_aux
 
6330
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6331
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6332
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6333
'just inserted' FROM t0_template
 
6334
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6335
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
6336
BEGIN
 
6337
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6338
f_charbig = 'updated by trigger'
 
6339
      WHERE f_int1 = - old.f_int1;
 
6340
END|
 
6341
DELETE FROM t0_aux
 
6342
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6343
        
 
6344
# check trigger-8 success:      1
 
6345
DROP TRIGGER trg_1;
 
6346
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6347
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6348
f_charbig = 'just inserted'
 
6349
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6350
DELETE FROM t0_aux
 
6351
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6352
DELETE FROM t1
 
6353
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6354
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6355
BEGIN
 
6356
SET new.f_int1 = old.f_int1 + @max_row,
 
6357
new.f_int2 = old.f_int2 - @max_row,
 
6358
new.f_charbig = '####updated per update trigger####';
 
6359
END|
 
6360
UPDATE t1
 
6361
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6362
f_charbig = '####updated per update statement itself####';
 
6363
        
 
6364
# check trigger-9 success:      1
 
6365
DROP TRIGGER trg_2;
 
6366
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6367
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6368
f_charbig = CONCAT('===',f_char1,'===');
 
6369
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6370
BEGIN
 
6371
SET new.f_int1 = new.f_int1 + @max_row,
 
6372
new.f_int2 = new.f_int2 - @max_row,
 
6373
new.f_charbig = '####updated per update trigger####';
 
6374
END|
 
6375
UPDATE t1
 
6376
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6377
f_charbig = '####updated per update statement itself####';
 
6378
        
 
6379
# check trigger-10 success:     1
 
6380
DROP TRIGGER trg_2;
 
6381
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6382
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6383
f_charbig = CONCAT('===',f_char1,'===');
 
6384
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6385
BEGIN
 
6386
SET new.f_int1 = @my_max1 + @counter,
 
6387
new.f_int2 = @my_min2 - @counter,
 
6388
new.f_charbig = '####updated per insert trigger####';
 
6389
SET @counter = @counter + 1;
 
6390
END|
 
6391
SET @counter = 1;
 
6392
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6393
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6394
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6395
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6396
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6397
ORDER BY f_int1;
 
6398
DROP TRIGGER trg_3;
 
6399
        
 
6400
# check trigger-11 success:     1
 
6401
DELETE FROM t1
 
6402
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6403
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6404
AND f_charbig = '####updated per insert trigger####';
 
6405
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6406
BEGIN
 
6407
SET new.f_int1 = @my_max1 + @counter,
 
6408
new.f_int2 = @my_min2 - @counter,
 
6409
new.f_charbig = '####updated per insert trigger####';
 
6410
SET @counter = @counter + 1;
 
6411
END|
 
6412
SET @counter = 1;
 
6413
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6414
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
6415
SELECT CAST(f_int1 AS CHAR),
 
6416
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6417
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6418
ORDER BY f_int1;
 
6419
DROP TRIGGER trg_3;
 
6420
        
 
6421
# check trigger-12 success:     1
 
6422
DELETE FROM t1
 
6423
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6424
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6425
AND f_charbig = '####updated per insert trigger####';
 
6426
ANALYZE  TABLE t1;
 
6427
Table   Op      Msg_type        Msg_text
 
6428
test.t1 analyze status  OK
 
6429
CHECK    TABLE t1 EXTENDED;
 
6430
Table   Op      Msg_type        Msg_text
 
6431
test.t1 check   status  OK
 
6432
CHECKSUM TABLE t1 EXTENDED;
 
6433
Table   Checksum
 
6434
test.t1 <some_value>
 
6435
OPTIMIZE TABLE t1;
 
6436
Table   Op      Msg_type        Msg_text
 
6437
test.t1 optimize        status  OK
 
6438
# check layout success:    1
 
6439
REPAIR   TABLE t1 EXTENDED;
 
6440
Table   Op      Msg_type        Msg_text
 
6441
test.t1 repair  note    The storage engine for the table doesn't support repair
 
6442
# check layout success:    1
 
6443
TRUNCATE t1;
 
6444
        
 
6445
# check TRUNCATE success:       1
 
6446
# check layout success:    1
 
6447
# End usability test (inc/partition_check.inc)
 
6448
DROP TABLE t1;
 
6449
CREATE TABLE t1 (
 
6450
f_int1 INTEGER,
 
6451
f_int2 INTEGER,
 
6452
f_char1 CHAR(20),
 
6453
f_char2 CHAR(20),
 
6454
f_charbig VARCHAR(1000)
 
6455
 
 
6456
)
 
6457
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
6458
(PARTITION part_1 VALUES IN (0)
 
6459
(SUBPARTITION sp11, SUBPARTITION sp12),
 
6460
PARTITION part_2 VALUES IN (1)
 
6461
(SUBPARTITION sp21, SUBPARTITION sp22),
 
6462
PARTITION part_3 VALUES IN (2)
 
6463
(SUBPARTITION sp31, SUBPARTITION sp32),
 
6464
PARTITION part_4 VALUES IN (NULL)
 
6465
(SUBPARTITION sp41, SUBPARTITION sp42));
 
6466
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6467
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6468
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
6469
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
 
6470
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6471
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6472
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6473
# Start usability test (inc/partition_check.inc)
 
6474
create_command
 
6475
SHOW CREATE TABLE t1;
 
6476
Table   Create Table
 
6477
t1      CREATE TABLE `t1` (
 
6478
  `f_int1` int(11) DEFAULT NULL,
 
6479
  `f_int2` int(11) DEFAULT NULL,
 
6480
  `f_char1` char(20) DEFAULT NULL,
 
6481
  `f_char2` char(20) DEFAULT NULL,
 
6482
  `f_charbig` varchar(1000) DEFAULT NULL
 
6483
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
6484
 
 
6485
# check prerequisites-1 success:    1
 
6486
# check COUNT(*) success:    1
 
6487
# check MIN/MAX(f_int1) success:    1
 
6488
# check MIN/MAX(f_int2) success:    1
 
6489
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6490
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6491
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6492
WHERE f_int1 IN (2,3);
 
6493
# check prerequisites-3 success:    1
 
6494
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6495
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
6496
# check read via f_int1 success: 1
 
6497
# check read via f_int2 success: 1
 
6498
        
 
6499
# check multiple-1 success:     1
 
6500
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6501
        
 
6502
# check multiple-2 success:     1
 
6503
INSERT INTO t1 SELECT * FROM t0_template
 
6504
WHERE MOD(f_int1,3) = 0;
 
6505
        
 
6506
# check multiple-3 success:     1
 
6507
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6508
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6509
AND @max_row_div2 + @max_row_div4;
 
6510
        
 
6511
# check multiple-4 success:     1
 
6512
DELETE FROM t1
 
6513
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6514
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6515
        
 
6516
# check multiple-5 success:     1
 
6517
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6518
INSERT INTO t1
 
6519
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6520
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6521
f_charbig = '#SINGLE#';
 
6522
        
 
6523
# check single-1 success:       1
 
6524
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6525
INSERT INTO t1
 
6526
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6527
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6528
f_charbig = '#SINGLE#';
 
6529
        
 
6530
# check single-2 success:       1
 
6531
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6532
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6533
UPDATE t1 SET f_int1 = @cur_value2
 
6534
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6535
        
 
6536
# check single-3 success:       1
 
6537
SET @cur_value1= -1;
 
6538
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6539
UPDATE t1 SET f_int1 = @cur_value1
 
6540
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6541
        
 
6542
# check single-4 success:       1
 
6543
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6544
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6545
        
 
6546
# check single-5 success:       1
 
6547
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6548
        
 
6549
# check single-6 success:       1
 
6550
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6551
        
 
6552
# check single-7 success:       1
 
6553
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
6554
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6555
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6556
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6557
f_charbig = '#NULL#';
 
6558
INSERT INTO t1
 
6559
SET f_int1 = NULL , f_int2 = -@max_row,
 
6560
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6561
f_charbig = '#NULL#';
 
6562
# check null success:    1
 
6563
        
 
6564
# check null-1 success:         1
 
6565
UPDATE t1 SET f_int1 = -@max_row
 
6566
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6567
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6568
        
 
6569
# check null-2 success:         1
 
6570
UPDATE t1 SET f_int1 = NULL
 
6571
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6572
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6573
        
 
6574
# check null-3 success:         1
 
6575
DELETE FROM t1
 
6576
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6577
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6578
        
 
6579
# check null-4 success:         1
 
6580
DELETE FROM t1
 
6581
WHERE f_int1 = 0 AND f_int2 = 0
 
6582
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6583
AND f_charbig = '#NULL#';
 
6584
SET AUTOCOMMIT= 0;
 
6585
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6586
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6587
FROM t0_template source_tab
 
6588
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6589
        
 
6590
# check transactions-1 success:         1
 
6591
COMMIT WORK;
 
6592
        
 
6593
# check transactions-2 success:         1
 
6594
ROLLBACK WORK;
 
6595
        
 
6596
# check transactions-3 success:         1
 
6597
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6598
COMMIT WORK;
 
6599
ROLLBACK WORK;
 
6600
        
 
6601
# check transactions-4 success:         1
 
6602
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6603
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6604
FROM t0_template source_tab
 
6605
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6606
        
 
6607
# check transactions-5 success:         1
 
6608
ROLLBACK WORK;
 
6609
        
 
6610
# check transactions-6 success:         1
 
6611
# INFO: Storage engine used for t1 seems to be transactional.
 
6612
COMMIT;
 
6613
        
 
6614
# check transactions-7 success:         1
 
6615
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6616
COMMIT WORK;
 
6617
SET @@session.sql_mode = 'traditional';
 
6618
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6619
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6620
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6621
'', '', 'was inserted' FROM t0_template
 
6622
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6623
ERROR 22012: Division by 0
 
6624
COMMIT;
 
6625
        
 
6626
# check transactions-8 success:         1
 
6627
# INFO: Storage engine used for t1 seems to be able to revert
 
6628
#       changes made by the failing statement.
 
6629
SET @@session.sql_mode = '';
 
6630
SET AUTOCOMMIT= 1;
 
6631
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6632
COMMIT WORK;
 
6633
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6634
        
 
6635
# check special-1 success:      1
 
6636
UPDATE t1 SET f_charbig = '';
 
6637
        
 
6638
# check special-2 success:      1
 
6639
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6640
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6641
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6642
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6643
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6644
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6645
'just inserted' FROM t0_template
 
6646
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6647
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6648
BEGIN
 
6649
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6650
f_charbig = 'updated by trigger'
 
6651
      WHERE f_int1 = new.f_int1;
 
6652
END|
 
6653
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6654
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6655
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6656
        
 
6657
# check trigger-1 success:      1
 
6658
DROP TRIGGER trg_1;
 
6659
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6660
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6661
f_charbig = 'just inserted'
 
6662
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6663
DELETE FROM t0_aux
 
6664
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6665
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6666
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6667
'just inserted' FROM t0_template
 
6668
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6669
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6670
BEGIN
 
6671
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6672
f_charbig = 'updated by trigger'
 
6673
      WHERE f_int1 = new.f_int1;
 
6674
END|
 
6675
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6676
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6677
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6678
        
 
6679
# check trigger-2 success:      1
 
6680
DROP TRIGGER trg_1;
 
6681
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6682
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6683
f_charbig = 'just inserted'
 
6684
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6685
DELETE FROM t0_aux
 
6686
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6687
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6688
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6689
'just inserted' FROM t0_template
 
6690
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6691
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6692
BEGIN
 
6693
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6694
f_charbig = 'updated by trigger'
 
6695
      WHERE f_int1 = new.f_int1;
 
6696
END|
 
6697
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6698
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6699
        
 
6700
# check trigger-3 success:      1
 
6701
DROP TRIGGER trg_1;
 
6702
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6703
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6704
f_charbig = 'just inserted'
 
6705
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6706
DELETE FROM t0_aux
 
6707
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6708
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6709
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6710
'just inserted' FROM t0_template
 
6711
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6712
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6713
BEGIN
 
6714
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6715
f_charbig = 'updated by trigger'
 
6716
      WHERE f_int1 = - old.f_int1;
 
6717
END|
 
6718
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6719
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6720
        
 
6721
# check trigger-4 success:      1
 
6722
DROP TRIGGER trg_1;
 
6723
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6724
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6725
f_charbig = 'just inserted'
 
6726
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6727
DELETE FROM t0_aux
 
6728
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6729
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6730
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6731
'just inserted' FROM t0_template
 
6732
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6733
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6734
BEGIN
 
6735
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6736
f_charbig = 'updated by trigger'
 
6737
      WHERE f_int1 = new.f_int1;
 
6738
END|
 
6739
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6740
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6741
        
 
6742
# check trigger-5 success:      1
 
6743
DROP TRIGGER trg_1;
 
6744
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6745
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6746
f_charbig = 'just inserted'
 
6747
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6748
DELETE FROM t0_aux
 
6749
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6750
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6751
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6752
'just inserted' FROM t0_template
 
6753
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6754
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6755
BEGIN
 
6756
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6757
f_charbig = 'updated by trigger'
 
6758
      WHERE f_int1 = - old.f_int1;
 
6759
END|
 
6760
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6761
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6762
        
 
6763
# check trigger-6 success:      1
 
6764
DROP TRIGGER trg_1;
 
6765
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6766
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6767
f_charbig = 'just inserted'
 
6768
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6769
DELETE FROM t0_aux
 
6770
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6771
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6772
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6773
'just inserted' FROM t0_template
 
6774
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6775
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
6776
BEGIN
 
6777
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6778
f_charbig = 'updated by trigger'
 
6779
      WHERE f_int1 = - old.f_int1;
 
6780
END|
 
6781
DELETE FROM t0_aux
 
6782
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6783
        
 
6784
# check trigger-7 success:      1
 
6785
DROP TRIGGER trg_1;
 
6786
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6787
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6788
f_charbig = 'just inserted'
 
6789
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6790
DELETE FROM t0_aux
 
6791
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6792
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6793
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6794
'just inserted' FROM t0_template
 
6795
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6796
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
6797
BEGIN
 
6798
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6799
f_charbig = 'updated by trigger'
 
6800
      WHERE f_int1 = - old.f_int1;
 
6801
END|
 
6802
DELETE FROM t0_aux
 
6803
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6804
        
 
6805
# check trigger-8 success:      1
 
6806
DROP TRIGGER trg_1;
 
6807
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6808
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6809
f_charbig = 'just inserted'
 
6810
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6811
DELETE FROM t0_aux
 
6812
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6813
DELETE FROM t1
 
6814
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6815
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6816
BEGIN
 
6817
SET new.f_int1 = old.f_int1 + @max_row,
 
6818
new.f_int2 = old.f_int2 - @max_row,
 
6819
new.f_charbig = '####updated per update trigger####';
 
6820
END|
 
6821
UPDATE t1
 
6822
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6823
f_charbig = '####updated per update statement itself####';
 
6824
        
 
6825
# check trigger-9 success:      1
 
6826
DROP TRIGGER trg_2;
 
6827
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6828
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6829
f_charbig = CONCAT('===',f_char1,'===');
 
6830
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6831
BEGIN
 
6832
SET new.f_int1 = new.f_int1 + @max_row,
 
6833
new.f_int2 = new.f_int2 - @max_row,
 
6834
new.f_charbig = '####updated per update trigger####';
 
6835
END|
 
6836
UPDATE t1
 
6837
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6838
f_charbig = '####updated per update statement itself####';
 
6839
        
 
6840
# check trigger-10 success:     1
 
6841
DROP TRIGGER trg_2;
 
6842
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6843
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6844
f_charbig = CONCAT('===',f_char1,'===');
 
6845
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6846
BEGIN
 
6847
SET new.f_int1 = @my_max1 + @counter,
 
6848
new.f_int2 = @my_min2 - @counter,
 
6849
new.f_charbig = '####updated per insert trigger####';
 
6850
SET @counter = @counter + 1;
 
6851
END|
 
6852
SET @counter = 1;
 
6853
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6854
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6855
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6856
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6857
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6858
ORDER BY f_int1;
 
6859
DROP TRIGGER trg_3;
 
6860
        
 
6861
# check trigger-11 success:     1
 
6862
DELETE FROM t1
 
6863
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6864
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6865
AND f_charbig = '####updated per insert trigger####';
 
6866
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6867
BEGIN
 
6868
SET new.f_int1 = @my_max1 + @counter,
 
6869
new.f_int2 = @my_min2 - @counter,
 
6870
new.f_charbig = '####updated per insert trigger####';
 
6871
SET @counter = @counter + 1;
 
6872
END|
 
6873
SET @counter = 1;
 
6874
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6875
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
6876
SELECT CAST(f_int1 AS CHAR),
 
6877
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6878
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6879
ORDER BY f_int1;
 
6880
DROP TRIGGER trg_3;
 
6881
        
 
6882
# check trigger-12 success:     1
 
6883
DELETE FROM t1
 
6884
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6885
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6886
AND f_charbig = '####updated per insert trigger####';
 
6887
ANALYZE  TABLE t1;
 
6888
Table   Op      Msg_type        Msg_text
 
6889
test.t1 analyze status  OK
 
6890
CHECK    TABLE t1 EXTENDED;
 
6891
Table   Op      Msg_type        Msg_text
 
6892
test.t1 check   status  OK
 
6893
CHECKSUM TABLE t1 EXTENDED;
 
6894
Table   Checksum
 
6895
test.t1 <some_value>
 
6896
OPTIMIZE TABLE t1;
 
6897
Table   Op      Msg_type        Msg_text
 
6898
test.t1 optimize        status  OK
 
6899
# check layout success:    1
 
6900
REPAIR   TABLE t1 EXTENDED;
 
6901
Table   Op      Msg_type        Msg_text
 
6902
test.t1 repair  note    The storage engine for the table doesn't support repair
 
6903
# check layout success:    1
 
6904
TRUNCATE t1;
 
6905
        
 
6906
# check TRUNCATE success:       1
 
6907
# check layout success:    1
 
6908
# End usability test (inc/partition_check.inc)
 
6909
DROP TABLE t1;
 
6910
CREATE TABLE t1 (
 
6911
f_int1 INTEGER,
 
6912
f_int2 INTEGER,
 
6913
f_char1 CHAR(20),
 
6914
f_char2 CHAR(20),
 
6915
f_charbig VARCHAR(1000)
 
6916
 
 
6917
)
 
6918
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
6919
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
6920
(PARTITION part_1 VALUES IN (0),
 
6921
 PARTITION part_2 VALUES IN (1),
 
6922
 PARTITION part_3 VALUES IN (NULL));
 
6923
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6924
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6925
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
6926
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
 
6927
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6928
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6929
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6930
# Start usability test (inc/partition_check.inc)
 
6931
create_command
 
6932
SHOW CREATE TABLE t1;
 
6933
Table   Create Table
 
6934
t1      CREATE TABLE `t1` (
 
6935
  `f_int1` int(11) DEFAULT NULL,
 
6936
  `f_int2` int(11) DEFAULT NULL,
 
6937
  `f_char1` char(20) DEFAULT NULL,
 
6938
  `f_char2` char(20) DEFAULT NULL,
 
6939
  `f_charbig` varchar(1000) DEFAULT NULL
 
6940
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
 
6941
 
 
6942
# check prerequisites-1 success:    1
 
6943
# check COUNT(*) success:    1
 
6944
# check MIN/MAX(f_int1) success:    1
 
6945
# check MIN/MAX(f_int2) success:    1
 
6946
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6947
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6948
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6949
WHERE f_int1 IN (2,3);
 
6950
# check prerequisites-3 success:    1
 
6951
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6952
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
6953
# check read via f_int1 success: 1
 
6954
# check read via f_int2 success: 1
 
6955
        
 
6956
# check multiple-1 success:     1
 
6957
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6958
        
 
6959
# check multiple-2 success:     1
 
6960
INSERT INTO t1 SELECT * FROM t0_template
 
6961
WHERE MOD(f_int1,3) = 0;
 
6962
        
 
6963
# check multiple-3 success:     1
 
6964
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6965
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6966
AND @max_row_div2 + @max_row_div4;
 
6967
        
 
6968
# check multiple-4 success:     1
 
6969
DELETE FROM t1
 
6970
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6971
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6972
        
 
6973
# check multiple-5 success:     1
 
6974
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6975
INSERT INTO t1
 
6976
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6977
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6978
f_charbig = '#SINGLE#';
 
6979
        
 
6980
# check single-1 success:       1
 
6981
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6982
INSERT INTO t1
 
6983
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6984
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6985
f_charbig = '#SINGLE#';
 
6986
        
 
6987
# check single-2 success:       1
 
6988
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6989
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6990
UPDATE t1 SET f_int1 = @cur_value2
 
6991
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6992
        
 
6993
# check single-3 success:       1
 
6994
SET @cur_value1= -1;
 
6995
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6996
UPDATE t1 SET f_int1 = @cur_value1
 
6997
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6998
        
 
6999
# check single-4 success:       1
 
7000
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
7001
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
7002
        
 
7003
# check single-5 success:       1
 
7004
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
7005
        
 
7006
# check single-6 success:       1
 
7007
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
7008
        
 
7009
# check single-7 success:       1
 
7010
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
7011
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
7012
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
7013
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
7014
f_charbig = '#NULL#';
 
7015
INSERT INTO t1
 
7016
SET f_int1 = NULL , f_int2 = -@max_row,
 
7017
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
7018
f_charbig = '#NULL#';
 
7019
# check null success:    1
 
7020
        
 
7021
# check null-1 success:         1
 
7022
UPDATE t1 SET f_int1 = -@max_row
 
7023
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7024
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7025
        
 
7026
# check null-2 success:         1
 
7027
UPDATE t1 SET f_int1 = NULL
 
7028
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7029
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7030
        
 
7031
# check null-3 success:         1
 
7032
DELETE FROM t1
 
7033
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7034
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7035
        
 
7036
# check null-4 success:         1
 
7037
DELETE FROM t1
 
7038
WHERE f_int1 = 0 AND f_int2 = 0
 
7039
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
7040
AND f_charbig = '#NULL#';
 
7041
SET AUTOCOMMIT= 0;
 
7042
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7043
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7044
FROM t0_template source_tab
 
7045
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7046
        
 
7047
# check transactions-1 success:         1
 
7048
COMMIT WORK;
 
7049
        
 
7050
# check transactions-2 success:         1
 
7051
ROLLBACK WORK;
 
7052
        
 
7053
# check transactions-3 success:         1
 
7054
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7055
COMMIT WORK;
 
7056
ROLLBACK WORK;
 
7057
        
 
7058
# check transactions-4 success:         1
 
7059
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7060
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7061
FROM t0_template source_tab
 
7062
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7063
        
 
7064
# check transactions-5 success:         1
 
7065
ROLLBACK WORK;
 
7066
        
 
7067
# check transactions-6 success:         1
 
7068
# INFO: Storage engine used for t1 seems to be transactional.
 
7069
COMMIT;
 
7070
        
 
7071
# check transactions-7 success:         1
 
7072
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7073
COMMIT WORK;
 
7074
SET @@session.sql_mode = 'traditional';
 
7075
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7076
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7077
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7078
'', '', 'was inserted' FROM t0_template
 
7079
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7080
ERROR 22012: Division by 0
 
7081
COMMIT;
 
7082
        
 
7083
# check transactions-8 success:         1
 
7084
# INFO: Storage engine used for t1 seems to be able to revert
 
7085
#       changes made by the failing statement.
 
7086
SET @@session.sql_mode = '';
 
7087
SET AUTOCOMMIT= 1;
 
7088
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7089
COMMIT WORK;
 
7090
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7091
        
 
7092
# check special-1 success:      1
 
7093
UPDATE t1 SET f_charbig = '';
 
7094
        
 
7095
# check special-2 success:      1
 
7096
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7097
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7098
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7099
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7100
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7101
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7102
'just inserted' FROM t0_template
 
7103
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7104
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7105
BEGIN
 
7106
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7107
f_charbig = 'updated by trigger'
 
7108
      WHERE f_int1 = new.f_int1;
 
7109
END|
 
7110
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7111
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7112
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7113
        
 
7114
# check trigger-1 success:      1
 
7115
DROP TRIGGER trg_1;
 
7116
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7117
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7118
f_charbig = 'just inserted'
 
7119
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7120
DELETE FROM t0_aux
 
7121
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7122
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7123
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7124
'just inserted' FROM t0_template
 
7125
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7126
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7127
BEGIN
 
7128
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7129
f_charbig = 'updated by trigger'
 
7130
      WHERE f_int1 = new.f_int1;
 
7131
END|
 
7132
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7133
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7134
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7135
        
 
7136
# check trigger-2 success:      1
 
7137
DROP TRIGGER trg_1;
 
7138
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7139
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7140
f_charbig = 'just inserted'
 
7141
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7142
DELETE FROM t0_aux
 
7143
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7144
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7145
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7146
'just inserted' FROM t0_template
 
7147
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7148
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7149
BEGIN
 
7150
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7151
f_charbig = 'updated by trigger'
 
7152
      WHERE f_int1 = new.f_int1;
 
7153
END|
 
7154
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7155
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7156
        
 
7157
# check trigger-3 success:      1
 
7158
DROP TRIGGER trg_1;
 
7159
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7160
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7161
f_charbig = 'just inserted'
 
7162
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7163
DELETE FROM t0_aux
 
7164
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7165
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7166
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7167
'just inserted' FROM t0_template
 
7168
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7169
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7170
BEGIN
 
7171
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7172
f_charbig = 'updated by trigger'
 
7173
      WHERE f_int1 = - old.f_int1;
 
7174
END|
 
7175
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7176
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7177
        
 
7178
# check trigger-4 success:      1
 
7179
DROP TRIGGER trg_1;
 
7180
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7181
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7182
f_charbig = 'just inserted'
 
7183
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7184
DELETE FROM t0_aux
 
7185
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7186
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7187
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7188
'just inserted' FROM t0_template
 
7189
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7190
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7191
BEGIN
 
7192
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7193
f_charbig = 'updated by trigger'
 
7194
      WHERE f_int1 = new.f_int1;
 
7195
END|
 
7196
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7197
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7198
        
 
7199
# check trigger-5 success:      1
 
7200
DROP TRIGGER trg_1;
 
7201
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7202
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7203
f_charbig = 'just inserted'
 
7204
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7205
DELETE FROM t0_aux
 
7206
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7207
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7208
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7209
'just inserted' FROM t0_template
 
7210
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7211
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7212
BEGIN
 
7213
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7214
f_charbig = 'updated by trigger'
 
7215
      WHERE f_int1 = - old.f_int1;
 
7216
END|
 
7217
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7218
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7219
        
 
7220
# check trigger-6 success:      1
 
7221
DROP TRIGGER trg_1;
 
7222
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7223
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7224
f_charbig = 'just inserted'
 
7225
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7226
DELETE FROM t0_aux
 
7227
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7228
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7229
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7230
'just inserted' FROM t0_template
 
7231
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7232
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
7233
BEGIN
 
7234
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7235
f_charbig = 'updated by trigger'
 
7236
      WHERE f_int1 = - old.f_int1;
 
7237
END|
 
7238
DELETE FROM t0_aux
 
7239
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7240
        
 
7241
# check trigger-7 success:      1
 
7242
DROP TRIGGER trg_1;
 
7243
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7244
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7245
f_charbig = 'just inserted'
 
7246
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7247
DELETE FROM t0_aux
 
7248
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7249
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7250
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7251
'just inserted' FROM t0_template
 
7252
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7253
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
7254
BEGIN
 
7255
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7256
f_charbig = 'updated by trigger'
 
7257
      WHERE f_int1 = - old.f_int1;
 
7258
END|
 
7259
DELETE FROM t0_aux
 
7260
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7261
        
 
7262
# check trigger-8 success:      1
 
7263
DROP TRIGGER trg_1;
 
7264
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7265
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7266
f_charbig = 'just inserted'
 
7267
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7268
DELETE FROM t0_aux
 
7269
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7270
DELETE FROM t1
 
7271
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7272
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7273
BEGIN
 
7274
SET new.f_int1 = old.f_int1 + @max_row,
 
7275
new.f_int2 = old.f_int2 - @max_row,
 
7276
new.f_charbig = '####updated per update trigger####';
 
7277
END|
 
7278
UPDATE t1
 
7279
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7280
f_charbig = '####updated per update statement itself####';
 
7281
        
 
7282
# check trigger-9 success:      1
 
7283
DROP TRIGGER trg_2;
 
7284
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7285
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7286
f_charbig = CONCAT('===',f_char1,'===');
 
7287
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7288
BEGIN
 
7289
SET new.f_int1 = new.f_int1 + @max_row,
 
7290
new.f_int2 = new.f_int2 - @max_row,
 
7291
new.f_charbig = '####updated per update trigger####';
 
7292
END|
 
7293
UPDATE t1
 
7294
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7295
f_charbig = '####updated per update statement itself####';
 
7296
        
 
7297
# check trigger-10 success:     1
 
7298
DROP TRIGGER trg_2;
 
7299
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7300
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7301
f_charbig = CONCAT('===',f_char1,'===');
 
7302
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7303
BEGIN
 
7304
SET new.f_int1 = @my_max1 + @counter,
 
7305
new.f_int2 = @my_min2 - @counter,
 
7306
new.f_charbig = '####updated per insert trigger####';
 
7307
SET @counter = @counter + 1;
 
7308
END|
 
7309
SET @counter = 1;
 
7310
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7311
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7312
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7313
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7314
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7315
ORDER BY f_int1;
 
7316
DROP TRIGGER trg_3;
 
7317
        
 
7318
# check trigger-11 success:     1
 
7319
DELETE FROM t1
 
7320
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7321
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7322
AND f_charbig = '####updated per insert trigger####';
 
7323
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7324
BEGIN
 
7325
SET new.f_int1 = @my_max1 + @counter,
 
7326
new.f_int2 = @my_min2 - @counter,
 
7327
new.f_charbig = '####updated per insert trigger####';
 
7328
SET @counter = @counter + 1;
 
7329
END|
 
7330
SET @counter = 1;
 
7331
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7332
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
7333
SELECT CAST(f_int1 AS CHAR),
 
7334
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7335
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7336
ORDER BY f_int1;
 
7337
DROP TRIGGER trg_3;
 
7338
        
 
7339
# check trigger-12 success:     1
 
7340
DELETE FROM t1
 
7341
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7342
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7343
AND f_charbig = '####updated per insert trigger####';
 
7344
ANALYZE  TABLE t1;
 
7345
Table   Op      Msg_type        Msg_text
 
7346
test.t1 analyze status  OK
 
7347
CHECK    TABLE t1 EXTENDED;
 
7348
Table   Op      Msg_type        Msg_text
 
7349
test.t1 check   status  OK
 
7350
CHECKSUM TABLE t1 EXTENDED;
 
7351
Table   Checksum
 
7352
test.t1 <some_value>
 
7353
OPTIMIZE TABLE t1;
 
7354
Table   Op      Msg_type        Msg_text
 
7355
test.t1 optimize        status  OK
 
7356
# check layout success:    1
 
7357
REPAIR   TABLE t1 EXTENDED;
 
7358
Table   Op      Msg_type        Msg_text
 
7359
test.t1 repair  note    The storage engine for the table doesn't support repair
 
7360
# check layout success:    1
 
7361
TRUNCATE t1;
 
7362
        
 
7363
# check TRUNCATE success:       1
 
7364
# check layout success:    1
 
7365
# End usability test (inc/partition_check.inc)
 
7366
DROP TABLE t1;
 
7367
#  1.3 ALTER ... ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7368
DROP TABLE IF EXISTS t1;
 
7369
CREATE TABLE t1 (
 
7370
f_int1 INTEGER,
 
7371
f_int2 INTEGER,
 
7372
f_char1 CHAR(20),
 
7373
f_char2 CHAR(20),
 
7374
f_charbig VARCHAR(1000)
 
7375
 
 
7376
)
 
7377
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
7378
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7379
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7380
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7381
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7382
ERROR HY000: Error in list of partitions to ANALYZE
 
7383
DROP TABLE t1;
 
7384
CREATE TABLE t1 (
 
7385
f_int1 INTEGER,
 
7386
f_int2 INTEGER,
 
7387
f_char1 CHAR(20),
 
7388
f_char2 CHAR(20),
 
7389
f_charbig VARCHAR(1000)
 
7390
 
 
7391
)
 
7392
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
7393
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7394
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7395
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7396
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7397
ERROR HY000: Error in list of partitions to ANALYZE
 
7398
DROP TABLE t1;
 
7399
CREATE TABLE t1 (
 
7400
f_int1 INTEGER,
 
7401
f_int2 INTEGER,
 
7402
f_char1 CHAR(20),
 
7403
f_char2 CHAR(20),
 
7404
f_charbig VARCHAR(1000)
 
7405
 
 
7406
)
 
7407
PARTITION BY LIST(MOD(f_int1,4))
 
7408
(PARTITION part_3 VALUES IN (-3),
 
7409
PARTITION part_2 VALUES IN (-2),
 
7410
PARTITION part_1 VALUES IN (-1),
 
7411
PARTITION part_N VALUES IN (NULL),
 
7412
PARTITION part0 VALUES IN (0),
 
7413
PARTITION part1 VALUES IN (1),
 
7414
PARTITION part2 VALUES IN (2),
 
7415
PARTITION part3 VALUES IN (3));
 
7416
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7417
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7418
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7419
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7420
ERROR HY000: Error in list of partitions to ANALYZE
 
7421
DROP TABLE t1;
 
7422
CREATE TABLE t1 (
 
7423
f_int1 INTEGER,
 
7424
f_int2 INTEGER,
 
7425
f_char1 CHAR(20),
 
7426
f_char2 CHAR(20),
 
7427
f_charbig VARCHAR(1000)
 
7428
 
 
7429
)
 
7430
PARTITION BY RANGE(f_int1)
 
7431
(PARTITION parta VALUES LESS THAN (0),
 
7432
PARTITION part_1 VALUES LESS THAN (5),
 
7433
PARTITION part_2 VALUES LESS THAN (10),
 
7434
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
7435
PARTITION part_4 VALUES LESS THAN (20),
 
7436
PARTITION part_5 VALUES LESS THAN (2147483646));
 
7437
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7438
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7439
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7440
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7441
ERROR HY000: Error in list of partitions to ANALYZE
 
7442
DROP TABLE t1;
 
7443
CREATE TABLE t1 (
 
7444
f_int1 INTEGER,
 
7445
f_int2 INTEGER,
 
7446
f_char1 CHAR(20),
 
7447
f_char2 CHAR(20),
 
7448
f_charbig VARCHAR(1000)
 
7449
 
 
7450
)
 
7451
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
7452
(PARTITION part_1 VALUES LESS THAN (0),
 
7453
PARTITION part_2 VALUES LESS THAN (5),
 
7454
PARTITION part_3 VALUES LESS THAN (10),
 
7455
PARTITION part_4 VALUES LESS THAN (2147483646));
 
7456
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7457
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7458
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7459
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7460
ERROR HY000: Error in list of partitions to ANALYZE
 
7461
DROP TABLE t1;
 
7462
CREATE TABLE t1 (
 
7463
f_int1 INTEGER,
 
7464
f_int2 INTEGER,
 
7465
f_char1 CHAR(20),
 
7466
f_char2 CHAR(20),
 
7467
f_charbig VARCHAR(1000)
 
7468
 
 
7469
)
 
7470
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
7471
(PARTITION part_1 VALUES LESS THAN (0)
 
7472
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
7473
PARTITION part_2 VALUES LESS THAN (5)
 
7474
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
7475
PARTITION part_3 VALUES LESS THAN (10)
 
7476
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
7477
PARTITION part_4 VALUES LESS THAN (2147483646)
 
7478
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
7479
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7480
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7481
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7482
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7483
ERROR HY000: Error in list of partitions to ANALYZE
 
7484
DROP TABLE t1;
 
7485
CREATE TABLE t1 (
 
7486
f_int1 INTEGER,
 
7487
f_int2 INTEGER,
 
7488
f_char1 CHAR(20),
 
7489
f_char2 CHAR(20),
 
7490
f_charbig VARCHAR(1000)
 
7491
 
 
7492
)
 
7493
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
7494
(PARTITION part_1 VALUES IN (0)
 
7495
(SUBPARTITION sp11, SUBPARTITION sp12),
 
7496
PARTITION part_2 VALUES IN (1)
 
7497
(SUBPARTITION sp21, SUBPARTITION sp22),
 
7498
PARTITION part_3 VALUES IN (2)
 
7499
(SUBPARTITION sp31, SUBPARTITION sp32),
 
7500
PARTITION part_4 VALUES IN (NULL)
 
7501
(SUBPARTITION sp41, SUBPARTITION sp42));
 
7502
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7503
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7504
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7505
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7506
ERROR HY000: Error in list of partitions to ANALYZE
 
7507
DROP TABLE t1;
 
7508
CREATE TABLE t1 (
 
7509
f_int1 INTEGER,
 
7510
f_int2 INTEGER,
 
7511
f_char1 CHAR(20),
 
7512
f_char2 CHAR(20),
 
7513
f_charbig VARCHAR(1000)
 
7514
 
 
7515
)
 
7516
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
7517
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
7518
(PARTITION part_1 VALUES IN (0),
 
7519
 PARTITION part_2 VALUES IN (1),
 
7520
 PARTITION part_3 VALUES IN (NULL));
 
7521
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7522
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7523
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7524
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7525
ERROR HY000: Error in list of partitions to ANALYZE
 
7526
DROP TABLE t1;
 
7527
#  1.4 ALTER ... ANALYZE PARTITION part_1,part_1,part_1;
 
7528
DROP TABLE IF EXISTS t1;
 
7529
CREATE TABLE t1 (
 
7530
f_int1 INTEGER,
 
7531
f_int2 INTEGER,
 
7532
f_char1 CHAR(20),
 
7533
f_char2 CHAR(20),
 
7534
f_charbig VARCHAR(1000)
 
7535
 
 
7536
)
 
7537
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
7538
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7539
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7540
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7541
ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
 
7542
ERROR HY000: Error in list of partitions to ANALYZE
 
7543
DROP TABLE t1;
 
7544
CREATE TABLE t1 (
 
7545
f_int1 INTEGER,
 
7546
f_int2 INTEGER,
 
7547
f_char1 CHAR(20),
 
7548
f_char2 CHAR(20),
 
7549
f_charbig VARCHAR(1000)
 
7550
 
 
7551
)
 
7552
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
7553
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7554
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7555
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7556
ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
 
7557
ERROR HY000: Error in list of partitions to ANALYZE
 
7558
DROP TABLE t1;
 
7559
CREATE TABLE t1 (
 
7560
f_int1 INTEGER,
 
7561
f_int2 INTEGER,
 
7562
f_char1 CHAR(20),
 
7563
f_char2 CHAR(20),
 
7564
f_charbig VARCHAR(1000)
 
7565
 
 
7566
)
 
7567
PARTITION BY LIST(MOD(f_int1,4))
 
7568
(PARTITION part_3 VALUES IN (-3),
 
7569
PARTITION part_2 VALUES IN (-2),
 
7570
PARTITION part_1 VALUES IN (-1),
 
7571
PARTITION part_N VALUES IN (NULL),
 
7572
PARTITION part0 VALUES IN (0),
 
7573
PARTITION part1 VALUES IN (1),
 
7574
PARTITION part2 VALUES IN (2),
 
7575
PARTITION part3 VALUES IN (3));
 
7576
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7577
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7578
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7579
ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
 
7580
ERROR HY000: Error in list of partitions to ANALYZE
 
7581
DROP TABLE t1;
 
7582
CREATE TABLE t1 (
 
7583
f_int1 INTEGER,
 
7584
f_int2 INTEGER,
 
7585
f_char1 CHAR(20),
 
7586
f_char2 CHAR(20),
 
7587
f_charbig VARCHAR(1000)
 
7588
 
 
7589
)
 
7590
PARTITION BY RANGE(f_int1)
 
7591
(PARTITION parta VALUES LESS THAN (0),
 
7592
PARTITION part_1 VALUES LESS THAN (5),
 
7593
PARTITION part_2 VALUES LESS THAN (10),
 
7594
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
7595
PARTITION part_4 VALUES LESS THAN (20),
 
7596
PARTITION part_5 VALUES LESS THAN (2147483646));
 
7597
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7598
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7599
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7600
ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
 
7601
ERROR HY000: Error in list of partitions to ANALYZE
 
7602
DROP TABLE t1;
 
7603
CREATE TABLE t1 (
 
7604
f_int1 INTEGER,
 
7605
f_int2 INTEGER,
 
7606
f_char1 CHAR(20),
 
7607
f_char2 CHAR(20),
 
7608
f_charbig VARCHAR(1000)
 
7609
 
 
7610
)
 
7611
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
7612
(PARTITION part_1 VALUES LESS THAN (0),
 
7613
PARTITION part_2 VALUES LESS THAN (5),
 
7614
PARTITION part_3 VALUES LESS THAN (10),
 
7615
PARTITION part_4 VALUES LESS THAN (2147483646));
 
7616
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7617
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7618
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7619
ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
 
7620
ERROR HY000: Error in list of partitions to ANALYZE
 
7621
DROP TABLE t1;
 
7622
CREATE TABLE t1 (
 
7623
f_int1 INTEGER,
 
7624
f_int2 INTEGER,
 
7625
f_char1 CHAR(20),
 
7626
f_char2 CHAR(20),
 
7627
f_charbig VARCHAR(1000)
 
7628
 
 
7629
)
 
7630
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
7631
(PARTITION part_1 VALUES LESS THAN (0)
 
7632
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
7633
PARTITION part_2 VALUES LESS THAN (5)
 
7634
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
7635
PARTITION part_3 VALUES LESS THAN (10)
 
7636
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
7637
PARTITION part_4 VALUES LESS THAN (2147483646)
 
7638
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
7639
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7640
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7641
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7642
ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
 
7643
ERROR HY000: Error in list of partitions to ANALYZE
 
7644
DROP TABLE t1;
 
7645
CREATE TABLE t1 (
 
7646
f_int1 INTEGER,
 
7647
f_int2 INTEGER,
 
7648
f_char1 CHAR(20),
 
7649
f_char2 CHAR(20),
 
7650
f_charbig VARCHAR(1000)
 
7651
 
 
7652
)
 
7653
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
7654
(PARTITION part_1 VALUES IN (0)
 
7655
(SUBPARTITION sp11, SUBPARTITION sp12),
 
7656
PARTITION part_2 VALUES IN (1)
 
7657
(SUBPARTITION sp21, SUBPARTITION sp22),
 
7658
PARTITION part_3 VALUES IN (2)
 
7659
(SUBPARTITION sp31, SUBPARTITION sp32),
 
7660
PARTITION part_4 VALUES IN (NULL)
 
7661
(SUBPARTITION sp41, SUBPARTITION sp42));
 
7662
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7663
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7664
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7665
ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
 
7666
ERROR HY000: Error in list of partitions to ANALYZE
 
7667
DROP TABLE t1;
 
7668
CREATE TABLE t1 (
 
7669
f_int1 INTEGER,
 
7670
f_int2 INTEGER,
 
7671
f_char1 CHAR(20),
 
7672
f_char2 CHAR(20),
 
7673
f_charbig VARCHAR(1000)
 
7674
 
 
7675
)
 
7676
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
7677
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
7678
(PARTITION part_1 VALUES IN (0),
 
7679
 PARTITION part_2 VALUES IN (1),
 
7680
 PARTITION part_3 VALUES IN (NULL));
 
7681
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7682
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7683
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7684
ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
 
7685
ERROR HY000: Error in list of partitions to ANALYZE
 
7686
DROP TABLE t1;
 
7687
#------------------------------------------------------------------------
 
7688
#  2   ALTER ... CHECK PARTITION
 
7689
#------------------------------------------------------------------------
 
7690
#  2.1 ALTER ... CHECK PARTITION part_1;
 
7691
DROP TABLE IF EXISTS t1;
 
7692
CREATE TABLE t1 (
 
7693
f_int1 INTEGER,
 
7694
f_int2 INTEGER,
 
7695
f_char1 CHAR(20),
 
7696
f_char2 CHAR(20),
 
7697
f_charbig VARCHAR(1000)
 
7698
 
 
7699
)
 
7700
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
7701
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7702
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7703
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7704
ALTER TABLE t1 CHECK PARTITION part_1;
 
7705
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7706
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7707
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7708
# Start usability test (inc/partition_check.inc)
 
7709
create_command
 
7710
SHOW CREATE TABLE t1;
 
7711
Table   Create Table
 
7712
t1      CREATE TABLE `t1` (
 
7713
  `f_int1` int(11) DEFAULT NULL,
 
7714
  `f_int2` int(11) DEFAULT NULL,
 
7715
  `f_char1` char(20) DEFAULT NULL,
 
7716
  `f_char2` char(20) DEFAULT NULL,
 
7717
  `f_charbig` varchar(1000) DEFAULT NULL
 
7718
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
 
7719
 
 
7720
# check prerequisites-1 success:    1
 
7721
# check COUNT(*) success:    1
 
7722
# check MIN/MAX(f_int1) success:    1
 
7723
# check MIN/MAX(f_int2) success:    1
 
7724
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7725
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7726
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
7727
WHERE f_int1 IN (2,3);
 
7728
# check prerequisites-3 success:    1
 
7729
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7730
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
7731
# check read via f_int1 success: 1
 
7732
# check read via f_int2 success: 1
 
7733
        
 
7734
# check multiple-1 success:     1
 
7735
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
7736
        
 
7737
# check multiple-2 success:     1
 
7738
INSERT INTO t1 SELECT * FROM t0_template
 
7739
WHERE MOD(f_int1,3) = 0;
 
7740
        
 
7741
# check multiple-3 success:     1
 
7742
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
7743
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
7744
AND @max_row_div2 + @max_row_div4;
 
7745
        
 
7746
# check multiple-4 success:     1
 
7747
DELETE FROM t1
 
7748
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
7749
AND @max_row_div2 + @max_row_div4 + @max_row;
 
7750
        
 
7751
# check multiple-5 success:     1
 
7752
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
7753
INSERT INTO t1
 
7754
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7755
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7756
f_charbig = '#SINGLE#';
 
7757
        
 
7758
# check single-1 success:       1
 
7759
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
7760
INSERT INTO t1
 
7761
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7762
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7763
f_charbig = '#SINGLE#';
 
7764
        
 
7765
# check single-2 success:       1
 
7766
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
7767
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
7768
UPDATE t1 SET f_int1 = @cur_value2
 
7769
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
7770
        
 
7771
# check single-3 success:       1
 
7772
SET @cur_value1= -1;
 
7773
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
7774
UPDATE t1 SET f_int1 = @cur_value1
 
7775
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
7776
        
 
7777
# check single-4 success:       1
 
7778
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
7779
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
7780
        
 
7781
# check single-5 success:       1
 
7782
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
7783
        
 
7784
# check single-6 success:       1
 
7785
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
7786
        
 
7787
# check single-7 success:       1
 
7788
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
7789
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
7790
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
7791
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
7792
f_charbig = '#NULL#';
 
7793
INSERT INTO t1
 
7794
SET f_int1 = NULL , f_int2 = -@max_row,
 
7795
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
7796
f_charbig = '#NULL#';
 
7797
# check null success:    1
 
7798
        
 
7799
# check null-1 success:         1
 
7800
UPDATE t1 SET f_int1 = -@max_row
 
7801
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7802
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7803
        
 
7804
# check null-2 success:         1
 
7805
UPDATE t1 SET f_int1 = NULL
 
7806
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7807
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7808
        
 
7809
# check null-3 success:         1
 
7810
DELETE FROM t1
 
7811
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7812
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7813
        
 
7814
# check null-4 success:         1
 
7815
DELETE FROM t1
 
7816
WHERE f_int1 = 0 AND f_int2 = 0
 
7817
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
7818
AND f_charbig = '#NULL#';
 
7819
SET AUTOCOMMIT= 0;
 
7820
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7821
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7822
FROM t0_template source_tab
 
7823
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7824
        
 
7825
# check transactions-1 success:         1
 
7826
COMMIT WORK;
 
7827
        
 
7828
# check transactions-2 success:         1
 
7829
ROLLBACK WORK;
 
7830
        
 
7831
# check transactions-3 success:         1
 
7832
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7833
COMMIT WORK;
 
7834
ROLLBACK WORK;
 
7835
        
 
7836
# check transactions-4 success:         1
 
7837
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7838
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7839
FROM t0_template source_tab
 
7840
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7841
        
 
7842
# check transactions-5 success:         1
 
7843
ROLLBACK WORK;
 
7844
        
 
7845
# check transactions-6 success:         1
 
7846
# INFO: Storage engine used for t1 seems to be transactional.
 
7847
COMMIT;
 
7848
        
 
7849
# check transactions-7 success:         1
 
7850
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7851
COMMIT WORK;
 
7852
SET @@session.sql_mode = 'traditional';
 
7853
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7854
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7855
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7856
'', '', 'was inserted' FROM t0_template
 
7857
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7858
ERROR 22012: Division by 0
 
7859
COMMIT;
 
7860
        
 
7861
# check transactions-8 success:         1
 
7862
# INFO: Storage engine used for t1 seems to be able to revert
 
7863
#       changes made by the failing statement.
 
7864
SET @@session.sql_mode = '';
 
7865
SET AUTOCOMMIT= 1;
 
7866
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7867
COMMIT WORK;
 
7868
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7869
        
 
7870
# check special-1 success:      1
 
7871
UPDATE t1 SET f_charbig = '';
 
7872
        
 
7873
# check special-2 success:      1
 
7874
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7875
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7876
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7877
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7878
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7879
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7880
'just inserted' FROM t0_template
 
7881
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7882
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7883
BEGIN
 
7884
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7885
f_charbig = 'updated by trigger'
 
7886
      WHERE f_int1 = new.f_int1;
 
7887
END|
 
7888
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7889
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7890
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7891
        
 
7892
# check trigger-1 success:      1
 
7893
DROP TRIGGER trg_1;
 
7894
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7895
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7896
f_charbig = 'just inserted'
 
7897
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7898
DELETE FROM t0_aux
 
7899
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7900
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7901
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7902
'just inserted' FROM t0_template
 
7903
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7904
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7905
BEGIN
 
7906
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7907
f_charbig = 'updated by trigger'
 
7908
      WHERE f_int1 = new.f_int1;
 
7909
END|
 
7910
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7911
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7912
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7913
        
 
7914
# check trigger-2 success:      1
 
7915
DROP TRIGGER trg_1;
 
7916
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7917
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7918
f_charbig = 'just inserted'
 
7919
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7920
DELETE FROM t0_aux
 
7921
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7922
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7923
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7924
'just inserted' FROM t0_template
 
7925
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7926
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7927
BEGIN
 
7928
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7929
f_charbig = 'updated by trigger'
 
7930
      WHERE f_int1 = new.f_int1;
 
7931
END|
 
7932
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7933
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7934
        
 
7935
# check trigger-3 success:      1
 
7936
DROP TRIGGER trg_1;
 
7937
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7938
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7939
f_charbig = 'just inserted'
 
7940
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7941
DELETE FROM t0_aux
 
7942
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7943
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7944
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7945
'just inserted' FROM t0_template
 
7946
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7947
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7948
BEGIN
 
7949
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7950
f_charbig = 'updated by trigger'
 
7951
      WHERE f_int1 = - old.f_int1;
 
7952
END|
 
7953
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7954
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7955
        
 
7956
# check trigger-4 success:      1
 
7957
DROP TRIGGER trg_1;
 
7958
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7959
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7960
f_charbig = 'just inserted'
 
7961
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7962
DELETE FROM t0_aux
 
7963
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7964
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7965
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7966
'just inserted' FROM t0_template
 
7967
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7968
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7969
BEGIN
 
7970
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7971
f_charbig = 'updated by trigger'
 
7972
      WHERE f_int1 = new.f_int1;
 
7973
END|
 
7974
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7975
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7976
        
 
7977
# check trigger-5 success:      1
 
7978
DROP TRIGGER trg_1;
 
7979
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7980
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7981
f_charbig = 'just inserted'
 
7982
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7983
DELETE FROM t0_aux
 
7984
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7985
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7986
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7987
'just inserted' FROM t0_template
 
7988
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7989
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7990
BEGIN
 
7991
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7992
f_charbig = 'updated by trigger'
 
7993
      WHERE f_int1 = - old.f_int1;
 
7994
END|
 
7995
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7996
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7997
        
 
7998
# check trigger-6 success:      1
 
7999
DROP TRIGGER trg_1;
 
8000
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8001
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8002
f_charbig = 'just inserted'
 
8003
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8004
DELETE FROM t0_aux
 
8005
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8006
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8007
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8008
'just inserted' FROM t0_template
 
8009
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8010
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8011
BEGIN
 
8012
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8013
f_charbig = 'updated by trigger'
 
8014
      WHERE f_int1 = - old.f_int1;
 
8015
END|
 
8016
DELETE FROM t0_aux
 
8017
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8018
        
 
8019
# check trigger-7 success:      1
 
8020
DROP TRIGGER trg_1;
 
8021
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8022
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8023
f_charbig = 'just inserted'
 
8024
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8025
DELETE FROM t0_aux
 
8026
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8027
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8028
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8029
'just inserted' FROM t0_template
 
8030
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8031
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8032
BEGIN
 
8033
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8034
f_charbig = 'updated by trigger'
 
8035
      WHERE f_int1 = - old.f_int1;
 
8036
END|
 
8037
DELETE FROM t0_aux
 
8038
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8039
        
 
8040
# check trigger-8 success:      1
 
8041
DROP TRIGGER trg_1;
 
8042
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8043
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8044
f_charbig = 'just inserted'
 
8045
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8046
DELETE FROM t0_aux
 
8047
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8048
DELETE FROM t1
 
8049
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8050
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8051
BEGIN
 
8052
SET new.f_int1 = old.f_int1 + @max_row,
 
8053
new.f_int2 = old.f_int2 - @max_row,
 
8054
new.f_charbig = '####updated per update trigger####';
 
8055
END|
 
8056
UPDATE t1
 
8057
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8058
f_charbig = '####updated per update statement itself####';
 
8059
        
 
8060
# check trigger-9 success:      1
 
8061
DROP TRIGGER trg_2;
 
8062
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8063
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8064
f_charbig = CONCAT('===',f_char1,'===');
 
8065
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8066
BEGIN
 
8067
SET new.f_int1 = new.f_int1 + @max_row,
 
8068
new.f_int2 = new.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-10 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_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8081
BEGIN
 
8082
SET new.f_int1 = @my_max1 + @counter,
 
8083
new.f_int2 = @my_min2 - @counter,
 
8084
new.f_charbig = '####updated per insert trigger####';
 
8085
SET @counter = @counter + 1;
 
8086
END|
 
8087
SET @counter = 1;
 
8088
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8089
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8090
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8091
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8092
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8093
ORDER BY f_int1;
 
8094
DROP TRIGGER trg_3;
 
8095
        
 
8096
# check trigger-11 success:     1
 
8097
DELETE FROM t1
 
8098
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8099
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8100
AND f_charbig = '####updated per insert trigger####';
 
8101
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8102
BEGIN
 
8103
SET new.f_int1 = @my_max1 + @counter,
 
8104
new.f_int2 = @my_min2 - @counter,
 
8105
new.f_charbig = '####updated per insert trigger####';
 
8106
SET @counter = @counter + 1;
 
8107
END|
 
8108
SET @counter = 1;
 
8109
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8110
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8111
SELECT CAST(f_int1 AS CHAR),
 
8112
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8113
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8114
ORDER BY f_int1;
 
8115
DROP TRIGGER trg_3;
 
8116
        
 
8117
# check trigger-12 success:     1
 
8118
DELETE FROM t1
 
8119
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8120
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8121
AND f_charbig = '####updated per insert trigger####';
 
8122
ANALYZE  TABLE t1;
 
8123
Table   Op      Msg_type        Msg_text
 
8124
test.t1 analyze status  OK
 
8125
CHECK    TABLE t1 EXTENDED;
 
8126
Table   Op      Msg_type        Msg_text
 
8127
test.t1 check   status  OK
 
8128
CHECKSUM TABLE t1 EXTENDED;
 
8129
Table   Checksum
 
8130
test.t1 <some_value>
 
8131
OPTIMIZE TABLE t1;
 
8132
Table   Op      Msg_type        Msg_text
 
8133
test.t1 optimize        status  OK
 
8134
# check layout success:    1
 
8135
REPAIR   TABLE t1 EXTENDED;
 
8136
Table   Op      Msg_type        Msg_text
 
8137
test.t1 repair  note    The storage engine for the table doesn't support repair
 
8138
# check layout success:    1
 
8139
TRUNCATE t1;
 
8140
        
 
8141
# check TRUNCATE success:       1
 
8142
# check layout success:    1
 
8143
# End usability test (inc/partition_check.inc)
 
8144
DROP TABLE t1;
 
8145
CREATE TABLE t1 (
 
8146
f_int1 INTEGER,
 
8147
f_int2 INTEGER,
 
8148
f_char1 CHAR(20),
 
8149
f_char2 CHAR(20),
 
8150
f_charbig VARCHAR(1000)
 
8151
 
 
8152
)
 
8153
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
8154
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8155
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8156
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
8157
ALTER TABLE t1 CHECK PARTITION part_1;
 
8158
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8159
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8160
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8161
# Start usability test (inc/partition_check.inc)
 
8162
create_command
 
8163
SHOW CREATE TABLE t1;
 
8164
Table   Create Table
 
8165
t1      CREATE TABLE `t1` (
 
8166
  `f_int1` int(11) DEFAULT NULL,
 
8167
  `f_int2` int(11) DEFAULT NULL,
 
8168
  `f_char1` char(20) DEFAULT NULL,
 
8169
  `f_char2` char(20) DEFAULT NULL,
 
8170
  `f_charbig` varchar(1000) DEFAULT NULL
 
8171
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
 
8172
 
 
8173
# check prerequisites-1 success:    1
 
8174
# check COUNT(*) success:    1
 
8175
# check MIN/MAX(f_int1) success:    1
 
8176
# check MIN/MAX(f_int2) success:    1
 
8177
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8178
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8179
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8180
WHERE f_int1 IN (2,3);
 
8181
# check prerequisites-3 success:    1
 
8182
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8183
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
8184
# check read via f_int1 success: 1
 
8185
# check read via f_int2 success: 1
 
8186
        
 
8187
# check multiple-1 success:     1
 
8188
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8189
        
 
8190
# check multiple-2 success:     1
 
8191
INSERT INTO t1 SELECT * FROM t0_template
 
8192
WHERE MOD(f_int1,3) = 0;
 
8193
        
 
8194
# check multiple-3 success:     1
 
8195
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8196
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8197
AND @max_row_div2 + @max_row_div4;
 
8198
        
 
8199
# check multiple-4 success:     1
 
8200
DELETE FROM t1
 
8201
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8202
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8203
        
 
8204
# check multiple-5 success:     1
 
8205
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8206
INSERT INTO t1
 
8207
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8208
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8209
f_charbig = '#SINGLE#';
 
8210
        
 
8211
# check single-1 success:       1
 
8212
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8213
INSERT INTO t1
 
8214
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8215
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8216
f_charbig = '#SINGLE#';
 
8217
        
 
8218
# check single-2 success:       1
 
8219
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8220
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8221
UPDATE t1 SET f_int1 = @cur_value2
 
8222
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8223
        
 
8224
# check single-3 success:       1
 
8225
SET @cur_value1= -1;
 
8226
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8227
UPDATE t1 SET f_int1 = @cur_value1
 
8228
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8229
        
 
8230
# check single-4 success:       1
 
8231
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8232
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8233
        
 
8234
# check single-5 success:       1
 
8235
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8236
        
 
8237
# check single-6 success:       1
 
8238
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8239
        
 
8240
# check single-7 success:       1
 
8241
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
8242
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8243
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8244
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8245
f_charbig = '#NULL#';
 
8246
INSERT INTO t1
 
8247
SET f_int1 = NULL , f_int2 = -@max_row,
 
8248
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8249
f_charbig = '#NULL#';
 
8250
# check null success:    1
 
8251
        
 
8252
# check null-1 success:         1
 
8253
UPDATE t1 SET f_int1 = -@max_row
 
8254
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8255
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8256
        
 
8257
# check null-2 success:         1
 
8258
UPDATE t1 SET f_int1 = NULL
 
8259
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8260
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8261
        
 
8262
# check null-3 success:         1
 
8263
DELETE FROM t1
 
8264
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8265
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8266
        
 
8267
# check null-4 success:         1
 
8268
DELETE FROM t1
 
8269
WHERE f_int1 = 0 AND f_int2 = 0
 
8270
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8271
AND f_charbig = '#NULL#';
 
8272
SET AUTOCOMMIT= 0;
 
8273
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8274
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8275
FROM t0_template source_tab
 
8276
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8277
        
 
8278
# check transactions-1 success:         1
 
8279
COMMIT WORK;
 
8280
        
 
8281
# check transactions-2 success:         1
 
8282
ROLLBACK WORK;
 
8283
        
 
8284
# check transactions-3 success:         1
 
8285
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8286
COMMIT WORK;
 
8287
ROLLBACK WORK;
 
8288
        
 
8289
# check transactions-4 success:         1
 
8290
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8291
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8292
FROM t0_template source_tab
 
8293
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8294
        
 
8295
# check transactions-5 success:         1
 
8296
ROLLBACK WORK;
 
8297
        
 
8298
# check transactions-6 success:         1
 
8299
# INFO: Storage engine used for t1 seems to be transactional.
 
8300
COMMIT;
 
8301
        
 
8302
# check transactions-7 success:         1
 
8303
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8304
COMMIT WORK;
 
8305
SET @@session.sql_mode = 'traditional';
 
8306
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
8307
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8308
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
8309
'', '', 'was inserted' FROM t0_template
 
8310
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8311
ERROR 22012: Division by 0
 
8312
COMMIT;
 
8313
        
 
8314
# check transactions-8 success:         1
 
8315
# INFO: Storage engine used for t1 seems to be able to revert
 
8316
#       changes made by the failing statement.
 
8317
SET @@session.sql_mode = '';
 
8318
SET AUTOCOMMIT= 1;
 
8319
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8320
COMMIT WORK;
 
8321
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
8322
        
 
8323
# check special-1 success:      1
 
8324
UPDATE t1 SET f_charbig = '';
 
8325
        
 
8326
# check special-2 success:      1
 
8327
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
8328
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8329
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
8330
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8331
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8332
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8333
'just inserted' FROM t0_template
 
8334
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8335
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
8336
BEGIN
 
8337
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8338
f_charbig = 'updated by trigger'
 
8339
      WHERE f_int1 = new.f_int1;
 
8340
END|
 
8341
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8342
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8343
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8344
        
 
8345
# check trigger-1 success:      1
 
8346
DROP TRIGGER trg_1;
 
8347
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8348
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8349
f_charbig = 'just inserted'
 
8350
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8351
DELETE FROM t0_aux
 
8352
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8353
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8354
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8355
'just inserted' FROM t0_template
 
8356
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8357
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8358
BEGIN
 
8359
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8360
f_charbig = 'updated by trigger'
 
8361
      WHERE f_int1 = new.f_int1;
 
8362
END|
 
8363
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8364
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8365
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8366
        
 
8367
# check trigger-2 success:      1
 
8368
DROP TRIGGER trg_1;
 
8369
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8370
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8371
f_charbig = 'just inserted'
 
8372
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8373
DELETE FROM t0_aux
 
8374
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8375
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8376
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8377
'just inserted' FROM t0_template
 
8378
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8379
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8380
BEGIN
 
8381
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8382
f_charbig = 'updated by trigger'
 
8383
      WHERE f_int1 = new.f_int1;
 
8384
END|
 
8385
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8386
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8387
        
 
8388
# check trigger-3 success:      1
 
8389
DROP TRIGGER trg_1;
 
8390
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8391
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8392
f_charbig = 'just inserted'
 
8393
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8394
DELETE FROM t0_aux
 
8395
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8396
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8397
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8398
'just inserted' FROM t0_template
 
8399
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8400
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8401
BEGIN
 
8402
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8403
f_charbig = 'updated by trigger'
 
8404
      WHERE f_int1 = - old.f_int1;
 
8405
END|
 
8406
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8407
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8408
        
 
8409
# check trigger-4 success:      1
 
8410
DROP TRIGGER trg_1;
 
8411
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8412
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8413
f_charbig = 'just inserted'
 
8414
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8415
DELETE FROM t0_aux
 
8416
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8417
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8418
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8419
'just inserted' FROM t0_template
 
8420
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8421
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8422
BEGIN
 
8423
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8424
f_charbig = 'updated by trigger'
 
8425
      WHERE f_int1 = new.f_int1;
 
8426
END|
 
8427
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8428
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8429
        
 
8430
# check trigger-5 success:      1
 
8431
DROP TRIGGER trg_1;
 
8432
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8433
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8434
f_charbig = 'just inserted'
 
8435
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8436
DELETE FROM t0_aux
 
8437
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8438
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8439
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8440
'just inserted' FROM t0_template
 
8441
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8442
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8443
BEGIN
 
8444
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8445
f_charbig = 'updated by trigger'
 
8446
      WHERE f_int1 = - old.f_int1;
 
8447
END|
 
8448
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8449
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8450
        
 
8451
# check trigger-6 success:      1
 
8452
DROP TRIGGER trg_1;
 
8453
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8454
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8455
f_charbig = 'just inserted'
 
8456
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8457
DELETE FROM t0_aux
 
8458
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8459
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8460
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8461
'just inserted' FROM t0_template
 
8462
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8463
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8464
BEGIN
 
8465
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8466
f_charbig = 'updated by trigger'
 
8467
      WHERE f_int1 = - old.f_int1;
 
8468
END|
 
8469
DELETE FROM t0_aux
 
8470
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8471
        
 
8472
# check trigger-7 success:      1
 
8473
DROP TRIGGER trg_1;
 
8474
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8475
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8476
f_charbig = 'just inserted'
 
8477
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8478
DELETE FROM t0_aux
 
8479
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8480
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8481
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8482
'just inserted' FROM t0_template
 
8483
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8484
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8485
BEGIN
 
8486
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8487
f_charbig = 'updated by trigger'
 
8488
      WHERE f_int1 = - old.f_int1;
 
8489
END|
 
8490
DELETE FROM t0_aux
 
8491
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8492
        
 
8493
# check trigger-8 success:      1
 
8494
DROP TRIGGER trg_1;
 
8495
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8496
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8497
f_charbig = 'just inserted'
 
8498
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8499
DELETE FROM t0_aux
 
8500
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8501
DELETE FROM t1
 
8502
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8503
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8504
BEGIN
 
8505
SET new.f_int1 = old.f_int1 + @max_row,
 
8506
new.f_int2 = old.f_int2 - @max_row,
 
8507
new.f_charbig = '####updated per update trigger####';
 
8508
END|
 
8509
UPDATE t1
 
8510
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8511
f_charbig = '####updated per update statement itself####';
 
8512
        
 
8513
# check trigger-9 success:      1
 
8514
DROP TRIGGER trg_2;
 
8515
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8516
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8517
f_charbig = CONCAT('===',f_char1,'===');
 
8518
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8519
BEGIN
 
8520
SET new.f_int1 = new.f_int1 + @max_row,
 
8521
new.f_int2 = new.f_int2 - @max_row,
 
8522
new.f_charbig = '####updated per update trigger####';
 
8523
END|
 
8524
UPDATE t1
 
8525
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8526
f_charbig = '####updated per update statement itself####';
 
8527
        
 
8528
# check trigger-10 success:     1
 
8529
DROP TRIGGER trg_2;
 
8530
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8531
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8532
f_charbig = CONCAT('===',f_char1,'===');
 
8533
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8534
BEGIN
 
8535
SET new.f_int1 = @my_max1 + @counter,
 
8536
new.f_int2 = @my_min2 - @counter,
 
8537
new.f_charbig = '####updated per insert trigger####';
 
8538
SET @counter = @counter + 1;
 
8539
END|
 
8540
SET @counter = 1;
 
8541
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8542
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8543
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8544
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8545
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8546
ORDER BY f_int1;
 
8547
DROP TRIGGER trg_3;
 
8548
        
 
8549
# check trigger-11 success:     1
 
8550
DELETE FROM t1
 
8551
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8552
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8553
AND f_charbig = '####updated per insert trigger####';
 
8554
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8555
BEGIN
 
8556
SET new.f_int1 = @my_max1 + @counter,
 
8557
new.f_int2 = @my_min2 - @counter,
 
8558
new.f_charbig = '####updated per insert trigger####';
 
8559
SET @counter = @counter + 1;
 
8560
END|
 
8561
SET @counter = 1;
 
8562
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8563
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8564
SELECT CAST(f_int1 AS CHAR),
 
8565
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8566
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8567
ORDER BY f_int1;
 
8568
DROP TRIGGER trg_3;
 
8569
        
 
8570
# check trigger-12 success:     1
 
8571
DELETE FROM t1
 
8572
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8573
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8574
AND f_charbig = '####updated per insert trigger####';
 
8575
ANALYZE  TABLE t1;
 
8576
Table   Op      Msg_type        Msg_text
 
8577
test.t1 analyze status  OK
 
8578
CHECK    TABLE t1 EXTENDED;
 
8579
Table   Op      Msg_type        Msg_text
 
8580
test.t1 check   status  OK
 
8581
CHECKSUM TABLE t1 EXTENDED;
 
8582
Table   Checksum
 
8583
test.t1 <some_value>
 
8584
OPTIMIZE TABLE t1;
 
8585
Table   Op      Msg_type        Msg_text
 
8586
test.t1 optimize        status  OK
 
8587
# check layout success:    1
 
8588
REPAIR   TABLE t1 EXTENDED;
 
8589
Table   Op      Msg_type        Msg_text
 
8590
test.t1 repair  note    The storage engine for the table doesn't support repair
 
8591
# check layout success:    1
 
8592
TRUNCATE t1;
 
8593
        
 
8594
# check TRUNCATE success:       1
 
8595
# check layout success:    1
 
8596
# End usability test (inc/partition_check.inc)
 
8597
DROP TABLE t1;
 
8598
CREATE TABLE t1 (
 
8599
f_int1 INTEGER,
 
8600
f_int2 INTEGER,
 
8601
f_char1 CHAR(20),
 
8602
f_char2 CHAR(20),
 
8603
f_charbig VARCHAR(1000)
 
8604
 
 
8605
)
 
8606
PARTITION BY LIST(MOD(f_int1,4))
 
8607
(PARTITION part_3 VALUES IN (-3),
 
8608
PARTITION part_2 VALUES IN (-2),
 
8609
PARTITION part_1 VALUES IN (-1),
 
8610
PARTITION part_N VALUES IN (NULL),
 
8611
PARTITION part0 VALUES IN (0),
 
8612
PARTITION part1 VALUES IN (1),
 
8613
PARTITION part2 VALUES IN (2),
 
8614
PARTITION part3 VALUES IN (3));
 
8615
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8616
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8617
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
8618
ALTER TABLE t1 CHECK PARTITION part_1;
 
8619
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8620
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8621
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8622
# Start usability test (inc/partition_check.inc)
 
8623
create_command
 
8624
SHOW CREATE TABLE t1;
 
8625
Table   Create Table
 
8626
t1      CREATE TABLE `t1` (
 
8627
  `f_int1` int(11) DEFAULT NULL,
 
8628
  `f_int2` int(11) DEFAULT NULL,
 
8629
  `f_char1` char(20) DEFAULT NULL,
 
8630
  `f_char2` char(20) DEFAULT NULL,
 
8631
  `f_charbig` varchar(1000) DEFAULT NULL
 
8632
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
8633
 
 
8634
# check prerequisites-1 success:    1
 
8635
# check COUNT(*) success:    1
 
8636
# check MIN/MAX(f_int1) success:    1
 
8637
# check MIN/MAX(f_int2) success:    1
 
8638
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8639
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8640
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8641
WHERE f_int1 IN (2,3);
 
8642
# check prerequisites-3 success:    1
 
8643
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8644
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
8645
# check read via f_int1 success: 1
 
8646
# check read via f_int2 success: 1
 
8647
        
 
8648
# check multiple-1 success:     1
 
8649
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8650
        
 
8651
# check multiple-2 success:     1
 
8652
INSERT INTO t1 SELECT * FROM t0_template
 
8653
WHERE MOD(f_int1,3) = 0;
 
8654
        
 
8655
# check multiple-3 success:     1
 
8656
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8657
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8658
AND @max_row_div2 + @max_row_div4;
 
8659
        
 
8660
# check multiple-4 success:     1
 
8661
DELETE FROM t1
 
8662
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8663
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8664
        
 
8665
# check multiple-5 success:     1
 
8666
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8667
INSERT INTO t1
 
8668
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8669
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8670
f_charbig = '#SINGLE#';
 
8671
        
 
8672
# check single-1 success:       1
 
8673
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8674
INSERT INTO t1
 
8675
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8676
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8677
f_charbig = '#SINGLE#';
 
8678
        
 
8679
# check single-2 success:       1
 
8680
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8681
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8682
UPDATE t1 SET f_int1 = @cur_value2
 
8683
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8684
        
 
8685
# check single-3 success:       1
 
8686
SET @cur_value1= -1;
 
8687
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8688
UPDATE t1 SET f_int1 = @cur_value1
 
8689
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8690
        
 
8691
# check single-4 success:       1
 
8692
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8693
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8694
        
 
8695
# check single-5 success:       1
 
8696
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8697
        
 
8698
# check single-6 success:       1
 
8699
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8700
        
 
8701
# check single-7 success:       1
 
8702
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
8703
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8704
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8705
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8706
f_charbig = '#NULL#';
 
8707
INSERT INTO t1
 
8708
SET f_int1 = NULL , f_int2 = -@max_row,
 
8709
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8710
f_charbig = '#NULL#';
 
8711
# check null success:    1
 
8712
        
 
8713
# check null-1 success:         1
 
8714
UPDATE t1 SET f_int1 = -@max_row
 
8715
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8716
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8717
        
 
8718
# check null-2 success:         1
 
8719
UPDATE t1 SET f_int1 = NULL
 
8720
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8721
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8722
        
 
8723
# check null-3 success:         1
 
8724
DELETE FROM t1
 
8725
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8726
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8727
        
 
8728
# check null-4 success:         1
 
8729
DELETE FROM t1
 
8730
WHERE f_int1 = 0 AND f_int2 = 0
 
8731
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8732
AND f_charbig = '#NULL#';
 
8733
SET AUTOCOMMIT= 0;
 
8734
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8735
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8736
FROM t0_template source_tab
 
8737
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8738
        
 
8739
# check transactions-1 success:         1
 
8740
COMMIT WORK;
 
8741
        
 
8742
# check transactions-2 success:         1
 
8743
ROLLBACK WORK;
 
8744
        
 
8745
# check transactions-3 success:         1
 
8746
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8747
COMMIT WORK;
 
8748
ROLLBACK WORK;
 
8749
        
 
8750
# check transactions-4 success:         1
 
8751
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8752
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8753
FROM t0_template source_tab
 
8754
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8755
        
 
8756
# check transactions-5 success:         1
 
8757
ROLLBACK WORK;
 
8758
        
 
8759
# check transactions-6 success:         1
 
8760
# INFO: Storage engine used for t1 seems to be transactional.
 
8761
COMMIT;
 
8762
        
 
8763
# check transactions-7 success:         1
 
8764
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8765
COMMIT WORK;
 
8766
SET @@session.sql_mode = 'traditional';
 
8767
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
8768
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8769
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
8770
'', '', 'was inserted' FROM t0_template
 
8771
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8772
ERROR 22012: Division by 0
 
8773
COMMIT;
 
8774
        
 
8775
# check transactions-8 success:         1
 
8776
# INFO: Storage engine used for t1 seems to be able to revert
 
8777
#       changes made by the failing statement.
 
8778
SET @@session.sql_mode = '';
 
8779
SET AUTOCOMMIT= 1;
 
8780
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8781
COMMIT WORK;
 
8782
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
8783
        
 
8784
# check special-1 success:      1
 
8785
UPDATE t1 SET f_charbig = '';
 
8786
        
 
8787
# check special-2 success:      1
 
8788
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
8789
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8790
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
8791
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8792
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8793
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8794
'just inserted' FROM t0_template
 
8795
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8796
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
8797
BEGIN
 
8798
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8799
f_charbig = 'updated by trigger'
 
8800
      WHERE f_int1 = new.f_int1;
 
8801
END|
 
8802
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8803
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8804
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8805
        
 
8806
# check trigger-1 success:      1
 
8807
DROP TRIGGER trg_1;
 
8808
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8809
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8810
f_charbig = 'just inserted'
 
8811
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8812
DELETE FROM t0_aux
 
8813
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8814
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8815
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8816
'just inserted' FROM t0_template
 
8817
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8818
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8819
BEGIN
 
8820
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8821
f_charbig = 'updated by trigger'
 
8822
      WHERE f_int1 = new.f_int1;
 
8823
END|
 
8824
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8825
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8826
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8827
        
 
8828
# check trigger-2 success:      1
 
8829
DROP TRIGGER trg_1;
 
8830
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8831
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8832
f_charbig = 'just inserted'
 
8833
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8834
DELETE FROM t0_aux
 
8835
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8836
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8837
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8838
'just inserted' FROM t0_template
 
8839
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8840
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8841
BEGIN
 
8842
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8843
f_charbig = 'updated by trigger'
 
8844
      WHERE f_int1 = new.f_int1;
 
8845
END|
 
8846
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8847
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8848
        
 
8849
# check trigger-3 success:      1
 
8850
DROP TRIGGER trg_1;
 
8851
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8852
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8853
f_charbig = 'just inserted'
 
8854
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8855
DELETE FROM t0_aux
 
8856
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8857
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8858
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8859
'just inserted' FROM t0_template
 
8860
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8861
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8862
BEGIN
 
8863
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8864
f_charbig = 'updated by trigger'
 
8865
      WHERE f_int1 = - old.f_int1;
 
8866
END|
 
8867
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8868
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8869
        
 
8870
# check trigger-4 success:      1
 
8871
DROP TRIGGER trg_1;
 
8872
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8873
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8874
f_charbig = 'just inserted'
 
8875
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8876
DELETE FROM t0_aux
 
8877
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8878
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8879
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8880
'just inserted' FROM t0_template
 
8881
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8882
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8883
BEGIN
 
8884
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8885
f_charbig = 'updated by trigger'
 
8886
      WHERE f_int1 = new.f_int1;
 
8887
END|
 
8888
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8889
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8890
        
 
8891
# check trigger-5 success:      1
 
8892
DROP TRIGGER trg_1;
 
8893
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8894
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8895
f_charbig = 'just inserted'
 
8896
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8897
DELETE FROM t0_aux
 
8898
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8899
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8900
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8901
'just inserted' FROM t0_template
 
8902
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8903
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8904
BEGIN
 
8905
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8906
f_charbig = 'updated by trigger'
 
8907
      WHERE f_int1 = - old.f_int1;
 
8908
END|
 
8909
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8910
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8911
        
 
8912
# check trigger-6 success:      1
 
8913
DROP TRIGGER trg_1;
 
8914
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8915
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8916
f_charbig = 'just inserted'
 
8917
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8918
DELETE FROM t0_aux
 
8919
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8920
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8921
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8922
'just inserted' FROM t0_template
 
8923
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8924
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8925
BEGIN
 
8926
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8927
f_charbig = 'updated by trigger'
 
8928
      WHERE f_int1 = - old.f_int1;
 
8929
END|
 
8930
DELETE FROM t0_aux
 
8931
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8932
        
 
8933
# check trigger-7 success:      1
 
8934
DROP TRIGGER trg_1;
 
8935
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8936
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8937
f_charbig = 'just inserted'
 
8938
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8939
DELETE FROM t0_aux
 
8940
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8941
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8942
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8943
'just inserted' FROM t0_template
 
8944
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8945
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8946
BEGIN
 
8947
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8948
f_charbig = 'updated by trigger'
 
8949
      WHERE f_int1 = - old.f_int1;
 
8950
END|
 
8951
DELETE FROM t0_aux
 
8952
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8953
        
 
8954
# check trigger-8 success:      1
 
8955
DROP TRIGGER trg_1;
 
8956
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8957
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8958
f_charbig = 'just inserted'
 
8959
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8960
DELETE FROM t0_aux
 
8961
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8962
DELETE FROM t1
 
8963
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8964
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8965
BEGIN
 
8966
SET new.f_int1 = old.f_int1 + @max_row,
 
8967
new.f_int2 = old.f_int2 - @max_row,
 
8968
new.f_charbig = '####updated per update trigger####';
 
8969
END|
 
8970
UPDATE t1
 
8971
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8972
f_charbig = '####updated per update statement itself####';
 
8973
        
 
8974
# check trigger-9 success:      1
 
8975
DROP TRIGGER trg_2;
 
8976
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8977
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8978
f_charbig = CONCAT('===',f_char1,'===');
 
8979
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8980
BEGIN
 
8981
SET new.f_int1 = new.f_int1 + @max_row,
 
8982
new.f_int2 = new.f_int2 - @max_row,
 
8983
new.f_charbig = '####updated per update trigger####';
 
8984
END|
 
8985
UPDATE t1
 
8986
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8987
f_charbig = '####updated per update statement itself####';
 
8988
        
 
8989
# check trigger-10 success:     1
 
8990
DROP TRIGGER trg_2;
 
8991
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8992
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8993
f_charbig = CONCAT('===',f_char1,'===');
 
8994
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8995
BEGIN
 
8996
SET new.f_int1 = @my_max1 + @counter,
 
8997
new.f_int2 = @my_min2 - @counter,
 
8998
new.f_charbig = '####updated per insert trigger####';
 
8999
SET @counter = @counter + 1;
 
9000
END|
 
9001
SET @counter = 1;
 
9002
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9003
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9004
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9005
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9006
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9007
ORDER BY f_int1;
 
9008
DROP TRIGGER trg_3;
 
9009
        
 
9010
# check trigger-11 success:     1
 
9011
DELETE FROM t1
 
9012
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9013
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9014
AND f_charbig = '####updated per insert trigger####';
 
9015
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9016
BEGIN
 
9017
SET new.f_int1 = @my_max1 + @counter,
 
9018
new.f_int2 = @my_min2 - @counter,
 
9019
new.f_charbig = '####updated per insert trigger####';
 
9020
SET @counter = @counter + 1;
 
9021
END|
 
9022
SET @counter = 1;
 
9023
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9024
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
9025
SELECT CAST(f_int1 AS CHAR),
 
9026
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9027
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9028
ORDER BY f_int1;
 
9029
DROP TRIGGER trg_3;
 
9030
        
 
9031
# check trigger-12 success:     1
 
9032
DELETE FROM t1
 
9033
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9034
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9035
AND f_charbig = '####updated per insert trigger####';
 
9036
ANALYZE  TABLE t1;
 
9037
Table   Op      Msg_type        Msg_text
 
9038
test.t1 analyze status  OK
 
9039
CHECK    TABLE t1 EXTENDED;
 
9040
Table   Op      Msg_type        Msg_text
 
9041
test.t1 check   status  OK
 
9042
CHECKSUM TABLE t1 EXTENDED;
 
9043
Table   Checksum
 
9044
test.t1 <some_value>
 
9045
OPTIMIZE TABLE t1;
 
9046
Table   Op      Msg_type        Msg_text
 
9047
test.t1 optimize        status  OK
 
9048
# check layout success:    1
 
9049
REPAIR   TABLE t1 EXTENDED;
 
9050
Table   Op      Msg_type        Msg_text
 
9051
test.t1 repair  note    The storage engine for the table doesn't support repair
 
9052
# check layout success:    1
 
9053
TRUNCATE t1;
 
9054
        
 
9055
# check TRUNCATE success:       1
 
9056
# check layout success:    1
 
9057
# End usability test (inc/partition_check.inc)
 
9058
DROP TABLE t1;
 
9059
CREATE TABLE t1 (
 
9060
f_int1 INTEGER,
 
9061
f_int2 INTEGER,
 
9062
f_char1 CHAR(20),
 
9063
f_char2 CHAR(20),
 
9064
f_charbig VARCHAR(1000)
 
9065
 
 
9066
)
 
9067
PARTITION BY RANGE(f_int1)
 
9068
(PARTITION parta VALUES LESS THAN (0),
 
9069
PARTITION part_1 VALUES LESS THAN (5),
 
9070
PARTITION part_2 VALUES LESS THAN (10),
 
9071
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
9072
PARTITION part_4 VALUES LESS THAN (20),
 
9073
PARTITION part_5 VALUES LESS THAN (2147483646));
 
9074
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9075
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9076
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
9077
ALTER TABLE t1 CHECK PARTITION part_1;
 
9078
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9079
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9080
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9081
# Start usability test (inc/partition_check.inc)
 
9082
create_command
 
9083
SHOW CREATE TABLE t1;
 
9084
Table   Create Table
 
9085
t1      CREATE TABLE `t1` (
 
9086
  `f_int1` int(11) DEFAULT NULL,
 
9087
  `f_int2` int(11) DEFAULT NULL,
 
9088
  `f_char1` char(20) DEFAULT NULL,
 
9089
  `f_char2` char(20) DEFAULT NULL,
 
9090
  `f_charbig` varchar(1000) DEFAULT NULL
 
9091
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
9092
 
 
9093
# check prerequisites-1 success:    1
 
9094
# check COUNT(*) success:    1
 
9095
# check MIN/MAX(f_int1) success:    1
 
9096
# check MIN/MAX(f_int2) success:    1
 
9097
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9098
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9099
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
9100
WHERE f_int1 IN (2,3);
 
9101
# check prerequisites-3 success:    1
 
9102
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9103
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
9104
# check read via f_int1 success: 1
 
9105
# check read via f_int2 success: 1
 
9106
        
 
9107
# check multiple-1 success:     1
 
9108
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9109
        
 
9110
# check multiple-2 success:     1
 
9111
INSERT INTO t1 SELECT * FROM t0_template
 
9112
WHERE MOD(f_int1,3) = 0;
 
9113
        
 
9114
# check multiple-3 success:     1
 
9115
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9116
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9117
AND @max_row_div2 + @max_row_div4;
 
9118
        
 
9119
# check multiple-4 success:     1
 
9120
DELETE FROM t1
 
9121
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9122
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9123
        
 
9124
# check multiple-5 success:     1
 
9125
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9126
INSERT INTO t1
 
9127
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9128
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9129
f_charbig = '#SINGLE#';
 
9130
        
 
9131
# check single-1 success:       1
 
9132
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9133
INSERT INTO t1
 
9134
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9135
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9136
f_charbig = '#SINGLE#';
 
9137
        
 
9138
# check single-2 success:       1
 
9139
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9140
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9141
UPDATE t1 SET f_int1 = @cur_value2
 
9142
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9143
        
 
9144
# check single-3 success:       1
 
9145
SET @cur_value1= -1;
 
9146
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
9147
UPDATE t1 SET f_int1 = @cur_value1
 
9148
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
9149
        
 
9150
# check single-4 success:       1
 
9151
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
9152
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
9153
        
 
9154
# check single-5 success:       1
 
9155
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
9156
        
 
9157
# check single-6 success:       1
 
9158
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
9159
ERROR HY000: Table has no partition for value 2147483647
 
9160
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
9161
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
9162
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
9163
f_charbig = '#NULL#';
 
9164
INSERT INTO t1
 
9165
SET f_int1 = NULL , f_int2 = -@max_row,
 
9166
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
9167
f_charbig = '#NULL#';
 
9168
# check null success:    1
 
9169
        
 
9170
# check null-1 success:         1
 
9171
UPDATE t1 SET f_int1 = -@max_row
 
9172
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9173
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9174
        
 
9175
# check null-2 success:         1
 
9176
UPDATE t1 SET f_int1 = NULL
 
9177
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9178
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9179
        
 
9180
# check null-3 success:         1
 
9181
DELETE FROM t1
 
9182
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9183
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9184
        
 
9185
# check null-4 success:         1
 
9186
DELETE FROM t1
 
9187
WHERE f_int1 = 0 AND f_int2 = 0
 
9188
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
9189
AND f_charbig = '#NULL#';
 
9190
SET AUTOCOMMIT= 0;
 
9191
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9192
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9193
FROM t0_template source_tab
 
9194
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9195
        
 
9196
# check transactions-1 success:         1
 
9197
COMMIT WORK;
 
9198
        
 
9199
# check transactions-2 success:         1
 
9200
ROLLBACK WORK;
 
9201
        
 
9202
# check transactions-3 success:         1
 
9203
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9204
COMMIT WORK;
 
9205
ROLLBACK WORK;
 
9206
        
 
9207
# check transactions-4 success:         1
 
9208
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9209
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9210
FROM t0_template source_tab
 
9211
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9212
        
 
9213
# check transactions-5 success:         1
 
9214
ROLLBACK WORK;
 
9215
        
 
9216
# check transactions-6 success:         1
 
9217
# INFO: Storage engine used for t1 seems to be transactional.
 
9218
COMMIT;
 
9219
        
 
9220
# check transactions-7 success:         1
 
9221
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9222
COMMIT WORK;
 
9223
SET @@session.sql_mode = 'traditional';
 
9224
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
9225
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9226
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
9227
'', '', 'was inserted' FROM t0_template
 
9228
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9229
ERROR 22012: Division by 0
 
9230
COMMIT;
 
9231
        
 
9232
# check transactions-8 success:         1
 
9233
# INFO: Storage engine used for t1 seems to be able to revert
 
9234
#       changes made by the failing statement.
 
9235
SET @@session.sql_mode = '';
 
9236
SET AUTOCOMMIT= 1;
 
9237
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9238
COMMIT WORK;
 
9239
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
9240
        
 
9241
# check special-1 success:      1
 
9242
UPDATE t1 SET f_charbig = '';
 
9243
        
 
9244
# check special-2 success:      1
 
9245
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
9246
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9247
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
9248
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9249
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9250
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9251
'just inserted' FROM t0_template
 
9252
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9253
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
9254
BEGIN
 
9255
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9256
f_charbig = 'updated by trigger'
 
9257
      WHERE f_int1 = new.f_int1;
 
9258
END|
 
9259
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9260
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9261
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9262
        
 
9263
# check trigger-1 success:      1
 
9264
DROP TRIGGER trg_1;
 
9265
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9266
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9267
f_charbig = 'just inserted'
 
9268
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9269
DELETE FROM t0_aux
 
9270
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9271
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9272
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9273
'just inserted' FROM t0_template
 
9274
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9275
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
9276
BEGIN
 
9277
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9278
f_charbig = 'updated by trigger'
 
9279
      WHERE f_int1 = new.f_int1;
 
9280
END|
 
9281
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9282
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9283
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9284
        
 
9285
# check trigger-2 success:      1
 
9286
DROP TRIGGER trg_1;
 
9287
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9288
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9289
f_charbig = 'just inserted'
 
9290
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9291
DELETE FROM t0_aux
 
9292
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9293
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9294
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9295
'just inserted' FROM t0_template
 
9296
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9297
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9298
BEGIN
 
9299
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9300
f_charbig = 'updated by trigger'
 
9301
      WHERE f_int1 = new.f_int1;
 
9302
END|
 
9303
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9304
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9305
        
 
9306
# check trigger-3 success:      1
 
9307
DROP TRIGGER trg_1;
 
9308
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9309
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9310
f_charbig = 'just inserted'
 
9311
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9312
DELETE FROM t0_aux
 
9313
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9314
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9315
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9316
'just inserted' FROM t0_template
 
9317
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9318
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9319
BEGIN
 
9320
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9321
f_charbig = 'updated by trigger'
 
9322
      WHERE f_int1 = - old.f_int1;
 
9323
END|
 
9324
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9325
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9326
        
 
9327
# check trigger-4 success:      1
 
9328
DROP TRIGGER trg_1;
 
9329
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9330
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9331
f_charbig = 'just inserted'
 
9332
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9333
DELETE FROM t0_aux
 
9334
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9335
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9336
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9337
'just inserted' FROM t0_template
 
9338
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9339
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9340
BEGIN
 
9341
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9342
f_charbig = 'updated by trigger'
 
9343
      WHERE f_int1 = new.f_int1;
 
9344
END|
 
9345
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9346
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9347
        
 
9348
# check trigger-5 success:      1
 
9349
DROP TRIGGER trg_1;
 
9350
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9351
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9352
f_charbig = 'just inserted'
 
9353
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9354
DELETE FROM t0_aux
 
9355
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9356
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9357
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9358
'just inserted' FROM t0_template
 
9359
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9360
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9361
BEGIN
 
9362
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9363
f_charbig = 'updated by trigger'
 
9364
      WHERE f_int1 = - old.f_int1;
 
9365
END|
 
9366
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9367
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9368
        
 
9369
# check trigger-6 success:      1
 
9370
DROP TRIGGER trg_1;
 
9371
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9372
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9373
f_charbig = 'just inserted'
 
9374
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9375
DELETE FROM t0_aux
 
9376
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9377
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9378
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9379
'just inserted' FROM t0_template
 
9380
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9381
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
9382
BEGIN
 
9383
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9384
f_charbig = 'updated by trigger'
 
9385
      WHERE f_int1 = - old.f_int1;
 
9386
END|
 
9387
DELETE FROM t0_aux
 
9388
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9389
        
 
9390
# check trigger-7 success:      1
 
9391
DROP TRIGGER trg_1;
 
9392
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9393
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9394
f_charbig = 'just inserted'
 
9395
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9396
DELETE FROM t0_aux
 
9397
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9398
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9399
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9400
'just inserted' FROM t0_template
 
9401
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9402
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
9403
BEGIN
 
9404
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9405
f_charbig = 'updated by trigger'
 
9406
      WHERE f_int1 = - old.f_int1;
 
9407
END|
 
9408
DELETE FROM t0_aux
 
9409
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9410
        
 
9411
# check trigger-8 success:      1
 
9412
DROP TRIGGER trg_1;
 
9413
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9414
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9415
f_charbig = 'just inserted'
 
9416
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9417
DELETE FROM t0_aux
 
9418
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9419
DELETE FROM t1
 
9420
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9421
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9422
BEGIN
 
9423
SET new.f_int1 = old.f_int1 + @max_row,
 
9424
new.f_int2 = old.f_int2 - @max_row,
 
9425
new.f_charbig = '####updated per update trigger####';
 
9426
END|
 
9427
UPDATE t1
 
9428
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9429
f_charbig = '####updated per update statement itself####';
 
9430
        
 
9431
# check trigger-9 success:      1
 
9432
DROP TRIGGER trg_2;
 
9433
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9434
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9435
f_charbig = CONCAT('===',f_char1,'===');
 
9436
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9437
BEGIN
 
9438
SET new.f_int1 = new.f_int1 + @max_row,
 
9439
new.f_int2 = new.f_int2 - @max_row,
 
9440
new.f_charbig = '####updated per update trigger####';
 
9441
END|
 
9442
UPDATE t1
 
9443
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9444
f_charbig = '####updated per update statement itself####';
 
9445
        
 
9446
# check trigger-10 success:     1
 
9447
DROP TRIGGER trg_2;
 
9448
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9449
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9450
f_charbig = CONCAT('===',f_char1,'===');
 
9451
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9452
BEGIN
 
9453
SET new.f_int1 = @my_max1 + @counter,
 
9454
new.f_int2 = @my_min2 - @counter,
 
9455
new.f_charbig = '####updated per insert trigger####';
 
9456
SET @counter = @counter + 1;
 
9457
END|
 
9458
SET @counter = 1;
 
9459
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9460
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9461
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9462
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9463
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9464
ORDER BY f_int1;
 
9465
DROP TRIGGER trg_3;
 
9466
        
 
9467
# check trigger-11 success:     1
 
9468
DELETE FROM t1
 
9469
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9470
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9471
AND f_charbig = '####updated per insert trigger####';
 
9472
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9473
BEGIN
 
9474
SET new.f_int1 = @my_max1 + @counter,
 
9475
new.f_int2 = @my_min2 - @counter,
 
9476
new.f_charbig = '####updated per insert trigger####';
 
9477
SET @counter = @counter + 1;
 
9478
END|
 
9479
SET @counter = 1;
 
9480
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9481
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
9482
SELECT CAST(f_int1 AS CHAR),
 
9483
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9484
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9485
ORDER BY f_int1;
 
9486
DROP TRIGGER trg_3;
 
9487
        
 
9488
# check trigger-12 success:     1
 
9489
DELETE FROM t1
 
9490
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9491
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9492
AND f_charbig = '####updated per insert trigger####';
 
9493
ANALYZE  TABLE t1;
 
9494
Table   Op      Msg_type        Msg_text
 
9495
test.t1 analyze status  OK
 
9496
CHECK    TABLE t1 EXTENDED;
 
9497
Table   Op      Msg_type        Msg_text
 
9498
test.t1 check   status  OK
 
9499
CHECKSUM TABLE t1 EXTENDED;
 
9500
Table   Checksum
 
9501
test.t1 <some_value>
 
9502
OPTIMIZE TABLE t1;
 
9503
Table   Op      Msg_type        Msg_text
 
9504
test.t1 optimize        status  OK
 
9505
# check layout success:    1
 
9506
REPAIR   TABLE t1 EXTENDED;
 
9507
Table   Op      Msg_type        Msg_text
 
9508
test.t1 repair  note    The storage engine for the table doesn't support repair
 
9509
# check layout success:    1
 
9510
TRUNCATE t1;
 
9511
        
 
9512
# check TRUNCATE success:       1
 
9513
# check layout success:    1
 
9514
# End usability test (inc/partition_check.inc)
 
9515
DROP TABLE t1;
 
9516
CREATE TABLE t1 (
 
9517
f_int1 INTEGER,
 
9518
f_int2 INTEGER,
 
9519
f_char1 CHAR(20),
 
9520
f_char2 CHAR(20),
 
9521
f_charbig VARCHAR(1000)
 
9522
 
 
9523
)
 
9524
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
9525
(PARTITION part_1 VALUES LESS THAN (0),
 
9526
PARTITION part_2 VALUES LESS THAN (5),
 
9527
PARTITION part_3 VALUES LESS THAN (10),
 
9528
PARTITION part_4 VALUES LESS THAN (2147483646));
 
9529
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9530
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9531
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
9532
ALTER TABLE t1 CHECK PARTITION part_1;
 
9533
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9534
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9535
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9536
# Start usability test (inc/partition_check.inc)
 
9537
create_command
 
9538
SHOW CREATE TABLE t1;
 
9539
Table   Create Table
 
9540
t1      CREATE TABLE `t1` (
 
9541
  `f_int1` int(11) DEFAULT NULL,
 
9542
  `f_int2` int(11) DEFAULT NULL,
 
9543
  `f_char1` char(20) DEFAULT NULL,
 
9544
  `f_char2` char(20) DEFAULT NULL,
 
9545
  `f_charbig` varchar(1000) DEFAULT NULL
 
9546
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
9547
 
 
9548
# check prerequisites-1 success:    1
 
9549
# check COUNT(*) success:    1
 
9550
# check MIN/MAX(f_int1) success:    1
 
9551
# check MIN/MAX(f_int2) success:    1
 
9552
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9553
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9554
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
9555
WHERE f_int1 IN (2,3);
 
9556
# check prerequisites-3 success:    1
 
9557
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9558
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
9559
# check read via f_int1 success: 1
 
9560
# check read via f_int2 success: 1
 
9561
        
 
9562
# check multiple-1 success:     1
 
9563
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9564
        
 
9565
# check multiple-2 success:     1
 
9566
INSERT INTO t1 SELECT * FROM t0_template
 
9567
WHERE MOD(f_int1,3) = 0;
 
9568
        
 
9569
# check multiple-3 success:     1
 
9570
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9571
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9572
AND @max_row_div2 + @max_row_div4;
 
9573
        
 
9574
# check multiple-4 success:     1
 
9575
DELETE FROM t1
 
9576
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9577
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9578
        
 
9579
# check multiple-5 success:     1
 
9580
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9581
INSERT INTO t1
 
9582
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9583
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9584
f_charbig = '#SINGLE#';
 
9585
        
 
9586
# check single-1 success:       1
 
9587
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9588
INSERT INTO t1
 
9589
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9590
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9591
f_charbig = '#SINGLE#';
 
9592
        
 
9593
# check single-2 success:       1
 
9594
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9595
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9596
UPDATE t1 SET f_int1 = @cur_value2
 
9597
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9598
        
 
9599
# check single-3 success:       1
 
9600
SET @cur_value1= -1;
 
9601
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
9602
UPDATE t1 SET f_int1 = @cur_value1
 
9603
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
9604
        
 
9605
# check single-4 success:       1
 
9606
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
9607
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
9608
        
 
9609
# check single-5 success:       1
 
9610
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
9611
        
 
9612
# check single-6 success:       1
 
9613
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
9614
        
 
9615
# check single-7 success:       1
 
9616
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
9617
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
9618
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
9619
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
9620
f_charbig = '#NULL#';
 
9621
INSERT INTO t1
 
9622
SET f_int1 = NULL , f_int2 = -@max_row,
 
9623
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
9624
f_charbig = '#NULL#';
 
9625
# check null success:    1
 
9626
        
 
9627
# check null-1 success:         1
 
9628
UPDATE t1 SET f_int1 = -@max_row
 
9629
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9630
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9631
        
 
9632
# check null-2 success:         1
 
9633
UPDATE t1 SET f_int1 = NULL
 
9634
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9635
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9636
        
 
9637
# check null-3 success:         1
 
9638
DELETE FROM t1
 
9639
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9640
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9641
        
 
9642
# check null-4 success:         1
 
9643
DELETE FROM t1
 
9644
WHERE f_int1 = 0 AND f_int2 = 0
 
9645
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
9646
AND f_charbig = '#NULL#';
 
9647
SET AUTOCOMMIT= 0;
 
9648
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9649
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9650
FROM t0_template source_tab
 
9651
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9652
        
 
9653
# check transactions-1 success:         1
 
9654
COMMIT WORK;
 
9655
        
 
9656
# check transactions-2 success:         1
 
9657
ROLLBACK WORK;
 
9658
        
 
9659
# check transactions-3 success:         1
 
9660
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9661
COMMIT WORK;
 
9662
ROLLBACK WORK;
 
9663
        
 
9664
# check transactions-4 success:         1
 
9665
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9666
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9667
FROM t0_template source_tab
 
9668
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9669
        
 
9670
# check transactions-5 success:         1
 
9671
ROLLBACK WORK;
 
9672
        
 
9673
# check transactions-6 success:         1
 
9674
# INFO: Storage engine used for t1 seems to be transactional.
 
9675
COMMIT;
 
9676
        
 
9677
# check transactions-7 success:         1
 
9678
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9679
COMMIT WORK;
 
9680
SET @@session.sql_mode = 'traditional';
 
9681
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
9682
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9683
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
9684
'', '', 'was inserted' FROM t0_template
 
9685
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9686
ERROR 22012: Division by 0
 
9687
COMMIT;
 
9688
        
 
9689
# check transactions-8 success:         1
 
9690
# INFO: Storage engine used for t1 seems to be able to revert
 
9691
#       changes made by the failing statement.
 
9692
SET @@session.sql_mode = '';
 
9693
SET AUTOCOMMIT= 1;
 
9694
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9695
COMMIT WORK;
 
9696
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
9697
        
 
9698
# check special-1 success:      1
 
9699
UPDATE t1 SET f_charbig = '';
 
9700
        
 
9701
# check special-2 success:      1
 
9702
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
9703
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9704
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
9705
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9706
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9707
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9708
'just inserted' FROM t0_template
 
9709
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9710
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
9711
BEGIN
 
9712
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9713
f_charbig = 'updated by trigger'
 
9714
      WHERE f_int1 = new.f_int1;
 
9715
END|
 
9716
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9717
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9718
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9719
        
 
9720
# check trigger-1 success:      1
 
9721
DROP TRIGGER trg_1;
 
9722
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9723
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9724
f_charbig = 'just inserted'
 
9725
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9726
DELETE FROM t0_aux
 
9727
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9728
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9729
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9730
'just inserted' FROM t0_template
 
9731
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9732
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
9733
BEGIN
 
9734
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9735
f_charbig = 'updated by trigger'
 
9736
      WHERE f_int1 = new.f_int1;
 
9737
END|
 
9738
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9739
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9740
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9741
        
 
9742
# check trigger-2 success:      1
 
9743
DROP TRIGGER trg_1;
 
9744
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9745
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9746
f_charbig = 'just inserted'
 
9747
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9748
DELETE FROM t0_aux
 
9749
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9750
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9751
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9752
'just inserted' FROM t0_template
 
9753
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9754
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9755
BEGIN
 
9756
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9757
f_charbig = 'updated by trigger'
 
9758
      WHERE f_int1 = new.f_int1;
 
9759
END|
 
9760
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9761
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9762
        
 
9763
# check trigger-3 success:      1
 
9764
DROP TRIGGER trg_1;
 
9765
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9766
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9767
f_charbig = 'just inserted'
 
9768
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9769
DELETE FROM t0_aux
 
9770
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9771
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9772
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9773
'just inserted' FROM t0_template
 
9774
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9775
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9776
BEGIN
 
9777
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9778
f_charbig = 'updated by trigger'
 
9779
      WHERE f_int1 = - old.f_int1;
 
9780
END|
 
9781
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9782
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9783
        
 
9784
# check trigger-4 success:      1
 
9785
DROP TRIGGER trg_1;
 
9786
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9787
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9788
f_charbig = 'just inserted'
 
9789
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9790
DELETE FROM t0_aux
 
9791
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9792
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9793
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9794
'just inserted' FROM t0_template
 
9795
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9796
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9797
BEGIN
 
9798
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9799
f_charbig = 'updated by trigger'
 
9800
      WHERE f_int1 = new.f_int1;
 
9801
END|
 
9802
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9803
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9804
        
 
9805
# check trigger-5 success:      1
 
9806
DROP TRIGGER trg_1;
 
9807
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9808
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9809
f_charbig = 'just inserted'
 
9810
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9811
DELETE FROM t0_aux
 
9812
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9813
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9814
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9815
'just inserted' FROM t0_template
 
9816
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9817
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9818
BEGIN
 
9819
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9820
f_charbig = 'updated by trigger'
 
9821
      WHERE f_int1 = - old.f_int1;
 
9822
END|
 
9823
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9824
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9825
        
 
9826
# check trigger-6 success:      1
 
9827
DROP TRIGGER trg_1;
 
9828
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9829
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9830
f_charbig = 'just inserted'
 
9831
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9832
DELETE FROM t0_aux
 
9833
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9834
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9835
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9836
'just inserted' FROM t0_template
 
9837
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9838
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
9839
BEGIN
 
9840
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9841
f_charbig = 'updated by trigger'
 
9842
      WHERE f_int1 = - old.f_int1;
 
9843
END|
 
9844
DELETE FROM t0_aux
 
9845
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9846
        
 
9847
# check trigger-7 success:      1
 
9848
DROP TRIGGER trg_1;
 
9849
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9850
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9851
f_charbig = 'just inserted'
 
9852
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9853
DELETE FROM t0_aux
 
9854
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9855
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9856
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9857
'just inserted' FROM t0_template
 
9858
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9859
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
9860
BEGIN
 
9861
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9862
f_charbig = 'updated by trigger'
 
9863
      WHERE f_int1 = - old.f_int1;
 
9864
END|
 
9865
DELETE FROM t0_aux
 
9866
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9867
        
 
9868
# check trigger-8 success:      1
 
9869
DROP TRIGGER trg_1;
 
9870
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9871
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9872
f_charbig = 'just inserted'
 
9873
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9874
DELETE FROM t0_aux
 
9875
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9876
DELETE FROM t1
 
9877
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9878
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9879
BEGIN
 
9880
SET new.f_int1 = old.f_int1 + @max_row,
 
9881
new.f_int2 = old.f_int2 - @max_row,
 
9882
new.f_charbig = '####updated per update trigger####';
 
9883
END|
 
9884
UPDATE t1
 
9885
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9886
f_charbig = '####updated per update statement itself####';
 
9887
        
 
9888
# check trigger-9 success:      1
 
9889
DROP TRIGGER trg_2;
 
9890
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9891
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9892
f_charbig = CONCAT('===',f_char1,'===');
 
9893
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9894
BEGIN
 
9895
SET new.f_int1 = new.f_int1 + @max_row,
 
9896
new.f_int2 = new.f_int2 - @max_row,
 
9897
new.f_charbig = '####updated per update trigger####';
 
9898
END|
 
9899
UPDATE t1
 
9900
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9901
f_charbig = '####updated per update statement itself####';
 
9902
        
 
9903
# check trigger-10 success:     1
 
9904
DROP TRIGGER trg_2;
 
9905
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9906
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9907
f_charbig = CONCAT('===',f_char1,'===');
 
9908
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9909
BEGIN
 
9910
SET new.f_int1 = @my_max1 + @counter,
 
9911
new.f_int2 = @my_min2 - @counter,
 
9912
new.f_charbig = '####updated per insert trigger####';
 
9913
SET @counter = @counter + 1;
 
9914
END|
 
9915
SET @counter = 1;
 
9916
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9917
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9918
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9919
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9920
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9921
ORDER BY f_int1;
 
9922
DROP TRIGGER trg_3;
 
9923
        
 
9924
# check trigger-11 success:     1
 
9925
DELETE FROM t1
 
9926
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9927
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9928
AND f_charbig = '####updated per insert trigger####';
 
9929
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9930
BEGIN
 
9931
SET new.f_int1 = @my_max1 + @counter,
 
9932
new.f_int2 = @my_min2 - @counter,
 
9933
new.f_charbig = '####updated per insert trigger####';
 
9934
SET @counter = @counter + 1;
 
9935
END|
 
9936
SET @counter = 1;
 
9937
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9938
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
9939
SELECT CAST(f_int1 AS CHAR),
 
9940
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9941
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9942
ORDER BY f_int1;
 
9943
DROP TRIGGER trg_3;
 
9944
        
 
9945
# check trigger-12 success:     1
 
9946
DELETE FROM t1
 
9947
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9948
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9949
AND f_charbig = '####updated per insert trigger####';
 
9950
ANALYZE  TABLE t1;
 
9951
Table   Op      Msg_type        Msg_text
 
9952
test.t1 analyze status  OK
 
9953
CHECK    TABLE t1 EXTENDED;
 
9954
Table   Op      Msg_type        Msg_text
 
9955
test.t1 check   status  OK
 
9956
CHECKSUM TABLE t1 EXTENDED;
 
9957
Table   Checksum
 
9958
test.t1 <some_value>
 
9959
OPTIMIZE TABLE t1;
 
9960
Table   Op      Msg_type        Msg_text
 
9961
test.t1 optimize        status  OK
 
9962
# check layout success:    1
 
9963
REPAIR   TABLE t1 EXTENDED;
 
9964
Table   Op      Msg_type        Msg_text
 
9965
test.t1 repair  note    The storage engine for the table doesn't support repair
 
9966
# check layout success:    1
 
9967
TRUNCATE t1;
 
9968
        
 
9969
# check TRUNCATE success:       1
 
9970
# check layout success:    1
 
9971
# End usability test (inc/partition_check.inc)
 
9972
DROP TABLE t1;
 
9973
CREATE TABLE t1 (
 
9974
f_int1 INTEGER,
 
9975
f_int2 INTEGER,
 
9976
f_char1 CHAR(20),
 
9977
f_char2 CHAR(20),
 
9978
f_charbig VARCHAR(1000)
 
9979
 
 
9980
)
 
9981
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
9982
(PARTITION part_1 VALUES LESS THAN (0)
 
9983
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
9984
PARTITION part_2 VALUES LESS THAN (5)
 
9985
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
9986
PARTITION part_3 VALUES LESS THAN (10)
 
9987
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
9988
PARTITION part_4 VALUES LESS THAN (2147483646)
 
9989
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
9990
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9991
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9992
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
9993
ALTER TABLE t1 CHECK PARTITION part_1;
 
9994
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9995
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9996
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9997
# Start usability test (inc/partition_check.inc)
 
9998
create_command
 
9999
SHOW CREATE TABLE t1;
 
10000
Table   Create Table
 
10001
t1      CREATE TABLE `t1` (
 
10002
  `f_int1` int(11) DEFAULT NULL,
 
10003
  `f_int2` int(11) DEFAULT NULL,
 
10004
  `f_char1` char(20) DEFAULT NULL,
 
10005
  `f_char2` char(20) DEFAULT NULL,
 
10006
  `f_charbig` varchar(1000) DEFAULT NULL
 
10007
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
10008
 
 
10009
# check prerequisites-1 success:    1
 
10010
# check COUNT(*) success:    1
 
10011
# check MIN/MAX(f_int1) success:    1
 
10012
# check MIN/MAX(f_int2) success:    1
 
10013
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10014
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10015
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10016
WHERE f_int1 IN (2,3);
 
10017
# check prerequisites-3 success:    1
 
10018
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10019
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
10020
# check read via f_int1 success: 1
 
10021
# check read via f_int2 success: 1
 
10022
        
 
10023
# check multiple-1 success:     1
 
10024
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
10025
        
 
10026
# check multiple-2 success:     1
 
10027
INSERT INTO t1 SELECT * FROM t0_template
 
10028
WHERE MOD(f_int1,3) = 0;
 
10029
        
 
10030
# check multiple-3 success:     1
 
10031
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
10032
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
10033
AND @max_row_div2 + @max_row_div4;
 
10034
        
 
10035
# check multiple-4 success:     1
 
10036
DELETE FROM t1
 
10037
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
10038
AND @max_row_div2 + @max_row_div4 + @max_row;
 
10039
        
 
10040
# check multiple-5 success:     1
 
10041
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
10042
INSERT INTO t1
 
10043
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10044
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10045
f_charbig = '#SINGLE#';
 
10046
        
 
10047
# check single-1 success:       1
 
10048
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
10049
INSERT INTO t1
 
10050
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10051
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10052
f_charbig = '#SINGLE#';
 
10053
        
 
10054
# check single-2 success:       1
 
10055
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
10056
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
10057
UPDATE t1 SET f_int1 = @cur_value2
 
10058
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
10059
        
 
10060
# check single-3 success:       1
 
10061
SET @cur_value1= -1;
 
10062
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10063
UPDATE t1 SET f_int1 = @cur_value1
 
10064
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10065
        
 
10066
# check single-4 success:       1
 
10067
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10068
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10069
        
 
10070
# check single-5 success:       1
 
10071
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10072
        
 
10073
# check single-6 success:       1
 
10074
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10075
ERROR HY000: Table has no partition for value 2147483647
 
10076
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10077
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10078
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10079
f_charbig = '#NULL#';
 
10080
INSERT INTO t1
 
10081
SET f_int1 = NULL , f_int2 = -@max_row,
 
10082
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
10083
f_charbig = '#NULL#';
 
10084
# check null success:    1
 
10085
        
 
10086
# check null-1 success:         1
 
10087
UPDATE t1 SET f_int1 = -@max_row
 
10088
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10089
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10090
        
 
10091
# check null-2 success:         1
 
10092
UPDATE t1 SET f_int1 = NULL
 
10093
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10094
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10095
        
 
10096
# check null-3 success:         1
 
10097
DELETE FROM t1
 
10098
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10099
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10100
        
 
10101
# check null-4 success:         1
 
10102
DELETE FROM t1
 
10103
WHERE f_int1 = 0 AND f_int2 = 0
 
10104
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
10105
AND f_charbig = '#NULL#';
 
10106
SET AUTOCOMMIT= 0;
 
10107
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10108
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10109
FROM t0_template source_tab
 
10110
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10111
        
 
10112
# check transactions-1 success:         1
 
10113
COMMIT WORK;
 
10114
        
 
10115
# check transactions-2 success:         1
 
10116
ROLLBACK WORK;
 
10117
        
 
10118
# check transactions-3 success:         1
 
10119
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10120
COMMIT WORK;
 
10121
ROLLBACK WORK;
 
10122
        
 
10123
# check transactions-4 success:         1
 
10124
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10125
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10126
FROM t0_template source_tab
 
10127
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10128
        
 
10129
# check transactions-5 success:         1
 
10130
ROLLBACK WORK;
 
10131
        
 
10132
# check transactions-6 success:         1
 
10133
# INFO: Storage engine used for t1 seems to be transactional.
 
10134
COMMIT;
 
10135
        
 
10136
# check transactions-7 success:         1
 
10137
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10138
COMMIT WORK;
 
10139
SET @@session.sql_mode = 'traditional';
 
10140
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
10141
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10142
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
10143
'', '', 'was inserted' FROM t0_template
 
10144
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10145
ERROR 22012: Division by 0
 
10146
COMMIT;
 
10147
        
 
10148
# check transactions-8 success:         1
 
10149
# INFO: Storage engine used for t1 seems to be able to revert
 
10150
#       changes made by the failing statement.
 
10151
SET @@session.sql_mode = '';
 
10152
SET AUTOCOMMIT= 1;
 
10153
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10154
COMMIT WORK;
 
10155
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
10156
        
 
10157
# check special-1 success:      1
 
10158
UPDATE t1 SET f_charbig = '';
 
10159
        
 
10160
# check special-2 success:      1
 
10161
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
10162
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10163
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
10164
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10165
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10166
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10167
'just inserted' FROM t0_template
 
10168
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10169
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
10170
BEGIN
 
10171
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10172
f_charbig = 'updated by trigger'
 
10173
      WHERE f_int1 = new.f_int1;
 
10174
END|
 
10175
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10176
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10177
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10178
        
 
10179
# check trigger-1 success:      1
 
10180
DROP TRIGGER trg_1;
 
10181
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10182
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10183
f_charbig = 'just inserted'
 
10184
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10185
DELETE FROM t0_aux
 
10186
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10187
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10188
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10189
'just inserted' FROM t0_template
 
10190
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10191
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
10192
BEGIN
 
10193
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10194
f_charbig = 'updated by trigger'
 
10195
      WHERE f_int1 = new.f_int1;
 
10196
END|
 
10197
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10198
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10199
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10200
        
 
10201
# check trigger-2 success:      1
 
10202
DROP TRIGGER trg_1;
 
10203
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10204
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10205
f_charbig = 'just inserted'
 
10206
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10207
DELETE FROM t0_aux
 
10208
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10209
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10210
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10211
'just inserted' FROM t0_template
 
10212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10213
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10214
BEGIN
 
10215
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10216
f_charbig = 'updated by trigger'
 
10217
      WHERE f_int1 = new.f_int1;
 
10218
END|
 
10219
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10220
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10221
        
 
10222
# check trigger-3 success:      1
 
10223
DROP TRIGGER trg_1;
 
10224
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10225
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10226
f_charbig = 'just inserted'
 
10227
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10228
DELETE FROM t0_aux
 
10229
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10230
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10231
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10232
'just inserted' FROM t0_template
 
10233
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10234
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10235
BEGIN
 
10236
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10237
f_charbig = 'updated by trigger'
 
10238
      WHERE f_int1 = - old.f_int1;
 
10239
END|
 
10240
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10241
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10242
        
 
10243
# check trigger-4 success:      1
 
10244
DROP TRIGGER trg_1;
 
10245
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10246
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10247
f_charbig = 'just inserted'
 
10248
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10249
DELETE FROM t0_aux
 
10250
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10251
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10252
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10253
'just inserted' FROM t0_template
 
10254
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10255
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10256
BEGIN
 
10257
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10258
f_charbig = 'updated by trigger'
 
10259
      WHERE f_int1 = new.f_int1;
 
10260
END|
 
10261
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10262
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10263
        
 
10264
# check trigger-5 success:      1
 
10265
DROP TRIGGER trg_1;
 
10266
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10267
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10268
f_charbig = 'just inserted'
 
10269
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10270
DELETE FROM t0_aux
 
10271
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10272
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10273
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10274
'just inserted' FROM t0_template
 
10275
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10276
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10277
BEGIN
 
10278
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10279
f_charbig = 'updated by trigger'
 
10280
      WHERE f_int1 = - old.f_int1;
 
10281
END|
 
10282
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10283
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10284
        
 
10285
# check trigger-6 success:      1
 
10286
DROP TRIGGER trg_1;
 
10287
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10288
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10289
f_charbig = 'just inserted'
 
10290
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10291
DELETE FROM t0_aux
 
10292
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10293
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10294
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10295
'just inserted' FROM t0_template
 
10296
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10297
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
10298
BEGIN
 
10299
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10300
f_charbig = 'updated by trigger'
 
10301
      WHERE f_int1 = - old.f_int1;
 
10302
END|
 
10303
DELETE FROM t0_aux
 
10304
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10305
        
 
10306
# check trigger-7 success:      1
 
10307
DROP TRIGGER trg_1;
 
10308
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10309
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10310
f_charbig = 'just inserted'
 
10311
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10312
DELETE FROM t0_aux
 
10313
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10314
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10315
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10316
'just inserted' FROM t0_template
 
10317
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10318
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
10319
BEGIN
 
10320
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10321
f_charbig = 'updated by trigger'
 
10322
      WHERE f_int1 = - old.f_int1;
 
10323
END|
 
10324
DELETE FROM t0_aux
 
10325
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10326
        
 
10327
# check trigger-8 success:      1
 
10328
DROP TRIGGER trg_1;
 
10329
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10330
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10331
f_charbig = 'just inserted'
 
10332
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10333
DELETE FROM t0_aux
 
10334
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10335
DELETE FROM t1
 
10336
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10337
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10338
BEGIN
 
10339
SET new.f_int1 = old.f_int1 + @max_row,
 
10340
new.f_int2 = old.f_int2 - @max_row,
 
10341
new.f_charbig = '####updated per update trigger####';
 
10342
END|
 
10343
UPDATE t1
 
10344
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10345
f_charbig = '####updated per update statement itself####';
 
10346
        
 
10347
# check trigger-9 success:      1
 
10348
DROP TRIGGER trg_2;
 
10349
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10350
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10351
f_charbig = CONCAT('===',f_char1,'===');
 
10352
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10353
BEGIN
 
10354
SET new.f_int1 = new.f_int1 + @max_row,
 
10355
new.f_int2 = new.f_int2 - @max_row,
 
10356
new.f_charbig = '####updated per update trigger####';
 
10357
END|
 
10358
UPDATE t1
 
10359
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10360
f_charbig = '####updated per update statement itself####';
 
10361
        
 
10362
# check trigger-10 success:     1
 
10363
DROP TRIGGER trg_2;
 
10364
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10365
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10366
f_charbig = CONCAT('===',f_char1,'===');
 
10367
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10368
BEGIN
 
10369
SET new.f_int1 = @my_max1 + @counter,
 
10370
new.f_int2 = @my_min2 - @counter,
 
10371
new.f_charbig = '####updated per insert trigger####';
 
10372
SET @counter = @counter + 1;
 
10373
END|
 
10374
SET @counter = 1;
 
10375
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10376
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10377
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10378
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10379
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10380
ORDER BY f_int1;
 
10381
DROP TRIGGER trg_3;
 
10382
        
 
10383
# check trigger-11 success:     1
 
10384
DELETE FROM t1
 
10385
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10386
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10387
AND f_charbig = '####updated per insert trigger####';
 
10388
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10389
BEGIN
 
10390
SET new.f_int1 = @my_max1 + @counter,
 
10391
new.f_int2 = @my_min2 - @counter,
 
10392
new.f_charbig = '####updated per insert trigger####';
 
10393
SET @counter = @counter + 1;
 
10394
END|
 
10395
SET @counter = 1;
 
10396
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10397
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10398
SELECT CAST(f_int1 AS CHAR),
 
10399
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10400
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10401
ORDER BY f_int1;
 
10402
DROP TRIGGER trg_3;
 
10403
        
 
10404
# check trigger-12 success:     1
 
10405
DELETE FROM t1
 
10406
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10407
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10408
AND f_charbig = '####updated per insert trigger####';
 
10409
ANALYZE  TABLE t1;
 
10410
Table   Op      Msg_type        Msg_text
 
10411
test.t1 analyze status  OK
 
10412
CHECK    TABLE t1 EXTENDED;
 
10413
Table   Op      Msg_type        Msg_text
 
10414
test.t1 check   status  OK
 
10415
CHECKSUM TABLE t1 EXTENDED;
 
10416
Table   Checksum
 
10417
test.t1 <some_value>
 
10418
OPTIMIZE TABLE t1;
 
10419
Table   Op      Msg_type        Msg_text
 
10420
test.t1 optimize        status  OK
 
10421
# check layout success:    1
 
10422
REPAIR   TABLE t1 EXTENDED;
 
10423
Table   Op      Msg_type        Msg_text
 
10424
test.t1 repair  note    The storage engine for the table doesn't support repair
 
10425
# check layout success:    1
 
10426
TRUNCATE t1;
 
10427
        
 
10428
# check TRUNCATE success:       1
 
10429
# check layout success:    1
 
10430
# End usability test (inc/partition_check.inc)
 
10431
DROP TABLE t1;
 
10432
CREATE TABLE t1 (
 
10433
f_int1 INTEGER,
 
10434
f_int2 INTEGER,
 
10435
f_char1 CHAR(20),
 
10436
f_char2 CHAR(20),
 
10437
f_charbig VARCHAR(1000)
 
10438
 
 
10439
)
 
10440
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
10441
(PARTITION part_1 VALUES IN (0)
 
10442
(SUBPARTITION sp11, SUBPARTITION sp12),
 
10443
PARTITION part_2 VALUES IN (1)
 
10444
(SUBPARTITION sp21, SUBPARTITION sp22),
 
10445
PARTITION part_3 VALUES IN (2)
 
10446
(SUBPARTITION sp31, SUBPARTITION sp32),
 
10447
PARTITION part_4 VALUES IN (NULL)
 
10448
(SUBPARTITION sp41, SUBPARTITION sp42));
 
10449
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10450
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10451
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
10452
ALTER TABLE t1 CHECK PARTITION part_1;
 
10453
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10454
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10455
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10456
# Start usability test (inc/partition_check.inc)
 
10457
create_command
 
10458
SHOW CREATE TABLE t1;
 
10459
Table   Create Table
 
10460
t1      CREATE TABLE `t1` (
 
10461
  `f_int1` int(11) DEFAULT NULL,
 
10462
  `f_int2` int(11) DEFAULT NULL,
 
10463
  `f_char1` char(20) DEFAULT NULL,
 
10464
  `f_char2` char(20) DEFAULT NULL,
 
10465
  `f_charbig` varchar(1000) DEFAULT NULL
 
10466
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
10467
 
 
10468
# check prerequisites-1 success:    1
 
10469
# check COUNT(*) success:    1
 
10470
# check MIN/MAX(f_int1) success:    1
 
10471
# check MIN/MAX(f_int2) success:    1
 
10472
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10473
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10474
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10475
WHERE f_int1 IN (2,3);
 
10476
# check prerequisites-3 success:    1
 
10477
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10478
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
10479
# check read via f_int1 success: 1
 
10480
# check read via f_int2 success: 1
 
10481
        
 
10482
# check multiple-1 success:     1
 
10483
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
10484
        
 
10485
# check multiple-2 success:     1
 
10486
INSERT INTO t1 SELECT * FROM t0_template
 
10487
WHERE MOD(f_int1,3) = 0;
 
10488
        
 
10489
# check multiple-3 success:     1
 
10490
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
10491
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
10492
AND @max_row_div2 + @max_row_div4;
 
10493
        
 
10494
# check multiple-4 success:     1
 
10495
DELETE FROM t1
 
10496
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
10497
AND @max_row_div2 + @max_row_div4 + @max_row;
 
10498
        
 
10499
# check multiple-5 success:     1
 
10500
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
10501
INSERT INTO t1
 
10502
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10503
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10504
f_charbig = '#SINGLE#';
 
10505
        
 
10506
# check single-1 success:       1
 
10507
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
10508
INSERT INTO t1
 
10509
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10510
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10511
f_charbig = '#SINGLE#';
 
10512
        
 
10513
# check single-2 success:       1
 
10514
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
10515
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
10516
UPDATE t1 SET f_int1 = @cur_value2
 
10517
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
10518
        
 
10519
# check single-3 success:       1
 
10520
SET @cur_value1= -1;
 
10521
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10522
UPDATE t1 SET f_int1 = @cur_value1
 
10523
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10524
        
 
10525
# check single-4 success:       1
 
10526
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10527
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10528
        
 
10529
# check single-5 success:       1
 
10530
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10531
        
 
10532
# check single-6 success:       1
 
10533
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10534
        
 
10535
# check single-7 success:       1
 
10536
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
10537
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10538
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10539
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10540
f_charbig = '#NULL#';
 
10541
INSERT INTO t1
 
10542
SET f_int1 = NULL , f_int2 = -@max_row,
 
10543
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
10544
f_charbig = '#NULL#';
 
10545
# check null success:    1
 
10546
        
 
10547
# check null-1 success:         1
 
10548
UPDATE t1 SET f_int1 = -@max_row
 
10549
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10550
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10551
        
 
10552
# check null-2 success:         1
 
10553
UPDATE t1 SET f_int1 = NULL
 
10554
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10555
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10556
        
 
10557
# check null-3 success:         1
 
10558
DELETE FROM t1
 
10559
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10560
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10561
        
 
10562
# check null-4 success:         1
 
10563
DELETE FROM t1
 
10564
WHERE f_int1 = 0 AND f_int2 = 0
 
10565
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
10566
AND f_charbig = '#NULL#';
 
10567
SET AUTOCOMMIT= 0;
 
10568
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10569
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10570
FROM t0_template source_tab
 
10571
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10572
        
 
10573
# check transactions-1 success:         1
 
10574
COMMIT WORK;
 
10575
        
 
10576
# check transactions-2 success:         1
 
10577
ROLLBACK WORK;
 
10578
        
 
10579
# check transactions-3 success:         1
 
10580
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10581
COMMIT WORK;
 
10582
ROLLBACK WORK;
 
10583
        
 
10584
# check transactions-4 success:         1
 
10585
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10586
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10587
FROM t0_template source_tab
 
10588
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10589
        
 
10590
# check transactions-5 success:         1
 
10591
ROLLBACK WORK;
 
10592
        
 
10593
# check transactions-6 success:         1
 
10594
# INFO: Storage engine used for t1 seems to be transactional.
 
10595
COMMIT;
 
10596
        
 
10597
# check transactions-7 success:         1
 
10598
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10599
COMMIT WORK;
 
10600
SET @@session.sql_mode = 'traditional';
 
10601
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
10602
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10603
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
10604
'', '', 'was inserted' FROM t0_template
 
10605
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10606
ERROR 22012: Division by 0
 
10607
COMMIT;
 
10608
        
 
10609
# check transactions-8 success:         1
 
10610
# INFO: Storage engine used for t1 seems to be able to revert
 
10611
#       changes made by the failing statement.
 
10612
SET @@session.sql_mode = '';
 
10613
SET AUTOCOMMIT= 1;
 
10614
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10615
COMMIT WORK;
 
10616
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
10617
        
 
10618
# check special-1 success:      1
 
10619
UPDATE t1 SET f_charbig = '';
 
10620
        
 
10621
# check special-2 success:      1
 
10622
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
10623
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10624
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
10625
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10626
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10627
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10628
'just inserted' FROM t0_template
 
10629
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10630
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
10631
BEGIN
 
10632
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10633
f_charbig = 'updated by trigger'
 
10634
      WHERE f_int1 = new.f_int1;
 
10635
END|
 
10636
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10637
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10638
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10639
        
 
10640
# check trigger-1 success:      1
 
10641
DROP TRIGGER trg_1;
 
10642
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10643
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10644
f_charbig = 'just inserted'
 
10645
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10646
DELETE FROM t0_aux
 
10647
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10648
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10649
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10650
'just inserted' FROM t0_template
 
10651
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10652
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
10653
BEGIN
 
10654
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10655
f_charbig = 'updated by trigger'
 
10656
      WHERE f_int1 = new.f_int1;
 
10657
END|
 
10658
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10659
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10660
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10661
        
 
10662
# check trigger-2 success:      1
 
10663
DROP TRIGGER trg_1;
 
10664
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10665
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10666
f_charbig = 'just inserted'
 
10667
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10668
DELETE FROM t0_aux
 
10669
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10670
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10671
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10672
'just inserted' FROM t0_template
 
10673
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10674
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10675
BEGIN
 
10676
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10677
f_charbig = 'updated by trigger'
 
10678
      WHERE f_int1 = new.f_int1;
 
10679
END|
 
10680
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10681
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10682
        
 
10683
# check trigger-3 success:      1
 
10684
DROP TRIGGER trg_1;
 
10685
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10686
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10687
f_charbig = 'just inserted'
 
10688
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10689
DELETE FROM t0_aux
 
10690
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10691
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10692
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10693
'just inserted' FROM t0_template
 
10694
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10695
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10696
BEGIN
 
10697
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10698
f_charbig = 'updated by trigger'
 
10699
      WHERE f_int1 = - old.f_int1;
 
10700
END|
 
10701
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10702
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10703
        
 
10704
# check trigger-4 success:      1
 
10705
DROP TRIGGER trg_1;
 
10706
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10707
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10708
f_charbig = 'just inserted'
 
10709
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10710
DELETE FROM t0_aux
 
10711
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10712
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10713
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10714
'just inserted' FROM t0_template
 
10715
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10716
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10717
BEGIN
 
10718
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10719
f_charbig = 'updated by trigger'
 
10720
      WHERE f_int1 = new.f_int1;
 
10721
END|
 
10722
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10723
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10724
        
 
10725
# check trigger-5 success:      1
 
10726
DROP TRIGGER trg_1;
 
10727
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10728
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10729
f_charbig = 'just inserted'
 
10730
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10731
DELETE FROM t0_aux
 
10732
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10733
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10734
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10735
'just inserted' FROM t0_template
 
10736
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10737
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10738
BEGIN
 
10739
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10740
f_charbig = 'updated by trigger'
 
10741
      WHERE f_int1 = - old.f_int1;
 
10742
END|
 
10743
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10744
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10745
        
 
10746
# check trigger-6 success:      1
 
10747
DROP TRIGGER trg_1;
 
10748
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10749
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10750
f_charbig = 'just inserted'
 
10751
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10752
DELETE FROM t0_aux
 
10753
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10754
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10755
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10756
'just inserted' FROM t0_template
 
10757
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10758
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
10759
BEGIN
 
10760
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10761
f_charbig = 'updated by trigger'
 
10762
      WHERE f_int1 = - old.f_int1;
 
10763
END|
 
10764
DELETE FROM t0_aux
 
10765
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10766
        
 
10767
# check trigger-7 success:      1
 
10768
DROP TRIGGER trg_1;
 
10769
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10770
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10771
f_charbig = 'just inserted'
 
10772
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10773
DELETE FROM t0_aux
 
10774
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10775
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10776
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10777
'just inserted' FROM t0_template
 
10778
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10779
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
10780
BEGIN
 
10781
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10782
f_charbig = 'updated by trigger'
 
10783
      WHERE f_int1 = - old.f_int1;
 
10784
END|
 
10785
DELETE FROM t0_aux
 
10786
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10787
        
 
10788
# check trigger-8 success:      1
 
10789
DROP TRIGGER trg_1;
 
10790
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10791
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10792
f_charbig = 'just inserted'
 
10793
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10794
DELETE FROM t0_aux
 
10795
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10796
DELETE FROM t1
 
10797
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10798
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10799
BEGIN
 
10800
SET new.f_int1 = old.f_int1 + @max_row,
 
10801
new.f_int2 = old.f_int2 - @max_row,
 
10802
new.f_charbig = '####updated per update trigger####';
 
10803
END|
 
10804
UPDATE t1
 
10805
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10806
f_charbig = '####updated per update statement itself####';
 
10807
        
 
10808
# check trigger-9 success:      1
 
10809
DROP TRIGGER trg_2;
 
10810
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10811
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10812
f_charbig = CONCAT('===',f_char1,'===');
 
10813
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10814
BEGIN
 
10815
SET new.f_int1 = new.f_int1 + @max_row,
 
10816
new.f_int2 = new.f_int2 - @max_row,
 
10817
new.f_charbig = '####updated per update trigger####';
 
10818
END|
 
10819
UPDATE t1
 
10820
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10821
f_charbig = '####updated per update statement itself####';
 
10822
        
 
10823
# check trigger-10 success:     1
 
10824
DROP TRIGGER trg_2;
 
10825
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10826
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10827
f_charbig = CONCAT('===',f_char1,'===');
 
10828
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10829
BEGIN
 
10830
SET new.f_int1 = @my_max1 + @counter,
 
10831
new.f_int2 = @my_min2 - @counter,
 
10832
new.f_charbig = '####updated per insert trigger####';
 
10833
SET @counter = @counter + 1;
 
10834
END|
 
10835
SET @counter = 1;
 
10836
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10837
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10838
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10839
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10841
ORDER BY f_int1;
 
10842
DROP TRIGGER trg_3;
 
10843
        
 
10844
# check trigger-11 success:     1
 
10845
DELETE FROM t1
 
10846
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10847
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10848
AND f_charbig = '####updated per insert trigger####';
 
10849
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10850
BEGIN
 
10851
SET new.f_int1 = @my_max1 + @counter,
 
10852
new.f_int2 = @my_min2 - @counter,
 
10853
new.f_charbig = '####updated per insert trigger####';
 
10854
SET @counter = @counter + 1;
 
10855
END|
 
10856
SET @counter = 1;
 
10857
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10858
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10859
SELECT CAST(f_int1 AS CHAR),
 
10860
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10861
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10862
ORDER BY f_int1;
 
10863
DROP TRIGGER trg_3;
 
10864
        
 
10865
# check trigger-12 success:     1
 
10866
DELETE FROM t1
 
10867
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10868
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10869
AND f_charbig = '####updated per insert trigger####';
 
10870
ANALYZE  TABLE t1;
 
10871
Table   Op      Msg_type        Msg_text
 
10872
test.t1 analyze status  OK
 
10873
CHECK    TABLE t1 EXTENDED;
 
10874
Table   Op      Msg_type        Msg_text
 
10875
test.t1 check   status  OK
 
10876
CHECKSUM TABLE t1 EXTENDED;
 
10877
Table   Checksum
 
10878
test.t1 <some_value>
 
10879
OPTIMIZE TABLE t1;
 
10880
Table   Op      Msg_type        Msg_text
 
10881
test.t1 optimize        status  OK
 
10882
# check layout success:    1
 
10883
REPAIR   TABLE t1 EXTENDED;
 
10884
Table   Op      Msg_type        Msg_text
 
10885
test.t1 repair  note    The storage engine for the table doesn't support repair
 
10886
# check layout success:    1
 
10887
TRUNCATE t1;
 
10888
        
 
10889
# check TRUNCATE success:       1
 
10890
# check layout success:    1
 
10891
# End usability test (inc/partition_check.inc)
 
10892
DROP TABLE t1;
 
10893
CREATE TABLE t1 (
 
10894
f_int1 INTEGER,
 
10895
f_int2 INTEGER,
 
10896
f_char1 CHAR(20),
 
10897
f_char2 CHAR(20),
 
10898
f_charbig VARCHAR(1000)
 
10899
 
 
10900
)
 
10901
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
10902
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
10903
(PARTITION part_1 VALUES IN (0),
 
10904
 PARTITION part_2 VALUES IN (1),
 
10905
 PARTITION part_3 VALUES IN (NULL));
 
10906
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10907
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10908
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
10909
ALTER TABLE t1 CHECK PARTITION part_1;
 
10910
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10911
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10912
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10913
# Start usability test (inc/partition_check.inc)
 
10914
create_command
 
10915
SHOW CREATE TABLE t1;
 
10916
Table   Create Table
 
10917
t1      CREATE TABLE `t1` (
 
10918
  `f_int1` int(11) DEFAULT NULL,
 
10919
  `f_int2` int(11) DEFAULT NULL,
 
10920
  `f_char1` char(20) DEFAULT NULL,
 
10921
  `f_char2` char(20) DEFAULT NULL,
 
10922
  `f_charbig` varchar(1000) DEFAULT NULL
 
10923
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
 
10924
 
 
10925
# check prerequisites-1 success:    1
 
10926
# check COUNT(*) success:    1
 
10927
# check MIN/MAX(f_int1) success:    1
 
10928
# check MIN/MAX(f_int2) success:    1
 
10929
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10930
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10931
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10932
WHERE f_int1 IN (2,3);
 
10933
# check prerequisites-3 success:    1
 
10934
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10935
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
10936
# check read via f_int1 success: 1
 
10937
# check read via f_int2 success: 1
 
10938
        
 
10939
# check multiple-1 success:     1
 
10940
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
10941
        
 
10942
# check multiple-2 success:     1
 
10943
INSERT INTO t1 SELECT * FROM t0_template
 
10944
WHERE MOD(f_int1,3) = 0;
 
10945
        
 
10946
# check multiple-3 success:     1
 
10947
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
10948
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
10949
AND @max_row_div2 + @max_row_div4;
 
10950
        
 
10951
# check multiple-4 success:     1
 
10952
DELETE FROM t1
 
10953
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
10954
AND @max_row_div2 + @max_row_div4 + @max_row;
 
10955
        
 
10956
# check multiple-5 success:     1
 
10957
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
10958
INSERT INTO t1
 
10959
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10960
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10961
f_charbig = '#SINGLE#';
 
10962
        
 
10963
# check single-1 success:       1
 
10964
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
10965
INSERT INTO t1
 
10966
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10967
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10968
f_charbig = '#SINGLE#';
 
10969
        
 
10970
# check single-2 success:       1
 
10971
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
10972
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
10973
UPDATE t1 SET f_int1 = @cur_value2
 
10974
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
10975
        
 
10976
# check single-3 success:       1
 
10977
SET @cur_value1= -1;
 
10978
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10979
UPDATE t1 SET f_int1 = @cur_value1
 
10980
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10981
        
 
10982
# check single-4 success:       1
 
10983
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10984
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10985
        
 
10986
# check single-5 success:       1
 
10987
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10988
        
 
10989
# check single-6 success:       1
 
10990
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10991
        
 
10992
# check single-7 success:       1
 
10993
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
10994
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10995
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10996
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10997
f_charbig = '#NULL#';
 
10998
INSERT INTO t1
 
10999
SET f_int1 = NULL , f_int2 = -@max_row,
 
11000
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11001
f_charbig = '#NULL#';
 
11002
# check null success:    1
 
11003
        
 
11004
# check null-1 success:         1
 
11005
UPDATE t1 SET f_int1 = -@max_row
 
11006
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11007
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11008
        
 
11009
# check null-2 success:         1
 
11010
UPDATE t1 SET f_int1 = NULL
 
11011
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11012
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11013
        
 
11014
# check null-3 success:         1
 
11015
DELETE FROM t1
 
11016
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11017
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11018
        
 
11019
# check null-4 success:         1
 
11020
DELETE FROM t1
 
11021
WHERE f_int1 = 0 AND f_int2 = 0
 
11022
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11023
AND f_charbig = '#NULL#';
 
11024
SET AUTOCOMMIT= 0;
 
11025
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11026
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11027
FROM t0_template source_tab
 
11028
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11029
        
 
11030
# check transactions-1 success:         1
 
11031
COMMIT WORK;
 
11032
        
 
11033
# check transactions-2 success:         1
 
11034
ROLLBACK WORK;
 
11035
        
 
11036
# check transactions-3 success:         1
 
11037
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11038
COMMIT WORK;
 
11039
ROLLBACK WORK;
 
11040
        
 
11041
# check transactions-4 success:         1
 
11042
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11043
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11044
FROM t0_template source_tab
 
11045
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11046
        
 
11047
# check transactions-5 success:         1
 
11048
ROLLBACK WORK;
 
11049
        
 
11050
# check transactions-6 success:         1
 
11051
# INFO: Storage engine used for t1 seems to be transactional.
 
11052
COMMIT;
 
11053
        
 
11054
# check transactions-7 success:         1
 
11055
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11056
COMMIT WORK;
 
11057
SET @@session.sql_mode = 'traditional';
 
11058
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11059
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11060
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11061
'', '', 'was inserted' FROM t0_template
 
11062
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11063
ERROR 22012: Division by 0
 
11064
COMMIT;
 
11065
        
 
11066
# check transactions-8 success:         1
 
11067
# INFO: Storage engine used for t1 seems to be able to revert
 
11068
#       changes made by the failing statement.
 
11069
SET @@session.sql_mode = '';
 
11070
SET AUTOCOMMIT= 1;
 
11071
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11072
COMMIT WORK;
 
11073
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11074
        
 
11075
# check special-1 success:      1
 
11076
UPDATE t1 SET f_charbig = '';
 
11077
        
 
11078
# check special-2 success:      1
 
11079
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11080
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11081
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11082
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11083
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11084
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11085
'just inserted' FROM t0_template
 
11086
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11087
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11088
BEGIN
 
11089
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11090
f_charbig = 'updated by trigger'
 
11091
      WHERE f_int1 = new.f_int1;
 
11092
END|
 
11093
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11094
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11095
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11096
        
 
11097
# check trigger-1 success:      1
 
11098
DROP TRIGGER trg_1;
 
11099
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11100
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11101
f_charbig = 'just inserted'
 
11102
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11103
DELETE FROM t0_aux
 
11104
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11105
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11106
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11107
'just inserted' FROM t0_template
 
11108
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11109
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
11110
BEGIN
 
11111
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11112
f_charbig = 'updated by trigger'
 
11113
      WHERE f_int1 = new.f_int1;
 
11114
END|
 
11115
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11116
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11117
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11118
        
 
11119
# check trigger-2 success:      1
 
11120
DROP TRIGGER trg_1;
 
11121
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11122
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11123
f_charbig = 'just inserted'
 
11124
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11125
DELETE FROM t0_aux
 
11126
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11127
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11128
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11129
'just inserted' FROM t0_template
 
11130
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11131
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11132
BEGIN
 
11133
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11134
f_charbig = 'updated by trigger'
 
11135
      WHERE f_int1 = new.f_int1;
 
11136
END|
 
11137
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11138
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11139
        
 
11140
# check trigger-3 success:      1
 
11141
DROP TRIGGER trg_1;
 
11142
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11143
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11144
f_charbig = 'just inserted'
 
11145
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11146
DELETE FROM t0_aux
 
11147
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11148
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11149
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11150
'just inserted' FROM t0_template
 
11151
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11152
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11153
BEGIN
 
11154
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11155
f_charbig = 'updated by trigger'
 
11156
      WHERE f_int1 = - old.f_int1;
 
11157
END|
 
11158
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11159
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11160
        
 
11161
# check trigger-4 success:      1
 
11162
DROP TRIGGER trg_1;
 
11163
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11164
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11165
f_charbig = 'just inserted'
 
11166
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11167
DELETE FROM t0_aux
 
11168
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11169
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11170
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11171
'just inserted' FROM t0_template
 
11172
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11173
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11174
BEGIN
 
11175
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11176
f_charbig = 'updated by trigger'
 
11177
      WHERE f_int1 = new.f_int1;
 
11178
END|
 
11179
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11180
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11181
        
 
11182
# check trigger-5 success:      1
 
11183
DROP TRIGGER trg_1;
 
11184
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11185
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11186
f_charbig = 'just inserted'
 
11187
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11188
DELETE FROM t0_aux
 
11189
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11190
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11191
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11192
'just inserted' FROM t0_template
 
11193
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11194
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11195
BEGIN
 
11196
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11197
f_charbig = 'updated by trigger'
 
11198
      WHERE f_int1 = - old.f_int1;
 
11199
END|
 
11200
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11201
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11202
        
 
11203
# check trigger-6 success:      1
 
11204
DROP TRIGGER trg_1;
 
11205
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11206
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11207
f_charbig = 'just inserted'
 
11208
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11209
DELETE FROM t0_aux
 
11210
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11211
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11212
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11213
'just inserted' FROM t0_template
 
11214
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11215
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
11216
BEGIN
 
11217
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11218
f_charbig = 'updated by trigger'
 
11219
      WHERE f_int1 = - old.f_int1;
 
11220
END|
 
11221
DELETE FROM t0_aux
 
11222
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11223
        
 
11224
# check trigger-7 success:      1
 
11225
DROP TRIGGER trg_1;
 
11226
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11227
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11228
f_charbig = 'just inserted'
 
11229
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11230
DELETE FROM t0_aux
 
11231
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11232
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11233
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11234
'just inserted' FROM t0_template
 
11235
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11236
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
11237
BEGIN
 
11238
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11239
f_charbig = 'updated by trigger'
 
11240
      WHERE f_int1 = - old.f_int1;
 
11241
END|
 
11242
DELETE FROM t0_aux
 
11243
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11244
        
 
11245
# check trigger-8 success:      1
 
11246
DROP TRIGGER trg_1;
 
11247
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11248
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11249
f_charbig = 'just inserted'
 
11250
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11251
DELETE FROM t0_aux
 
11252
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11253
DELETE FROM t1
 
11254
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11255
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11256
BEGIN
 
11257
SET new.f_int1 = old.f_int1 + @max_row,
 
11258
new.f_int2 = old.f_int2 - @max_row,
 
11259
new.f_charbig = '####updated per update trigger####';
 
11260
END|
 
11261
UPDATE t1
 
11262
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11263
f_charbig = '####updated per update statement itself####';
 
11264
        
 
11265
# check trigger-9 success:      1
 
11266
DROP TRIGGER trg_2;
 
11267
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11268
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11269
f_charbig = CONCAT('===',f_char1,'===');
 
11270
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11271
BEGIN
 
11272
SET new.f_int1 = new.f_int1 + @max_row,
 
11273
new.f_int2 = new.f_int2 - @max_row,
 
11274
new.f_charbig = '####updated per update trigger####';
 
11275
END|
 
11276
UPDATE t1
 
11277
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11278
f_charbig = '####updated per update statement itself####';
 
11279
        
 
11280
# check trigger-10 success:     1
 
11281
DROP TRIGGER trg_2;
 
11282
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11283
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11284
f_charbig = CONCAT('===',f_char1,'===');
 
11285
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11286
BEGIN
 
11287
SET new.f_int1 = @my_max1 + @counter,
 
11288
new.f_int2 = @my_min2 - @counter,
 
11289
new.f_charbig = '####updated per insert trigger####';
 
11290
SET @counter = @counter + 1;
 
11291
END|
 
11292
SET @counter = 1;
 
11293
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11294
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11295
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11296
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11297
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11298
ORDER BY f_int1;
 
11299
DROP TRIGGER trg_3;
 
11300
        
 
11301
# check trigger-11 success:     1
 
11302
DELETE FROM t1
 
11303
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11304
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11305
AND f_charbig = '####updated per insert trigger####';
 
11306
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11307
BEGIN
 
11308
SET new.f_int1 = @my_max1 + @counter,
 
11309
new.f_int2 = @my_min2 - @counter,
 
11310
new.f_charbig = '####updated per insert trigger####';
 
11311
SET @counter = @counter + 1;
 
11312
END|
 
11313
SET @counter = 1;
 
11314
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11315
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
11316
SELECT CAST(f_int1 AS CHAR),
 
11317
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11318
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11319
ORDER BY f_int1;
 
11320
DROP TRIGGER trg_3;
 
11321
        
 
11322
# check trigger-12 success:     1
 
11323
DELETE FROM t1
 
11324
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11325
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11326
AND f_charbig = '####updated per insert trigger####';
 
11327
ANALYZE  TABLE t1;
 
11328
Table   Op      Msg_type        Msg_text
 
11329
test.t1 analyze status  OK
 
11330
CHECK    TABLE t1 EXTENDED;
 
11331
Table   Op      Msg_type        Msg_text
 
11332
test.t1 check   status  OK
 
11333
CHECKSUM TABLE t1 EXTENDED;
 
11334
Table   Checksum
 
11335
test.t1 <some_value>
 
11336
OPTIMIZE TABLE t1;
 
11337
Table   Op      Msg_type        Msg_text
 
11338
test.t1 optimize        status  OK
 
11339
# check layout success:    1
 
11340
REPAIR   TABLE t1 EXTENDED;
 
11341
Table   Op      Msg_type        Msg_text
 
11342
test.t1 repair  note    The storage engine for the table doesn't support repair
 
11343
# check layout success:    1
 
11344
TRUNCATE t1;
 
11345
        
 
11346
# check TRUNCATE success:       1
 
11347
# check layout success:    1
 
11348
# End usability test (inc/partition_check.inc)
 
11349
DROP TABLE t1;
 
11350
#  2.2 ALTER ... CHECK PARTITION part_1,part_2;
 
11351
DROP TABLE IF EXISTS t1;
 
11352
CREATE TABLE t1 (
 
11353
f_int1 INTEGER,
 
11354
f_int2 INTEGER,
 
11355
f_char1 CHAR(20),
 
11356
f_char2 CHAR(20),
 
11357
f_charbig VARCHAR(1000)
 
11358
 
 
11359
)
 
11360
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
11361
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11362
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11363
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
11364
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
 
11365
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11366
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11367
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11368
# Start usability test (inc/partition_check.inc)
 
11369
create_command
 
11370
SHOW CREATE TABLE t1;
 
11371
Table   Create Table
 
11372
t1      CREATE TABLE `t1` (
 
11373
  `f_int1` int(11) DEFAULT NULL,
 
11374
  `f_int2` int(11) DEFAULT NULL,
 
11375
  `f_char1` char(20) DEFAULT NULL,
 
11376
  `f_char2` char(20) DEFAULT NULL,
 
11377
  `f_charbig` varchar(1000) DEFAULT NULL
 
11378
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
 
11379
 
 
11380
# check prerequisites-1 success:    1
 
11381
# check COUNT(*) success:    1
 
11382
# check MIN/MAX(f_int1) success:    1
 
11383
# check MIN/MAX(f_int2) success:    1
 
11384
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11385
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11386
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
11387
WHERE f_int1 IN (2,3);
 
11388
# check prerequisites-3 success:    1
 
11389
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11390
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
11391
# check read via f_int1 success: 1
 
11392
# check read via f_int2 success: 1
 
11393
        
 
11394
# check multiple-1 success:     1
 
11395
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11396
        
 
11397
# check multiple-2 success:     1
 
11398
INSERT INTO t1 SELECT * FROM t0_template
 
11399
WHERE MOD(f_int1,3) = 0;
 
11400
        
 
11401
# check multiple-3 success:     1
 
11402
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11403
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11404
AND @max_row_div2 + @max_row_div4;
 
11405
        
 
11406
# check multiple-4 success:     1
 
11407
DELETE FROM t1
 
11408
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11409
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11410
        
 
11411
# check multiple-5 success:     1
 
11412
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11413
INSERT INTO t1
 
11414
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11415
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11416
f_charbig = '#SINGLE#';
 
11417
        
 
11418
# check single-1 success:       1
 
11419
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11420
INSERT INTO t1
 
11421
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11422
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11423
f_charbig = '#SINGLE#';
 
11424
        
 
11425
# check single-2 success:       1
 
11426
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11427
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11428
UPDATE t1 SET f_int1 = @cur_value2
 
11429
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11430
        
 
11431
# check single-3 success:       1
 
11432
SET @cur_value1= -1;
 
11433
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11434
UPDATE t1 SET f_int1 = @cur_value1
 
11435
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11436
        
 
11437
# check single-4 success:       1
 
11438
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11439
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11440
        
 
11441
# check single-5 success:       1
 
11442
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11443
        
 
11444
# check single-6 success:       1
 
11445
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11446
        
 
11447
# check single-7 success:       1
 
11448
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
11449
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11450
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11451
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11452
f_charbig = '#NULL#';
 
11453
INSERT INTO t1
 
11454
SET f_int1 = NULL , f_int2 = -@max_row,
 
11455
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11456
f_charbig = '#NULL#';
 
11457
# check null success:    1
 
11458
        
 
11459
# check null-1 success:         1
 
11460
UPDATE t1 SET f_int1 = -@max_row
 
11461
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11462
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11463
        
 
11464
# check null-2 success:         1
 
11465
UPDATE t1 SET f_int1 = NULL
 
11466
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11467
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11468
        
 
11469
# check null-3 success:         1
 
11470
DELETE FROM t1
 
11471
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11472
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11473
        
 
11474
# check null-4 success:         1
 
11475
DELETE FROM t1
 
11476
WHERE f_int1 = 0 AND f_int2 = 0
 
11477
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11478
AND f_charbig = '#NULL#';
 
11479
SET AUTOCOMMIT= 0;
 
11480
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11481
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11482
FROM t0_template source_tab
 
11483
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11484
        
 
11485
# check transactions-1 success:         1
 
11486
COMMIT WORK;
 
11487
        
 
11488
# check transactions-2 success:         1
 
11489
ROLLBACK WORK;
 
11490
        
 
11491
# check transactions-3 success:         1
 
11492
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11493
COMMIT WORK;
 
11494
ROLLBACK WORK;
 
11495
        
 
11496
# check transactions-4 success:         1
 
11497
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11498
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11499
FROM t0_template source_tab
 
11500
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11501
        
 
11502
# check transactions-5 success:         1
 
11503
ROLLBACK WORK;
 
11504
        
 
11505
# check transactions-6 success:         1
 
11506
# INFO: Storage engine used for t1 seems to be transactional.
 
11507
COMMIT;
 
11508
        
 
11509
# check transactions-7 success:         1
 
11510
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11511
COMMIT WORK;
 
11512
SET @@session.sql_mode = 'traditional';
 
11513
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11514
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11515
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11516
'', '', 'was inserted' FROM t0_template
 
11517
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11518
ERROR 22012: Division by 0
 
11519
COMMIT;
 
11520
        
 
11521
# check transactions-8 success:         1
 
11522
# INFO: Storage engine used for t1 seems to be able to revert
 
11523
#       changes made by the failing statement.
 
11524
SET @@session.sql_mode = '';
 
11525
SET AUTOCOMMIT= 1;
 
11526
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11527
COMMIT WORK;
 
11528
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11529
        
 
11530
# check special-1 success:      1
 
11531
UPDATE t1 SET f_charbig = '';
 
11532
        
 
11533
# check special-2 success:      1
 
11534
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11535
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11536
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11537
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11538
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11539
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11540
'just inserted' FROM t0_template
 
11541
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11542
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11543
BEGIN
 
11544
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11545
f_charbig = 'updated by trigger'
 
11546
      WHERE f_int1 = new.f_int1;
 
11547
END|
 
11548
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11549
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11550
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11551
        
 
11552
# check trigger-1 success:      1
 
11553
DROP TRIGGER trg_1;
 
11554
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11555
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11556
f_charbig = 'just inserted'
 
11557
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11558
DELETE FROM t0_aux
 
11559
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11560
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11561
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11562
'just inserted' FROM t0_template
 
11563
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11564
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
11565
BEGIN
 
11566
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11567
f_charbig = 'updated by trigger'
 
11568
      WHERE f_int1 = new.f_int1;
 
11569
END|
 
11570
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11571
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11572
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11573
        
 
11574
# check trigger-2 success:      1
 
11575
DROP TRIGGER trg_1;
 
11576
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11577
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11578
f_charbig = 'just inserted'
 
11579
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11580
DELETE FROM t0_aux
 
11581
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11582
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11583
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11584
'just inserted' FROM t0_template
 
11585
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11586
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11587
BEGIN
 
11588
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11589
f_charbig = 'updated by trigger'
 
11590
      WHERE f_int1 = new.f_int1;
 
11591
END|
 
11592
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11593
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11594
        
 
11595
# check trigger-3 success:      1
 
11596
DROP TRIGGER trg_1;
 
11597
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11598
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11599
f_charbig = 'just inserted'
 
11600
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11601
DELETE FROM t0_aux
 
11602
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11603
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11604
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11605
'just inserted' FROM t0_template
 
11606
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11607
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11608
BEGIN
 
11609
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11610
f_charbig = 'updated by trigger'
 
11611
      WHERE f_int1 = - old.f_int1;
 
11612
END|
 
11613
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11614
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11615
        
 
11616
# check trigger-4 success:      1
 
11617
DROP TRIGGER trg_1;
 
11618
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11619
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11620
f_charbig = 'just inserted'
 
11621
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11622
DELETE FROM t0_aux
 
11623
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11624
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11625
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11626
'just inserted' FROM t0_template
 
11627
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11628
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11629
BEGIN
 
11630
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11631
f_charbig = 'updated by trigger'
 
11632
      WHERE f_int1 = new.f_int1;
 
11633
END|
 
11634
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11635
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11636
        
 
11637
# check trigger-5 success:      1
 
11638
DROP TRIGGER trg_1;
 
11639
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11640
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11641
f_charbig = 'just inserted'
 
11642
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11643
DELETE FROM t0_aux
 
11644
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11645
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11646
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11647
'just inserted' FROM t0_template
 
11648
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11649
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11650
BEGIN
 
11651
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11652
f_charbig = 'updated by trigger'
 
11653
      WHERE f_int1 = - old.f_int1;
 
11654
END|
 
11655
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11656
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11657
        
 
11658
# check trigger-6 success:      1
 
11659
DROP TRIGGER trg_1;
 
11660
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11661
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11662
f_charbig = 'just inserted'
 
11663
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11664
DELETE FROM t0_aux
 
11665
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11666
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11667
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11668
'just inserted' FROM t0_template
 
11669
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11670
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
11671
BEGIN
 
11672
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11673
f_charbig = 'updated by trigger'
 
11674
      WHERE f_int1 = - old.f_int1;
 
11675
END|
 
11676
DELETE FROM t0_aux
 
11677
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11678
        
 
11679
# check trigger-7 success:      1
 
11680
DROP TRIGGER trg_1;
 
11681
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11682
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11683
f_charbig = 'just inserted'
 
11684
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11685
DELETE FROM t0_aux
 
11686
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11687
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11688
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11689
'just inserted' FROM t0_template
 
11690
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11691
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
11692
BEGIN
 
11693
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11694
f_charbig = 'updated by trigger'
 
11695
      WHERE f_int1 = - old.f_int1;
 
11696
END|
 
11697
DELETE FROM t0_aux
 
11698
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11699
        
 
11700
# check trigger-8 success:      1
 
11701
DROP TRIGGER trg_1;
 
11702
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11703
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11704
f_charbig = 'just inserted'
 
11705
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11706
DELETE FROM t0_aux
 
11707
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11708
DELETE FROM t1
 
11709
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11710
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11711
BEGIN
 
11712
SET new.f_int1 = old.f_int1 + @max_row,
 
11713
new.f_int2 = old.f_int2 - @max_row,
 
11714
new.f_charbig = '####updated per update trigger####';
 
11715
END|
 
11716
UPDATE t1
 
11717
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11718
f_charbig = '####updated per update statement itself####';
 
11719
        
 
11720
# check trigger-9 success:      1
 
11721
DROP TRIGGER trg_2;
 
11722
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11723
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11724
f_charbig = CONCAT('===',f_char1,'===');
 
11725
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11726
BEGIN
 
11727
SET new.f_int1 = new.f_int1 + @max_row,
 
11728
new.f_int2 = new.f_int2 - @max_row,
 
11729
new.f_charbig = '####updated per update trigger####';
 
11730
END|
 
11731
UPDATE t1
 
11732
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11733
f_charbig = '####updated per update statement itself####';
 
11734
        
 
11735
# check trigger-10 success:     1
 
11736
DROP TRIGGER trg_2;
 
11737
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11738
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11739
f_charbig = CONCAT('===',f_char1,'===');
 
11740
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11741
BEGIN
 
11742
SET new.f_int1 = @my_max1 + @counter,
 
11743
new.f_int2 = @my_min2 - @counter,
 
11744
new.f_charbig = '####updated per insert trigger####';
 
11745
SET @counter = @counter + 1;
 
11746
END|
 
11747
SET @counter = 1;
 
11748
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11749
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11750
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11751
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11752
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11753
ORDER BY f_int1;
 
11754
DROP TRIGGER trg_3;
 
11755
        
 
11756
# check trigger-11 success:     1
 
11757
DELETE FROM t1
 
11758
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11759
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11760
AND f_charbig = '####updated per insert trigger####';
 
11761
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11762
BEGIN
 
11763
SET new.f_int1 = @my_max1 + @counter,
 
11764
new.f_int2 = @my_min2 - @counter,
 
11765
new.f_charbig = '####updated per insert trigger####';
 
11766
SET @counter = @counter + 1;
 
11767
END|
 
11768
SET @counter = 1;
 
11769
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11770
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
11771
SELECT CAST(f_int1 AS CHAR),
 
11772
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11773
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11774
ORDER BY f_int1;
 
11775
DROP TRIGGER trg_3;
 
11776
        
 
11777
# check trigger-12 success:     1
 
11778
DELETE FROM t1
 
11779
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11780
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11781
AND f_charbig = '####updated per insert trigger####';
 
11782
ANALYZE  TABLE t1;
 
11783
Table   Op      Msg_type        Msg_text
 
11784
test.t1 analyze status  OK
 
11785
CHECK    TABLE t1 EXTENDED;
 
11786
Table   Op      Msg_type        Msg_text
 
11787
test.t1 check   status  OK
 
11788
CHECKSUM TABLE t1 EXTENDED;
 
11789
Table   Checksum
 
11790
test.t1 <some_value>
 
11791
OPTIMIZE TABLE t1;
 
11792
Table   Op      Msg_type        Msg_text
 
11793
test.t1 optimize        status  OK
 
11794
# check layout success:    1
 
11795
REPAIR   TABLE t1 EXTENDED;
 
11796
Table   Op      Msg_type        Msg_text
 
11797
test.t1 repair  note    The storage engine for the table doesn't support repair
 
11798
# check layout success:    1
 
11799
TRUNCATE t1;
 
11800
        
 
11801
# check TRUNCATE success:       1
 
11802
# check layout success:    1
 
11803
# End usability test (inc/partition_check.inc)
 
11804
DROP TABLE t1;
 
11805
CREATE TABLE t1 (
 
11806
f_int1 INTEGER,
 
11807
f_int2 INTEGER,
 
11808
f_char1 CHAR(20),
 
11809
f_char2 CHAR(20),
 
11810
f_charbig VARCHAR(1000)
 
11811
 
 
11812
)
 
11813
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
11814
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11815
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11816
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
11817
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
 
11818
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11819
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11820
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11821
# Start usability test (inc/partition_check.inc)
 
11822
create_command
 
11823
SHOW CREATE TABLE t1;
 
11824
Table   Create Table
 
11825
t1      CREATE TABLE `t1` (
 
11826
  `f_int1` int(11) DEFAULT NULL,
 
11827
  `f_int2` int(11) DEFAULT NULL,
 
11828
  `f_char1` char(20) DEFAULT NULL,
 
11829
  `f_char2` char(20) DEFAULT NULL,
 
11830
  `f_charbig` varchar(1000) DEFAULT NULL
 
11831
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
 
11832
 
 
11833
# check prerequisites-1 success:    1
 
11834
# check COUNT(*) success:    1
 
11835
# check MIN/MAX(f_int1) success:    1
 
11836
# check MIN/MAX(f_int2) success:    1
 
11837
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11838
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11839
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
11840
WHERE f_int1 IN (2,3);
 
11841
# check prerequisites-3 success:    1
 
11842
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11843
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
11844
# check read via f_int1 success: 1
 
11845
# check read via f_int2 success: 1
 
11846
        
 
11847
# check multiple-1 success:     1
 
11848
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11849
        
 
11850
# check multiple-2 success:     1
 
11851
INSERT INTO t1 SELECT * FROM t0_template
 
11852
WHERE MOD(f_int1,3) = 0;
 
11853
        
 
11854
# check multiple-3 success:     1
 
11855
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11856
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11857
AND @max_row_div2 + @max_row_div4;
 
11858
        
 
11859
# check multiple-4 success:     1
 
11860
DELETE FROM t1
 
11861
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11862
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11863
        
 
11864
# check multiple-5 success:     1
 
11865
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11866
INSERT INTO t1
 
11867
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11868
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11869
f_charbig = '#SINGLE#';
 
11870
        
 
11871
# check single-1 success:       1
 
11872
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11873
INSERT INTO t1
 
11874
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11875
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11876
f_charbig = '#SINGLE#';
 
11877
        
 
11878
# check single-2 success:       1
 
11879
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11880
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11881
UPDATE t1 SET f_int1 = @cur_value2
 
11882
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11883
        
 
11884
# check single-3 success:       1
 
11885
SET @cur_value1= -1;
 
11886
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11887
UPDATE t1 SET f_int1 = @cur_value1
 
11888
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11889
        
 
11890
# check single-4 success:       1
 
11891
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11892
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11893
        
 
11894
# check single-5 success:       1
 
11895
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11896
        
 
11897
# check single-6 success:       1
 
11898
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11899
        
 
11900
# check single-7 success:       1
 
11901
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
11902
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11903
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11904
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11905
f_charbig = '#NULL#';
 
11906
INSERT INTO t1
 
11907
SET f_int1 = NULL , f_int2 = -@max_row,
 
11908
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11909
f_charbig = '#NULL#';
 
11910
# check null success:    1
 
11911
        
 
11912
# check null-1 success:         1
 
11913
UPDATE t1 SET f_int1 = -@max_row
 
11914
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11915
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11916
        
 
11917
# check null-2 success:         1
 
11918
UPDATE t1 SET f_int1 = NULL
 
11919
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11920
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11921
        
 
11922
# check null-3 success:         1
 
11923
DELETE FROM t1
 
11924
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11925
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11926
        
 
11927
# check null-4 success:         1
 
11928
DELETE FROM t1
 
11929
WHERE f_int1 = 0 AND f_int2 = 0
 
11930
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11931
AND f_charbig = '#NULL#';
 
11932
SET AUTOCOMMIT= 0;
 
11933
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11934
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11935
FROM t0_template source_tab
 
11936
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11937
        
 
11938
# check transactions-1 success:         1
 
11939
COMMIT WORK;
 
11940
        
 
11941
# check transactions-2 success:         1
 
11942
ROLLBACK WORK;
 
11943
        
 
11944
# check transactions-3 success:         1
 
11945
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11946
COMMIT WORK;
 
11947
ROLLBACK WORK;
 
11948
        
 
11949
# check transactions-4 success:         1
 
11950
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11951
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11952
FROM t0_template source_tab
 
11953
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11954
        
 
11955
# check transactions-5 success:         1
 
11956
ROLLBACK WORK;
 
11957
        
 
11958
# check transactions-6 success:         1
 
11959
# INFO: Storage engine used for t1 seems to be transactional.
 
11960
COMMIT;
 
11961
        
 
11962
# check transactions-7 success:         1
 
11963
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11964
COMMIT WORK;
 
11965
SET @@session.sql_mode = 'traditional';
 
11966
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11967
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11968
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11969
'', '', 'was inserted' FROM t0_template
 
11970
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11971
ERROR 22012: Division by 0
 
11972
COMMIT;
 
11973
        
 
11974
# check transactions-8 success:         1
 
11975
# INFO: Storage engine used for t1 seems to be able to revert
 
11976
#       changes made by the failing statement.
 
11977
SET @@session.sql_mode = '';
 
11978
SET AUTOCOMMIT= 1;
 
11979
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11980
COMMIT WORK;
 
11981
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11982
        
 
11983
# check special-1 success:      1
 
11984
UPDATE t1 SET f_charbig = '';
 
11985
        
 
11986
# check special-2 success:      1
 
11987
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11988
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11989
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11990
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11991
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11992
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11993
'just inserted' FROM t0_template
 
11994
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11995
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11996
BEGIN
 
11997
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11998
f_charbig = 'updated by trigger'
 
11999
      WHERE f_int1 = new.f_int1;
 
12000
END|
 
12001
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12002
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12003
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12004
        
 
12005
# check trigger-1 success:      1
 
12006
DROP TRIGGER trg_1;
 
12007
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12008
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12009
f_charbig = 'just inserted'
 
12010
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12011
DELETE FROM t0_aux
 
12012
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12013
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12014
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12015
'just inserted' FROM t0_template
 
12016
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12017
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12018
BEGIN
 
12019
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12020
f_charbig = 'updated by trigger'
 
12021
      WHERE f_int1 = new.f_int1;
 
12022
END|
 
12023
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12024
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12025
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12026
        
 
12027
# check trigger-2 success:      1
 
12028
DROP TRIGGER trg_1;
 
12029
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12030
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12031
f_charbig = 'just inserted'
 
12032
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12033
DELETE FROM t0_aux
 
12034
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12035
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12036
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12037
'just inserted' FROM t0_template
 
12038
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12039
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12040
BEGIN
 
12041
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12042
f_charbig = 'updated by trigger'
 
12043
      WHERE f_int1 = new.f_int1;
 
12044
END|
 
12045
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12046
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12047
        
 
12048
# check trigger-3 success:      1
 
12049
DROP TRIGGER trg_1;
 
12050
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12051
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12052
f_charbig = 'just inserted'
 
12053
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12054
DELETE FROM t0_aux
 
12055
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12056
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12057
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12058
'just inserted' FROM t0_template
 
12059
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12060
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12061
BEGIN
 
12062
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12063
f_charbig = 'updated by trigger'
 
12064
      WHERE f_int1 = - old.f_int1;
 
12065
END|
 
12066
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12067
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12068
        
 
12069
# check trigger-4 success:      1
 
12070
DROP TRIGGER trg_1;
 
12071
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12072
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12073
f_charbig = 'just inserted'
 
12074
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12075
DELETE FROM t0_aux
 
12076
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12077
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12078
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12079
'just inserted' FROM t0_template
 
12080
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12081
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12082
BEGIN
 
12083
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12084
f_charbig = 'updated by trigger'
 
12085
      WHERE f_int1 = new.f_int1;
 
12086
END|
 
12087
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12088
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12089
        
 
12090
# check trigger-5 success:      1
 
12091
DROP TRIGGER trg_1;
 
12092
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12093
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12094
f_charbig = 'just inserted'
 
12095
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12096
DELETE FROM t0_aux
 
12097
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12098
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12099
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12100
'just inserted' FROM t0_template
 
12101
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12102
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12103
BEGIN
 
12104
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12105
f_charbig = 'updated by trigger'
 
12106
      WHERE f_int1 = - old.f_int1;
 
12107
END|
 
12108
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12109
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12110
        
 
12111
# check trigger-6 success:      1
 
12112
DROP TRIGGER trg_1;
 
12113
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12114
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12115
f_charbig = 'just inserted'
 
12116
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12117
DELETE FROM t0_aux
 
12118
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12119
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12120
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12121
'just inserted' FROM t0_template
 
12122
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12123
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12124
BEGIN
 
12125
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12126
f_charbig = 'updated by trigger'
 
12127
      WHERE f_int1 = - old.f_int1;
 
12128
END|
 
12129
DELETE FROM t0_aux
 
12130
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12131
        
 
12132
# check trigger-7 success:      1
 
12133
DROP TRIGGER trg_1;
 
12134
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12135
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12136
f_charbig = 'just inserted'
 
12137
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12138
DELETE FROM t0_aux
 
12139
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12140
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12141
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12142
'just inserted' FROM t0_template
 
12143
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12144
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12145
BEGIN
 
12146
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12147
f_charbig = 'updated by trigger'
 
12148
      WHERE f_int1 = - old.f_int1;
 
12149
END|
 
12150
DELETE FROM t0_aux
 
12151
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12152
        
 
12153
# check trigger-8 success:      1
 
12154
DROP TRIGGER trg_1;
 
12155
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12156
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12157
f_charbig = 'just inserted'
 
12158
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12159
DELETE FROM t0_aux
 
12160
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12161
DELETE FROM t1
 
12162
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12163
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12164
BEGIN
 
12165
SET new.f_int1 = old.f_int1 + @max_row,
 
12166
new.f_int2 = old.f_int2 - @max_row,
 
12167
new.f_charbig = '####updated per update trigger####';
 
12168
END|
 
12169
UPDATE t1
 
12170
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12171
f_charbig = '####updated per update statement itself####';
 
12172
        
 
12173
# check trigger-9 success:      1
 
12174
DROP TRIGGER trg_2;
 
12175
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12176
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12177
f_charbig = CONCAT('===',f_char1,'===');
 
12178
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12179
BEGIN
 
12180
SET new.f_int1 = new.f_int1 + @max_row,
 
12181
new.f_int2 = new.f_int2 - @max_row,
 
12182
new.f_charbig = '####updated per update trigger####';
 
12183
END|
 
12184
UPDATE t1
 
12185
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12186
f_charbig = '####updated per update statement itself####';
 
12187
        
 
12188
# check trigger-10 success:     1
 
12189
DROP TRIGGER trg_2;
 
12190
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12191
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12192
f_charbig = CONCAT('===',f_char1,'===');
 
12193
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12194
BEGIN
 
12195
SET new.f_int1 = @my_max1 + @counter,
 
12196
new.f_int2 = @my_min2 - @counter,
 
12197
new.f_charbig = '####updated per insert trigger####';
 
12198
SET @counter = @counter + 1;
 
12199
END|
 
12200
SET @counter = 1;
 
12201
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12202
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12203
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12204
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12205
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12206
ORDER BY f_int1;
 
12207
DROP TRIGGER trg_3;
 
12208
        
 
12209
# check trigger-11 success:     1
 
12210
DELETE FROM t1
 
12211
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12212
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12213
AND f_charbig = '####updated per insert trigger####';
 
12214
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12215
BEGIN
 
12216
SET new.f_int1 = @my_max1 + @counter,
 
12217
new.f_int2 = @my_min2 - @counter,
 
12218
new.f_charbig = '####updated per insert trigger####';
 
12219
SET @counter = @counter + 1;
 
12220
END|
 
12221
SET @counter = 1;
 
12222
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12223
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
12224
SELECT CAST(f_int1 AS CHAR),
 
12225
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12226
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12227
ORDER BY f_int1;
 
12228
DROP TRIGGER trg_3;
 
12229
        
 
12230
# check trigger-12 success:     1
 
12231
DELETE FROM t1
 
12232
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12233
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12234
AND f_charbig = '####updated per insert trigger####';
 
12235
ANALYZE  TABLE t1;
 
12236
Table   Op      Msg_type        Msg_text
 
12237
test.t1 analyze status  OK
 
12238
CHECK    TABLE t1 EXTENDED;
 
12239
Table   Op      Msg_type        Msg_text
 
12240
test.t1 check   status  OK
 
12241
CHECKSUM TABLE t1 EXTENDED;
 
12242
Table   Checksum
 
12243
test.t1 <some_value>
 
12244
OPTIMIZE TABLE t1;
 
12245
Table   Op      Msg_type        Msg_text
 
12246
test.t1 optimize        status  OK
 
12247
# check layout success:    1
 
12248
REPAIR   TABLE t1 EXTENDED;
 
12249
Table   Op      Msg_type        Msg_text
 
12250
test.t1 repair  note    The storage engine for the table doesn't support repair
 
12251
# check layout success:    1
 
12252
TRUNCATE t1;
 
12253
        
 
12254
# check TRUNCATE success:       1
 
12255
# check layout success:    1
 
12256
# End usability test (inc/partition_check.inc)
 
12257
DROP TABLE t1;
 
12258
CREATE TABLE t1 (
 
12259
f_int1 INTEGER,
 
12260
f_int2 INTEGER,
 
12261
f_char1 CHAR(20),
 
12262
f_char2 CHAR(20),
 
12263
f_charbig VARCHAR(1000)
 
12264
 
 
12265
)
 
12266
PARTITION BY LIST(MOD(f_int1,4))
 
12267
(PARTITION part_3 VALUES IN (-3),
 
12268
PARTITION part_2 VALUES IN (-2),
 
12269
PARTITION part_1 VALUES IN (-1),
 
12270
PARTITION part_N VALUES IN (NULL),
 
12271
PARTITION part0 VALUES IN (0),
 
12272
PARTITION part1 VALUES IN (1),
 
12273
PARTITION part2 VALUES IN (2),
 
12274
PARTITION part3 VALUES IN (3));
 
12275
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12276
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12277
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
12278
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
 
12279
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12280
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12281
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12282
# Start usability test (inc/partition_check.inc)
 
12283
create_command
 
12284
SHOW CREATE TABLE t1;
 
12285
Table   Create Table
 
12286
t1      CREATE TABLE `t1` (
 
12287
  `f_int1` int(11) DEFAULT NULL,
 
12288
  `f_int2` int(11) DEFAULT NULL,
 
12289
  `f_char1` char(20) DEFAULT NULL,
 
12290
  `f_char2` char(20) DEFAULT NULL,
 
12291
  `f_charbig` varchar(1000) DEFAULT NULL
 
12292
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
12293
 
 
12294
# check prerequisites-1 success:    1
 
12295
# check COUNT(*) success:    1
 
12296
# check MIN/MAX(f_int1) success:    1
 
12297
# check MIN/MAX(f_int2) success:    1
 
12298
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12299
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12300
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
12301
WHERE f_int1 IN (2,3);
 
12302
# check prerequisites-3 success:    1
 
12303
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12304
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
12305
# check read via f_int1 success: 1
 
12306
# check read via f_int2 success: 1
 
12307
        
 
12308
# check multiple-1 success:     1
 
12309
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
12310
        
 
12311
# check multiple-2 success:     1
 
12312
INSERT INTO t1 SELECT * FROM t0_template
 
12313
WHERE MOD(f_int1,3) = 0;
 
12314
        
 
12315
# check multiple-3 success:     1
 
12316
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
12317
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
12318
AND @max_row_div2 + @max_row_div4;
 
12319
        
 
12320
# check multiple-4 success:     1
 
12321
DELETE FROM t1
 
12322
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
12323
AND @max_row_div2 + @max_row_div4 + @max_row;
 
12324
        
 
12325
# check multiple-5 success:     1
 
12326
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
12327
INSERT INTO t1
 
12328
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12329
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12330
f_charbig = '#SINGLE#';
 
12331
        
 
12332
# check single-1 success:       1
 
12333
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
12334
INSERT INTO t1
 
12335
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12336
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12337
f_charbig = '#SINGLE#';
 
12338
        
 
12339
# check single-2 success:       1
 
12340
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
12341
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
12342
UPDATE t1 SET f_int1 = @cur_value2
 
12343
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
12344
        
 
12345
# check single-3 success:       1
 
12346
SET @cur_value1= -1;
 
12347
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
12348
UPDATE t1 SET f_int1 = @cur_value1
 
12349
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
12350
        
 
12351
# check single-4 success:       1
 
12352
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
12353
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
12354
        
 
12355
# check single-5 success:       1
 
12356
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
12357
        
 
12358
# check single-6 success:       1
 
12359
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
12360
        
 
12361
# check single-7 success:       1
 
12362
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
12363
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
12364
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
12365
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
12366
f_charbig = '#NULL#';
 
12367
INSERT INTO t1
 
12368
SET f_int1 = NULL , f_int2 = -@max_row,
 
12369
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
12370
f_charbig = '#NULL#';
 
12371
# check null success:    1
 
12372
        
 
12373
# check null-1 success:         1
 
12374
UPDATE t1 SET f_int1 = -@max_row
 
12375
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12376
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12377
        
 
12378
# check null-2 success:         1
 
12379
UPDATE t1 SET f_int1 = NULL
 
12380
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12381
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12382
        
 
12383
# check null-3 success:         1
 
12384
DELETE FROM t1
 
12385
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12386
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12387
        
 
12388
# check null-4 success:         1
 
12389
DELETE FROM t1
 
12390
WHERE f_int1 = 0 AND f_int2 = 0
 
12391
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
12392
AND f_charbig = '#NULL#';
 
12393
SET AUTOCOMMIT= 0;
 
12394
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12395
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12396
FROM t0_template source_tab
 
12397
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12398
        
 
12399
# check transactions-1 success:         1
 
12400
COMMIT WORK;
 
12401
        
 
12402
# check transactions-2 success:         1
 
12403
ROLLBACK WORK;
 
12404
        
 
12405
# check transactions-3 success:         1
 
12406
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12407
COMMIT WORK;
 
12408
ROLLBACK WORK;
 
12409
        
 
12410
# check transactions-4 success:         1
 
12411
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12412
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12413
FROM t0_template source_tab
 
12414
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12415
        
 
12416
# check transactions-5 success:         1
 
12417
ROLLBACK WORK;
 
12418
        
 
12419
# check transactions-6 success:         1
 
12420
# INFO: Storage engine used for t1 seems to be transactional.
 
12421
COMMIT;
 
12422
        
 
12423
# check transactions-7 success:         1
 
12424
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12425
COMMIT WORK;
 
12426
SET @@session.sql_mode = 'traditional';
 
12427
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12428
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12429
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12430
'', '', 'was inserted' FROM t0_template
 
12431
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12432
ERROR 22012: Division by 0
 
12433
COMMIT;
 
12434
        
 
12435
# check transactions-8 success:         1
 
12436
# INFO: Storage engine used for t1 seems to be able to revert
 
12437
#       changes made by the failing statement.
 
12438
SET @@session.sql_mode = '';
 
12439
SET AUTOCOMMIT= 1;
 
12440
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12441
COMMIT WORK;
 
12442
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12443
        
 
12444
# check special-1 success:      1
 
12445
UPDATE t1 SET f_charbig = '';
 
12446
        
 
12447
# check special-2 success:      1
 
12448
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12449
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12450
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12451
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12452
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12453
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12454
'just inserted' FROM t0_template
 
12455
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12456
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12457
BEGIN
 
12458
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12459
f_charbig = 'updated by trigger'
 
12460
      WHERE f_int1 = new.f_int1;
 
12461
END|
 
12462
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12463
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12464
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12465
        
 
12466
# check trigger-1 success:      1
 
12467
DROP TRIGGER trg_1;
 
12468
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12469
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12470
f_charbig = 'just inserted'
 
12471
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12472
DELETE FROM t0_aux
 
12473
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12474
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12475
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12476
'just inserted' FROM t0_template
 
12477
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12478
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12479
BEGIN
 
12480
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12481
f_charbig = 'updated by trigger'
 
12482
      WHERE f_int1 = new.f_int1;
 
12483
END|
 
12484
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12485
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12486
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12487
        
 
12488
# check trigger-2 success:      1
 
12489
DROP TRIGGER trg_1;
 
12490
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12491
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12492
f_charbig = 'just inserted'
 
12493
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12494
DELETE FROM t0_aux
 
12495
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12496
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12497
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12498
'just inserted' FROM t0_template
 
12499
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12500
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12501
BEGIN
 
12502
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12503
f_charbig = 'updated by trigger'
 
12504
      WHERE f_int1 = new.f_int1;
 
12505
END|
 
12506
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12507
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12508
        
 
12509
# check trigger-3 success:      1
 
12510
DROP TRIGGER trg_1;
 
12511
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12512
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12513
f_charbig = 'just inserted'
 
12514
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12515
DELETE FROM t0_aux
 
12516
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12517
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12518
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12519
'just inserted' FROM t0_template
 
12520
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12521
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12522
BEGIN
 
12523
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12524
f_charbig = 'updated by trigger'
 
12525
      WHERE f_int1 = - old.f_int1;
 
12526
END|
 
12527
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12528
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12529
        
 
12530
# check trigger-4 success:      1
 
12531
DROP TRIGGER trg_1;
 
12532
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12533
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12534
f_charbig = 'just inserted'
 
12535
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12536
DELETE FROM t0_aux
 
12537
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12538
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12539
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12540
'just inserted' FROM t0_template
 
12541
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12542
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12543
BEGIN
 
12544
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12545
f_charbig = 'updated by trigger'
 
12546
      WHERE f_int1 = new.f_int1;
 
12547
END|
 
12548
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12549
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12550
        
 
12551
# check trigger-5 success:      1
 
12552
DROP TRIGGER trg_1;
 
12553
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12554
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12555
f_charbig = 'just inserted'
 
12556
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12557
DELETE FROM t0_aux
 
12558
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12559
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12560
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12561
'just inserted' FROM t0_template
 
12562
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12563
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12564
BEGIN
 
12565
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12566
f_charbig = 'updated by trigger'
 
12567
      WHERE f_int1 = - old.f_int1;
 
12568
END|
 
12569
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12570
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12571
        
 
12572
# check trigger-6 success:      1
 
12573
DROP TRIGGER trg_1;
 
12574
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12575
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12576
f_charbig = 'just inserted'
 
12577
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12578
DELETE FROM t0_aux
 
12579
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12580
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12581
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12582
'just inserted' FROM t0_template
 
12583
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12584
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12585
BEGIN
 
12586
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12587
f_charbig = 'updated by trigger'
 
12588
      WHERE f_int1 = - old.f_int1;
 
12589
END|
 
12590
DELETE FROM t0_aux
 
12591
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12592
        
 
12593
# check trigger-7 success:      1
 
12594
DROP TRIGGER trg_1;
 
12595
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12596
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12597
f_charbig = 'just inserted'
 
12598
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12599
DELETE FROM t0_aux
 
12600
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12601
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12602
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12603
'just inserted' FROM t0_template
 
12604
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12605
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12606
BEGIN
 
12607
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12608
f_charbig = 'updated by trigger'
 
12609
      WHERE f_int1 = - old.f_int1;
 
12610
END|
 
12611
DELETE FROM t0_aux
 
12612
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12613
        
 
12614
# check trigger-8 success:      1
 
12615
DROP TRIGGER trg_1;
 
12616
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12617
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12618
f_charbig = 'just inserted'
 
12619
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12620
DELETE FROM t0_aux
 
12621
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12622
DELETE FROM t1
 
12623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12624
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12625
BEGIN
 
12626
SET new.f_int1 = old.f_int1 + @max_row,
 
12627
new.f_int2 = old.f_int2 - @max_row,
 
12628
new.f_charbig = '####updated per update trigger####';
 
12629
END|
 
12630
UPDATE t1
 
12631
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12632
f_charbig = '####updated per update statement itself####';
 
12633
        
 
12634
# check trigger-9 success:      1
 
12635
DROP TRIGGER trg_2;
 
12636
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12637
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12638
f_charbig = CONCAT('===',f_char1,'===');
 
12639
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12640
BEGIN
 
12641
SET new.f_int1 = new.f_int1 + @max_row,
 
12642
new.f_int2 = new.f_int2 - @max_row,
 
12643
new.f_charbig = '####updated per update trigger####';
 
12644
END|
 
12645
UPDATE t1
 
12646
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12647
f_charbig = '####updated per update statement itself####';
 
12648
        
 
12649
# check trigger-10 success:     1
 
12650
DROP TRIGGER trg_2;
 
12651
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12652
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12653
f_charbig = CONCAT('===',f_char1,'===');
 
12654
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12655
BEGIN
 
12656
SET new.f_int1 = @my_max1 + @counter,
 
12657
new.f_int2 = @my_min2 - @counter,
 
12658
new.f_charbig = '####updated per insert trigger####';
 
12659
SET @counter = @counter + 1;
 
12660
END|
 
12661
SET @counter = 1;
 
12662
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12663
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12664
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12665
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12666
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12667
ORDER BY f_int1;
 
12668
DROP TRIGGER trg_3;
 
12669
        
 
12670
# check trigger-11 success:     1
 
12671
DELETE FROM t1
 
12672
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12673
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12674
AND f_charbig = '####updated per insert trigger####';
 
12675
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12676
BEGIN
 
12677
SET new.f_int1 = @my_max1 + @counter,
 
12678
new.f_int2 = @my_min2 - @counter,
 
12679
new.f_charbig = '####updated per insert trigger####';
 
12680
SET @counter = @counter + 1;
 
12681
END|
 
12682
SET @counter = 1;
 
12683
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12684
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
12685
SELECT CAST(f_int1 AS CHAR),
 
12686
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12687
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12688
ORDER BY f_int1;
 
12689
DROP TRIGGER trg_3;
 
12690
        
 
12691
# check trigger-12 success:     1
 
12692
DELETE FROM t1
 
12693
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12694
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12695
AND f_charbig = '####updated per insert trigger####';
 
12696
ANALYZE  TABLE t1;
 
12697
Table   Op      Msg_type        Msg_text
 
12698
test.t1 analyze status  OK
 
12699
CHECK    TABLE t1 EXTENDED;
 
12700
Table   Op      Msg_type        Msg_text
 
12701
test.t1 check   status  OK
 
12702
CHECKSUM TABLE t1 EXTENDED;
 
12703
Table   Checksum
 
12704
test.t1 <some_value>
 
12705
OPTIMIZE TABLE t1;
 
12706
Table   Op      Msg_type        Msg_text
 
12707
test.t1 optimize        status  OK
 
12708
# check layout success:    1
 
12709
REPAIR   TABLE t1 EXTENDED;
 
12710
Table   Op      Msg_type        Msg_text
 
12711
test.t1 repair  note    The storage engine for the table doesn't support repair
 
12712
# check layout success:    1
 
12713
TRUNCATE t1;
 
12714
        
 
12715
# check TRUNCATE success:       1
 
12716
# check layout success:    1
 
12717
# End usability test (inc/partition_check.inc)
 
12718
DROP TABLE t1;
 
12719
CREATE TABLE t1 (
 
12720
f_int1 INTEGER,
 
12721
f_int2 INTEGER,
 
12722
f_char1 CHAR(20),
 
12723
f_char2 CHAR(20),
 
12724
f_charbig VARCHAR(1000)
 
12725
 
 
12726
)
 
12727
PARTITION BY RANGE(f_int1)
 
12728
(PARTITION parta VALUES LESS THAN (0),
 
12729
PARTITION part_1 VALUES LESS THAN (5),
 
12730
PARTITION part_2 VALUES LESS THAN (10),
 
12731
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
12732
PARTITION part_4 VALUES LESS THAN (20),
 
12733
PARTITION part_5 VALUES LESS THAN (2147483646));
 
12734
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12735
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12736
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
12737
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
 
12738
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12739
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12740
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12741
# Start usability test (inc/partition_check.inc)
 
12742
create_command
 
12743
SHOW CREATE TABLE t1;
 
12744
Table   Create Table
 
12745
t1      CREATE TABLE `t1` (
 
12746
  `f_int1` int(11) DEFAULT NULL,
 
12747
  `f_int2` int(11) DEFAULT NULL,
 
12748
  `f_char1` char(20) DEFAULT NULL,
 
12749
  `f_char2` char(20) DEFAULT NULL,
 
12750
  `f_charbig` varchar(1000) DEFAULT NULL
 
12751
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
12752
 
 
12753
# check prerequisites-1 success:    1
 
12754
# check COUNT(*) success:    1
 
12755
# check MIN/MAX(f_int1) success:    1
 
12756
# check MIN/MAX(f_int2) success:    1
 
12757
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12758
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12759
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
12760
WHERE f_int1 IN (2,3);
 
12761
# check prerequisites-3 success:    1
 
12762
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12763
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
12764
# check read via f_int1 success: 1
 
12765
# check read via f_int2 success: 1
 
12766
        
 
12767
# check multiple-1 success:     1
 
12768
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
12769
        
 
12770
# check multiple-2 success:     1
 
12771
INSERT INTO t1 SELECT * FROM t0_template
 
12772
WHERE MOD(f_int1,3) = 0;
 
12773
        
 
12774
# check multiple-3 success:     1
 
12775
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
12776
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
12777
AND @max_row_div2 + @max_row_div4;
 
12778
        
 
12779
# check multiple-4 success:     1
 
12780
DELETE FROM t1
 
12781
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
12782
AND @max_row_div2 + @max_row_div4 + @max_row;
 
12783
        
 
12784
# check multiple-5 success:     1
 
12785
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
12786
INSERT INTO t1
 
12787
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12788
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12789
f_charbig = '#SINGLE#';
 
12790
        
 
12791
# check single-1 success:       1
 
12792
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
12793
INSERT INTO t1
 
12794
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12795
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12796
f_charbig = '#SINGLE#';
 
12797
        
 
12798
# check single-2 success:       1
 
12799
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
12800
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
12801
UPDATE t1 SET f_int1 = @cur_value2
 
12802
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
12803
        
 
12804
# check single-3 success:       1
 
12805
SET @cur_value1= -1;
 
12806
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
12807
UPDATE t1 SET f_int1 = @cur_value1
 
12808
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
12809
        
 
12810
# check single-4 success:       1
 
12811
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
12812
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
12813
        
 
12814
# check single-5 success:       1
 
12815
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
12816
        
 
12817
# check single-6 success:       1
 
12818
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
12819
ERROR HY000: Table has no partition for value 2147483647
 
12820
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
12821
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
12822
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
12823
f_charbig = '#NULL#';
 
12824
INSERT INTO t1
 
12825
SET f_int1 = NULL , f_int2 = -@max_row,
 
12826
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
12827
f_charbig = '#NULL#';
 
12828
# check null success:    1
 
12829
        
 
12830
# check null-1 success:         1
 
12831
UPDATE t1 SET f_int1 = -@max_row
 
12832
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12833
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12834
        
 
12835
# check null-2 success:         1
 
12836
UPDATE t1 SET f_int1 = NULL
 
12837
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12838
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12839
        
 
12840
# check null-3 success:         1
 
12841
DELETE FROM t1
 
12842
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12843
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12844
        
 
12845
# check null-4 success:         1
 
12846
DELETE FROM t1
 
12847
WHERE f_int1 = 0 AND f_int2 = 0
 
12848
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
12849
AND f_charbig = '#NULL#';
 
12850
SET AUTOCOMMIT= 0;
 
12851
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12852
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12853
FROM t0_template source_tab
 
12854
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12855
        
 
12856
# check transactions-1 success:         1
 
12857
COMMIT WORK;
 
12858
        
 
12859
# check transactions-2 success:         1
 
12860
ROLLBACK WORK;
 
12861
        
 
12862
# check transactions-3 success:         1
 
12863
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12864
COMMIT WORK;
 
12865
ROLLBACK WORK;
 
12866
        
 
12867
# check transactions-4 success:         1
 
12868
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12869
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12870
FROM t0_template source_tab
 
12871
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12872
        
 
12873
# check transactions-5 success:         1
 
12874
ROLLBACK WORK;
 
12875
        
 
12876
# check transactions-6 success:         1
 
12877
# INFO: Storage engine used for t1 seems to be transactional.
 
12878
COMMIT;
 
12879
        
 
12880
# check transactions-7 success:         1
 
12881
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12882
COMMIT WORK;
 
12883
SET @@session.sql_mode = 'traditional';
 
12884
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12885
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12886
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12887
'', '', 'was inserted' FROM t0_template
 
12888
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12889
ERROR 22012: Division by 0
 
12890
COMMIT;
 
12891
        
 
12892
# check transactions-8 success:         1
 
12893
# INFO: Storage engine used for t1 seems to be able to revert
 
12894
#       changes made by the failing statement.
 
12895
SET @@session.sql_mode = '';
 
12896
SET AUTOCOMMIT= 1;
 
12897
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12898
COMMIT WORK;
 
12899
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12900
        
 
12901
# check special-1 success:      1
 
12902
UPDATE t1 SET f_charbig = '';
 
12903
        
 
12904
# check special-2 success:      1
 
12905
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12906
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12907
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12908
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12909
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12910
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12911
'just inserted' FROM t0_template
 
12912
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12913
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12914
BEGIN
 
12915
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12916
f_charbig = 'updated by trigger'
 
12917
      WHERE f_int1 = new.f_int1;
 
12918
END|
 
12919
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12920
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12921
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12922
        
 
12923
# check trigger-1 success:      1
 
12924
DROP TRIGGER trg_1;
 
12925
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12926
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12927
f_charbig = 'just inserted'
 
12928
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12929
DELETE FROM t0_aux
 
12930
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12931
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12932
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12933
'just inserted' FROM t0_template
 
12934
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12935
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12936
BEGIN
 
12937
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12938
f_charbig = 'updated by trigger'
 
12939
      WHERE f_int1 = new.f_int1;
 
12940
END|
 
12941
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12942
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12943
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12944
        
 
12945
# check trigger-2 success:      1
 
12946
DROP TRIGGER trg_1;
 
12947
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12948
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12949
f_charbig = 'just inserted'
 
12950
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12951
DELETE FROM t0_aux
 
12952
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12953
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12954
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12955
'just inserted' FROM t0_template
 
12956
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12957
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12958
BEGIN
 
12959
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12960
f_charbig = 'updated by trigger'
 
12961
      WHERE f_int1 = new.f_int1;
 
12962
END|
 
12963
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12964
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12965
        
 
12966
# check trigger-3 success:      1
 
12967
DROP TRIGGER trg_1;
 
12968
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12969
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12970
f_charbig = 'just inserted'
 
12971
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12972
DELETE FROM t0_aux
 
12973
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12974
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12975
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12976
'just inserted' FROM t0_template
 
12977
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12978
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12979
BEGIN
 
12980
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12981
f_charbig = 'updated by trigger'
 
12982
      WHERE f_int1 = - old.f_int1;
 
12983
END|
 
12984
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12985
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12986
        
 
12987
# check trigger-4 success:      1
 
12988
DROP TRIGGER trg_1;
 
12989
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12990
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12991
f_charbig = 'just inserted'
 
12992
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12993
DELETE FROM t0_aux
 
12994
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12995
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12996
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12997
'just inserted' FROM t0_template
 
12998
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12999
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13000
BEGIN
 
13001
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13002
f_charbig = 'updated by trigger'
 
13003
      WHERE f_int1 = new.f_int1;
 
13004
END|
 
13005
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13006
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13007
        
 
13008
# check trigger-5 success:      1
 
13009
DROP TRIGGER trg_1;
 
13010
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13011
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13012
f_charbig = 'just inserted'
 
13013
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13014
DELETE FROM t0_aux
 
13015
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13016
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13017
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13018
'just inserted' FROM t0_template
 
13019
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13020
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13021
BEGIN
 
13022
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13023
f_charbig = 'updated by trigger'
 
13024
      WHERE f_int1 = - old.f_int1;
 
13025
END|
 
13026
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13027
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13028
        
 
13029
# check trigger-6 success:      1
 
13030
DROP TRIGGER trg_1;
 
13031
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13032
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13033
f_charbig = 'just inserted'
 
13034
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13035
DELETE FROM t0_aux
 
13036
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13037
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13038
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13039
'just inserted' FROM t0_template
 
13040
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13041
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13042
BEGIN
 
13043
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13044
f_charbig = 'updated by trigger'
 
13045
      WHERE f_int1 = - old.f_int1;
 
13046
END|
 
13047
DELETE FROM t0_aux
 
13048
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13049
        
 
13050
# check trigger-7 success:      1
 
13051
DROP TRIGGER trg_1;
 
13052
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13053
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13054
f_charbig = 'just inserted'
 
13055
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13056
DELETE FROM t0_aux
 
13057
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13058
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13059
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13060
'just inserted' FROM t0_template
 
13061
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13062
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13063
BEGIN
 
13064
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13065
f_charbig = 'updated by trigger'
 
13066
      WHERE f_int1 = - old.f_int1;
 
13067
END|
 
13068
DELETE FROM t0_aux
 
13069
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13070
        
 
13071
# check trigger-8 success:      1
 
13072
DROP TRIGGER trg_1;
 
13073
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13074
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13075
f_charbig = 'just inserted'
 
13076
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13077
DELETE FROM t0_aux
 
13078
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13079
DELETE FROM t1
 
13080
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13081
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13082
BEGIN
 
13083
SET new.f_int1 = old.f_int1 + @max_row,
 
13084
new.f_int2 = old.f_int2 - @max_row,
 
13085
new.f_charbig = '####updated per update trigger####';
 
13086
END|
 
13087
UPDATE t1
 
13088
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13089
f_charbig = '####updated per update statement itself####';
 
13090
        
 
13091
# check trigger-9 success:      1
 
13092
DROP TRIGGER trg_2;
 
13093
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13094
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13095
f_charbig = CONCAT('===',f_char1,'===');
 
13096
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13097
BEGIN
 
13098
SET new.f_int1 = new.f_int1 + @max_row,
 
13099
new.f_int2 = new.f_int2 - @max_row,
 
13100
new.f_charbig = '####updated per update trigger####';
 
13101
END|
 
13102
UPDATE t1
 
13103
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13104
f_charbig = '####updated per update statement itself####';
 
13105
        
 
13106
# check trigger-10 success:     1
 
13107
DROP TRIGGER trg_2;
 
13108
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13109
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13110
f_charbig = CONCAT('===',f_char1,'===');
 
13111
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13112
BEGIN
 
13113
SET new.f_int1 = @my_max1 + @counter,
 
13114
new.f_int2 = @my_min2 - @counter,
 
13115
new.f_charbig = '####updated per insert trigger####';
 
13116
SET @counter = @counter + 1;
 
13117
END|
 
13118
SET @counter = 1;
 
13119
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13120
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13121
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13122
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13123
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13124
ORDER BY f_int1;
 
13125
DROP TRIGGER trg_3;
 
13126
        
 
13127
# check trigger-11 success:     1
 
13128
DELETE FROM t1
 
13129
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13130
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13131
AND f_charbig = '####updated per insert trigger####';
 
13132
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13133
BEGIN
 
13134
SET new.f_int1 = @my_max1 + @counter,
 
13135
new.f_int2 = @my_min2 - @counter,
 
13136
new.f_charbig = '####updated per insert trigger####';
 
13137
SET @counter = @counter + 1;
 
13138
END|
 
13139
SET @counter = 1;
 
13140
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13141
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
13142
SELECT CAST(f_int1 AS CHAR),
 
13143
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13144
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13145
ORDER BY f_int1;
 
13146
DROP TRIGGER trg_3;
 
13147
        
 
13148
# check trigger-12 success:     1
 
13149
DELETE FROM t1
 
13150
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13151
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13152
AND f_charbig = '####updated per insert trigger####';
 
13153
ANALYZE  TABLE t1;
 
13154
Table   Op      Msg_type        Msg_text
 
13155
test.t1 analyze status  OK
 
13156
CHECK    TABLE t1 EXTENDED;
 
13157
Table   Op      Msg_type        Msg_text
 
13158
test.t1 check   status  OK
 
13159
CHECKSUM TABLE t1 EXTENDED;
 
13160
Table   Checksum
 
13161
test.t1 <some_value>
 
13162
OPTIMIZE TABLE t1;
 
13163
Table   Op      Msg_type        Msg_text
 
13164
test.t1 optimize        status  OK
 
13165
# check layout success:    1
 
13166
REPAIR   TABLE t1 EXTENDED;
 
13167
Table   Op      Msg_type        Msg_text
 
13168
test.t1 repair  note    The storage engine for the table doesn't support repair
 
13169
# check layout success:    1
 
13170
TRUNCATE t1;
 
13171
        
 
13172
# check TRUNCATE success:       1
 
13173
# check layout success:    1
 
13174
# End usability test (inc/partition_check.inc)
 
13175
DROP TABLE t1;
 
13176
CREATE TABLE t1 (
 
13177
f_int1 INTEGER,
 
13178
f_int2 INTEGER,
 
13179
f_char1 CHAR(20),
 
13180
f_char2 CHAR(20),
 
13181
f_charbig VARCHAR(1000)
 
13182
 
 
13183
)
 
13184
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
13185
(PARTITION part_1 VALUES LESS THAN (0),
 
13186
PARTITION part_2 VALUES LESS THAN (5),
 
13187
PARTITION part_3 VALUES LESS THAN (10),
 
13188
PARTITION part_4 VALUES LESS THAN (2147483646));
 
13189
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13190
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13191
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
13192
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
 
13193
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13194
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13195
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13196
# Start usability test (inc/partition_check.inc)
 
13197
create_command
 
13198
SHOW CREATE TABLE t1;
 
13199
Table   Create Table
 
13200
t1      CREATE TABLE `t1` (
 
13201
  `f_int1` int(11) DEFAULT NULL,
 
13202
  `f_int2` int(11) DEFAULT NULL,
 
13203
  `f_char1` char(20) DEFAULT NULL,
 
13204
  `f_char2` char(20) DEFAULT NULL,
 
13205
  `f_charbig` varchar(1000) DEFAULT NULL
 
13206
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
13207
 
 
13208
# check prerequisites-1 success:    1
 
13209
# check COUNT(*) success:    1
 
13210
# check MIN/MAX(f_int1) success:    1
 
13211
# check MIN/MAX(f_int2) success:    1
 
13212
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13213
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13214
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
13215
WHERE f_int1 IN (2,3);
 
13216
# check prerequisites-3 success:    1
 
13217
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13218
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
13219
# check read via f_int1 success: 1
 
13220
# check read via f_int2 success: 1
 
13221
        
 
13222
# check multiple-1 success:     1
 
13223
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
13224
        
 
13225
# check multiple-2 success:     1
 
13226
INSERT INTO t1 SELECT * FROM t0_template
 
13227
WHERE MOD(f_int1,3) = 0;
 
13228
        
 
13229
# check multiple-3 success:     1
 
13230
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
13231
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
13232
AND @max_row_div2 + @max_row_div4;
 
13233
        
 
13234
# check multiple-4 success:     1
 
13235
DELETE FROM t1
 
13236
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
13237
AND @max_row_div2 + @max_row_div4 + @max_row;
 
13238
        
 
13239
# check multiple-5 success:     1
 
13240
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
13241
INSERT INTO t1
 
13242
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13243
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13244
f_charbig = '#SINGLE#';
 
13245
        
 
13246
# check single-1 success:       1
 
13247
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
13248
INSERT INTO t1
 
13249
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13250
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13251
f_charbig = '#SINGLE#';
 
13252
        
 
13253
# check single-2 success:       1
 
13254
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
13255
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
13256
UPDATE t1 SET f_int1 = @cur_value2
 
13257
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
13258
        
 
13259
# check single-3 success:       1
 
13260
SET @cur_value1= -1;
 
13261
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
13262
UPDATE t1 SET f_int1 = @cur_value1
 
13263
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
13264
        
 
13265
# check single-4 success:       1
 
13266
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
13267
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
13268
        
 
13269
# check single-5 success:       1
 
13270
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
13271
        
 
13272
# check single-6 success:       1
 
13273
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
13274
        
 
13275
# check single-7 success:       1
 
13276
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
13277
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
13278
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
13279
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
13280
f_charbig = '#NULL#';
 
13281
INSERT INTO t1
 
13282
SET f_int1 = NULL , f_int2 = -@max_row,
 
13283
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
13284
f_charbig = '#NULL#';
 
13285
# check null success:    1
 
13286
        
 
13287
# check null-1 success:         1
 
13288
UPDATE t1 SET f_int1 = -@max_row
 
13289
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13290
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13291
        
 
13292
# check null-2 success:         1
 
13293
UPDATE t1 SET f_int1 = NULL
 
13294
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13295
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13296
        
 
13297
# check null-3 success:         1
 
13298
DELETE FROM t1
 
13299
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13300
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13301
        
 
13302
# check null-4 success:         1
 
13303
DELETE FROM t1
 
13304
WHERE f_int1 = 0 AND f_int2 = 0
 
13305
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
13306
AND f_charbig = '#NULL#';
 
13307
SET AUTOCOMMIT= 0;
 
13308
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13309
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13310
FROM t0_template source_tab
 
13311
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13312
        
 
13313
# check transactions-1 success:         1
 
13314
COMMIT WORK;
 
13315
        
 
13316
# check transactions-2 success:         1
 
13317
ROLLBACK WORK;
 
13318
        
 
13319
# check transactions-3 success:         1
 
13320
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13321
COMMIT WORK;
 
13322
ROLLBACK WORK;
 
13323
        
 
13324
# check transactions-4 success:         1
 
13325
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13326
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13327
FROM t0_template source_tab
 
13328
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13329
        
 
13330
# check transactions-5 success:         1
 
13331
ROLLBACK WORK;
 
13332
        
 
13333
# check transactions-6 success:         1
 
13334
# INFO: Storage engine used for t1 seems to be transactional.
 
13335
COMMIT;
 
13336
        
 
13337
# check transactions-7 success:         1
 
13338
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13339
COMMIT WORK;
 
13340
SET @@session.sql_mode = 'traditional';
 
13341
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
13342
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13343
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
13344
'', '', 'was inserted' FROM t0_template
 
13345
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13346
ERROR 22012: Division by 0
 
13347
COMMIT;
 
13348
        
 
13349
# check transactions-8 success:         1
 
13350
# INFO: Storage engine used for t1 seems to be able to revert
 
13351
#       changes made by the failing statement.
 
13352
SET @@session.sql_mode = '';
 
13353
SET AUTOCOMMIT= 1;
 
13354
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13355
COMMIT WORK;
 
13356
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
13357
        
 
13358
# check special-1 success:      1
 
13359
UPDATE t1 SET f_charbig = '';
 
13360
        
 
13361
# check special-2 success:      1
 
13362
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
13363
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13364
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
13365
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13366
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13367
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13368
'just inserted' FROM t0_template
 
13369
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13370
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
13371
BEGIN
 
13372
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13373
f_charbig = 'updated by trigger'
 
13374
      WHERE f_int1 = new.f_int1;
 
13375
END|
 
13376
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13377
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13378
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13379
        
 
13380
# check trigger-1 success:      1
 
13381
DROP TRIGGER trg_1;
 
13382
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13383
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13384
f_charbig = 'just inserted'
 
13385
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13386
DELETE FROM t0_aux
 
13387
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13388
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13389
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13390
'just inserted' FROM t0_template
 
13391
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13392
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
13393
BEGIN
 
13394
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13395
f_charbig = 'updated by trigger'
 
13396
      WHERE f_int1 = new.f_int1;
 
13397
END|
 
13398
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13399
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13400
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13401
        
 
13402
# check trigger-2 success:      1
 
13403
DROP TRIGGER trg_1;
 
13404
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13405
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13406
f_charbig = 'just inserted'
 
13407
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13408
DELETE FROM t0_aux
 
13409
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13410
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13411
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13412
'just inserted' FROM t0_template
 
13413
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13414
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13415
BEGIN
 
13416
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13417
f_charbig = 'updated by trigger'
 
13418
      WHERE f_int1 = new.f_int1;
 
13419
END|
 
13420
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13421
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13422
        
 
13423
# check trigger-3 success:      1
 
13424
DROP TRIGGER trg_1;
 
13425
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13426
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13427
f_charbig = 'just inserted'
 
13428
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13429
DELETE FROM t0_aux
 
13430
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13431
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13432
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13433
'just inserted' FROM t0_template
 
13434
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13435
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13436
BEGIN
 
13437
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13438
f_charbig = 'updated by trigger'
 
13439
      WHERE f_int1 = - old.f_int1;
 
13440
END|
 
13441
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13442
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13443
        
 
13444
# check trigger-4 success:      1
 
13445
DROP TRIGGER trg_1;
 
13446
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13447
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13448
f_charbig = 'just inserted'
 
13449
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13450
DELETE FROM t0_aux
 
13451
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13452
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13453
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13454
'just inserted' FROM t0_template
 
13455
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13456
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13457
BEGIN
 
13458
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13459
f_charbig = 'updated by trigger'
 
13460
      WHERE f_int1 = new.f_int1;
 
13461
END|
 
13462
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13463
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13464
        
 
13465
# check trigger-5 success:      1
 
13466
DROP TRIGGER trg_1;
 
13467
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13468
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13469
f_charbig = 'just inserted'
 
13470
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13471
DELETE FROM t0_aux
 
13472
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13473
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13474
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13475
'just inserted' FROM t0_template
 
13476
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13477
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13478
BEGIN
 
13479
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13480
f_charbig = 'updated by trigger'
 
13481
      WHERE f_int1 = - old.f_int1;
 
13482
END|
 
13483
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13484
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13485
        
 
13486
# check trigger-6 success:      1
 
13487
DROP TRIGGER trg_1;
 
13488
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13489
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13490
f_charbig = 'just inserted'
 
13491
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13492
DELETE FROM t0_aux
 
13493
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13494
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13495
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13496
'just inserted' FROM t0_template
 
13497
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13498
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13499
BEGIN
 
13500
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13501
f_charbig = 'updated by trigger'
 
13502
      WHERE f_int1 = - old.f_int1;
 
13503
END|
 
13504
DELETE FROM t0_aux
 
13505
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13506
        
 
13507
# check trigger-7 success:      1
 
13508
DROP TRIGGER trg_1;
 
13509
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13510
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13511
f_charbig = 'just inserted'
 
13512
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13513
DELETE FROM t0_aux
 
13514
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13515
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13516
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13517
'just inserted' FROM t0_template
 
13518
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13519
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13520
BEGIN
 
13521
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13522
f_charbig = 'updated by trigger'
 
13523
      WHERE f_int1 = - old.f_int1;
 
13524
END|
 
13525
DELETE FROM t0_aux
 
13526
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13527
        
 
13528
# check trigger-8 success:      1
 
13529
DROP TRIGGER trg_1;
 
13530
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13531
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13532
f_charbig = 'just inserted'
 
13533
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13534
DELETE FROM t0_aux
 
13535
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13536
DELETE FROM t1
 
13537
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13538
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13539
BEGIN
 
13540
SET new.f_int1 = old.f_int1 + @max_row,
 
13541
new.f_int2 = old.f_int2 - @max_row,
 
13542
new.f_charbig = '####updated per update trigger####';
 
13543
END|
 
13544
UPDATE t1
 
13545
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13546
f_charbig = '####updated per update statement itself####';
 
13547
        
 
13548
# check trigger-9 success:      1
 
13549
DROP TRIGGER trg_2;
 
13550
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13551
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13552
f_charbig = CONCAT('===',f_char1,'===');
 
13553
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13554
BEGIN
 
13555
SET new.f_int1 = new.f_int1 + @max_row,
 
13556
new.f_int2 = new.f_int2 - @max_row,
 
13557
new.f_charbig = '####updated per update trigger####';
 
13558
END|
 
13559
UPDATE t1
 
13560
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13561
f_charbig = '####updated per update statement itself####';
 
13562
        
 
13563
# check trigger-10 success:     1
 
13564
DROP TRIGGER trg_2;
 
13565
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13566
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13567
f_charbig = CONCAT('===',f_char1,'===');
 
13568
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13569
BEGIN
 
13570
SET new.f_int1 = @my_max1 + @counter,
 
13571
new.f_int2 = @my_min2 - @counter,
 
13572
new.f_charbig = '####updated per insert trigger####';
 
13573
SET @counter = @counter + 1;
 
13574
END|
 
13575
SET @counter = 1;
 
13576
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13577
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13578
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13579
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13580
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13581
ORDER BY f_int1;
 
13582
DROP TRIGGER trg_3;
 
13583
        
 
13584
# check trigger-11 success:     1
 
13585
DELETE FROM t1
 
13586
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13587
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13588
AND f_charbig = '####updated per insert trigger####';
 
13589
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13590
BEGIN
 
13591
SET new.f_int1 = @my_max1 + @counter,
 
13592
new.f_int2 = @my_min2 - @counter,
 
13593
new.f_charbig = '####updated per insert trigger####';
 
13594
SET @counter = @counter + 1;
 
13595
END|
 
13596
SET @counter = 1;
 
13597
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13598
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
13599
SELECT CAST(f_int1 AS CHAR),
 
13600
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13601
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13602
ORDER BY f_int1;
 
13603
DROP TRIGGER trg_3;
 
13604
        
 
13605
# check trigger-12 success:     1
 
13606
DELETE FROM t1
 
13607
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13608
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13609
AND f_charbig = '####updated per insert trigger####';
 
13610
ANALYZE  TABLE t1;
 
13611
Table   Op      Msg_type        Msg_text
 
13612
test.t1 analyze status  OK
 
13613
CHECK    TABLE t1 EXTENDED;
 
13614
Table   Op      Msg_type        Msg_text
 
13615
test.t1 check   status  OK
 
13616
CHECKSUM TABLE t1 EXTENDED;
 
13617
Table   Checksum
 
13618
test.t1 <some_value>
 
13619
OPTIMIZE TABLE t1;
 
13620
Table   Op      Msg_type        Msg_text
 
13621
test.t1 optimize        status  OK
 
13622
# check layout success:    1
 
13623
REPAIR   TABLE t1 EXTENDED;
 
13624
Table   Op      Msg_type        Msg_text
 
13625
test.t1 repair  note    The storage engine for the table doesn't support repair
 
13626
# check layout success:    1
 
13627
TRUNCATE t1;
 
13628
        
 
13629
# check TRUNCATE success:       1
 
13630
# check layout success:    1
 
13631
# End usability test (inc/partition_check.inc)
 
13632
DROP TABLE t1;
 
13633
CREATE TABLE t1 (
 
13634
f_int1 INTEGER,
 
13635
f_int2 INTEGER,
 
13636
f_char1 CHAR(20),
 
13637
f_char2 CHAR(20),
 
13638
f_charbig VARCHAR(1000)
 
13639
 
 
13640
)
 
13641
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
13642
(PARTITION part_1 VALUES LESS THAN (0)
 
13643
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
13644
PARTITION part_2 VALUES LESS THAN (5)
 
13645
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
13646
PARTITION part_3 VALUES LESS THAN (10)
 
13647
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
13648
PARTITION part_4 VALUES LESS THAN (2147483646)
 
13649
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
13650
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13651
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13652
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
13653
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
 
13654
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13655
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13656
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13657
# Start usability test (inc/partition_check.inc)
 
13658
create_command
 
13659
SHOW CREATE TABLE t1;
 
13660
Table   Create Table
 
13661
t1      CREATE TABLE `t1` (
 
13662
  `f_int1` int(11) DEFAULT NULL,
 
13663
  `f_int2` int(11) DEFAULT NULL,
 
13664
  `f_char1` char(20) DEFAULT NULL,
 
13665
  `f_char2` char(20) DEFAULT NULL,
 
13666
  `f_charbig` varchar(1000) DEFAULT NULL
 
13667
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
13668
 
 
13669
# check prerequisites-1 success:    1
 
13670
# check COUNT(*) success:    1
 
13671
# check MIN/MAX(f_int1) success:    1
 
13672
# check MIN/MAX(f_int2) success:    1
 
13673
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13674
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13675
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
13676
WHERE f_int1 IN (2,3);
 
13677
# check prerequisites-3 success:    1
 
13678
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13679
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
13680
# check read via f_int1 success: 1
 
13681
# check read via f_int2 success: 1
 
13682
        
 
13683
# check multiple-1 success:     1
 
13684
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
13685
        
 
13686
# check multiple-2 success:     1
 
13687
INSERT INTO t1 SELECT * FROM t0_template
 
13688
WHERE MOD(f_int1,3) = 0;
 
13689
        
 
13690
# check multiple-3 success:     1
 
13691
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
13692
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
13693
AND @max_row_div2 + @max_row_div4;
 
13694
        
 
13695
# check multiple-4 success:     1
 
13696
DELETE FROM t1
 
13697
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
13698
AND @max_row_div2 + @max_row_div4 + @max_row;
 
13699
        
 
13700
# check multiple-5 success:     1
 
13701
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
13702
INSERT INTO t1
 
13703
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13704
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13705
f_charbig = '#SINGLE#';
 
13706
        
 
13707
# check single-1 success:       1
 
13708
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
13709
INSERT INTO t1
 
13710
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13711
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13712
f_charbig = '#SINGLE#';
 
13713
        
 
13714
# check single-2 success:       1
 
13715
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
13716
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
13717
UPDATE t1 SET f_int1 = @cur_value2
 
13718
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
13719
        
 
13720
# check single-3 success:       1
 
13721
SET @cur_value1= -1;
 
13722
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
13723
UPDATE t1 SET f_int1 = @cur_value1
 
13724
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
13725
        
 
13726
# check single-4 success:       1
 
13727
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
13728
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
13729
        
 
13730
# check single-5 success:       1
 
13731
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
13732
        
 
13733
# check single-6 success:       1
 
13734
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
13735
ERROR HY000: Table has no partition for value 2147483647
 
13736
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
13737
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
13738
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
13739
f_charbig = '#NULL#';
 
13740
INSERT INTO t1
 
13741
SET f_int1 = NULL , f_int2 = -@max_row,
 
13742
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
13743
f_charbig = '#NULL#';
 
13744
# check null success:    1
 
13745
        
 
13746
# check null-1 success:         1
 
13747
UPDATE t1 SET f_int1 = -@max_row
 
13748
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13749
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13750
        
 
13751
# check null-2 success:         1
 
13752
UPDATE t1 SET f_int1 = NULL
 
13753
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13754
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13755
        
 
13756
# check null-3 success:         1
 
13757
DELETE FROM t1
 
13758
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13759
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13760
        
 
13761
# check null-4 success:         1
 
13762
DELETE FROM t1
 
13763
WHERE f_int1 = 0 AND f_int2 = 0
 
13764
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
13765
AND f_charbig = '#NULL#';
 
13766
SET AUTOCOMMIT= 0;
 
13767
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13768
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13769
FROM t0_template source_tab
 
13770
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13771
        
 
13772
# check transactions-1 success:         1
 
13773
COMMIT WORK;
 
13774
        
 
13775
# check transactions-2 success:         1
 
13776
ROLLBACK WORK;
 
13777
        
 
13778
# check transactions-3 success:         1
 
13779
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13780
COMMIT WORK;
 
13781
ROLLBACK WORK;
 
13782
        
 
13783
# check transactions-4 success:         1
 
13784
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13785
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13786
FROM t0_template source_tab
 
13787
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13788
        
 
13789
# check transactions-5 success:         1
 
13790
ROLLBACK WORK;
 
13791
        
 
13792
# check transactions-6 success:         1
 
13793
# INFO: Storage engine used for t1 seems to be transactional.
 
13794
COMMIT;
 
13795
        
 
13796
# check transactions-7 success:         1
 
13797
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13798
COMMIT WORK;
 
13799
SET @@session.sql_mode = 'traditional';
 
13800
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
13801
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13802
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
13803
'', '', 'was inserted' FROM t0_template
 
13804
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13805
ERROR 22012: Division by 0
 
13806
COMMIT;
 
13807
        
 
13808
# check transactions-8 success:         1
 
13809
# INFO: Storage engine used for t1 seems to be able to revert
 
13810
#       changes made by the failing statement.
 
13811
SET @@session.sql_mode = '';
 
13812
SET AUTOCOMMIT= 1;
 
13813
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13814
COMMIT WORK;
 
13815
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
13816
        
 
13817
# check special-1 success:      1
 
13818
UPDATE t1 SET f_charbig = '';
 
13819
        
 
13820
# check special-2 success:      1
 
13821
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
13822
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13823
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
13824
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13825
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13826
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13827
'just inserted' FROM t0_template
 
13828
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13829
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
13830
BEGIN
 
13831
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13832
f_charbig = 'updated by trigger'
 
13833
      WHERE f_int1 = new.f_int1;
 
13834
END|
 
13835
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13836
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13837
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13838
        
 
13839
# check trigger-1 success:      1
 
13840
DROP TRIGGER trg_1;
 
13841
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13842
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13843
f_charbig = 'just inserted'
 
13844
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13845
DELETE FROM t0_aux
 
13846
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13847
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13848
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13849
'just inserted' FROM t0_template
 
13850
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13851
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
13852
BEGIN
 
13853
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13854
f_charbig = 'updated by trigger'
 
13855
      WHERE f_int1 = new.f_int1;
 
13856
END|
 
13857
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13858
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13859
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13860
        
 
13861
# check trigger-2 success:      1
 
13862
DROP TRIGGER trg_1;
 
13863
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13864
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13865
f_charbig = 'just inserted'
 
13866
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13867
DELETE FROM t0_aux
 
13868
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13869
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13870
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13871
'just inserted' FROM t0_template
 
13872
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13873
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13874
BEGIN
 
13875
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13876
f_charbig = 'updated by trigger'
 
13877
      WHERE f_int1 = new.f_int1;
 
13878
END|
 
13879
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13880
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13881
        
 
13882
# check trigger-3 success:      1
 
13883
DROP TRIGGER trg_1;
 
13884
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13885
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13886
f_charbig = 'just inserted'
 
13887
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13888
DELETE FROM t0_aux
 
13889
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13890
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13891
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13892
'just inserted' FROM t0_template
 
13893
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13894
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13895
BEGIN
 
13896
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13897
f_charbig = 'updated by trigger'
 
13898
      WHERE f_int1 = - old.f_int1;
 
13899
END|
 
13900
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13901
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13902
        
 
13903
# check trigger-4 success:      1
 
13904
DROP TRIGGER trg_1;
 
13905
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13906
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13907
f_charbig = 'just inserted'
 
13908
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13909
DELETE FROM t0_aux
 
13910
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13911
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13912
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13913
'just inserted' FROM t0_template
 
13914
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13915
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13916
BEGIN
 
13917
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13918
f_charbig = 'updated by trigger'
 
13919
      WHERE f_int1 = new.f_int1;
 
13920
END|
 
13921
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13922
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13923
        
 
13924
# check trigger-5 success:      1
 
13925
DROP TRIGGER trg_1;
 
13926
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13927
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13928
f_charbig = 'just inserted'
 
13929
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13930
DELETE FROM t0_aux
 
13931
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13932
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13933
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13934
'just inserted' FROM t0_template
 
13935
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13936
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13937
BEGIN
 
13938
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13939
f_charbig = 'updated by trigger'
 
13940
      WHERE f_int1 = - old.f_int1;
 
13941
END|
 
13942
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13943
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13944
        
 
13945
# check trigger-6 success:      1
 
13946
DROP TRIGGER trg_1;
 
13947
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13948
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13949
f_charbig = 'just inserted'
 
13950
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13951
DELETE FROM t0_aux
 
13952
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13953
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13954
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13955
'just inserted' FROM t0_template
 
13956
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13957
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13958
BEGIN
 
13959
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13960
f_charbig = 'updated by trigger'
 
13961
      WHERE f_int1 = - old.f_int1;
 
13962
END|
 
13963
DELETE FROM t0_aux
 
13964
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13965
        
 
13966
# check trigger-7 success:      1
 
13967
DROP TRIGGER trg_1;
 
13968
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13969
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13970
f_charbig = 'just inserted'
 
13971
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13972
DELETE FROM t0_aux
 
13973
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13974
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13975
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13976
'just inserted' FROM t0_template
 
13977
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13978
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13979
BEGIN
 
13980
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13981
f_charbig = 'updated by trigger'
 
13982
      WHERE f_int1 = - old.f_int1;
 
13983
END|
 
13984
DELETE FROM t0_aux
 
13985
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13986
        
 
13987
# check trigger-8 success:      1
 
13988
DROP TRIGGER trg_1;
 
13989
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13990
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13991
f_charbig = 'just inserted'
 
13992
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13993
DELETE FROM t0_aux
 
13994
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13995
DELETE FROM t1
 
13996
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13997
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13998
BEGIN
 
13999
SET new.f_int1 = old.f_int1 + @max_row,
 
14000
new.f_int2 = old.f_int2 - @max_row,
 
14001
new.f_charbig = '####updated per update trigger####';
 
14002
END|
 
14003
UPDATE t1
 
14004
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14005
f_charbig = '####updated per update statement itself####';
 
14006
        
 
14007
# check trigger-9 success:      1
 
14008
DROP TRIGGER trg_2;
 
14009
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14010
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14011
f_charbig = CONCAT('===',f_char1,'===');
 
14012
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14013
BEGIN
 
14014
SET new.f_int1 = new.f_int1 + @max_row,
 
14015
new.f_int2 = new.f_int2 - @max_row,
 
14016
new.f_charbig = '####updated per update trigger####';
 
14017
END|
 
14018
UPDATE t1
 
14019
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14020
f_charbig = '####updated per update statement itself####';
 
14021
        
 
14022
# check trigger-10 success:     1
 
14023
DROP TRIGGER trg_2;
 
14024
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14025
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14026
f_charbig = CONCAT('===',f_char1,'===');
 
14027
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14028
BEGIN
 
14029
SET new.f_int1 = @my_max1 + @counter,
 
14030
new.f_int2 = @my_min2 - @counter,
 
14031
new.f_charbig = '####updated per insert trigger####';
 
14032
SET @counter = @counter + 1;
 
14033
END|
 
14034
SET @counter = 1;
 
14035
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14036
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14037
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14038
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14039
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14040
ORDER BY f_int1;
 
14041
DROP TRIGGER trg_3;
 
14042
        
 
14043
# check trigger-11 success:     1
 
14044
DELETE FROM t1
 
14045
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14046
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14047
AND f_charbig = '####updated per insert trigger####';
 
14048
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14049
BEGIN
 
14050
SET new.f_int1 = @my_max1 + @counter,
 
14051
new.f_int2 = @my_min2 - @counter,
 
14052
new.f_charbig = '####updated per insert trigger####';
 
14053
SET @counter = @counter + 1;
 
14054
END|
 
14055
SET @counter = 1;
 
14056
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14057
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14058
SELECT CAST(f_int1 AS CHAR),
 
14059
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14060
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14061
ORDER BY f_int1;
 
14062
DROP TRIGGER trg_3;
 
14063
        
 
14064
# check trigger-12 success:     1
 
14065
DELETE FROM t1
 
14066
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14067
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14068
AND f_charbig = '####updated per insert trigger####';
 
14069
ANALYZE  TABLE t1;
 
14070
Table   Op      Msg_type        Msg_text
 
14071
test.t1 analyze status  OK
 
14072
CHECK    TABLE t1 EXTENDED;
 
14073
Table   Op      Msg_type        Msg_text
 
14074
test.t1 check   status  OK
 
14075
CHECKSUM TABLE t1 EXTENDED;
 
14076
Table   Checksum
 
14077
test.t1 <some_value>
 
14078
OPTIMIZE TABLE t1;
 
14079
Table   Op      Msg_type        Msg_text
 
14080
test.t1 optimize        status  OK
 
14081
# check layout success:    1
 
14082
REPAIR   TABLE t1 EXTENDED;
 
14083
Table   Op      Msg_type        Msg_text
 
14084
test.t1 repair  note    The storage engine for the table doesn't support repair
 
14085
# check layout success:    1
 
14086
TRUNCATE t1;
 
14087
        
 
14088
# check TRUNCATE success:       1
 
14089
# check layout success:    1
 
14090
# End usability test (inc/partition_check.inc)
 
14091
DROP TABLE t1;
 
14092
CREATE TABLE t1 (
 
14093
f_int1 INTEGER,
 
14094
f_int2 INTEGER,
 
14095
f_char1 CHAR(20),
 
14096
f_char2 CHAR(20),
 
14097
f_charbig VARCHAR(1000)
 
14098
 
 
14099
)
 
14100
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
14101
(PARTITION part_1 VALUES IN (0)
 
14102
(SUBPARTITION sp11, SUBPARTITION sp12),
 
14103
PARTITION part_2 VALUES IN (1)
 
14104
(SUBPARTITION sp21, SUBPARTITION sp22),
 
14105
PARTITION part_3 VALUES IN (2)
 
14106
(SUBPARTITION sp31, SUBPARTITION sp32),
 
14107
PARTITION part_4 VALUES IN (NULL)
 
14108
(SUBPARTITION sp41, SUBPARTITION sp42));
 
14109
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14110
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14111
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
14112
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
 
14113
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14114
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14115
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14116
# Start usability test (inc/partition_check.inc)
 
14117
create_command
 
14118
SHOW CREATE TABLE t1;
 
14119
Table   Create Table
 
14120
t1      CREATE TABLE `t1` (
 
14121
  `f_int1` int(11) DEFAULT NULL,
 
14122
  `f_int2` int(11) DEFAULT NULL,
 
14123
  `f_char1` char(20) DEFAULT NULL,
 
14124
  `f_char2` char(20) DEFAULT NULL,
 
14125
  `f_charbig` varchar(1000) DEFAULT NULL
 
14126
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
14127
 
 
14128
# check prerequisites-1 success:    1
 
14129
# check COUNT(*) success:    1
 
14130
# check MIN/MAX(f_int1) success:    1
 
14131
# check MIN/MAX(f_int2) success:    1
 
14132
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14133
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14134
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
14135
WHERE f_int1 IN (2,3);
 
14136
# check prerequisites-3 success:    1
 
14137
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14138
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
14139
# check read via f_int1 success: 1
 
14140
# check read via f_int2 success: 1
 
14141
        
 
14142
# check multiple-1 success:     1
 
14143
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
14144
        
 
14145
# check multiple-2 success:     1
 
14146
INSERT INTO t1 SELECT * FROM t0_template
 
14147
WHERE MOD(f_int1,3) = 0;
 
14148
        
 
14149
# check multiple-3 success:     1
 
14150
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
14151
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
14152
AND @max_row_div2 + @max_row_div4;
 
14153
        
 
14154
# check multiple-4 success:     1
 
14155
DELETE FROM t1
 
14156
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
14157
AND @max_row_div2 + @max_row_div4 + @max_row;
 
14158
        
 
14159
# check multiple-5 success:     1
 
14160
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
14161
INSERT INTO t1
 
14162
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14163
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14164
f_charbig = '#SINGLE#';
 
14165
        
 
14166
# check single-1 success:       1
 
14167
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
14168
INSERT INTO t1
 
14169
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14170
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14171
f_charbig = '#SINGLE#';
 
14172
        
 
14173
# check single-2 success:       1
 
14174
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
14175
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
14176
UPDATE t1 SET f_int1 = @cur_value2
 
14177
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
14178
        
 
14179
# check single-3 success:       1
 
14180
SET @cur_value1= -1;
 
14181
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
14182
UPDATE t1 SET f_int1 = @cur_value1
 
14183
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
14184
        
 
14185
# check single-4 success:       1
 
14186
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
14187
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
14188
        
 
14189
# check single-5 success:       1
 
14190
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
14191
        
 
14192
# check single-6 success:       1
 
14193
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
14194
        
 
14195
# check single-7 success:       1
 
14196
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
14197
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
14198
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
14199
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
14200
f_charbig = '#NULL#';
 
14201
INSERT INTO t1
 
14202
SET f_int1 = NULL , f_int2 = -@max_row,
 
14203
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
14204
f_charbig = '#NULL#';
 
14205
# check null success:    1
 
14206
        
 
14207
# check null-1 success:         1
 
14208
UPDATE t1 SET f_int1 = -@max_row
 
14209
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14210
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14211
        
 
14212
# check null-2 success:         1
 
14213
UPDATE t1 SET f_int1 = NULL
 
14214
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14215
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14216
        
 
14217
# check null-3 success:         1
 
14218
DELETE FROM t1
 
14219
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14220
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14221
        
 
14222
# check null-4 success:         1
 
14223
DELETE FROM t1
 
14224
WHERE f_int1 = 0 AND f_int2 = 0
 
14225
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
14226
AND f_charbig = '#NULL#';
 
14227
SET AUTOCOMMIT= 0;
 
14228
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14229
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14230
FROM t0_template source_tab
 
14231
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14232
        
 
14233
# check transactions-1 success:         1
 
14234
COMMIT WORK;
 
14235
        
 
14236
# check transactions-2 success:         1
 
14237
ROLLBACK WORK;
 
14238
        
 
14239
# check transactions-3 success:         1
 
14240
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14241
COMMIT WORK;
 
14242
ROLLBACK WORK;
 
14243
        
 
14244
# check transactions-4 success:         1
 
14245
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14246
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14247
FROM t0_template source_tab
 
14248
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14249
        
 
14250
# check transactions-5 success:         1
 
14251
ROLLBACK WORK;
 
14252
        
 
14253
# check transactions-6 success:         1
 
14254
# INFO: Storage engine used for t1 seems to be transactional.
 
14255
COMMIT;
 
14256
        
 
14257
# check transactions-7 success:         1
 
14258
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14259
COMMIT WORK;
 
14260
SET @@session.sql_mode = 'traditional';
 
14261
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
14262
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14263
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
14264
'', '', 'was inserted' FROM t0_template
 
14265
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14266
ERROR 22012: Division by 0
 
14267
COMMIT;
 
14268
        
 
14269
# check transactions-8 success:         1
 
14270
# INFO: Storage engine used for t1 seems to be able to revert
 
14271
#       changes made by the failing statement.
 
14272
SET @@session.sql_mode = '';
 
14273
SET AUTOCOMMIT= 1;
 
14274
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14275
COMMIT WORK;
 
14276
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
14277
        
 
14278
# check special-1 success:      1
 
14279
UPDATE t1 SET f_charbig = '';
 
14280
        
 
14281
# check special-2 success:      1
 
14282
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
14283
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14284
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
14285
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14286
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14287
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14288
'just inserted' FROM t0_template
 
14289
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14290
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
14291
BEGIN
 
14292
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14293
f_charbig = 'updated by trigger'
 
14294
      WHERE f_int1 = new.f_int1;
 
14295
END|
 
14296
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14297
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14298
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14299
        
 
14300
# check trigger-1 success:      1
 
14301
DROP TRIGGER trg_1;
 
14302
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14303
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14304
f_charbig = 'just inserted'
 
14305
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14306
DELETE FROM t0_aux
 
14307
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14308
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14309
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14310
'just inserted' FROM t0_template
 
14311
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14312
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
14313
BEGIN
 
14314
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14315
f_charbig = 'updated by trigger'
 
14316
      WHERE f_int1 = new.f_int1;
 
14317
END|
 
14318
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14319
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14320
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14321
        
 
14322
# check trigger-2 success:      1
 
14323
DROP TRIGGER trg_1;
 
14324
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14325
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14326
f_charbig = 'just inserted'
 
14327
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14328
DELETE FROM t0_aux
 
14329
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14330
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14331
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14332
'just inserted' FROM t0_template
 
14333
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14334
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14335
BEGIN
 
14336
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14337
f_charbig = 'updated by trigger'
 
14338
      WHERE f_int1 = new.f_int1;
 
14339
END|
 
14340
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14341
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14342
        
 
14343
# check trigger-3 success:      1
 
14344
DROP TRIGGER trg_1;
 
14345
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14346
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14347
f_charbig = 'just inserted'
 
14348
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14349
DELETE FROM t0_aux
 
14350
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14351
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14352
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14353
'just inserted' FROM t0_template
 
14354
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14355
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14356
BEGIN
 
14357
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14358
f_charbig = 'updated by trigger'
 
14359
      WHERE f_int1 = - old.f_int1;
 
14360
END|
 
14361
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14362
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14363
        
 
14364
# check trigger-4 success:      1
 
14365
DROP TRIGGER trg_1;
 
14366
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14367
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14368
f_charbig = 'just inserted'
 
14369
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14370
DELETE FROM t0_aux
 
14371
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14372
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14373
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14374
'just inserted' FROM t0_template
 
14375
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14376
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14377
BEGIN
 
14378
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14379
f_charbig = 'updated by trigger'
 
14380
      WHERE f_int1 = new.f_int1;
 
14381
END|
 
14382
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14383
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14384
        
 
14385
# check trigger-5 success:      1
 
14386
DROP TRIGGER trg_1;
 
14387
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14388
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14389
f_charbig = 'just inserted'
 
14390
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14391
DELETE FROM t0_aux
 
14392
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14393
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14394
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14395
'just inserted' FROM t0_template
 
14396
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14397
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14398
BEGIN
 
14399
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14400
f_charbig = 'updated by trigger'
 
14401
      WHERE f_int1 = - old.f_int1;
 
14402
END|
 
14403
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14404
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14405
        
 
14406
# check trigger-6 success:      1
 
14407
DROP TRIGGER trg_1;
 
14408
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14409
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14410
f_charbig = 'just inserted'
 
14411
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14412
DELETE FROM t0_aux
 
14413
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14414
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14415
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14416
'just inserted' FROM t0_template
 
14417
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14418
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
14419
BEGIN
 
14420
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14421
f_charbig = 'updated by trigger'
 
14422
      WHERE f_int1 = - old.f_int1;
 
14423
END|
 
14424
DELETE FROM t0_aux
 
14425
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14426
        
 
14427
# check trigger-7 success:      1
 
14428
DROP TRIGGER trg_1;
 
14429
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14430
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14431
f_charbig = 'just inserted'
 
14432
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14433
DELETE FROM t0_aux
 
14434
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14435
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14436
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14437
'just inserted' FROM t0_template
 
14438
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14439
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
14440
BEGIN
 
14441
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14442
f_charbig = 'updated by trigger'
 
14443
      WHERE f_int1 = - old.f_int1;
 
14444
END|
 
14445
DELETE FROM t0_aux
 
14446
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14447
        
 
14448
# check trigger-8 success:      1
 
14449
DROP TRIGGER trg_1;
 
14450
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14451
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14452
f_charbig = 'just inserted'
 
14453
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14454
DELETE FROM t0_aux
 
14455
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14456
DELETE FROM t1
 
14457
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14458
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14459
BEGIN
 
14460
SET new.f_int1 = old.f_int1 + @max_row,
 
14461
new.f_int2 = old.f_int2 - @max_row,
 
14462
new.f_charbig = '####updated per update trigger####';
 
14463
END|
 
14464
UPDATE t1
 
14465
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14466
f_charbig = '####updated per update statement itself####';
 
14467
        
 
14468
# check trigger-9 success:      1
 
14469
DROP TRIGGER trg_2;
 
14470
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14471
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14472
f_charbig = CONCAT('===',f_char1,'===');
 
14473
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14474
BEGIN
 
14475
SET new.f_int1 = new.f_int1 + @max_row,
 
14476
new.f_int2 = new.f_int2 - @max_row,
 
14477
new.f_charbig = '####updated per update trigger####';
 
14478
END|
 
14479
UPDATE t1
 
14480
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14481
f_charbig = '####updated per update statement itself####';
 
14482
        
 
14483
# check trigger-10 success:     1
 
14484
DROP TRIGGER trg_2;
 
14485
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14486
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14487
f_charbig = CONCAT('===',f_char1,'===');
 
14488
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14489
BEGIN
 
14490
SET new.f_int1 = @my_max1 + @counter,
 
14491
new.f_int2 = @my_min2 - @counter,
 
14492
new.f_charbig = '####updated per insert trigger####';
 
14493
SET @counter = @counter + 1;
 
14494
END|
 
14495
SET @counter = 1;
 
14496
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14497
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14498
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14499
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14500
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14501
ORDER BY f_int1;
 
14502
DROP TRIGGER trg_3;
 
14503
        
 
14504
# check trigger-11 success:     1
 
14505
DELETE FROM t1
 
14506
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14507
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14508
AND f_charbig = '####updated per insert trigger####';
 
14509
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14510
BEGIN
 
14511
SET new.f_int1 = @my_max1 + @counter,
 
14512
new.f_int2 = @my_min2 - @counter,
 
14513
new.f_charbig = '####updated per insert trigger####';
 
14514
SET @counter = @counter + 1;
 
14515
END|
 
14516
SET @counter = 1;
 
14517
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14518
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14519
SELECT CAST(f_int1 AS CHAR),
 
14520
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14521
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14522
ORDER BY f_int1;
 
14523
DROP TRIGGER trg_3;
 
14524
        
 
14525
# check trigger-12 success:     1
 
14526
DELETE FROM t1
 
14527
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14528
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14529
AND f_charbig = '####updated per insert trigger####';
 
14530
ANALYZE  TABLE t1;
 
14531
Table   Op      Msg_type        Msg_text
 
14532
test.t1 analyze status  OK
 
14533
CHECK    TABLE t1 EXTENDED;
 
14534
Table   Op      Msg_type        Msg_text
 
14535
test.t1 check   status  OK
 
14536
CHECKSUM TABLE t1 EXTENDED;
 
14537
Table   Checksum
 
14538
test.t1 <some_value>
 
14539
OPTIMIZE TABLE t1;
 
14540
Table   Op      Msg_type        Msg_text
 
14541
test.t1 optimize        status  OK
 
14542
# check layout success:    1
 
14543
REPAIR   TABLE t1 EXTENDED;
 
14544
Table   Op      Msg_type        Msg_text
 
14545
test.t1 repair  note    The storage engine for the table doesn't support repair
 
14546
# check layout success:    1
 
14547
TRUNCATE t1;
 
14548
        
 
14549
# check TRUNCATE success:       1
 
14550
# check layout success:    1
 
14551
# End usability test (inc/partition_check.inc)
 
14552
DROP TABLE t1;
 
14553
CREATE TABLE t1 (
 
14554
f_int1 INTEGER,
 
14555
f_int2 INTEGER,
 
14556
f_char1 CHAR(20),
 
14557
f_char2 CHAR(20),
 
14558
f_charbig VARCHAR(1000)
 
14559
 
 
14560
)
 
14561
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
14562
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
14563
(PARTITION part_1 VALUES IN (0),
 
14564
 PARTITION part_2 VALUES IN (1),
 
14565
 PARTITION part_3 VALUES IN (NULL));
 
14566
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14567
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14568
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
14569
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
 
14570
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14571
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14572
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14573
# Start usability test (inc/partition_check.inc)
 
14574
create_command
 
14575
SHOW CREATE TABLE t1;
 
14576
Table   Create Table
 
14577
t1      CREATE TABLE `t1` (
 
14578
  `f_int1` int(11) DEFAULT NULL,
 
14579
  `f_int2` int(11) DEFAULT NULL,
 
14580
  `f_char1` char(20) DEFAULT NULL,
 
14581
  `f_char2` char(20) DEFAULT NULL,
 
14582
  `f_charbig` varchar(1000) DEFAULT NULL
 
14583
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
 
14584
 
 
14585
# check prerequisites-1 success:    1
 
14586
# check COUNT(*) success:    1
 
14587
# check MIN/MAX(f_int1) success:    1
 
14588
# check MIN/MAX(f_int2) success:    1
 
14589
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14590
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14591
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
14592
WHERE f_int1 IN (2,3);
 
14593
# check prerequisites-3 success:    1
 
14594
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14595
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
14596
# check read via f_int1 success: 1
 
14597
# check read via f_int2 success: 1
 
14598
        
 
14599
# check multiple-1 success:     1
 
14600
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
14601
        
 
14602
# check multiple-2 success:     1
 
14603
INSERT INTO t1 SELECT * FROM t0_template
 
14604
WHERE MOD(f_int1,3) = 0;
 
14605
        
 
14606
# check multiple-3 success:     1
 
14607
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
14608
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
14609
AND @max_row_div2 + @max_row_div4;
 
14610
        
 
14611
# check multiple-4 success:     1
 
14612
DELETE FROM t1
 
14613
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
14614
AND @max_row_div2 + @max_row_div4 + @max_row;
 
14615
        
 
14616
# check multiple-5 success:     1
 
14617
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
14618
INSERT INTO t1
 
14619
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14620
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14621
f_charbig = '#SINGLE#';
 
14622
        
 
14623
# check single-1 success:       1
 
14624
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
14625
INSERT INTO t1
 
14626
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14627
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14628
f_charbig = '#SINGLE#';
 
14629
        
 
14630
# check single-2 success:       1
 
14631
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
14632
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
14633
UPDATE t1 SET f_int1 = @cur_value2
 
14634
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
14635
        
 
14636
# check single-3 success:       1
 
14637
SET @cur_value1= -1;
 
14638
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
14639
UPDATE t1 SET f_int1 = @cur_value1
 
14640
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
14641
        
 
14642
# check single-4 success:       1
 
14643
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
14644
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
14645
        
 
14646
# check single-5 success:       1
 
14647
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
14648
        
 
14649
# check single-6 success:       1
 
14650
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
14651
        
 
14652
# check single-7 success:       1
 
14653
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
14654
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
14655
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
14656
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
14657
f_charbig = '#NULL#';
 
14658
INSERT INTO t1
 
14659
SET f_int1 = NULL , f_int2 = -@max_row,
 
14660
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
14661
f_charbig = '#NULL#';
 
14662
# check null success:    1
 
14663
        
 
14664
# check null-1 success:         1
 
14665
UPDATE t1 SET f_int1 = -@max_row
 
14666
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14667
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14668
        
 
14669
# check null-2 success:         1
 
14670
UPDATE t1 SET f_int1 = NULL
 
14671
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14672
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14673
        
 
14674
# check null-3 success:         1
 
14675
DELETE FROM t1
 
14676
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14677
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14678
        
 
14679
# check null-4 success:         1
 
14680
DELETE FROM t1
 
14681
WHERE f_int1 = 0 AND f_int2 = 0
 
14682
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
14683
AND f_charbig = '#NULL#';
 
14684
SET AUTOCOMMIT= 0;
 
14685
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14686
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14687
FROM t0_template source_tab
 
14688
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14689
        
 
14690
# check transactions-1 success:         1
 
14691
COMMIT WORK;
 
14692
        
 
14693
# check transactions-2 success:         1
 
14694
ROLLBACK WORK;
 
14695
        
 
14696
# check transactions-3 success:         1
 
14697
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14698
COMMIT WORK;
 
14699
ROLLBACK WORK;
 
14700
        
 
14701
# check transactions-4 success:         1
 
14702
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14703
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14704
FROM t0_template source_tab
 
14705
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14706
        
 
14707
# check transactions-5 success:         1
 
14708
ROLLBACK WORK;
 
14709
        
 
14710
# check transactions-6 success:         1
 
14711
# INFO: Storage engine used for t1 seems to be transactional.
 
14712
COMMIT;
 
14713
        
 
14714
# check transactions-7 success:         1
 
14715
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14716
COMMIT WORK;
 
14717
SET @@session.sql_mode = 'traditional';
 
14718
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
14719
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14720
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
14721
'', '', 'was inserted' FROM t0_template
 
14722
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14723
ERROR 22012: Division by 0
 
14724
COMMIT;
 
14725
        
 
14726
# check transactions-8 success:         1
 
14727
# INFO: Storage engine used for t1 seems to be able to revert
 
14728
#       changes made by the failing statement.
 
14729
SET @@session.sql_mode = '';
 
14730
SET AUTOCOMMIT= 1;
 
14731
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14732
COMMIT WORK;
 
14733
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
14734
        
 
14735
# check special-1 success:      1
 
14736
UPDATE t1 SET f_charbig = '';
 
14737
        
 
14738
# check special-2 success:      1
 
14739
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
14740
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14741
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
14742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14743
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14744
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14745
'just inserted' FROM t0_template
 
14746
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14747
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
14748
BEGIN
 
14749
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14750
f_charbig = 'updated by trigger'
 
14751
      WHERE f_int1 = new.f_int1;
 
14752
END|
 
14753
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14754
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14755
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14756
        
 
14757
# check trigger-1 success:      1
 
14758
DROP TRIGGER trg_1;
 
14759
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14760
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14761
f_charbig = 'just inserted'
 
14762
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14763
DELETE FROM t0_aux
 
14764
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14765
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14766
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14767
'just inserted' FROM t0_template
 
14768
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14769
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
14770
BEGIN
 
14771
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14772
f_charbig = 'updated by trigger'
 
14773
      WHERE f_int1 = new.f_int1;
 
14774
END|
 
14775
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14776
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14777
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14778
        
 
14779
# check trigger-2 success:      1
 
14780
DROP TRIGGER trg_1;
 
14781
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14782
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14783
f_charbig = 'just inserted'
 
14784
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14785
DELETE FROM t0_aux
 
14786
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14787
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14788
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14789
'just inserted' FROM t0_template
 
14790
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14791
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14792
BEGIN
 
14793
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14794
f_charbig = 'updated by trigger'
 
14795
      WHERE f_int1 = new.f_int1;
 
14796
END|
 
14797
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14798
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14799
        
 
14800
# check trigger-3 success:      1
 
14801
DROP TRIGGER trg_1;
 
14802
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14803
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14804
f_charbig = 'just inserted'
 
14805
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14806
DELETE FROM t0_aux
 
14807
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14808
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14809
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14810
'just inserted' FROM t0_template
 
14811
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14812
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14813
BEGIN
 
14814
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14815
f_charbig = 'updated by trigger'
 
14816
      WHERE f_int1 = - old.f_int1;
 
14817
END|
 
14818
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14819
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14820
        
 
14821
# check trigger-4 success:      1
 
14822
DROP TRIGGER trg_1;
 
14823
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14824
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14825
f_charbig = 'just inserted'
 
14826
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14827
DELETE FROM t0_aux
 
14828
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14829
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14830
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14831
'just inserted' FROM t0_template
 
14832
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14833
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14834
BEGIN
 
14835
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14836
f_charbig = 'updated by trigger'
 
14837
      WHERE f_int1 = new.f_int1;
 
14838
END|
 
14839
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14840
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14841
        
 
14842
# check trigger-5 success:      1
 
14843
DROP TRIGGER trg_1;
 
14844
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14845
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14846
f_charbig = 'just inserted'
 
14847
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14848
DELETE FROM t0_aux
 
14849
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14850
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14851
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14852
'just inserted' FROM t0_template
 
14853
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14854
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14855
BEGIN
 
14856
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14857
f_charbig = 'updated by trigger'
 
14858
      WHERE f_int1 = - old.f_int1;
 
14859
END|
 
14860
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14861
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14862
        
 
14863
# check trigger-6 success:      1
 
14864
DROP TRIGGER trg_1;
 
14865
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14866
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14867
f_charbig = 'just inserted'
 
14868
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14869
DELETE FROM t0_aux
 
14870
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14871
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14872
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14873
'just inserted' FROM t0_template
 
14874
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14875
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
14876
BEGIN
 
14877
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14878
f_charbig = 'updated by trigger'
 
14879
      WHERE f_int1 = - old.f_int1;
 
14880
END|
 
14881
DELETE FROM t0_aux
 
14882
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14883
        
 
14884
# check trigger-7 success:      1
 
14885
DROP TRIGGER trg_1;
 
14886
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14887
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14888
f_charbig = 'just inserted'
 
14889
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14890
DELETE FROM t0_aux
 
14891
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14892
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14893
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14894
'just inserted' FROM t0_template
 
14895
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14896
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
14897
BEGIN
 
14898
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14899
f_charbig = 'updated by trigger'
 
14900
      WHERE f_int1 = - old.f_int1;
 
14901
END|
 
14902
DELETE FROM t0_aux
 
14903
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14904
        
 
14905
# check trigger-8 success:      1
 
14906
DROP TRIGGER trg_1;
 
14907
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14908
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14909
f_charbig = 'just inserted'
 
14910
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14911
DELETE FROM t0_aux
 
14912
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14913
DELETE FROM t1
 
14914
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14915
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14916
BEGIN
 
14917
SET new.f_int1 = old.f_int1 + @max_row,
 
14918
new.f_int2 = old.f_int2 - @max_row,
 
14919
new.f_charbig = '####updated per update trigger####';
 
14920
END|
 
14921
UPDATE t1
 
14922
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14923
f_charbig = '####updated per update statement itself####';
 
14924
        
 
14925
# check trigger-9 success:      1
 
14926
DROP TRIGGER trg_2;
 
14927
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14928
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14929
f_charbig = CONCAT('===',f_char1,'===');
 
14930
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14931
BEGIN
 
14932
SET new.f_int1 = new.f_int1 + @max_row,
 
14933
new.f_int2 = new.f_int2 - @max_row,
 
14934
new.f_charbig = '####updated per update trigger####';
 
14935
END|
 
14936
UPDATE t1
 
14937
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14938
f_charbig = '####updated per update statement itself####';
 
14939
        
 
14940
# check trigger-10 success:     1
 
14941
DROP TRIGGER trg_2;
 
14942
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14943
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14944
f_charbig = CONCAT('===',f_char1,'===');
 
14945
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14946
BEGIN
 
14947
SET new.f_int1 = @my_max1 + @counter,
 
14948
new.f_int2 = @my_min2 - @counter,
 
14949
new.f_charbig = '####updated per insert trigger####';
 
14950
SET @counter = @counter + 1;
 
14951
END|
 
14952
SET @counter = 1;
 
14953
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14954
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14955
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14956
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14957
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14958
ORDER BY f_int1;
 
14959
DROP TRIGGER trg_3;
 
14960
        
 
14961
# check trigger-11 success:     1
 
14962
DELETE FROM t1
 
14963
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14964
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14965
AND f_charbig = '####updated per insert trigger####';
 
14966
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14967
BEGIN
 
14968
SET new.f_int1 = @my_max1 + @counter,
 
14969
new.f_int2 = @my_min2 - @counter,
 
14970
new.f_charbig = '####updated per insert trigger####';
 
14971
SET @counter = @counter + 1;
 
14972
END|
 
14973
SET @counter = 1;
 
14974
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14975
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14976
SELECT CAST(f_int1 AS CHAR),
 
14977
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14978
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14979
ORDER BY f_int1;
 
14980
DROP TRIGGER trg_3;
 
14981
        
 
14982
# check trigger-12 success:     1
 
14983
DELETE FROM t1
 
14984
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14985
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14986
AND f_charbig = '####updated per insert trigger####';
 
14987
ANALYZE  TABLE t1;
 
14988
Table   Op      Msg_type        Msg_text
 
14989
test.t1 analyze status  OK
 
14990
CHECK    TABLE t1 EXTENDED;
 
14991
Table   Op      Msg_type        Msg_text
 
14992
test.t1 check   status  OK
 
14993
CHECKSUM TABLE t1 EXTENDED;
 
14994
Table   Checksum
 
14995
test.t1 <some_value>
 
14996
OPTIMIZE TABLE t1;
 
14997
Table   Op      Msg_type        Msg_text
 
14998
test.t1 optimize        status  OK
 
14999
# check layout success:    1
 
15000
REPAIR   TABLE t1 EXTENDED;
 
15001
Table   Op      Msg_type        Msg_text
 
15002
test.t1 repair  note    The storage engine for the table doesn't support repair
 
15003
# check layout success:    1
 
15004
TRUNCATE t1;
 
15005
        
 
15006
# check TRUNCATE success:       1
 
15007
# check layout success:    1
 
15008
# End usability test (inc/partition_check.inc)
 
15009
DROP TABLE t1;
 
15010
#  2.3 ALTER ... CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15011
DROP TABLE IF EXISTS t1;
 
15012
CREATE TABLE t1 (
 
15013
f_int1 INTEGER,
 
15014
f_int2 INTEGER,
 
15015
f_char1 CHAR(20),
 
15016
f_char2 CHAR(20),
 
15017
f_charbig VARCHAR(1000)
 
15018
 
 
15019
)
 
15020
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
15021
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15022
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15023
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15024
ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15025
ERROR HY000: Error in list of partitions to CHECK
 
15026
DROP TABLE t1;
 
15027
CREATE TABLE t1 (
 
15028
f_int1 INTEGER,
 
15029
f_int2 INTEGER,
 
15030
f_char1 CHAR(20),
 
15031
f_char2 CHAR(20),
 
15032
f_charbig VARCHAR(1000)
 
15033
 
 
15034
)
 
15035
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
15036
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15037
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15038
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15039
ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15040
ERROR HY000: Error in list of partitions to CHECK
 
15041
DROP TABLE t1;
 
15042
CREATE TABLE t1 (
 
15043
f_int1 INTEGER,
 
15044
f_int2 INTEGER,
 
15045
f_char1 CHAR(20),
 
15046
f_char2 CHAR(20),
 
15047
f_charbig VARCHAR(1000)
 
15048
 
 
15049
)
 
15050
PARTITION BY LIST(MOD(f_int1,4))
 
15051
(PARTITION part_3 VALUES IN (-3),
 
15052
PARTITION part_2 VALUES IN (-2),
 
15053
PARTITION part_1 VALUES IN (-1),
 
15054
PARTITION part_N VALUES IN (NULL),
 
15055
PARTITION part0 VALUES IN (0),
 
15056
PARTITION part1 VALUES IN (1),
 
15057
PARTITION part2 VALUES IN (2),
 
15058
PARTITION part3 VALUES IN (3));
 
15059
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15060
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15061
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15062
ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15063
ERROR HY000: Error in list of partitions to CHECK
 
15064
DROP TABLE t1;
 
15065
CREATE TABLE t1 (
 
15066
f_int1 INTEGER,
 
15067
f_int2 INTEGER,
 
15068
f_char1 CHAR(20),
 
15069
f_char2 CHAR(20),
 
15070
f_charbig VARCHAR(1000)
 
15071
 
 
15072
)
 
15073
PARTITION BY RANGE(f_int1)
 
15074
(PARTITION parta VALUES LESS THAN (0),
 
15075
PARTITION part_1 VALUES LESS THAN (5),
 
15076
PARTITION part_2 VALUES LESS THAN (10),
 
15077
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
15078
PARTITION part_4 VALUES LESS THAN (20),
 
15079
PARTITION part_5 VALUES LESS THAN (2147483646));
 
15080
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15081
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15082
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15083
ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15084
ERROR HY000: Error in list of partitions to CHECK
 
15085
DROP TABLE t1;
 
15086
CREATE TABLE t1 (
 
15087
f_int1 INTEGER,
 
15088
f_int2 INTEGER,
 
15089
f_char1 CHAR(20),
 
15090
f_char2 CHAR(20),
 
15091
f_charbig VARCHAR(1000)
 
15092
 
 
15093
)
 
15094
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
15095
(PARTITION part_1 VALUES LESS THAN (0),
 
15096
PARTITION part_2 VALUES LESS THAN (5),
 
15097
PARTITION part_3 VALUES LESS THAN (10),
 
15098
PARTITION part_4 VALUES LESS THAN (2147483646));
 
15099
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15100
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15101
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15102
ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15103
ERROR HY000: Error in list of partitions to CHECK
 
15104
DROP TABLE t1;
 
15105
CREATE TABLE t1 (
 
15106
f_int1 INTEGER,
 
15107
f_int2 INTEGER,
 
15108
f_char1 CHAR(20),
 
15109
f_char2 CHAR(20),
 
15110
f_charbig VARCHAR(1000)
 
15111
 
 
15112
)
 
15113
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
15114
(PARTITION part_1 VALUES LESS THAN (0)
 
15115
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
15116
PARTITION part_2 VALUES LESS THAN (5)
 
15117
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
15118
PARTITION part_3 VALUES LESS THAN (10)
 
15119
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
15120
PARTITION part_4 VALUES LESS THAN (2147483646)
 
15121
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
15122
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15123
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15124
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15125
ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15126
ERROR HY000: Error in list of partitions to CHECK
 
15127
DROP TABLE t1;
 
15128
CREATE TABLE t1 (
 
15129
f_int1 INTEGER,
 
15130
f_int2 INTEGER,
 
15131
f_char1 CHAR(20),
 
15132
f_char2 CHAR(20),
 
15133
f_charbig VARCHAR(1000)
 
15134
 
 
15135
)
 
15136
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
15137
(PARTITION part_1 VALUES IN (0)
 
15138
(SUBPARTITION sp11, SUBPARTITION sp12),
 
15139
PARTITION part_2 VALUES IN (1)
 
15140
(SUBPARTITION sp21, SUBPARTITION sp22),
 
15141
PARTITION part_3 VALUES IN (2)
 
15142
(SUBPARTITION sp31, SUBPARTITION sp32),
 
15143
PARTITION part_4 VALUES IN (NULL)
 
15144
(SUBPARTITION sp41, SUBPARTITION sp42));
 
15145
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15146
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15147
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15148
ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15149
ERROR HY000: Error in list of partitions to CHECK
 
15150
DROP TABLE t1;
 
15151
CREATE TABLE t1 (
 
15152
f_int1 INTEGER,
 
15153
f_int2 INTEGER,
 
15154
f_char1 CHAR(20),
 
15155
f_char2 CHAR(20),
 
15156
f_charbig VARCHAR(1000)
 
15157
 
 
15158
)
 
15159
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
15160
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
15161
(PARTITION part_1 VALUES IN (0),
 
15162
 PARTITION part_2 VALUES IN (1),
 
15163
 PARTITION part_3 VALUES IN (NULL));
 
15164
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15165
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15166
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15167
ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15168
ERROR HY000: Error in list of partitions to CHECK
 
15169
DROP TABLE t1;
 
15170
#  2.4 ALTER ... CHECK PARTITION part_1,part_1,part_1;
 
15171
DROP TABLE IF EXISTS t1;
 
15172
CREATE TABLE t1 (
 
15173
f_int1 INTEGER,
 
15174
f_int2 INTEGER,
 
15175
f_char1 CHAR(20),
 
15176
f_char2 CHAR(20),
 
15177
f_charbig VARCHAR(1000)
 
15178
 
 
15179
)
 
15180
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
15181
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15182
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15183
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15184
ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
 
15185
ERROR HY000: Error in list of partitions to CHECK
 
15186
DROP TABLE t1;
 
15187
CREATE TABLE t1 (
 
15188
f_int1 INTEGER,
 
15189
f_int2 INTEGER,
 
15190
f_char1 CHAR(20),
 
15191
f_char2 CHAR(20),
 
15192
f_charbig VARCHAR(1000)
 
15193
 
 
15194
)
 
15195
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
15196
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15197
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15198
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15199
ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
 
15200
ERROR HY000: Error in list of partitions to CHECK
 
15201
DROP TABLE t1;
 
15202
CREATE TABLE t1 (
 
15203
f_int1 INTEGER,
 
15204
f_int2 INTEGER,
 
15205
f_char1 CHAR(20),
 
15206
f_char2 CHAR(20),
 
15207
f_charbig VARCHAR(1000)
 
15208
 
 
15209
)
 
15210
PARTITION BY LIST(MOD(f_int1,4))
 
15211
(PARTITION part_3 VALUES IN (-3),
 
15212
PARTITION part_2 VALUES IN (-2),
 
15213
PARTITION part_1 VALUES IN (-1),
 
15214
PARTITION part_N VALUES IN (NULL),
 
15215
PARTITION part0 VALUES IN (0),
 
15216
PARTITION part1 VALUES IN (1),
 
15217
PARTITION part2 VALUES IN (2),
 
15218
PARTITION part3 VALUES IN (3));
 
15219
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15220
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15221
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15222
ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
 
15223
ERROR HY000: Error in list of partitions to CHECK
 
15224
DROP TABLE t1;
 
15225
CREATE TABLE t1 (
 
15226
f_int1 INTEGER,
 
15227
f_int2 INTEGER,
 
15228
f_char1 CHAR(20),
 
15229
f_char2 CHAR(20),
 
15230
f_charbig VARCHAR(1000)
 
15231
 
 
15232
)
 
15233
PARTITION BY RANGE(f_int1)
 
15234
(PARTITION parta VALUES LESS THAN (0),
 
15235
PARTITION part_1 VALUES LESS THAN (5),
 
15236
PARTITION part_2 VALUES LESS THAN (10),
 
15237
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
15238
PARTITION part_4 VALUES LESS THAN (20),
 
15239
PARTITION part_5 VALUES LESS THAN (2147483646));
 
15240
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15241
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15242
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15243
ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
 
15244
ERROR HY000: Error in list of partitions to CHECK
 
15245
DROP TABLE t1;
 
15246
CREATE TABLE t1 (
 
15247
f_int1 INTEGER,
 
15248
f_int2 INTEGER,
 
15249
f_char1 CHAR(20),
 
15250
f_char2 CHAR(20),
 
15251
f_charbig VARCHAR(1000)
 
15252
 
 
15253
)
 
15254
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
15255
(PARTITION part_1 VALUES LESS THAN (0),
 
15256
PARTITION part_2 VALUES LESS THAN (5),
 
15257
PARTITION part_3 VALUES LESS THAN (10),
 
15258
PARTITION part_4 VALUES LESS THAN (2147483646));
 
15259
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15260
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15261
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15262
ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
 
15263
ERROR HY000: Error in list of partitions to CHECK
 
15264
DROP TABLE t1;
 
15265
CREATE TABLE t1 (
 
15266
f_int1 INTEGER,
 
15267
f_int2 INTEGER,
 
15268
f_char1 CHAR(20),
 
15269
f_char2 CHAR(20),
 
15270
f_charbig VARCHAR(1000)
 
15271
 
 
15272
)
 
15273
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
15274
(PARTITION part_1 VALUES LESS THAN (0)
 
15275
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
15276
PARTITION part_2 VALUES LESS THAN (5)
 
15277
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
15278
PARTITION part_3 VALUES LESS THAN (10)
 
15279
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
15280
PARTITION part_4 VALUES LESS THAN (2147483646)
 
15281
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
15282
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15283
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15284
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15285
ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
 
15286
ERROR HY000: Error in list of partitions to CHECK
 
15287
DROP TABLE t1;
 
15288
CREATE TABLE t1 (
 
15289
f_int1 INTEGER,
 
15290
f_int2 INTEGER,
 
15291
f_char1 CHAR(20),
 
15292
f_char2 CHAR(20),
 
15293
f_charbig VARCHAR(1000)
 
15294
 
 
15295
)
 
15296
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
15297
(PARTITION part_1 VALUES IN (0)
 
15298
(SUBPARTITION sp11, SUBPARTITION sp12),
 
15299
PARTITION part_2 VALUES IN (1)
 
15300
(SUBPARTITION sp21, SUBPARTITION sp22),
 
15301
PARTITION part_3 VALUES IN (2)
 
15302
(SUBPARTITION sp31, SUBPARTITION sp32),
 
15303
PARTITION part_4 VALUES IN (NULL)
 
15304
(SUBPARTITION sp41, SUBPARTITION sp42));
 
15305
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15306
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15307
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15308
ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
 
15309
ERROR HY000: Error in list of partitions to CHECK
 
15310
DROP TABLE t1;
 
15311
CREATE TABLE t1 (
 
15312
f_int1 INTEGER,
 
15313
f_int2 INTEGER,
 
15314
f_char1 CHAR(20),
 
15315
f_char2 CHAR(20),
 
15316
f_charbig VARCHAR(1000)
 
15317
 
 
15318
)
 
15319
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
15320
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
15321
(PARTITION part_1 VALUES IN (0),
 
15322
 PARTITION part_2 VALUES IN (1),
 
15323
 PARTITION part_3 VALUES IN (NULL));
 
15324
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15325
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15326
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15327
ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
 
15328
ERROR HY000: Error in list of partitions to CHECK
 
15329
DROP TABLE t1;
 
15330
#------------------------------------------------------------------------
 
15331
#  3   ALTER ... OPTIMIZE PARTITION
 
15332
#------------------------------------------------------------------------
 
15333
#  3.1 ALTER ... OPTIMIZE PARTITION part_1;
 
15334
DROP TABLE IF EXISTS t1;
 
15335
CREATE TABLE t1 (
 
15336
f_int1 INTEGER,
 
15337
f_int2 INTEGER,
 
15338
f_char1 CHAR(20),
 
15339
f_char2 CHAR(20),
 
15340
f_charbig VARCHAR(1000)
 
15341
 
 
15342
)
 
15343
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
15344
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15345
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15346
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15347
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
 
15348
ERROR HY000: Got error -7 from storage engine
 
15349
DROP TABLE t1;
 
15350
CREATE TABLE t1 (
 
15351
f_int1 INTEGER,
 
15352
f_int2 INTEGER,
 
15353
f_char1 CHAR(20),
 
15354
f_char2 CHAR(20),
 
15355
f_charbig VARCHAR(1000)
 
15356
 
 
15357
)
 
15358
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
15359
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15360
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15361
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15362
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
 
15363
ERROR HY000: Got error -7 from storage engine
 
15364
DROP TABLE t1;
 
15365
CREATE TABLE t1 (
 
15366
f_int1 INTEGER,
 
15367
f_int2 INTEGER,
 
15368
f_char1 CHAR(20),
 
15369
f_char2 CHAR(20),
 
15370
f_charbig VARCHAR(1000)
 
15371
 
 
15372
)
 
15373
PARTITION BY LIST(MOD(f_int1,4))
 
15374
(PARTITION part_3 VALUES IN (-3),
 
15375
PARTITION part_2 VALUES IN (-2),
 
15376
PARTITION part_1 VALUES IN (-1),
 
15377
PARTITION part_N VALUES IN (NULL),
 
15378
PARTITION part0 VALUES IN (0),
 
15379
PARTITION part1 VALUES IN (1),
 
15380
PARTITION part2 VALUES IN (2),
 
15381
PARTITION part3 VALUES IN (3));
 
15382
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15383
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15384
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15385
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
 
15386
ERROR HY000: Got error -7 from storage engine
 
15387
DROP TABLE t1;
 
15388
CREATE TABLE t1 (
 
15389
f_int1 INTEGER,
 
15390
f_int2 INTEGER,
 
15391
f_char1 CHAR(20),
 
15392
f_char2 CHAR(20),
 
15393
f_charbig VARCHAR(1000)
 
15394
 
 
15395
)
 
15396
PARTITION BY RANGE(f_int1)
 
15397
(PARTITION parta VALUES LESS THAN (0),
 
15398
PARTITION part_1 VALUES LESS THAN (5),
 
15399
PARTITION part_2 VALUES LESS THAN (10),
 
15400
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
15401
PARTITION part_4 VALUES LESS THAN (20),
 
15402
PARTITION part_5 VALUES LESS THAN (2147483646));
 
15403
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15404
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15405
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15406
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
 
15407
ERROR HY000: Got error -7 from storage engine
 
15408
DROP TABLE t1;
 
15409
CREATE TABLE t1 (
 
15410
f_int1 INTEGER,
 
15411
f_int2 INTEGER,
 
15412
f_char1 CHAR(20),
 
15413
f_char2 CHAR(20),
 
15414
f_charbig VARCHAR(1000)
 
15415
 
 
15416
)
 
15417
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
15418
(PARTITION part_1 VALUES LESS THAN (0),
 
15419
PARTITION part_2 VALUES LESS THAN (5),
 
15420
PARTITION part_3 VALUES LESS THAN (10),
 
15421
PARTITION part_4 VALUES LESS THAN (2147483646));
 
15422
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15423
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15424
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15425
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
 
15426
ERROR HY000: Got error -7 from storage engine
 
15427
DROP TABLE t1;
 
15428
CREATE TABLE t1 (
 
15429
f_int1 INTEGER,
 
15430
f_int2 INTEGER,
 
15431
f_char1 CHAR(20),
 
15432
f_char2 CHAR(20),
 
15433
f_charbig VARCHAR(1000)
 
15434
 
 
15435
)
 
15436
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
15437
(PARTITION part_1 VALUES LESS THAN (0)
 
15438
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
15439
PARTITION part_2 VALUES LESS THAN (5)
 
15440
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
15441
PARTITION part_3 VALUES LESS THAN (10)
 
15442
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
15443
PARTITION part_4 VALUES LESS THAN (2147483646)
 
15444
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
15445
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15446
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15447
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15448
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
 
15449
ERROR HY000: Got error -7 from storage engine
 
15450
DROP TABLE t1;
 
15451
CREATE TABLE t1 (
 
15452
f_int1 INTEGER,
 
15453
f_int2 INTEGER,
 
15454
f_char1 CHAR(20),
 
15455
f_char2 CHAR(20),
 
15456
f_charbig VARCHAR(1000)
 
15457
 
 
15458
)
 
15459
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
15460
(PARTITION part_1 VALUES IN (0)
 
15461
(SUBPARTITION sp11, SUBPARTITION sp12),
 
15462
PARTITION part_2 VALUES IN (1)
 
15463
(SUBPARTITION sp21, SUBPARTITION sp22),
 
15464
PARTITION part_3 VALUES IN (2)
 
15465
(SUBPARTITION sp31, SUBPARTITION sp32),
 
15466
PARTITION part_4 VALUES IN (NULL)
 
15467
(SUBPARTITION sp41, SUBPARTITION sp42));
 
15468
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15469
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15470
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15471
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
 
15472
ERROR HY000: Got error -7 from storage engine
 
15473
DROP TABLE t1;
 
15474
CREATE TABLE t1 (
 
15475
f_int1 INTEGER,
 
15476
f_int2 INTEGER,
 
15477
f_char1 CHAR(20),
 
15478
f_char2 CHAR(20),
 
15479
f_charbig VARCHAR(1000)
 
15480
 
 
15481
)
 
15482
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
15483
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
15484
(PARTITION part_1 VALUES IN (0),
 
15485
 PARTITION part_2 VALUES IN (1),
 
15486
 PARTITION part_3 VALUES IN (NULL));
 
15487
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15488
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15489
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15490
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
 
15491
ERROR HY000: Got error -7 from storage engine
 
15492
DROP TABLE t1;
 
15493
#  3.2 ALTER ... OPTIMIZE PARTITION part_1,part_2;
 
15494
DROP TABLE IF EXISTS t1;
 
15495
CREATE TABLE t1 (
 
15496
f_int1 INTEGER,
 
15497
f_int2 INTEGER,
 
15498
f_char1 CHAR(20),
 
15499
f_char2 CHAR(20),
 
15500
f_charbig VARCHAR(1000)
 
15501
 
 
15502
)
 
15503
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
15504
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15505
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15506
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15507
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
 
15508
ERROR HY000: Got error -7 from storage engine
 
15509
DROP TABLE t1;
 
15510
CREATE TABLE t1 (
 
15511
f_int1 INTEGER,
 
15512
f_int2 INTEGER,
 
15513
f_char1 CHAR(20),
 
15514
f_char2 CHAR(20),
 
15515
f_charbig VARCHAR(1000)
 
15516
 
 
15517
)
 
15518
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
15519
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15520
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15521
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15522
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
 
15523
ERROR HY000: Got error -7 from storage engine
 
15524
DROP TABLE t1;
 
15525
CREATE TABLE t1 (
 
15526
f_int1 INTEGER,
 
15527
f_int2 INTEGER,
 
15528
f_char1 CHAR(20),
 
15529
f_char2 CHAR(20),
 
15530
f_charbig VARCHAR(1000)
 
15531
 
 
15532
)
 
15533
PARTITION BY LIST(MOD(f_int1,4))
 
15534
(PARTITION part_3 VALUES IN (-3),
 
15535
PARTITION part_2 VALUES IN (-2),
 
15536
PARTITION part_1 VALUES IN (-1),
 
15537
PARTITION part_N VALUES IN (NULL),
 
15538
PARTITION part0 VALUES IN (0),
 
15539
PARTITION part1 VALUES IN (1),
 
15540
PARTITION part2 VALUES IN (2),
 
15541
PARTITION part3 VALUES IN (3));
 
15542
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15543
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15544
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15545
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
 
15546
ERROR HY000: Got error -7 from storage engine
 
15547
DROP TABLE t1;
 
15548
CREATE TABLE t1 (
 
15549
f_int1 INTEGER,
 
15550
f_int2 INTEGER,
 
15551
f_char1 CHAR(20),
 
15552
f_char2 CHAR(20),
 
15553
f_charbig VARCHAR(1000)
 
15554
 
 
15555
)
 
15556
PARTITION BY RANGE(f_int1)
 
15557
(PARTITION parta VALUES LESS THAN (0),
 
15558
PARTITION part_1 VALUES LESS THAN (5),
 
15559
PARTITION part_2 VALUES LESS THAN (10),
 
15560
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
15561
PARTITION part_4 VALUES LESS THAN (20),
 
15562
PARTITION part_5 VALUES LESS THAN (2147483646));
 
15563
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15564
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15565
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15566
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
 
15567
ERROR HY000: Got error -7 from storage engine
 
15568
DROP TABLE t1;
 
15569
CREATE TABLE t1 (
 
15570
f_int1 INTEGER,
 
15571
f_int2 INTEGER,
 
15572
f_char1 CHAR(20),
 
15573
f_char2 CHAR(20),
 
15574
f_charbig VARCHAR(1000)
 
15575
 
 
15576
)
 
15577
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
15578
(PARTITION part_1 VALUES LESS THAN (0),
 
15579
PARTITION part_2 VALUES LESS THAN (5),
 
15580
PARTITION part_3 VALUES LESS THAN (10),
 
15581
PARTITION part_4 VALUES LESS THAN (2147483646));
 
15582
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15583
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15584
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15585
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
 
15586
ERROR HY000: Got error -7 from storage engine
 
15587
DROP TABLE t1;
 
15588
CREATE TABLE t1 (
 
15589
f_int1 INTEGER,
 
15590
f_int2 INTEGER,
 
15591
f_char1 CHAR(20),
 
15592
f_char2 CHAR(20),
 
15593
f_charbig VARCHAR(1000)
 
15594
 
 
15595
)
 
15596
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
15597
(PARTITION part_1 VALUES LESS THAN (0)
 
15598
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
15599
PARTITION part_2 VALUES LESS THAN (5)
 
15600
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
15601
PARTITION part_3 VALUES LESS THAN (10)
 
15602
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
15603
PARTITION part_4 VALUES LESS THAN (2147483646)
 
15604
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
15605
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15606
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15607
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15608
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
 
15609
ERROR HY000: Got error -7 from storage engine
 
15610
DROP TABLE t1;
 
15611
CREATE TABLE t1 (
 
15612
f_int1 INTEGER,
 
15613
f_int2 INTEGER,
 
15614
f_char1 CHAR(20),
 
15615
f_char2 CHAR(20),
 
15616
f_charbig VARCHAR(1000)
 
15617
 
 
15618
)
 
15619
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
15620
(PARTITION part_1 VALUES IN (0)
 
15621
(SUBPARTITION sp11, SUBPARTITION sp12),
 
15622
PARTITION part_2 VALUES IN (1)
 
15623
(SUBPARTITION sp21, SUBPARTITION sp22),
 
15624
PARTITION part_3 VALUES IN (2)
 
15625
(SUBPARTITION sp31, SUBPARTITION sp32),
 
15626
PARTITION part_4 VALUES IN (NULL)
 
15627
(SUBPARTITION sp41, SUBPARTITION sp42));
 
15628
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15629
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15630
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15631
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
 
15632
ERROR HY000: Got error -7 from storage engine
 
15633
DROP TABLE t1;
 
15634
CREATE TABLE t1 (
 
15635
f_int1 INTEGER,
 
15636
f_int2 INTEGER,
 
15637
f_char1 CHAR(20),
 
15638
f_char2 CHAR(20),
 
15639
f_charbig VARCHAR(1000)
 
15640
 
 
15641
)
 
15642
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
15643
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
15644
(PARTITION part_1 VALUES IN (0),
 
15645
 PARTITION part_2 VALUES IN (1),
 
15646
 PARTITION part_3 VALUES IN (NULL));
 
15647
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15648
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15649
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15650
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
 
15651
ERROR HY000: Got error -7 from storage engine
 
15652
DROP TABLE t1;
 
15653
#  3.3 ALTER ... OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
15654
DROP TABLE IF EXISTS t1;
 
15655
CREATE TABLE t1 (
 
15656
f_int1 INTEGER,
 
15657
f_int2 INTEGER,
 
15658
f_char1 CHAR(20),
 
15659
f_char2 CHAR(20),
 
15660
f_charbig VARCHAR(1000)
 
15661
 
 
15662
)
 
15663
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
15664
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15665
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15666
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15667
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
15668
ERROR HY000: Error in list of partitions to OPTIMIZE
 
15669
DROP TABLE t1;
 
15670
CREATE TABLE t1 (
 
15671
f_int1 INTEGER,
 
15672
f_int2 INTEGER,
 
15673
f_char1 CHAR(20),
 
15674
f_char2 CHAR(20),
 
15675
f_charbig VARCHAR(1000)
 
15676
 
 
15677
)
 
15678
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
15679
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15680
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15681
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15682
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
15683
ERROR HY000: Error in list of partitions to OPTIMIZE
 
15684
DROP TABLE t1;
 
15685
CREATE TABLE t1 (
 
15686
f_int1 INTEGER,
 
15687
f_int2 INTEGER,
 
15688
f_char1 CHAR(20),
 
15689
f_char2 CHAR(20),
 
15690
f_charbig VARCHAR(1000)
 
15691
 
 
15692
)
 
15693
PARTITION BY LIST(MOD(f_int1,4))
 
15694
(PARTITION part_3 VALUES IN (-3),
 
15695
PARTITION part_2 VALUES IN (-2),
 
15696
PARTITION part_1 VALUES IN (-1),
 
15697
PARTITION part_N VALUES IN (NULL),
 
15698
PARTITION part0 VALUES IN (0),
 
15699
PARTITION part1 VALUES IN (1),
 
15700
PARTITION part2 VALUES IN (2),
 
15701
PARTITION part3 VALUES IN (3));
 
15702
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15703
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15704
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15705
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
15706
ERROR HY000: Error in list of partitions to OPTIMIZE
 
15707
DROP TABLE t1;
 
15708
CREATE TABLE t1 (
 
15709
f_int1 INTEGER,
 
15710
f_int2 INTEGER,
 
15711
f_char1 CHAR(20),
 
15712
f_char2 CHAR(20),
 
15713
f_charbig VARCHAR(1000)
 
15714
 
 
15715
)
 
15716
PARTITION BY RANGE(f_int1)
 
15717
(PARTITION parta VALUES LESS THAN (0),
 
15718
PARTITION part_1 VALUES LESS THAN (5),
 
15719
PARTITION part_2 VALUES LESS THAN (10),
 
15720
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
15721
PARTITION part_4 VALUES LESS THAN (20),
 
15722
PARTITION part_5 VALUES LESS THAN (2147483646));
 
15723
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15724
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15725
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15726
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
15727
ERROR HY000: Error in list of partitions to OPTIMIZE
 
15728
DROP TABLE t1;
 
15729
CREATE TABLE t1 (
 
15730
f_int1 INTEGER,
 
15731
f_int2 INTEGER,
 
15732
f_char1 CHAR(20),
 
15733
f_char2 CHAR(20),
 
15734
f_charbig VARCHAR(1000)
 
15735
 
 
15736
)
 
15737
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
15738
(PARTITION part_1 VALUES LESS THAN (0),
 
15739
PARTITION part_2 VALUES LESS THAN (5),
 
15740
PARTITION part_3 VALUES LESS THAN (10),
 
15741
PARTITION part_4 VALUES LESS THAN (2147483646));
 
15742
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15743
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15744
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15745
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
15746
ERROR HY000: Error in list of partitions to OPTIMIZE
 
15747
DROP TABLE t1;
 
15748
CREATE TABLE t1 (
 
15749
f_int1 INTEGER,
 
15750
f_int2 INTEGER,
 
15751
f_char1 CHAR(20),
 
15752
f_char2 CHAR(20),
 
15753
f_charbig VARCHAR(1000)
 
15754
 
 
15755
)
 
15756
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
15757
(PARTITION part_1 VALUES LESS THAN (0)
 
15758
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
15759
PARTITION part_2 VALUES LESS THAN (5)
 
15760
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
15761
PARTITION part_3 VALUES LESS THAN (10)
 
15762
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
15763
PARTITION part_4 VALUES LESS THAN (2147483646)
 
15764
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
15765
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15766
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15767
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15768
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
15769
ERROR HY000: Error in list of partitions to OPTIMIZE
 
15770
DROP TABLE t1;
 
15771
CREATE TABLE t1 (
 
15772
f_int1 INTEGER,
 
15773
f_int2 INTEGER,
 
15774
f_char1 CHAR(20),
 
15775
f_char2 CHAR(20),
 
15776
f_charbig VARCHAR(1000)
 
15777
 
 
15778
)
 
15779
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
15780
(PARTITION part_1 VALUES IN (0)
 
15781
(SUBPARTITION sp11, SUBPARTITION sp12),
 
15782
PARTITION part_2 VALUES IN (1)
 
15783
(SUBPARTITION sp21, SUBPARTITION sp22),
 
15784
PARTITION part_3 VALUES IN (2)
 
15785
(SUBPARTITION sp31, SUBPARTITION sp32),
 
15786
PARTITION part_4 VALUES IN (NULL)
 
15787
(SUBPARTITION sp41, SUBPARTITION sp42));
 
15788
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15789
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15790
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15791
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
15792
ERROR HY000: Error in list of partitions to OPTIMIZE
 
15793
DROP TABLE t1;
 
15794
CREATE TABLE t1 (
 
15795
f_int1 INTEGER,
 
15796
f_int2 INTEGER,
 
15797
f_char1 CHAR(20),
 
15798
f_char2 CHAR(20),
 
15799
f_charbig VARCHAR(1000)
 
15800
 
 
15801
)
 
15802
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
15803
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
15804
(PARTITION part_1 VALUES IN (0),
 
15805
 PARTITION part_2 VALUES IN (1),
 
15806
 PARTITION part_3 VALUES IN (NULL));
 
15807
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15808
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15809
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15810
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
15811
ERROR HY000: Error in list of partitions to OPTIMIZE
 
15812
DROP TABLE t1;
 
15813
#  3.4 ALTER ... OPTIMIZE PARTITION part_1,part_1,part_1;
 
15814
DROP TABLE IF EXISTS t1;
 
15815
CREATE TABLE t1 (
 
15816
f_int1 INTEGER,
 
15817
f_int2 INTEGER,
 
15818
f_char1 CHAR(20),
 
15819
f_char2 CHAR(20),
 
15820
f_charbig VARCHAR(1000)
 
15821
 
 
15822
)
 
15823
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
15824
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15825
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15826
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15827
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
 
15828
ERROR HY000: Error in list of partitions to OPTIMIZE
 
15829
DROP TABLE t1;
 
15830
CREATE TABLE t1 (
 
15831
f_int1 INTEGER,
 
15832
f_int2 INTEGER,
 
15833
f_char1 CHAR(20),
 
15834
f_char2 CHAR(20),
 
15835
f_charbig VARCHAR(1000)
 
15836
 
 
15837
)
 
15838
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
15839
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15840
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15841
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15842
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
 
15843
ERROR HY000: Error in list of partitions to OPTIMIZE
 
15844
DROP TABLE t1;
 
15845
CREATE TABLE t1 (
 
15846
f_int1 INTEGER,
 
15847
f_int2 INTEGER,
 
15848
f_char1 CHAR(20),
 
15849
f_char2 CHAR(20),
 
15850
f_charbig VARCHAR(1000)
 
15851
 
 
15852
)
 
15853
PARTITION BY LIST(MOD(f_int1,4))
 
15854
(PARTITION part_3 VALUES IN (-3),
 
15855
PARTITION part_2 VALUES IN (-2),
 
15856
PARTITION part_1 VALUES IN (-1),
 
15857
PARTITION part_N VALUES IN (NULL),
 
15858
PARTITION part0 VALUES IN (0),
 
15859
PARTITION part1 VALUES IN (1),
 
15860
PARTITION part2 VALUES IN (2),
 
15861
PARTITION part3 VALUES IN (3));
 
15862
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15863
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15864
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15865
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
 
15866
ERROR HY000: Error in list of partitions to OPTIMIZE
 
15867
DROP TABLE t1;
 
15868
CREATE TABLE t1 (
 
15869
f_int1 INTEGER,
 
15870
f_int2 INTEGER,
 
15871
f_char1 CHAR(20),
 
15872
f_char2 CHAR(20),
 
15873
f_charbig VARCHAR(1000)
 
15874
 
 
15875
)
 
15876
PARTITION BY RANGE(f_int1)
 
15877
(PARTITION parta VALUES LESS THAN (0),
 
15878
PARTITION part_1 VALUES LESS THAN (5),
 
15879
PARTITION part_2 VALUES LESS THAN (10),
 
15880
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
15881
PARTITION part_4 VALUES LESS THAN (20),
 
15882
PARTITION part_5 VALUES LESS THAN (2147483646));
 
15883
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15884
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15885
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15886
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
 
15887
ERROR HY000: Error in list of partitions to OPTIMIZE
 
15888
DROP TABLE t1;
 
15889
CREATE TABLE t1 (
 
15890
f_int1 INTEGER,
 
15891
f_int2 INTEGER,
 
15892
f_char1 CHAR(20),
 
15893
f_char2 CHAR(20),
 
15894
f_charbig VARCHAR(1000)
 
15895
 
 
15896
)
 
15897
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
15898
(PARTITION part_1 VALUES LESS THAN (0),
 
15899
PARTITION part_2 VALUES LESS THAN (5),
 
15900
PARTITION part_3 VALUES LESS THAN (10),
 
15901
PARTITION part_4 VALUES LESS THAN (2147483646));
 
15902
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15903
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15904
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15905
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
 
15906
ERROR HY000: Error in list of partitions to OPTIMIZE
 
15907
DROP TABLE t1;
 
15908
CREATE TABLE t1 (
 
15909
f_int1 INTEGER,
 
15910
f_int2 INTEGER,
 
15911
f_char1 CHAR(20),
 
15912
f_char2 CHAR(20),
 
15913
f_charbig VARCHAR(1000)
 
15914
 
 
15915
)
 
15916
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
15917
(PARTITION part_1 VALUES LESS THAN (0)
 
15918
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
15919
PARTITION part_2 VALUES LESS THAN (5)
 
15920
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
15921
PARTITION part_3 VALUES LESS THAN (10)
 
15922
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
15923
PARTITION part_4 VALUES LESS THAN (2147483646)
 
15924
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
15925
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15926
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15927
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15928
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
 
15929
ERROR HY000: Error in list of partitions to OPTIMIZE
 
15930
DROP TABLE t1;
 
15931
CREATE TABLE t1 (
 
15932
f_int1 INTEGER,
 
15933
f_int2 INTEGER,
 
15934
f_char1 CHAR(20),
 
15935
f_char2 CHAR(20),
 
15936
f_charbig VARCHAR(1000)
 
15937
 
 
15938
)
 
15939
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
15940
(PARTITION part_1 VALUES IN (0)
 
15941
(SUBPARTITION sp11, SUBPARTITION sp12),
 
15942
PARTITION part_2 VALUES IN (1)
 
15943
(SUBPARTITION sp21, SUBPARTITION sp22),
 
15944
PARTITION part_3 VALUES IN (2)
 
15945
(SUBPARTITION sp31, SUBPARTITION sp32),
 
15946
PARTITION part_4 VALUES IN (NULL)
 
15947
(SUBPARTITION sp41, SUBPARTITION sp42));
 
15948
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15949
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15950
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15951
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
 
15952
ERROR HY000: Error in list of partitions to OPTIMIZE
 
15953
DROP TABLE t1;
 
15954
CREATE TABLE t1 (
 
15955
f_int1 INTEGER,
 
15956
f_int2 INTEGER,
 
15957
f_char1 CHAR(20),
 
15958
f_char2 CHAR(20),
 
15959
f_charbig VARCHAR(1000)
 
15960
 
 
15961
)
 
15962
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
15963
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
15964
(PARTITION part_1 VALUES IN (0),
 
15965
 PARTITION part_2 VALUES IN (1),
 
15966
 PARTITION part_3 VALUES IN (NULL));
 
15967
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15968
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15969
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15970
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
 
15971
ERROR HY000: Error in list of partitions to OPTIMIZE
 
15972
DROP TABLE t1;
 
15973
#------------------------------------------------------------------------
 
15974
#  4   ALTER ... REBUILD PARTITION
 
15975
#------------------------------------------------------------------------
 
15976
#  4.1 ALTER ... REBUILD PARTITION part_1;
 
15977
DROP TABLE IF EXISTS t1;
 
15978
CREATE TABLE t1 (
 
15979
f_int1 INTEGER,
 
15980
f_int2 INTEGER,
 
15981
f_char1 CHAR(20),
 
15982
f_char2 CHAR(20),
 
15983
f_charbig VARCHAR(1000)
 
15984
 
 
15985
)
 
15986
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
15987
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15988
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15989
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15990
ALTER TABLE t1 REBUILD PARTITION part_1;
 
15991
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15992
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15993
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15994
# Start usability test (inc/partition_check.inc)
 
15995
create_command
 
15996
SHOW CREATE TABLE t1;
 
15997
Table   Create Table
 
15998
t1      CREATE TABLE `t1` (
 
15999
  `f_int1` int(11) DEFAULT NULL,
 
16000
  `f_int2` int(11) DEFAULT NULL,
 
16001
  `f_char1` char(20) DEFAULT NULL,
 
16002
  `f_char2` char(20) DEFAULT NULL,
 
16003
  `f_charbig` varchar(1000) DEFAULT NULL
 
16004
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
 
16005
 
 
16006
# check prerequisites-1 success:    1
 
16007
# check COUNT(*) success:    1
 
16008
# check MIN/MAX(f_int1) success:    1
 
16009
# check MIN/MAX(f_int2) success:    1
 
16010
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16011
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16012
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
16013
WHERE f_int1 IN (2,3);
 
16014
# check prerequisites-3 success:    1
 
16015
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16016
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
16017
# check read via f_int1 success: 1
 
16018
# check read via f_int2 success: 1
 
16019
        
 
16020
# check multiple-1 success:     1
 
16021
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
16022
        
 
16023
# check multiple-2 success:     1
 
16024
INSERT INTO t1 SELECT * FROM t0_template
 
16025
WHERE MOD(f_int1,3) = 0;
 
16026
        
 
16027
# check multiple-3 success:     1
 
16028
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
16029
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
16030
AND @max_row_div2 + @max_row_div4;
 
16031
        
 
16032
# check multiple-4 success:     1
 
16033
DELETE FROM t1
 
16034
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
16035
AND @max_row_div2 + @max_row_div4 + @max_row;
 
16036
        
 
16037
# check multiple-5 success:     1
 
16038
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
16039
INSERT INTO t1
 
16040
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16041
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16042
f_charbig = '#SINGLE#';
 
16043
        
 
16044
# check single-1 success:       1
 
16045
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
16046
INSERT INTO t1
 
16047
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16048
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16049
f_charbig = '#SINGLE#';
 
16050
        
 
16051
# check single-2 success:       1
 
16052
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
16053
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
16054
UPDATE t1 SET f_int1 = @cur_value2
 
16055
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
16056
        
 
16057
# check single-3 success:       1
 
16058
SET @cur_value1= -1;
 
16059
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
16060
UPDATE t1 SET f_int1 = @cur_value1
 
16061
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
16062
        
 
16063
# check single-4 success:       1
 
16064
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
16065
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
16066
        
 
16067
# check single-5 success:       1
 
16068
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
16069
        
 
16070
# check single-6 success:       1
 
16071
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
16072
        
 
16073
# check single-7 success:       1
 
16074
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
16075
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
16076
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
16077
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
16078
f_charbig = '#NULL#';
 
16079
INSERT INTO t1
 
16080
SET f_int1 = NULL , f_int2 = -@max_row,
 
16081
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
16082
f_charbig = '#NULL#';
 
16083
# check null success:    1
 
16084
        
 
16085
# check null-1 success:         1
 
16086
UPDATE t1 SET f_int1 = -@max_row
 
16087
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16088
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16089
        
 
16090
# check null-2 success:         1
 
16091
UPDATE t1 SET f_int1 = NULL
 
16092
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16093
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16094
        
 
16095
# check null-3 success:         1
 
16096
DELETE FROM t1
 
16097
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16098
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16099
        
 
16100
# check null-4 success:         1
 
16101
DELETE FROM t1
 
16102
WHERE f_int1 = 0 AND f_int2 = 0
 
16103
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
16104
AND f_charbig = '#NULL#';
 
16105
SET AUTOCOMMIT= 0;
 
16106
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16107
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16108
FROM t0_template source_tab
 
16109
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16110
        
 
16111
# check transactions-1 success:         1
 
16112
COMMIT WORK;
 
16113
        
 
16114
# check transactions-2 success:         1
 
16115
ROLLBACK WORK;
 
16116
        
 
16117
# check transactions-3 success:         1
 
16118
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16119
COMMIT WORK;
 
16120
ROLLBACK WORK;
 
16121
        
 
16122
# check transactions-4 success:         1
 
16123
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16124
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16125
FROM t0_template source_tab
 
16126
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16127
        
 
16128
# check transactions-5 success:         1
 
16129
ROLLBACK WORK;
 
16130
        
 
16131
# check transactions-6 success:         1
 
16132
# INFO: Storage engine used for t1 seems to be transactional.
 
16133
COMMIT;
 
16134
        
 
16135
# check transactions-7 success:         1
 
16136
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16137
COMMIT WORK;
 
16138
SET @@session.sql_mode = 'traditional';
 
16139
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
16140
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16141
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
16142
'', '', 'was inserted' FROM t0_template
 
16143
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16144
ERROR 22012: Division by 0
 
16145
COMMIT;
 
16146
        
 
16147
# check transactions-8 success:         1
 
16148
# INFO: Storage engine used for t1 seems to be able to revert
 
16149
#       changes made by the failing statement.
 
16150
SET @@session.sql_mode = '';
 
16151
SET AUTOCOMMIT= 1;
 
16152
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16153
COMMIT WORK;
 
16154
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
16155
        
 
16156
# check special-1 success:      1
 
16157
UPDATE t1 SET f_charbig = '';
 
16158
        
 
16159
# check special-2 success:      1
 
16160
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
16161
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16162
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
16163
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16164
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16165
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16166
'just inserted' FROM t0_template
 
16167
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16168
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
16169
BEGIN
 
16170
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16171
f_charbig = 'updated by trigger'
 
16172
      WHERE f_int1 = new.f_int1;
 
16173
END|
 
16174
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16175
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16176
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16177
        
 
16178
# check trigger-1 success:      1
 
16179
DROP TRIGGER trg_1;
 
16180
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16181
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16182
f_charbig = 'just inserted'
 
16183
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16184
DELETE FROM t0_aux
 
16185
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16186
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16187
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16188
'just inserted' FROM t0_template
 
16189
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16190
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
16191
BEGIN
 
16192
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16193
f_charbig = 'updated by trigger'
 
16194
      WHERE f_int1 = new.f_int1;
 
16195
END|
 
16196
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16197
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16198
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16199
        
 
16200
# check trigger-2 success:      1
 
16201
DROP TRIGGER trg_1;
 
16202
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16203
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16204
f_charbig = 'just inserted'
 
16205
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16206
DELETE FROM t0_aux
 
16207
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16208
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16209
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16210
'just inserted' FROM t0_template
 
16211
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16212
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16213
BEGIN
 
16214
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16215
f_charbig = 'updated by trigger'
 
16216
      WHERE f_int1 = new.f_int1;
 
16217
END|
 
16218
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16219
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16220
        
 
16221
# check trigger-3 success:      1
 
16222
DROP TRIGGER trg_1;
 
16223
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16224
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16225
f_charbig = 'just inserted'
 
16226
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16227
DELETE FROM t0_aux
 
16228
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16229
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16230
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16231
'just inserted' FROM t0_template
 
16232
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16233
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16234
BEGIN
 
16235
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16236
f_charbig = 'updated by trigger'
 
16237
      WHERE f_int1 = - old.f_int1;
 
16238
END|
 
16239
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16240
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16241
        
 
16242
# check trigger-4 success:      1
 
16243
DROP TRIGGER trg_1;
 
16244
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16245
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16246
f_charbig = 'just inserted'
 
16247
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16248
DELETE FROM t0_aux
 
16249
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16250
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16251
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16252
'just inserted' FROM t0_template
 
16253
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16254
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16255
BEGIN
 
16256
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16257
f_charbig = 'updated by trigger'
 
16258
      WHERE f_int1 = new.f_int1;
 
16259
END|
 
16260
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16261
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16262
        
 
16263
# check trigger-5 success:      1
 
16264
DROP TRIGGER trg_1;
 
16265
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16266
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16267
f_charbig = 'just inserted'
 
16268
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16269
DELETE FROM t0_aux
 
16270
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16271
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16272
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16273
'just inserted' FROM t0_template
 
16274
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16275
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16276
BEGIN
 
16277
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16278
f_charbig = 'updated by trigger'
 
16279
      WHERE f_int1 = - old.f_int1;
 
16280
END|
 
16281
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16282
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16283
        
 
16284
# check trigger-6 success:      1
 
16285
DROP TRIGGER trg_1;
 
16286
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16287
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16288
f_charbig = 'just inserted'
 
16289
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16290
DELETE FROM t0_aux
 
16291
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16292
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16293
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16294
'just inserted' FROM t0_template
 
16295
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16296
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
16297
BEGIN
 
16298
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16299
f_charbig = 'updated by trigger'
 
16300
      WHERE f_int1 = - old.f_int1;
 
16301
END|
 
16302
DELETE FROM t0_aux
 
16303
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16304
        
 
16305
# check trigger-7 success:      1
 
16306
DROP TRIGGER trg_1;
 
16307
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16308
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16309
f_charbig = 'just inserted'
 
16310
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16311
DELETE FROM t0_aux
 
16312
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16313
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16314
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16315
'just inserted' FROM t0_template
 
16316
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16317
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
16318
BEGIN
 
16319
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16320
f_charbig = 'updated by trigger'
 
16321
      WHERE f_int1 = - old.f_int1;
 
16322
END|
 
16323
DELETE FROM t0_aux
 
16324
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16325
        
 
16326
# check trigger-8 success:      1
 
16327
DROP TRIGGER trg_1;
 
16328
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16329
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16330
f_charbig = 'just inserted'
 
16331
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16332
DELETE FROM t0_aux
 
16333
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16334
DELETE FROM t1
 
16335
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16336
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16337
BEGIN
 
16338
SET new.f_int1 = old.f_int1 + @max_row,
 
16339
new.f_int2 = old.f_int2 - @max_row,
 
16340
new.f_charbig = '####updated per update trigger####';
 
16341
END|
 
16342
UPDATE t1
 
16343
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16344
f_charbig = '####updated per update statement itself####';
 
16345
        
 
16346
# check trigger-9 success:      1
 
16347
DROP TRIGGER trg_2;
 
16348
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16349
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16350
f_charbig = CONCAT('===',f_char1,'===');
 
16351
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16352
BEGIN
 
16353
SET new.f_int1 = new.f_int1 + @max_row,
 
16354
new.f_int2 = new.f_int2 - @max_row,
 
16355
new.f_charbig = '####updated per update trigger####';
 
16356
END|
 
16357
UPDATE t1
 
16358
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16359
f_charbig = '####updated per update statement itself####';
 
16360
        
 
16361
# check trigger-10 success:     1
 
16362
DROP TRIGGER trg_2;
 
16363
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16364
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16365
f_charbig = CONCAT('===',f_char1,'===');
 
16366
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16367
BEGIN
 
16368
SET new.f_int1 = @my_max1 + @counter,
 
16369
new.f_int2 = @my_min2 - @counter,
 
16370
new.f_charbig = '####updated per insert trigger####';
 
16371
SET @counter = @counter + 1;
 
16372
END|
 
16373
SET @counter = 1;
 
16374
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16375
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16376
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16377
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16378
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16379
ORDER BY f_int1;
 
16380
DROP TRIGGER trg_3;
 
16381
        
 
16382
# check trigger-11 success:     1
 
16383
DELETE FROM t1
 
16384
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16385
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16386
AND f_charbig = '####updated per insert trigger####';
 
16387
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16388
BEGIN
 
16389
SET new.f_int1 = @my_max1 + @counter,
 
16390
new.f_int2 = @my_min2 - @counter,
 
16391
new.f_charbig = '####updated per insert trigger####';
 
16392
SET @counter = @counter + 1;
 
16393
END|
 
16394
SET @counter = 1;
 
16395
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16396
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
16397
SELECT CAST(f_int1 AS CHAR),
 
16398
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16399
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16400
ORDER BY f_int1;
 
16401
DROP TRIGGER trg_3;
 
16402
        
 
16403
# check trigger-12 success:     1
 
16404
DELETE FROM t1
 
16405
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16406
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16407
AND f_charbig = '####updated per insert trigger####';
 
16408
ANALYZE  TABLE t1;
 
16409
Table   Op      Msg_type        Msg_text
 
16410
test.t1 analyze status  OK
 
16411
CHECK    TABLE t1 EXTENDED;
 
16412
Table   Op      Msg_type        Msg_text
 
16413
test.t1 check   status  OK
 
16414
CHECKSUM TABLE t1 EXTENDED;
 
16415
Table   Checksum
 
16416
test.t1 <some_value>
 
16417
OPTIMIZE TABLE t1;
 
16418
Table   Op      Msg_type        Msg_text
 
16419
test.t1 optimize        status  OK
 
16420
# check layout success:    1
 
16421
REPAIR   TABLE t1 EXTENDED;
 
16422
Table   Op      Msg_type        Msg_text
 
16423
test.t1 repair  note    The storage engine for the table doesn't support repair
 
16424
# check layout success:    1
 
16425
TRUNCATE t1;
 
16426
        
 
16427
# check TRUNCATE success:       1
 
16428
# check layout success:    1
 
16429
# End usability test (inc/partition_check.inc)
 
16430
DROP TABLE t1;
 
16431
CREATE TABLE t1 (
 
16432
f_int1 INTEGER,
 
16433
f_int2 INTEGER,
 
16434
f_char1 CHAR(20),
 
16435
f_char2 CHAR(20),
 
16436
f_charbig VARCHAR(1000)
 
16437
 
 
16438
)
 
16439
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
16440
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16441
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16442
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
16443
ALTER TABLE t1 REBUILD PARTITION part_1;
 
16444
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16445
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16446
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16447
# Start usability test (inc/partition_check.inc)
 
16448
create_command
 
16449
SHOW CREATE TABLE t1;
 
16450
Table   Create Table
 
16451
t1      CREATE TABLE `t1` (
 
16452
  `f_int1` int(11) DEFAULT NULL,
 
16453
  `f_int2` int(11) DEFAULT NULL,
 
16454
  `f_char1` char(20) DEFAULT NULL,
 
16455
  `f_char2` char(20) DEFAULT NULL,
 
16456
  `f_charbig` varchar(1000) DEFAULT NULL
 
16457
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
 
16458
 
 
16459
# check prerequisites-1 success:    1
 
16460
# check COUNT(*) success:    1
 
16461
# check MIN/MAX(f_int1) success:    1
 
16462
# check MIN/MAX(f_int2) success:    1
 
16463
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16464
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16465
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
16466
WHERE f_int1 IN (2,3);
 
16467
# check prerequisites-3 success:    1
 
16468
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16469
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
16470
# check read via f_int1 success: 1
 
16471
# check read via f_int2 success: 1
 
16472
        
 
16473
# check multiple-1 success:     1
 
16474
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
16475
        
 
16476
# check multiple-2 success:     1
 
16477
INSERT INTO t1 SELECT * FROM t0_template
 
16478
WHERE MOD(f_int1,3) = 0;
 
16479
        
 
16480
# check multiple-3 success:     1
 
16481
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
16482
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
16483
AND @max_row_div2 + @max_row_div4;
 
16484
        
 
16485
# check multiple-4 success:     1
 
16486
DELETE FROM t1
 
16487
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
16488
AND @max_row_div2 + @max_row_div4 + @max_row;
 
16489
        
 
16490
# check multiple-5 success:     1
 
16491
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
16492
INSERT INTO t1
 
16493
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16494
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16495
f_charbig = '#SINGLE#';
 
16496
        
 
16497
# check single-1 success:       1
 
16498
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
16499
INSERT INTO t1
 
16500
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16501
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16502
f_charbig = '#SINGLE#';
 
16503
        
 
16504
# check single-2 success:       1
 
16505
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
16506
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
16507
UPDATE t1 SET f_int1 = @cur_value2
 
16508
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
16509
        
 
16510
# check single-3 success:       1
 
16511
SET @cur_value1= -1;
 
16512
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
16513
UPDATE t1 SET f_int1 = @cur_value1
 
16514
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
16515
        
 
16516
# check single-4 success:       1
 
16517
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
16518
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
16519
        
 
16520
# check single-5 success:       1
 
16521
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
16522
        
 
16523
# check single-6 success:       1
 
16524
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
16525
        
 
16526
# check single-7 success:       1
 
16527
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
16528
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
16529
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
16530
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
16531
f_charbig = '#NULL#';
 
16532
INSERT INTO t1
 
16533
SET f_int1 = NULL , f_int2 = -@max_row,
 
16534
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
16535
f_charbig = '#NULL#';
 
16536
# check null success:    1
 
16537
        
 
16538
# check null-1 success:         1
 
16539
UPDATE t1 SET f_int1 = -@max_row
 
16540
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16541
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16542
        
 
16543
# check null-2 success:         1
 
16544
UPDATE t1 SET f_int1 = NULL
 
16545
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16546
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16547
        
 
16548
# check null-3 success:         1
 
16549
DELETE FROM t1
 
16550
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16551
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16552
        
 
16553
# check null-4 success:         1
 
16554
DELETE FROM t1
 
16555
WHERE f_int1 = 0 AND f_int2 = 0
 
16556
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
16557
AND f_charbig = '#NULL#';
 
16558
SET AUTOCOMMIT= 0;
 
16559
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16560
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16561
FROM t0_template source_tab
 
16562
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16563
        
 
16564
# check transactions-1 success:         1
 
16565
COMMIT WORK;
 
16566
        
 
16567
# check transactions-2 success:         1
 
16568
ROLLBACK WORK;
 
16569
        
 
16570
# check transactions-3 success:         1
 
16571
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16572
COMMIT WORK;
 
16573
ROLLBACK WORK;
 
16574
        
 
16575
# check transactions-4 success:         1
 
16576
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16577
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16578
FROM t0_template source_tab
 
16579
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16580
        
 
16581
# check transactions-5 success:         1
 
16582
ROLLBACK WORK;
 
16583
        
 
16584
# check transactions-6 success:         1
 
16585
# INFO: Storage engine used for t1 seems to be transactional.
 
16586
COMMIT;
 
16587
        
 
16588
# check transactions-7 success:         1
 
16589
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16590
COMMIT WORK;
 
16591
SET @@session.sql_mode = 'traditional';
 
16592
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
16593
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16594
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
16595
'', '', 'was inserted' FROM t0_template
 
16596
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16597
ERROR 22012: Division by 0
 
16598
COMMIT;
 
16599
        
 
16600
# check transactions-8 success:         1
 
16601
# INFO: Storage engine used for t1 seems to be able to revert
 
16602
#       changes made by the failing statement.
 
16603
SET @@session.sql_mode = '';
 
16604
SET AUTOCOMMIT= 1;
 
16605
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16606
COMMIT WORK;
 
16607
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
16608
        
 
16609
# check special-1 success:      1
 
16610
UPDATE t1 SET f_charbig = '';
 
16611
        
 
16612
# check special-2 success:      1
 
16613
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
16614
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16615
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
16616
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16617
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16618
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16619
'just inserted' FROM t0_template
 
16620
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16621
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
16622
BEGIN
 
16623
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16624
f_charbig = 'updated by trigger'
 
16625
      WHERE f_int1 = new.f_int1;
 
16626
END|
 
16627
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16628
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16629
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16630
        
 
16631
# check trigger-1 success:      1
 
16632
DROP TRIGGER trg_1;
 
16633
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16634
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16635
f_charbig = 'just inserted'
 
16636
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16637
DELETE FROM t0_aux
 
16638
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16639
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16640
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16641
'just inserted' FROM t0_template
 
16642
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16643
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
16644
BEGIN
 
16645
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16646
f_charbig = 'updated by trigger'
 
16647
      WHERE f_int1 = new.f_int1;
 
16648
END|
 
16649
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16650
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16651
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16652
        
 
16653
# check trigger-2 success:      1
 
16654
DROP TRIGGER trg_1;
 
16655
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16656
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16657
f_charbig = 'just inserted'
 
16658
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16659
DELETE FROM t0_aux
 
16660
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16661
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16662
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16663
'just inserted' FROM t0_template
 
16664
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16665
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16666
BEGIN
 
16667
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16668
f_charbig = 'updated by trigger'
 
16669
      WHERE f_int1 = new.f_int1;
 
16670
END|
 
16671
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16672
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16673
        
 
16674
# check trigger-3 success:      1
 
16675
DROP TRIGGER trg_1;
 
16676
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16677
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16678
f_charbig = 'just inserted'
 
16679
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16680
DELETE FROM t0_aux
 
16681
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16682
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16683
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16684
'just inserted' FROM t0_template
 
16685
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16686
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16687
BEGIN
 
16688
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16689
f_charbig = 'updated by trigger'
 
16690
      WHERE f_int1 = - old.f_int1;
 
16691
END|
 
16692
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16693
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16694
        
 
16695
# check trigger-4 success:      1
 
16696
DROP TRIGGER trg_1;
 
16697
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16698
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16699
f_charbig = 'just inserted'
 
16700
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16701
DELETE FROM t0_aux
 
16702
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16703
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16704
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16705
'just inserted' FROM t0_template
 
16706
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16707
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16708
BEGIN
 
16709
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16710
f_charbig = 'updated by trigger'
 
16711
      WHERE f_int1 = new.f_int1;
 
16712
END|
 
16713
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16714
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16715
        
 
16716
# check trigger-5 success:      1
 
16717
DROP TRIGGER trg_1;
 
16718
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16719
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16720
f_charbig = 'just inserted'
 
16721
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16722
DELETE FROM t0_aux
 
16723
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16724
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16725
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16726
'just inserted' FROM t0_template
 
16727
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16728
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16729
BEGIN
 
16730
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16731
f_charbig = 'updated by trigger'
 
16732
      WHERE f_int1 = - old.f_int1;
 
16733
END|
 
16734
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16735
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16736
        
 
16737
# check trigger-6 success:      1
 
16738
DROP TRIGGER trg_1;
 
16739
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16740
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16741
f_charbig = 'just inserted'
 
16742
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16743
DELETE FROM t0_aux
 
16744
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16745
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16746
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16747
'just inserted' FROM t0_template
 
16748
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16749
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
16750
BEGIN
 
16751
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16752
f_charbig = 'updated by trigger'
 
16753
      WHERE f_int1 = - old.f_int1;
 
16754
END|
 
16755
DELETE FROM t0_aux
 
16756
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16757
        
 
16758
# check trigger-7 success:      1
 
16759
DROP TRIGGER trg_1;
 
16760
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16761
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16762
f_charbig = 'just inserted'
 
16763
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16764
DELETE FROM t0_aux
 
16765
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16766
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16767
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16768
'just inserted' FROM t0_template
 
16769
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16770
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
16771
BEGIN
 
16772
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16773
f_charbig = 'updated by trigger'
 
16774
      WHERE f_int1 = - old.f_int1;
 
16775
END|
 
16776
DELETE FROM t0_aux
 
16777
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16778
        
 
16779
# check trigger-8 success:      1
 
16780
DROP TRIGGER trg_1;
 
16781
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16782
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16783
f_charbig = 'just inserted'
 
16784
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16785
DELETE FROM t0_aux
 
16786
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16787
DELETE FROM t1
 
16788
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16789
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16790
BEGIN
 
16791
SET new.f_int1 = old.f_int1 + @max_row,
 
16792
new.f_int2 = old.f_int2 - @max_row,
 
16793
new.f_charbig = '####updated per update trigger####';
 
16794
END|
 
16795
UPDATE t1
 
16796
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16797
f_charbig = '####updated per update statement itself####';
 
16798
        
 
16799
# check trigger-9 success:      1
 
16800
DROP TRIGGER trg_2;
 
16801
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16802
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16803
f_charbig = CONCAT('===',f_char1,'===');
 
16804
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16805
BEGIN
 
16806
SET new.f_int1 = new.f_int1 + @max_row,
 
16807
new.f_int2 = new.f_int2 - @max_row,
 
16808
new.f_charbig = '####updated per update trigger####';
 
16809
END|
 
16810
UPDATE t1
 
16811
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16812
f_charbig = '####updated per update statement itself####';
 
16813
        
 
16814
# check trigger-10 success:     1
 
16815
DROP TRIGGER trg_2;
 
16816
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16817
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16818
f_charbig = CONCAT('===',f_char1,'===');
 
16819
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16820
BEGIN
 
16821
SET new.f_int1 = @my_max1 + @counter,
 
16822
new.f_int2 = @my_min2 - @counter,
 
16823
new.f_charbig = '####updated per insert trigger####';
 
16824
SET @counter = @counter + 1;
 
16825
END|
 
16826
SET @counter = 1;
 
16827
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16828
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16829
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16830
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16831
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16832
ORDER BY f_int1;
 
16833
DROP TRIGGER trg_3;
 
16834
        
 
16835
# check trigger-11 success:     1
 
16836
DELETE FROM t1
 
16837
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16838
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16839
AND f_charbig = '####updated per insert trigger####';
 
16840
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16841
BEGIN
 
16842
SET new.f_int1 = @my_max1 + @counter,
 
16843
new.f_int2 = @my_min2 - @counter,
 
16844
new.f_charbig = '####updated per insert trigger####';
 
16845
SET @counter = @counter + 1;
 
16846
END|
 
16847
SET @counter = 1;
 
16848
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16849
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
16850
SELECT CAST(f_int1 AS CHAR),
 
16851
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16852
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16853
ORDER BY f_int1;
 
16854
DROP TRIGGER trg_3;
 
16855
        
 
16856
# check trigger-12 success:     1
 
16857
DELETE FROM t1
 
16858
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16859
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16860
AND f_charbig = '####updated per insert trigger####';
 
16861
ANALYZE  TABLE t1;
 
16862
Table   Op      Msg_type        Msg_text
 
16863
test.t1 analyze status  OK
 
16864
CHECK    TABLE t1 EXTENDED;
 
16865
Table   Op      Msg_type        Msg_text
 
16866
test.t1 check   status  OK
 
16867
CHECKSUM TABLE t1 EXTENDED;
 
16868
Table   Checksum
 
16869
test.t1 <some_value>
 
16870
OPTIMIZE TABLE t1;
 
16871
Table   Op      Msg_type        Msg_text
 
16872
test.t1 optimize        status  OK
 
16873
# check layout success:    1
 
16874
REPAIR   TABLE t1 EXTENDED;
 
16875
Table   Op      Msg_type        Msg_text
 
16876
test.t1 repair  note    The storage engine for the table doesn't support repair
 
16877
# check layout success:    1
 
16878
TRUNCATE t1;
 
16879
        
 
16880
# check TRUNCATE success:       1
 
16881
# check layout success:    1
 
16882
# End usability test (inc/partition_check.inc)
 
16883
DROP TABLE t1;
 
16884
CREATE TABLE t1 (
 
16885
f_int1 INTEGER,
 
16886
f_int2 INTEGER,
 
16887
f_char1 CHAR(20),
 
16888
f_char2 CHAR(20),
 
16889
f_charbig VARCHAR(1000)
 
16890
 
 
16891
)
 
16892
PARTITION BY LIST(MOD(f_int1,4))
 
16893
(PARTITION part_3 VALUES IN (-3),
 
16894
PARTITION part_2 VALUES IN (-2),
 
16895
PARTITION part_1 VALUES IN (-1),
 
16896
PARTITION part_N VALUES IN (NULL),
 
16897
PARTITION part0 VALUES IN (0),
 
16898
PARTITION part1 VALUES IN (1),
 
16899
PARTITION part2 VALUES IN (2),
 
16900
PARTITION part3 VALUES IN (3));
 
16901
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16902
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16903
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
16904
ALTER TABLE t1 REBUILD PARTITION part_1;
 
16905
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16906
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16907
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16908
# Start usability test (inc/partition_check.inc)
 
16909
create_command
 
16910
SHOW CREATE TABLE t1;
 
16911
Table   Create Table
 
16912
t1      CREATE TABLE `t1` (
 
16913
  `f_int1` int(11) DEFAULT NULL,
 
16914
  `f_int2` int(11) DEFAULT NULL,
 
16915
  `f_char1` char(20) DEFAULT NULL,
 
16916
  `f_char2` char(20) DEFAULT NULL,
 
16917
  `f_charbig` varchar(1000) DEFAULT NULL
 
16918
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
16919
 
 
16920
# check prerequisites-1 success:    1
 
16921
# check COUNT(*) success:    1
 
16922
# check MIN/MAX(f_int1) success:    1
 
16923
# check MIN/MAX(f_int2) success:    1
 
16924
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16925
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16926
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
16927
WHERE f_int1 IN (2,3);
 
16928
# check prerequisites-3 success:    1
 
16929
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16930
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
16931
# check read via f_int1 success: 1
 
16932
# check read via f_int2 success: 1
 
16933
        
 
16934
# check multiple-1 success:     1
 
16935
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
16936
        
 
16937
# check multiple-2 success:     1
 
16938
INSERT INTO t1 SELECT * FROM t0_template
 
16939
WHERE MOD(f_int1,3) = 0;
 
16940
        
 
16941
# check multiple-3 success:     1
 
16942
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
16943
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
16944
AND @max_row_div2 + @max_row_div4;
 
16945
        
 
16946
# check multiple-4 success:     1
 
16947
DELETE FROM t1
 
16948
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
16949
AND @max_row_div2 + @max_row_div4 + @max_row;
 
16950
        
 
16951
# check multiple-5 success:     1
 
16952
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
16953
INSERT INTO t1
 
16954
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16955
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16956
f_charbig = '#SINGLE#';
 
16957
        
 
16958
# check single-1 success:       1
 
16959
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
16960
INSERT INTO t1
 
16961
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16962
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16963
f_charbig = '#SINGLE#';
 
16964
        
 
16965
# check single-2 success:       1
 
16966
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
16967
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
16968
UPDATE t1 SET f_int1 = @cur_value2
 
16969
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
16970
        
 
16971
# check single-3 success:       1
 
16972
SET @cur_value1= -1;
 
16973
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
16974
UPDATE t1 SET f_int1 = @cur_value1
 
16975
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
16976
        
 
16977
# check single-4 success:       1
 
16978
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
16979
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
16980
        
 
16981
# check single-5 success:       1
 
16982
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
16983
        
 
16984
# check single-6 success:       1
 
16985
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
16986
        
 
16987
# check single-7 success:       1
 
16988
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
16989
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
16990
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
16991
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
16992
f_charbig = '#NULL#';
 
16993
INSERT INTO t1
 
16994
SET f_int1 = NULL , f_int2 = -@max_row,
 
16995
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
16996
f_charbig = '#NULL#';
 
16997
# check null success:    1
 
16998
        
 
16999
# check null-1 success:         1
 
17000
UPDATE t1 SET f_int1 = -@max_row
 
17001
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17002
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17003
        
 
17004
# check null-2 success:         1
 
17005
UPDATE t1 SET f_int1 = NULL
 
17006
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17007
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17008
        
 
17009
# check null-3 success:         1
 
17010
DELETE FROM t1
 
17011
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17012
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17013
        
 
17014
# check null-4 success:         1
 
17015
DELETE FROM t1
 
17016
WHERE f_int1 = 0 AND f_int2 = 0
 
17017
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
17018
AND f_charbig = '#NULL#';
 
17019
SET AUTOCOMMIT= 0;
 
17020
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17021
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17022
FROM t0_template source_tab
 
17023
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17024
        
 
17025
# check transactions-1 success:         1
 
17026
COMMIT WORK;
 
17027
        
 
17028
# check transactions-2 success:         1
 
17029
ROLLBACK WORK;
 
17030
        
 
17031
# check transactions-3 success:         1
 
17032
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17033
COMMIT WORK;
 
17034
ROLLBACK WORK;
 
17035
        
 
17036
# check transactions-4 success:         1
 
17037
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17038
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17039
FROM t0_template source_tab
 
17040
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17041
        
 
17042
# check transactions-5 success:         1
 
17043
ROLLBACK WORK;
 
17044
        
 
17045
# check transactions-6 success:         1
 
17046
# INFO: Storage engine used for t1 seems to be transactional.
 
17047
COMMIT;
 
17048
        
 
17049
# check transactions-7 success:         1
 
17050
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17051
COMMIT WORK;
 
17052
SET @@session.sql_mode = 'traditional';
 
17053
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
17054
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17055
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
17056
'', '', 'was inserted' FROM t0_template
 
17057
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17058
ERROR 22012: Division by 0
 
17059
COMMIT;
 
17060
        
 
17061
# check transactions-8 success:         1
 
17062
# INFO: Storage engine used for t1 seems to be able to revert
 
17063
#       changes made by the failing statement.
 
17064
SET @@session.sql_mode = '';
 
17065
SET AUTOCOMMIT= 1;
 
17066
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17067
COMMIT WORK;
 
17068
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
17069
        
 
17070
# check special-1 success:      1
 
17071
UPDATE t1 SET f_charbig = '';
 
17072
        
 
17073
# check special-2 success:      1
 
17074
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
17075
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17076
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
17077
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17078
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17079
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17080
'just inserted' FROM t0_template
 
17081
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17082
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
17083
BEGIN
 
17084
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17085
f_charbig = 'updated by trigger'
 
17086
      WHERE f_int1 = new.f_int1;
 
17087
END|
 
17088
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17089
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17090
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17091
        
 
17092
# check trigger-1 success:      1
 
17093
DROP TRIGGER trg_1;
 
17094
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17095
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17096
f_charbig = 'just inserted'
 
17097
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17098
DELETE FROM t0_aux
 
17099
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17100
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17101
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17102
'just inserted' FROM t0_template
 
17103
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17104
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
17105
BEGIN
 
17106
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17107
f_charbig = 'updated by trigger'
 
17108
      WHERE f_int1 = new.f_int1;
 
17109
END|
 
17110
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17111
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17112
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17113
        
 
17114
# check trigger-2 success:      1
 
17115
DROP TRIGGER trg_1;
 
17116
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17117
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17118
f_charbig = 'just inserted'
 
17119
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17120
DELETE FROM t0_aux
 
17121
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17122
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17123
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17124
'just inserted' FROM t0_template
 
17125
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17126
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17127
BEGIN
 
17128
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17129
f_charbig = 'updated by trigger'
 
17130
      WHERE f_int1 = new.f_int1;
 
17131
END|
 
17132
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17133
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17134
        
 
17135
# check trigger-3 success:      1
 
17136
DROP TRIGGER trg_1;
 
17137
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17138
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17139
f_charbig = 'just inserted'
 
17140
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17141
DELETE FROM t0_aux
 
17142
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17143
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17144
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17145
'just inserted' FROM t0_template
 
17146
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17147
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17148
BEGIN
 
17149
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17150
f_charbig = 'updated by trigger'
 
17151
      WHERE f_int1 = - old.f_int1;
 
17152
END|
 
17153
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17154
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17155
        
 
17156
# check trigger-4 success:      1
 
17157
DROP TRIGGER trg_1;
 
17158
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17159
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17160
f_charbig = 'just inserted'
 
17161
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17162
DELETE FROM t0_aux
 
17163
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17164
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17165
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17166
'just inserted' FROM t0_template
 
17167
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17168
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17169
BEGIN
 
17170
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17171
f_charbig = 'updated by trigger'
 
17172
      WHERE f_int1 = new.f_int1;
 
17173
END|
 
17174
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17175
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17176
        
 
17177
# check trigger-5 success:      1
 
17178
DROP TRIGGER trg_1;
 
17179
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17180
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17181
f_charbig = 'just inserted'
 
17182
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17183
DELETE FROM t0_aux
 
17184
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17185
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17186
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17187
'just inserted' FROM t0_template
 
17188
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17189
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17190
BEGIN
 
17191
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17192
f_charbig = 'updated by trigger'
 
17193
      WHERE f_int1 = - old.f_int1;
 
17194
END|
 
17195
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17196
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17197
        
 
17198
# check trigger-6 success:      1
 
17199
DROP TRIGGER trg_1;
 
17200
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17201
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17202
f_charbig = 'just inserted'
 
17203
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17204
DELETE FROM t0_aux
 
17205
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17206
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17207
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17208
'just inserted' FROM t0_template
 
17209
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17210
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
17211
BEGIN
 
17212
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17213
f_charbig = 'updated by trigger'
 
17214
      WHERE f_int1 = - old.f_int1;
 
17215
END|
 
17216
DELETE FROM t0_aux
 
17217
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17218
        
 
17219
# check trigger-7 success:      1
 
17220
DROP TRIGGER trg_1;
 
17221
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17222
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17223
f_charbig = 'just inserted'
 
17224
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17225
DELETE FROM t0_aux
 
17226
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17227
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17228
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17229
'just inserted' FROM t0_template
 
17230
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17231
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
17232
BEGIN
 
17233
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17234
f_charbig = 'updated by trigger'
 
17235
      WHERE f_int1 = - old.f_int1;
 
17236
END|
 
17237
DELETE FROM t0_aux
 
17238
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17239
        
 
17240
# check trigger-8 success:      1
 
17241
DROP TRIGGER trg_1;
 
17242
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17243
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17244
f_charbig = 'just inserted'
 
17245
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17246
DELETE FROM t0_aux
 
17247
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17248
DELETE FROM t1
 
17249
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17250
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17251
BEGIN
 
17252
SET new.f_int1 = old.f_int1 + @max_row,
 
17253
new.f_int2 = old.f_int2 - @max_row,
 
17254
new.f_charbig = '####updated per update trigger####';
 
17255
END|
 
17256
UPDATE t1
 
17257
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17258
f_charbig = '####updated per update statement itself####';
 
17259
        
 
17260
# check trigger-9 success:      1
 
17261
DROP TRIGGER trg_2;
 
17262
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17263
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17264
f_charbig = CONCAT('===',f_char1,'===');
 
17265
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17266
BEGIN
 
17267
SET new.f_int1 = new.f_int1 + @max_row,
 
17268
new.f_int2 = new.f_int2 - @max_row,
 
17269
new.f_charbig = '####updated per update trigger####';
 
17270
END|
 
17271
UPDATE t1
 
17272
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17273
f_charbig = '####updated per update statement itself####';
 
17274
        
 
17275
# check trigger-10 success:     1
 
17276
DROP TRIGGER trg_2;
 
17277
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17278
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17279
f_charbig = CONCAT('===',f_char1,'===');
 
17280
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17281
BEGIN
 
17282
SET new.f_int1 = @my_max1 + @counter,
 
17283
new.f_int2 = @my_min2 - @counter,
 
17284
new.f_charbig = '####updated per insert trigger####';
 
17285
SET @counter = @counter + 1;
 
17286
END|
 
17287
SET @counter = 1;
 
17288
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17289
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17290
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17291
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17292
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17293
ORDER BY f_int1;
 
17294
DROP TRIGGER trg_3;
 
17295
        
 
17296
# check trigger-11 success:     1
 
17297
DELETE FROM t1
 
17298
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17299
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17300
AND f_charbig = '####updated per insert trigger####';
 
17301
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17302
BEGIN
 
17303
SET new.f_int1 = @my_max1 + @counter,
 
17304
new.f_int2 = @my_min2 - @counter,
 
17305
new.f_charbig = '####updated per insert trigger####';
 
17306
SET @counter = @counter + 1;
 
17307
END|
 
17308
SET @counter = 1;
 
17309
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17310
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
17311
SELECT CAST(f_int1 AS CHAR),
 
17312
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17313
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17314
ORDER BY f_int1;
 
17315
DROP TRIGGER trg_3;
 
17316
        
 
17317
# check trigger-12 success:     1
 
17318
DELETE FROM t1
 
17319
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17320
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17321
AND f_charbig = '####updated per insert trigger####';
 
17322
ANALYZE  TABLE t1;
 
17323
Table   Op      Msg_type        Msg_text
 
17324
test.t1 analyze status  OK
 
17325
CHECK    TABLE t1 EXTENDED;
 
17326
Table   Op      Msg_type        Msg_text
 
17327
test.t1 check   status  OK
 
17328
CHECKSUM TABLE t1 EXTENDED;
 
17329
Table   Checksum
 
17330
test.t1 <some_value>
 
17331
OPTIMIZE TABLE t1;
 
17332
Table   Op      Msg_type        Msg_text
 
17333
test.t1 optimize        status  OK
 
17334
# check layout success:    1
 
17335
REPAIR   TABLE t1 EXTENDED;
 
17336
Table   Op      Msg_type        Msg_text
 
17337
test.t1 repair  note    The storage engine for the table doesn't support repair
 
17338
# check layout success:    1
 
17339
TRUNCATE t1;
 
17340
        
 
17341
# check TRUNCATE success:       1
 
17342
# check layout success:    1
 
17343
# End usability test (inc/partition_check.inc)
 
17344
DROP TABLE t1;
 
17345
CREATE TABLE t1 (
 
17346
f_int1 INTEGER,
 
17347
f_int2 INTEGER,
 
17348
f_char1 CHAR(20),
 
17349
f_char2 CHAR(20),
 
17350
f_charbig VARCHAR(1000)
 
17351
 
 
17352
)
 
17353
PARTITION BY RANGE(f_int1)
 
17354
(PARTITION parta VALUES LESS THAN (0),
 
17355
PARTITION part_1 VALUES LESS THAN (5),
 
17356
PARTITION part_2 VALUES LESS THAN (10),
 
17357
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
17358
PARTITION part_4 VALUES LESS THAN (20),
 
17359
PARTITION part_5 VALUES LESS THAN (2147483646));
 
17360
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17361
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17362
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
17363
ALTER TABLE t1 REBUILD PARTITION part_1;
 
17364
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17365
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17366
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17367
# Start usability test (inc/partition_check.inc)
 
17368
create_command
 
17369
SHOW CREATE TABLE t1;
 
17370
Table   Create Table
 
17371
t1      CREATE TABLE `t1` (
 
17372
  `f_int1` int(11) DEFAULT NULL,
 
17373
  `f_int2` int(11) DEFAULT NULL,
 
17374
  `f_char1` char(20) DEFAULT NULL,
 
17375
  `f_char2` char(20) DEFAULT NULL,
 
17376
  `f_charbig` varchar(1000) DEFAULT NULL
 
17377
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
17378
 
 
17379
# check prerequisites-1 success:    1
 
17380
# check COUNT(*) success:    1
 
17381
# check MIN/MAX(f_int1) success:    1
 
17382
# check MIN/MAX(f_int2) success:    1
 
17383
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17384
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17385
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
17386
WHERE f_int1 IN (2,3);
 
17387
# check prerequisites-3 success:    1
 
17388
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
17389
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
17390
# check read via f_int1 success: 1
 
17391
# check read via f_int2 success: 1
 
17392
        
 
17393
# check multiple-1 success:     1
 
17394
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
17395
        
 
17396
# check multiple-2 success:     1
 
17397
INSERT INTO t1 SELECT * FROM t0_template
 
17398
WHERE MOD(f_int1,3) = 0;
 
17399
        
 
17400
# check multiple-3 success:     1
 
17401
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
17402
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
17403
AND @max_row_div2 + @max_row_div4;
 
17404
        
 
17405
# check multiple-4 success:     1
 
17406
DELETE FROM t1
 
17407
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
17408
AND @max_row_div2 + @max_row_div4 + @max_row;
 
17409
        
 
17410
# check multiple-5 success:     1
 
17411
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
17412
INSERT INTO t1
 
17413
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17414
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17415
f_charbig = '#SINGLE#';
 
17416
        
 
17417
# check single-1 success:       1
 
17418
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
17419
INSERT INTO t1
 
17420
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17421
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17422
f_charbig = '#SINGLE#';
 
17423
        
 
17424
# check single-2 success:       1
 
17425
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
17426
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
17427
UPDATE t1 SET f_int1 = @cur_value2
 
17428
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
17429
        
 
17430
# check single-3 success:       1
 
17431
SET @cur_value1= -1;
 
17432
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
17433
UPDATE t1 SET f_int1 = @cur_value1
 
17434
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
17435
        
 
17436
# check single-4 success:       1
 
17437
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
17438
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
17439
        
 
17440
# check single-5 success:       1
 
17441
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
17442
        
 
17443
# check single-6 success:       1
 
17444
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
17445
ERROR HY000: Table has no partition for value 2147483647
 
17446
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
17447
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
17448
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
17449
f_charbig = '#NULL#';
 
17450
INSERT INTO t1
 
17451
SET f_int1 = NULL , f_int2 = -@max_row,
 
17452
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
17453
f_charbig = '#NULL#';
 
17454
# check null success:    1
 
17455
        
 
17456
# check null-1 success:         1
 
17457
UPDATE t1 SET f_int1 = -@max_row
 
17458
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17459
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17460
        
 
17461
# check null-2 success:         1
 
17462
UPDATE t1 SET f_int1 = NULL
 
17463
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17464
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17465
        
 
17466
# check null-3 success:         1
 
17467
DELETE FROM t1
 
17468
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17469
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17470
        
 
17471
# check null-4 success:         1
 
17472
DELETE FROM t1
 
17473
WHERE f_int1 = 0 AND f_int2 = 0
 
17474
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
17475
AND f_charbig = '#NULL#';
 
17476
SET AUTOCOMMIT= 0;
 
17477
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17478
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17479
FROM t0_template source_tab
 
17480
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17481
        
 
17482
# check transactions-1 success:         1
 
17483
COMMIT WORK;
 
17484
        
 
17485
# check transactions-2 success:         1
 
17486
ROLLBACK WORK;
 
17487
        
 
17488
# check transactions-3 success:         1
 
17489
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17490
COMMIT WORK;
 
17491
ROLLBACK WORK;
 
17492
        
 
17493
# check transactions-4 success:         1
 
17494
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17495
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17496
FROM t0_template source_tab
 
17497
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17498
        
 
17499
# check transactions-5 success:         1
 
17500
ROLLBACK WORK;
 
17501
        
 
17502
# check transactions-6 success:         1
 
17503
# INFO: Storage engine used for t1 seems to be transactional.
 
17504
COMMIT;
 
17505
        
 
17506
# check transactions-7 success:         1
 
17507
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17508
COMMIT WORK;
 
17509
SET @@session.sql_mode = 'traditional';
 
17510
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
17511
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17512
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
17513
'', '', 'was inserted' FROM t0_template
 
17514
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17515
ERROR 22012: Division by 0
 
17516
COMMIT;
 
17517
        
 
17518
# check transactions-8 success:         1
 
17519
# INFO: Storage engine used for t1 seems to be able to revert
 
17520
#       changes made by the failing statement.
 
17521
SET @@session.sql_mode = '';
 
17522
SET AUTOCOMMIT= 1;
 
17523
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17524
COMMIT WORK;
 
17525
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
17526
        
 
17527
# check special-1 success:      1
 
17528
UPDATE t1 SET f_charbig = '';
 
17529
        
 
17530
# check special-2 success:      1
 
17531
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
17532
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17533
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
17534
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17535
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17536
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17537
'just inserted' FROM t0_template
 
17538
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17539
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
17540
BEGIN
 
17541
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17542
f_charbig = 'updated by trigger'
 
17543
      WHERE f_int1 = new.f_int1;
 
17544
END|
 
17545
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17546
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17547
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17548
        
 
17549
# check trigger-1 success:      1
 
17550
DROP TRIGGER trg_1;
 
17551
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17552
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17553
f_charbig = 'just inserted'
 
17554
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17555
DELETE FROM t0_aux
 
17556
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17557
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17558
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17559
'just inserted' FROM t0_template
 
17560
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17561
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
17562
BEGIN
 
17563
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17564
f_charbig = 'updated by trigger'
 
17565
      WHERE f_int1 = new.f_int1;
 
17566
END|
 
17567
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17568
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17569
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17570
        
 
17571
# check trigger-2 success:      1
 
17572
DROP TRIGGER trg_1;
 
17573
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17574
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17575
f_charbig = 'just inserted'
 
17576
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17577
DELETE FROM t0_aux
 
17578
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17579
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17580
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17581
'just inserted' FROM t0_template
 
17582
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17583
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17584
BEGIN
 
17585
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17586
f_charbig = 'updated by trigger'
 
17587
      WHERE f_int1 = new.f_int1;
 
17588
END|
 
17589
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17590
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17591
        
 
17592
# check trigger-3 success:      1
 
17593
DROP TRIGGER trg_1;
 
17594
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17595
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17596
f_charbig = 'just inserted'
 
17597
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17598
DELETE FROM t0_aux
 
17599
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17600
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17601
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17602
'just inserted' FROM t0_template
 
17603
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17604
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17605
BEGIN
 
17606
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17607
f_charbig = 'updated by trigger'
 
17608
      WHERE f_int1 = - old.f_int1;
 
17609
END|
 
17610
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17611
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17612
        
 
17613
# check trigger-4 success:      1
 
17614
DROP TRIGGER trg_1;
 
17615
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17616
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17617
f_charbig = 'just inserted'
 
17618
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17619
DELETE FROM t0_aux
 
17620
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17621
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17622
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17623
'just inserted' FROM t0_template
 
17624
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17625
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17626
BEGIN
 
17627
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17628
f_charbig = 'updated by trigger'
 
17629
      WHERE f_int1 = new.f_int1;
 
17630
END|
 
17631
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17632
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17633
        
 
17634
# check trigger-5 success:      1
 
17635
DROP TRIGGER trg_1;
 
17636
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17637
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17638
f_charbig = 'just inserted'
 
17639
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17640
DELETE FROM t0_aux
 
17641
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17642
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17643
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17644
'just inserted' FROM t0_template
 
17645
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17646
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17647
BEGIN
 
17648
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17649
f_charbig = 'updated by trigger'
 
17650
      WHERE f_int1 = - old.f_int1;
 
17651
END|
 
17652
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17653
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17654
        
 
17655
# check trigger-6 success:      1
 
17656
DROP TRIGGER trg_1;
 
17657
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17658
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17659
f_charbig = 'just inserted'
 
17660
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17661
DELETE FROM t0_aux
 
17662
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17663
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17664
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17665
'just inserted' FROM t0_template
 
17666
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17667
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
17668
BEGIN
 
17669
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17670
f_charbig = 'updated by trigger'
 
17671
      WHERE f_int1 = - old.f_int1;
 
17672
END|
 
17673
DELETE FROM t0_aux
 
17674
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17675
        
 
17676
# check trigger-7 success:      1
 
17677
DROP TRIGGER trg_1;
 
17678
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17679
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17680
f_charbig = 'just inserted'
 
17681
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17682
DELETE FROM t0_aux
 
17683
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17684
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17685
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17686
'just inserted' FROM t0_template
 
17687
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17688
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
17689
BEGIN
 
17690
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17691
f_charbig = 'updated by trigger'
 
17692
      WHERE f_int1 = - old.f_int1;
 
17693
END|
 
17694
DELETE FROM t0_aux
 
17695
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17696
        
 
17697
# check trigger-8 success:      1
 
17698
DROP TRIGGER trg_1;
 
17699
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17700
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17701
f_charbig = 'just inserted'
 
17702
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17703
DELETE FROM t0_aux
 
17704
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17705
DELETE FROM t1
 
17706
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17707
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17708
BEGIN
 
17709
SET new.f_int1 = old.f_int1 + @max_row,
 
17710
new.f_int2 = old.f_int2 - @max_row,
 
17711
new.f_charbig = '####updated per update trigger####';
 
17712
END|
 
17713
UPDATE t1
 
17714
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17715
f_charbig = '####updated per update statement itself####';
 
17716
        
 
17717
# check trigger-9 success:      1
 
17718
DROP TRIGGER trg_2;
 
17719
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17720
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17721
f_charbig = CONCAT('===',f_char1,'===');
 
17722
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17723
BEGIN
 
17724
SET new.f_int1 = new.f_int1 + @max_row,
 
17725
new.f_int2 = new.f_int2 - @max_row,
 
17726
new.f_charbig = '####updated per update trigger####';
 
17727
END|
 
17728
UPDATE t1
 
17729
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17730
f_charbig = '####updated per update statement itself####';
 
17731
        
 
17732
# check trigger-10 success:     1
 
17733
DROP TRIGGER trg_2;
 
17734
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17735
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17736
f_charbig = CONCAT('===',f_char1,'===');
 
17737
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17738
BEGIN
 
17739
SET new.f_int1 = @my_max1 + @counter,
 
17740
new.f_int2 = @my_min2 - @counter,
 
17741
new.f_charbig = '####updated per insert trigger####';
 
17742
SET @counter = @counter + 1;
 
17743
END|
 
17744
SET @counter = 1;
 
17745
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17746
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17747
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17748
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17749
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17750
ORDER BY f_int1;
 
17751
DROP TRIGGER trg_3;
 
17752
        
 
17753
# check trigger-11 success:     1
 
17754
DELETE FROM t1
 
17755
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17756
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17757
AND f_charbig = '####updated per insert trigger####';
 
17758
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17759
BEGIN
 
17760
SET new.f_int1 = @my_max1 + @counter,
 
17761
new.f_int2 = @my_min2 - @counter,
 
17762
new.f_charbig = '####updated per insert trigger####';
 
17763
SET @counter = @counter + 1;
 
17764
END|
 
17765
SET @counter = 1;
 
17766
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17767
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
17768
SELECT CAST(f_int1 AS CHAR),
 
17769
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17770
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17771
ORDER BY f_int1;
 
17772
DROP TRIGGER trg_3;
 
17773
        
 
17774
# check trigger-12 success:     1
 
17775
DELETE FROM t1
 
17776
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17777
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17778
AND f_charbig = '####updated per insert trigger####';
 
17779
ANALYZE  TABLE t1;
 
17780
Table   Op      Msg_type        Msg_text
 
17781
test.t1 analyze status  OK
 
17782
CHECK    TABLE t1 EXTENDED;
 
17783
Table   Op      Msg_type        Msg_text
 
17784
test.t1 check   status  OK
 
17785
CHECKSUM TABLE t1 EXTENDED;
 
17786
Table   Checksum
 
17787
test.t1 <some_value>
 
17788
OPTIMIZE TABLE t1;
 
17789
Table   Op      Msg_type        Msg_text
 
17790
test.t1 optimize        status  OK
 
17791
# check layout success:    1
 
17792
REPAIR   TABLE t1 EXTENDED;
 
17793
Table   Op      Msg_type        Msg_text
 
17794
test.t1 repair  note    The storage engine for the table doesn't support repair
 
17795
# check layout success:    1
 
17796
TRUNCATE t1;
 
17797
        
 
17798
# check TRUNCATE success:       1
 
17799
# check layout success:    1
 
17800
# End usability test (inc/partition_check.inc)
 
17801
DROP TABLE t1;
 
17802
CREATE TABLE t1 (
 
17803
f_int1 INTEGER,
 
17804
f_int2 INTEGER,
 
17805
f_char1 CHAR(20),
 
17806
f_char2 CHAR(20),
 
17807
f_charbig VARCHAR(1000)
 
17808
 
 
17809
)
 
17810
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
17811
(PARTITION part_1 VALUES LESS THAN (0),
 
17812
PARTITION part_2 VALUES LESS THAN (5),
 
17813
PARTITION part_3 VALUES LESS THAN (10),
 
17814
PARTITION part_4 VALUES LESS THAN (2147483646));
 
17815
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17816
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17817
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
17818
ALTER TABLE t1 REBUILD PARTITION part_1;
 
17819
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17820
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17821
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17822
# Start usability test (inc/partition_check.inc)
 
17823
create_command
 
17824
SHOW CREATE TABLE t1;
 
17825
Table   Create Table
 
17826
t1      CREATE TABLE `t1` (
 
17827
  `f_int1` int(11) DEFAULT NULL,
 
17828
  `f_int2` int(11) DEFAULT NULL,
 
17829
  `f_char1` char(20) DEFAULT NULL,
 
17830
  `f_char2` char(20) DEFAULT NULL,
 
17831
  `f_charbig` varchar(1000) DEFAULT NULL
 
17832
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
17833
 
 
17834
# check prerequisites-1 success:    1
 
17835
# check COUNT(*) success:    1
 
17836
# check MIN/MAX(f_int1) success:    1
 
17837
# check MIN/MAX(f_int2) success:    1
 
17838
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17839
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17840
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
17841
WHERE f_int1 IN (2,3);
 
17842
# check prerequisites-3 success:    1
 
17843
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
17844
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
17845
# check read via f_int1 success: 1
 
17846
# check read via f_int2 success: 1
 
17847
        
 
17848
# check multiple-1 success:     1
 
17849
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
17850
        
 
17851
# check multiple-2 success:     1
 
17852
INSERT INTO t1 SELECT * FROM t0_template
 
17853
WHERE MOD(f_int1,3) = 0;
 
17854
        
 
17855
# check multiple-3 success:     1
 
17856
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
17857
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
17858
AND @max_row_div2 + @max_row_div4;
 
17859
        
 
17860
# check multiple-4 success:     1
 
17861
DELETE FROM t1
 
17862
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
17863
AND @max_row_div2 + @max_row_div4 + @max_row;
 
17864
        
 
17865
# check multiple-5 success:     1
 
17866
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
17867
INSERT INTO t1
 
17868
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17869
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17870
f_charbig = '#SINGLE#';
 
17871
        
 
17872
# check single-1 success:       1
 
17873
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
17874
INSERT INTO t1
 
17875
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17876
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17877
f_charbig = '#SINGLE#';
 
17878
        
 
17879
# check single-2 success:       1
 
17880
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
17881
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
17882
UPDATE t1 SET f_int1 = @cur_value2
 
17883
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
17884
        
 
17885
# check single-3 success:       1
 
17886
SET @cur_value1= -1;
 
17887
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
17888
UPDATE t1 SET f_int1 = @cur_value1
 
17889
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
17890
        
 
17891
# check single-4 success:       1
 
17892
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
17893
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
17894
        
 
17895
# check single-5 success:       1
 
17896
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
17897
        
 
17898
# check single-6 success:       1
 
17899
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
17900
        
 
17901
# check single-7 success:       1
 
17902
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
17903
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
17904
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
17905
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
17906
f_charbig = '#NULL#';
 
17907
INSERT INTO t1
 
17908
SET f_int1 = NULL , f_int2 = -@max_row,
 
17909
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
17910
f_charbig = '#NULL#';
 
17911
# check null success:    1
 
17912
        
 
17913
# check null-1 success:         1
 
17914
UPDATE t1 SET f_int1 = -@max_row
 
17915
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17916
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17917
        
 
17918
# check null-2 success:         1
 
17919
UPDATE t1 SET f_int1 = NULL
 
17920
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17921
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17922
        
 
17923
# check null-3 success:         1
 
17924
DELETE FROM t1
 
17925
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17926
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17927
        
 
17928
# check null-4 success:         1
 
17929
DELETE FROM t1
 
17930
WHERE f_int1 = 0 AND f_int2 = 0
 
17931
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
17932
AND f_charbig = '#NULL#';
 
17933
SET AUTOCOMMIT= 0;
 
17934
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17935
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17936
FROM t0_template source_tab
 
17937
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17938
        
 
17939
# check transactions-1 success:         1
 
17940
COMMIT WORK;
 
17941
        
 
17942
# check transactions-2 success:         1
 
17943
ROLLBACK WORK;
 
17944
        
 
17945
# check transactions-3 success:         1
 
17946
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17947
COMMIT WORK;
 
17948
ROLLBACK WORK;
 
17949
        
 
17950
# check transactions-4 success:         1
 
17951
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17952
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17953
FROM t0_template source_tab
 
17954
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17955
        
 
17956
# check transactions-5 success:         1
 
17957
ROLLBACK WORK;
 
17958
        
 
17959
# check transactions-6 success:         1
 
17960
# INFO: Storage engine used for t1 seems to be transactional.
 
17961
COMMIT;
 
17962
        
 
17963
# check transactions-7 success:         1
 
17964
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17965
COMMIT WORK;
 
17966
SET @@session.sql_mode = 'traditional';
 
17967
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
17968
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17969
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
17970
'', '', 'was inserted' FROM t0_template
 
17971
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17972
ERROR 22012: Division by 0
 
17973
COMMIT;
 
17974
        
 
17975
# check transactions-8 success:         1
 
17976
# INFO: Storage engine used for t1 seems to be able to revert
 
17977
#       changes made by the failing statement.
 
17978
SET @@session.sql_mode = '';
 
17979
SET AUTOCOMMIT= 1;
 
17980
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17981
COMMIT WORK;
 
17982
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
17983
        
 
17984
# check special-1 success:      1
 
17985
UPDATE t1 SET f_charbig = '';
 
17986
        
 
17987
# check special-2 success:      1
 
17988
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
17989
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17990
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
17991
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17992
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17993
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17994
'just inserted' FROM t0_template
 
17995
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17996
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
17997
BEGIN
 
17998
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17999
f_charbig = 'updated by trigger'
 
18000
      WHERE f_int1 = new.f_int1;
 
18001
END|
 
18002
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18003
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18004
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18005
        
 
18006
# check trigger-1 success:      1
 
18007
DROP TRIGGER trg_1;
 
18008
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18009
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18010
f_charbig = 'just inserted'
 
18011
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18012
DELETE FROM t0_aux
 
18013
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18014
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18015
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18016
'just inserted' FROM t0_template
 
18017
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18018
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
18019
BEGIN
 
18020
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18021
f_charbig = 'updated by trigger'
 
18022
      WHERE f_int1 = new.f_int1;
 
18023
END|
 
18024
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18025
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18026
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18027
        
 
18028
# check trigger-2 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 UPDATE 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 = new.f_int1;
 
18045
END|
 
18046
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18047
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18048
        
 
18049
# check trigger-3 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 BEFORE UPDATE 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
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18068
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18069
        
 
18070
# check trigger-4 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
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18079
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18080
'just inserted' FROM t0_template
 
18081
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18082
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18083
BEGIN
 
18084
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18085
f_charbig = 'updated by trigger'
 
18086
      WHERE f_int1 = new.f_int1;
 
18087
END|
 
18088
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18089
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18090
        
 
18091
# check trigger-5 success:      1
 
18092
DROP TRIGGER trg_1;
 
18093
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18094
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18095
f_charbig = 'just inserted'
 
18096
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18097
DELETE FROM t0_aux
 
18098
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18099
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18100
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18101
'just inserted' FROM t0_template
 
18102
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18103
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18104
BEGIN
 
18105
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18106
f_charbig = 'updated by trigger'
 
18107
      WHERE f_int1 = - old.f_int1;
 
18108
END|
 
18109
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18110
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18111
        
 
18112
# check trigger-6 success:      1
 
18113
DROP TRIGGER trg_1;
 
18114
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18115
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18116
f_charbig = 'just inserted'
 
18117
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18118
DELETE FROM t0_aux
 
18119
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18120
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18121
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18122
'just inserted' FROM t0_template
 
18123
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18124
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
18125
BEGIN
 
18126
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18127
f_charbig = 'updated by trigger'
 
18128
      WHERE f_int1 = - old.f_int1;
 
18129
END|
 
18130
DELETE FROM t0_aux
 
18131
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18132
        
 
18133
# check trigger-7 success:      1
 
18134
DROP TRIGGER trg_1;
 
18135
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18136
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18137
f_charbig = 'just inserted'
 
18138
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18139
DELETE FROM t0_aux
 
18140
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18141
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18142
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18143
'just inserted' FROM t0_template
 
18144
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18145
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
18146
BEGIN
 
18147
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18148
f_charbig = 'updated by trigger'
 
18149
      WHERE f_int1 = - old.f_int1;
 
18150
END|
 
18151
DELETE FROM t0_aux
 
18152
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18153
        
 
18154
# check trigger-8 success:      1
 
18155
DROP TRIGGER trg_1;
 
18156
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18157
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18158
f_charbig = 'just inserted'
 
18159
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18160
DELETE FROM t0_aux
 
18161
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18162
DELETE FROM t1
 
18163
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18164
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18165
BEGIN
 
18166
SET new.f_int1 = old.f_int1 + @max_row,
 
18167
new.f_int2 = old.f_int2 - @max_row,
 
18168
new.f_charbig = '####updated per update trigger####';
 
18169
END|
 
18170
UPDATE t1
 
18171
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18172
f_charbig = '####updated per update statement itself####';
 
18173
        
 
18174
# check trigger-9 success:      1
 
18175
DROP TRIGGER trg_2;
 
18176
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18177
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18178
f_charbig = CONCAT('===',f_char1,'===');
 
18179
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18180
BEGIN
 
18181
SET new.f_int1 = new.f_int1 + @max_row,
 
18182
new.f_int2 = new.f_int2 - @max_row,
 
18183
new.f_charbig = '####updated per update trigger####';
 
18184
END|
 
18185
UPDATE t1
 
18186
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18187
f_charbig = '####updated per update statement itself####';
 
18188
        
 
18189
# check trigger-10 success:     1
 
18190
DROP TRIGGER trg_2;
 
18191
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18192
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18193
f_charbig = CONCAT('===',f_char1,'===');
 
18194
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18195
BEGIN
 
18196
SET new.f_int1 = @my_max1 + @counter,
 
18197
new.f_int2 = @my_min2 - @counter,
 
18198
new.f_charbig = '####updated per insert trigger####';
 
18199
SET @counter = @counter + 1;
 
18200
END|
 
18201
SET @counter = 1;
 
18202
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18203
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18204
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18205
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18206
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18207
ORDER BY f_int1;
 
18208
DROP TRIGGER trg_3;
 
18209
        
 
18210
# check trigger-11 success:     1
 
18211
DELETE FROM t1
 
18212
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18213
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18214
AND f_charbig = '####updated per insert trigger####';
 
18215
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18216
BEGIN
 
18217
SET new.f_int1 = @my_max1 + @counter,
 
18218
new.f_int2 = @my_min2 - @counter,
 
18219
new.f_charbig = '####updated per insert trigger####';
 
18220
SET @counter = @counter + 1;
 
18221
END|
 
18222
SET @counter = 1;
 
18223
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18224
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
18225
SELECT CAST(f_int1 AS CHAR),
 
18226
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18227
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18228
ORDER BY f_int1;
 
18229
DROP TRIGGER trg_3;
 
18230
        
 
18231
# check trigger-12 success:     1
 
18232
DELETE FROM t1
 
18233
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18234
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18235
AND f_charbig = '####updated per insert trigger####';
 
18236
ANALYZE  TABLE t1;
 
18237
Table   Op      Msg_type        Msg_text
 
18238
test.t1 analyze status  OK
 
18239
CHECK    TABLE t1 EXTENDED;
 
18240
Table   Op      Msg_type        Msg_text
 
18241
test.t1 check   status  OK
 
18242
CHECKSUM TABLE t1 EXTENDED;
 
18243
Table   Checksum
 
18244
test.t1 <some_value>
 
18245
OPTIMIZE TABLE t1;
 
18246
Table   Op      Msg_type        Msg_text
 
18247
test.t1 optimize        status  OK
 
18248
# check layout success:    1
 
18249
REPAIR   TABLE t1 EXTENDED;
 
18250
Table   Op      Msg_type        Msg_text
 
18251
test.t1 repair  note    The storage engine for the table doesn't support repair
 
18252
# check layout success:    1
 
18253
TRUNCATE t1;
 
18254
        
 
18255
# check TRUNCATE success:       1
 
18256
# check layout success:    1
 
18257
# End usability test (inc/partition_check.inc)
 
18258
DROP TABLE t1;
 
18259
CREATE TABLE t1 (
 
18260
f_int1 INTEGER,
 
18261
f_int2 INTEGER,
 
18262
f_char1 CHAR(20),
 
18263
f_char2 CHAR(20),
 
18264
f_charbig VARCHAR(1000)
 
18265
 
 
18266
)
 
18267
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
18268
(PARTITION part_1 VALUES LESS THAN (0)
 
18269
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
18270
PARTITION part_2 VALUES LESS THAN (5)
 
18271
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
18272
PARTITION part_3 VALUES LESS THAN (10)
 
18273
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
18274
PARTITION part_4 VALUES LESS THAN (2147483646)
 
18275
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
18276
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18277
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18278
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
18279
ALTER TABLE t1 REBUILD PARTITION part_1;
 
18280
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18281
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18282
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18283
# Start usability test (inc/partition_check.inc)
 
18284
create_command
 
18285
SHOW CREATE TABLE t1;
 
18286
Table   Create Table
 
18287
t1      CREATE TABLE `t1` (
 
18288
  `f_int1` int(11) DEFAULT NULL,
 
18289
  `f_int2` int(11) DEFAULT NULL,
 
18290
  `f_char1` char(20) DEFAULT NULL,
 
18291
  `f_char2` char(20) DEFAULT NULL,
 
18292
  `f_charbig` varchar(1000) DEFAULT NULL
 
18293
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
18294
 
 
18295
# check prerequisites-1 success:    1
 
18296
# check COUNT(*) success:    1
 
18297
# check MIN/MAX(f_int1) success:    1
 
18298
# check MIN/MAX(f_int2) success:    1
 
18299
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18300
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18301
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
18302
WHERE f_int1 IN (2,3);
 
18303
# check prerequisites-3 success:    1
 
18304
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
18305
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
18306
# check read via f_int1 success: 1
 
18307
# check read via f_int2 success: 1
 
18308
        
 
18309
# check multiple-1 success:     1
 
18310
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
18311
        
 
18312
# check multiple-2 success:     1
 
18313
INSERT INTO t1 SELECT * FROM t0_template
 
18314
WHERE MOD(f_int1,3) = 0;
 
18315
        
 
18316
# check multiple-3 success:     1
 
18317
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
18318
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
18319
AND @max_row_div2 + @max_row_div4;
 
18320
        
 
18321
# check multiple-4 success:     1
 
18322
DELETE FROM t1
 
18323
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
18324
AND @max_row_div2 + @max_row_div4 + @max_row;
 
18325
        
 
18326
# check multiple-5 success:     1
 
18327
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
18328
INSERT INTO t1
 
18329
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18330
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18331
f_charbig = '#SINGLE#';
 
18332
        
 
18333
# check single-1 success:       1
 
18334
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
18335
INSERT INTO t1
 
18336
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18337
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18338
f_charbig = '#SINGLE#';
 
18339
        
 
18340
# check single-2 success:       1
 
18341
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
18342
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
18343
UPDATE t1 SET f_int1 = @cur_value2
 
18344
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
18345
        
 
18346
# check single-3 success:       1
 
18347
SET @cur_value1= -1;
 
18348
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
18349
UPDATE t1 SET f_int1 = @cur_value1
 
18350
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
18351
        
 
18352
# check single-4 success:       1
 
18353
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
18354
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
18355
        
 
18356
# check single-5 success:       1
 
18357
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
18358
        
 
18359
# check single-6 success:       1
 
18360
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
18361
ERROR HY000: Table has no partition for value 2147483647
 
18362
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
18363
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
18364
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
18365
f_charbig = '#NULL#';
 
18366
INSERT INTO t1
 
18367
SET f_int1 = NULL , f_int2 = -@max_row,
 
18368
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
18369
f_charbig = '#NULL#';
 
18370
# check null success:    1
 
18371
        
 
18372
# check null-1 success:         1
 
18373
UPDATE t1 SET f_int1 = -@max_row
 
18374
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18375
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18376
        
 
18377
# check null-2 success:         1
 
18378
UPDATE t1 SET f_int1 = NULL
 
18379
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18380
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18381
        
 
18382
# check null-3 success:         1
 
18383
DELETE FROM t1
 
18384
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18385
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18386
        
 
18387
# check null-4 success:         1
 
18388
DELETE FROM t1
 
18389
WHERE f_int1 = 0 AND f_int2 = 0
 
18390
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
18391
AND f_charbig = '#NULL#';
 
18392
SET AUTOCOMMIT= 0;
 
18393
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18394
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18395
FROM t0_template source_tab
 
18396
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18397
        
 
18398
# check transactions-1 success:         1
 
18399
COMMIT WORK;
 
18400
        
 
18401
# check transactions-2 success:         1
 
18402
ROLLBACK WORK;
 
18403
        
 
18404
# check transactions-3 success:         1
 
18405
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18406
COMMIT WORK;
 
18407
ROLLBACK WORK;
 
18408
        
 
18409
# check transactions-4 success:         1
 
18410
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18411
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18412
FROM t0_template source_tab
 
18413
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18414
        
 
18415
# check transactions-5 success:         1
 
18416
ROLLBACK WORK;
 
18417
        
 
18418
# check transactions-6 success:         1
 
18419
# INFO: Storage engine used for t1 seems to be transactional.
 
18420
COMMIT;
 
18421
        
 
18422
# check transactions-7 success:         1
 
18423
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18424
COMMIT WORK;
 
18425
SET @@session.sql_mode = 'traditional';
 
18426
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
18427
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18428
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
18429
'', '', 'was inserted' FROM t0_template
 
18430
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18431
ERROR 22012: Division by 0
 
18432
COMMIT;
 
18433
        
 
18434
# check transactions-8 success:         1
 
18435
# INFO: Storage engine used for t1 seems to be able to revert
 
18436
#       changes made by the failing statement.
 
18437
SET @@session.sql_mode = '';
 
18438
SET AUTOCOMMIT= 1;
 
18439
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18440
COMMIT WORK;
 
18441
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
18442
        
 
18443
# check special-1 success:      1
 
18444
UPDATE t1 SET f_charbig = '';
 
18445
        
 
18446
# check special-2 success:      1
 
18447
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
18448
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18449
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
18450
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18451
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18452
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18453
'just inserted' FROM t0_template
 
18454
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18455
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
18456
BEGIN
 
18457
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18458
f_charbig = 'updated by trigger'
 
18459
      WHERE f_int1 = new.f_int1;
 
18460
END|
 
18461
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18462
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18463
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18464
        
 
18465
# check trigger-1 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 INSERT 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 = new.f_int1;
 
18482
END|
 
18483
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18484
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18485
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18486
        
 
18487
# check trigger-2 success:      1
 
18488
DROP TRIGGER trg_1;
 
18489
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18490
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18491
f_charbig = 'just inserted'
 
18492
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18493
DELETE FROM t0_aux
 
18494
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18495
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18496
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18497
'just inserted' FROM t0_template
 
18498
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18499
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18500
BEGIN
 
18501
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18502
f_charbig = 'updated by trigger'
 
18503
      WHERE f_int1 = new.f_int1;
 
18504
END|
 
18505
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18506
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18507
        
 
18508
# check trigger-3 success:      1
 
18509
DROP TRIGGER trg_1;
 
18510
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18511
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18512
f_charbig = 'just inserted'
 
18513
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18514
DELETE FROM t0_aux
 
18515
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18516
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18517
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18518
'just inserted' FROM t0_template
 
18519
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18520
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18521
BEGIN
 
18522
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18523
f_charbig = 'updated by trigger'
 
18524
      WHERE f_int1 = - old.f_int1;
 
18525
END|
 
18526
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18527
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18528
        
 
18529
# check trigger-4 success:      1
 
18530
DROP TRIGGER trg_1;
 
18531
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18532
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18533
f_charbig = 'just inserted'
 
18534
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18535
DELETE FROM t0_aux
 
18536
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18537
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18538
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18539
'just inserted' FROM t0_template
 
18540
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18541
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18542
BEGIN
 
18543
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18544
f_charbig = 'updated by trigger'
 
18545
      WHERE f_int1 = new.f_int1;
 
18546
END|
 
18547
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18548
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18549
        
 
18550
# check trigger-5 success:      1
 
18551
DROP TRIGGER trg_1;
 
18552
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18553
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18554
f_charbig = 'just inserted'
 
18555
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18556
DELETE FROM t0_aux
 
18557
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18558
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18559
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18560
'just inserted' FROM t0_template
 
18561
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18562
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18563
BEGIN
 
18564
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18565
f_charbig = 'updated by trigger'
 
18566
      WHERE f_int1 = - old.f_int1;
 
18567
END|
 
18568
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18569
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18570
        
 
18571
# check trigger-6 success:      1
 
18572
DROP TRIGGER trg_1;
 
18573
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18574
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18575
f_charbig = 'just inserted'
 
18576
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18577
DELETE FROM t0_aux
 
18578
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18579
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18580
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18581
'just inserted' FROM t0_template
 
18582
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18583
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
18584
BEGIN
 
18585
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18586
f_charbig = 'updated by trigger'
 
18587
      WHERE f_int1 = - old.f_int1;
 
18588
END|
 
18589
DELETE FROM t0_aux
 
18590
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18591
        
 
18592
# check trigger-7 success:      1
 
18593
DROP TRIGGER trg_1;
 
18594
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18595
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18596
f_charbig = 'just inserted'
 
18597
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18598
DELETE FROM t0_aux
 
18599
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18600
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18601
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18602
'just inserted' FROM t0_template
 
18603
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18604
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
18605
BEGIN
 
18606
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18607
f_charbig = 'updated by trigger'
 
18608
      WHERE f_int1 = - old.f_int1;
 
18609
END|
 
18610
DELETE FROM t0_aux
 
18611
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18612
        
 
18613
# check trigger-8 success:      1
 
18614
DROP TRIGGER trg_1;
 
18615
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18616
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18617
f_charbig = 'just inserted'
 
18618
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18619
DELETE FROM t0_aux
 
18620
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18621
DELETE FROM t1
 
18622
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18623
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18624
BEGIN
 
18625
SET new.f_int1 = old.f_int1 + @max_row,
 
18626
new.f_int2 = old.f_int2 - @max_row,
 
18627
new.f_charbig = '####updated per update trigger####';
 
18628
END|
 
18629
UPDATE t1
 
18630
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18631
f_charbig = '####updated per update statement itself####';
 
18632
        
 
18633
# check trigger-9 success:      1
 
18634
DROP TRIGGER trg_2;
 
18635
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18636
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18637
f_charbig = CONCAT('===',f_char1,'===');
 
18638
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18639
BEGIN
 
18640
SET new.f_int1 = new.f_int1 + @max_row,
 
18641
new.f_int2 = new.f_int2 - @max_row,
 
18642
new.f_charbig = '####updated per update trigger####';
 
18643
END|
 
18644
UPDATE t1
 
18645
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18646
f_charbig = '####updated per update statement itself####';
 
18647
        
 
18648
# check trigger-10 success:     1
 
18649
DROP TRIGGER trg_2;
 
18650
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18651
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18652
f_charbig = CONCAT('===',f_char1,'===');
 
18653
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18654
BEGIN
 
18655
SET new.f_int1 = @my_max1 + @counter,
 
18656
new.f_int2 = @my_min2 - @counter,
 
18657
new.f_charbig = '####updated per insert trigger####';
 
18658
SET @counter = @counter + 1;
 
18659
END|
 
18660
SET @counter = 1;
 
18661
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18662
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18663
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18664
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18665
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18666
ORDER BY f_int1;
 
18667
DROP TRIGGER trg_3;
 
18668
        
 
18669
# check trigger-11 success:     1
 
18670
DELETE FROM t1
 
18671
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18672
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18673
AND f_charbig = '####updated per insert trigger####';
 
18674
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18675
BEGIN
 
18676
SET new.f_int1 = @my_max1 + @counter,
 
18677
new.f_int2 = @my_min2 - @counter,
 
18678
new.f_charbig = '####updated per insert trigger####';
 
18679
SET @counter = @counter + 1;
 
18680
END|
 
18681
SET @counter = 1;
 
18682
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18683
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
18684
SELECT CAST(f_int1 AS CHAR),
 
18685
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18686
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18687
ORDER BY f_int1;
 
18688
DROP TRIGGER trg_3;
 
18689
        
 
18690
# check trigger-12 success:     1
 
18691
DELETE FROM t1
 
18692
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18693
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18694
AND f_charbig = '####updated per insert trigger####';
 
18695
ANALYZE  TABLE t1;
 
18696
Table   Op      Msg_type        Msg_text
 
18697
test.t1 analyze status  OK
 
18698
CHECK    TABLE t1 EXTENDED;
 
18699
Table   Op      Msg_type        Msg_text
 
18700
test.t1 check   status  OK
 
18701
CHECKSUM TABLE t1 EXTENDED;
 
18702
Table   Checksum
 
18703
test.t1 <some_value>
 
18704
OPTIMIZE TABLE t1;
 
18705
Table   Op      Msg_type        Msg_text
 
18706
test.t1 optimize        status  OK
 
18707
# check layout success:    1
 
18708
REPAIR   TABLE t1 EXTENDED;
 
18709
Table   Op      Msg_type        Msg_text
 
18710
test.t1 repair  note    The storage engine for the table doesn't support repair
 
18711
# check layout success:    1
 
18712
TRUNCATE t1;
 
18713
        
 
18714
# check TRUNCATE success:       1
 
18715
# check layout success:    1
 
18716
# End usability test (inc/partition_check.inc)
 
18717
DROP TABLE t1;
 
18718
CREATE TABLE t1 (
 
18719
f_int1 INTEGER,
 
18720
f_int2 INTEGER,
 
18721
f_char1 CHAR(20),
 
18722
f_char2 CHAR(20),
 
18723
f_charbig VARCHAR(1000)
 
18724
 
 
18725
)
 
18726
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
18727
(PARTITION part_1 VALUES IN (0)
 
18728
(SUBPARTITION sp11, SUBPARTITION sp12),
 
18729
PARTITION part_2 VALUES IN (1)
 
18730
(SUBPARTITION sp21, SUBPARTITION sp22),
 
18731
PARTITION part_3 VALUES IN (2)
 
18732
(SUBPARTITION sp31, SUBPARTITION sp32),
 
18733
PARTITION part_4 VALUES IN (NULL)
 
18734
(SUBPARTITION sp41, SUBPARTITION sp42));
 
18735
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18736
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18737
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
18738
ALTER TABLE t1 REBUILD PARTITION part_1;
 
18739
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18740
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18741
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18742
# Start usability test (inc/partition_check.inc)
 
18743
create_command
 
18744
SHOW CREATE TABLE t1;
 
18745
Table   Create Table
 
18746
t1      CREATE TABLE `t1` (
 
18747
  `f_int1` int(11) DEFAULT NULL,
 
18748
  `f_int2` int(11) DEFAULT NULL,
 
18749
  `f_char1` char(20) DEFAULT NULL,
 
18750
  `f_char2` char(20) DEFAULT NULL,
 
18751
  `f_charbig` varchar(1000) DEFAULT NULL
 
18752
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
18753
 
 
18754
# check prerequisites-1 success:    1
 
18755
# check COUNT(*) success:    1
 
18756
# check MIN/MAX(f_int1) success:    1
 
18757
# check MIN/MAX(f_int2) success:    1
 
18758
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18759
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18760
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
18761
WHERE f_int1 IN (2,3);
 
18762
# check prerequisites-3 success:    1
 
18763
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
18764
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
18765
# check read via f_int1 success: 1
 
18766
# check read via f_int2 success: 1
 
18767
        
 
18768
# check multiple-1 success:     1
 
18769
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
18770
        
 
18771
# check multiple-2 success:     1
 
18772
INSERT INTO t1 SELECT * FROM t0_template
 
18773
WHERE MOD(f_int1,3) = 0;
 
18774
        
 
18775
# check multiple-3 success:     1
 
18776
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
18777
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
18778
AND @max_row_div2 + @max_row_div4;
 
18779
        
 
18780
# check multiple-4 success:     1
 
18781
DELETE FROM t1
 
18782
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
18783
AND @max_row_div2 + @max_row_div4 + @max_row;
 
18784
        
 
18785
# check multiple-5 success:     1
 
18786
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
18787
INSERT INTO t1
 
18788
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18789
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18790
f_charbig = '#SINGLE#';
 
18791
        
 
18792
# check single-1 success:       1
 
18793
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
18794
INSERT INTO t1
 
18795
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18796
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18797
f_charbig = '#SINGLE#';
 
18798
        
 
18799
# check single-2 success:       1
 
18800
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
18801
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
18802
UPDATE t1 SET f_int1 = @cur_value2
 
18803
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
18804
        
 
18805
# check single-3 success:       1
 
18806
SET @cur_value1= -1;
 
18807
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
18808
UPDATE t1 SET f_int1 = @cur_value1
 
18809
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
18810
        
 
18811
# check single-4 success:       1
 
18812
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
18813
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
18814
        
 
18815
# check single-5 success:       1
 
18816
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
18817
        
 
18818
# check single-6 success:       1
 
18819
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
18820
        
 
18821
# check single-7 success:       1
 
18822
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
18823
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
18824
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
18825
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
18826
f_charbig = '#NULL#';
 
18827
INSERT INTO t1
 
18828
SET f_int1 = NULL , f_int2 = -@max_row,
 
18829
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
18830
f_charbig = '#NULL#';
 
18831
# check null success:    1
 
18832
        
 
18833
# check null-1 success:         1
 
18834
UPDATE t1 SET f_int1 = -@max_row
 
18835
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18836
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18837
        
 
18838
# check null-2 success:         1
 
18839
UPDATE t1 SET f_int1 = NULL
 
18840
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18841
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18842
        
 
18843
# check null-3 success:         1
 
18844
DELETE FROM t1
 
18845
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18846
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18847
        
 
18848
# check null-4 success:         1
 
18849
DELETE FROM t1
 
18850
WHERE f_int1 = 0 AND f_int2 = 0
 
18851
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
18852
AND f_charbig = '#NULL#';
 
18853
SET AUTOCOMMIT= 0;
 
18854
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18855
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18856
FROM t0_template source_tab
 
18857
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18858
        
 
18859
# check transactions-1 success:         1
 
18860
COMMIT WORK;
 
18861
        
 
18862
# check transactions-2 success:         1
 
18863
ROLLBACK WORK;
 
18864
        
 
18865
# check transactions-3 success:         1
 
18866
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18867
COMMIT WORK;
 
18868
ROLLBACK WORK;
 
18869
        
 
18870
# check transactions-4 success:         1
 
18871
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18872
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18873
FROM t0_template source_tab
 
18874
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18875
        
 
18876
# check transactions-5 success:         1
 
18877
ROLLBACK WORK;
 
18878
        
 
18879
# check transactions-6 success:         1
 
18880
# INFO: Storage engine used for t1 seems to be transactional.
 
18881
COMMIT;
 
18882
        
 
18883
# check transactions-7 success:         1
 
18884
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18885
COMMIT WORK;
 
18886
SET @@session.sql_mode = 'traditional';
 
18887
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
18888
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18889
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
18890
'', '', 'was inserted' FROM t0_template
 
18891
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18892
ERROR 22012: Division by 0
 
18893
COMMIT;
 
18894
        
 
18895
# check transactions-8 success:         1
 
18896
# INFO: Storage engine used for t1 seems to be able to revert
 
18897
#       changes made by the failing statement.
 
18898
SET @@session.sql_mode = '';
 
18899
SET AUTOCOMMIT= 1;
 
18900
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18901
COMMIT WORK;
 
18902
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
18903
        
 
18904
# check special-1 success:      1
 
18905
UPDATE t1 SET f_charbig = '';
 
18906
        
 
18907
# check special-2 success:      1
 
18908
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
18909
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18910
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
18911
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18912
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18913
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18914
'just inserted' FROM t0_template
 
18915
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18916
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
18917
BEGIN
 
18918
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18919
f_charbig = 'updated by trigger'
 
18920
      WHERE f_int1 = new.f_int1;
 
18921
END|
 
18922
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18923
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18924
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18925
        
 
18926
# check trigger-1 success:      1
 
18927
DROP TRIGGER trg_1;
 
18928
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18929
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18930
f_charbig = 'just inserted'
 
18931
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18932
DELETE FROM t0_aux
 
18933
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18934
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18935
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18936
'just inserted' FROM t0_template
 
18937
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18938
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
18939
BEGIN
 
18940
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18941
f_charbig = 'updated by trigger'
 
18942
      WHERE f_int1 = new.f_int1;
 
18943
END|
 
18944
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18945
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18946
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18947
        
 
18948
# check trigger-2 success:      1
 
18949
DROP TRIGGER trg_1;
 
18950
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18951
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18952
f_charbig = 'just inserted'
 
18953
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18954
DELETE FROM t0_aux
 
18955
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18956
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18957
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18958
'just inserted' FROM t0_template
 
18959
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18960
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18961
BEGIN
 
18962
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18963
f_charbig = 'updated by trigger'
 
18964
      WHERE f_int1 = new.f_int1;
 
18965
END|
 
18966
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18967
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18968
        
 
18969
# check trigger-3 success:      1
 
18970
DROP TRIGGER trg_1;
 
18971
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18972
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18973
f_charbig = 'just inserted'
 
18974
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18975
DELETE FROM t0_aux
 
18976
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18977
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18978
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18979
'just inserted' FROM t0_template
 
18980
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18981
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18982
BEGIN
 
18983
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18984
f_charbig = 'updated by trigger'
 
18985
      WHERE f_int1 = - old.f_int1;
 
18986
END|
 
18987
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18988
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18989
        
 
18990
# check trigger-4 success:      1
 
18991
DROP TRIGGER trg_1;
 
18992
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18993
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18994
f_charbig = 'just inserted'
 
18995
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18996
DELETE FROM t0_aux
 
18997
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18998
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18999
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19000
'just inserted' FROM t0_template
 
19001
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19002
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19003
BEGIN
 
19004
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19005
f_charbig = 'updated by trigger'
 
19006
      WHERE f_int1 = new.f_int1;
 
19007
END|
 
19008
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19009
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19010
        
 
19011
# check trigger-5 success:      1
 
19012
DROP TRIGGER trg_1;
 
19013
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19014
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19015
f_charbig = 'just inserted'
 
19016
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19017
DELETE FROM t0_aux
 
19018
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19019
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19020
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19021
'just inserted' FROM t0_template
 
19022
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19023
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19024
BEGIN
 
19025
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19026
f_charbig = 'updated by trigger'
 
19027
      WHERE f_int1 = - old.f_int1;
 
19028
END|
 
19029
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19030
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19031
        
 
19032
# check trigger-6 success:      1
 
19033
DROP TRIGGER trg_1;
 
19034
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19035
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19036
f_charbig = 'just inserted'
 
19037
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19038
DELETE FROM t0_aux
 
19039
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19040
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19041
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19042
'just inserted' FROM t0_template
 
19043
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19044
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
19045
BEGIN
 
19046
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19047
f_charbig = 'updated by trigger'
 
19048
      WHERE f_int1 = - old.f_int1;
 
19049
END|
 
19050
DELETE FROM t0_aux
 
19051
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19052
        
 
19053
# check trigger-7 success:      1
 
19054
DROP TRIGGER trg_1;
 
19055
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19056
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19057
f_charbig = 'just inserted'
 
19058
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19059
DELETE FROM t0_aux
 
19060
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19061
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19062
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19063
'just inserted' FROM t0_template
 
19064
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19065
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
19066
BEGIN
 
19067
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19068
f_charbig = 'updated by trigger'
 
19069
      WHERE f_int1 = - old.f_int1;
 
19070
END|
 
19071
DELETE FROM t0_aux
 
19072
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19073
        
 
19074
# check trigger-8 success:      1
 
19075
DROP TRIGGER trg_1;
 
19076
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19077
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19078
f_charbig = 'just inserted'
 
19079
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19080
DELETE FROM t0_aux
 
19081
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19082
DELETE FROM t1
 
19083
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19084
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19085
BEGIN
 
19086
SET new.f_int1 = old.f_int1 + @max_row,
 
19087
new.f_int2 = old.f_int2 - @max_row,
 
19088
new.f_charbig = '####updated per update trigger####';
 
19089
END|
 
19090
UPDATE t1
 
19091
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19092
f_charbig = '####updated per update statement itself####';
 
19093
        
 
19094
# check trigger-9 success:      1
 
19095
DROP TRIGGER trg_2;
 
19096
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19097
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19098
f_charbig = CONCAT('===',f_char1,'===');
 
19099
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19100
BEGIN
 
19101
SET new.f_int1 = new.f_int1 + @max_row,
 
19102
new.f_int2 = new.f_int2 - @max_row,
 
19103
new.f_charbig = '####updated per update trigger####';
 
19104
END|
 
19105
UPDATE t1
 
19106
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19107
f_charbig = '####updated per update statement itself####';
 
19108
        
 
19109
# check trigger-10 success:     1
 
19110
DROP TRIGGER trg_2;
 
19111
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19112
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19113
f_charbig = CONCAT('===',f_char1,'===');
 
19114
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19115
BEGIN
 
19116
SET new.f_int1 = @my_max1 + @counter,
 
19117
new.f_int2 = @my_min2 - @counter,
 
19118
new.f_charbig = '####updated per insert trigger####';
 
19119
SET @counter = @counter + 1;
 
19120
END|
 
19121
SET @counter = 1;
 
19122
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19123
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19124
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19125
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19126
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19127
ORDER BY f_int1;
 
19128
DROP TRIGGER trg_3;
 
19129
        
 
19130
# check trigger-11 success:     1
 
19131
DELETE FROM t1
 
19132
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19133
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19134
AND f_charbig = '####updated per insert trigger####';
 
19135
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19136
BEGIN
 
19137
SET new.f_int1 = @my_max1 + @counter,
 
19138
new.f_int2 = @my_min2 - @counter,
 
19139
new.f_charbig = '####updated per insert trigger####';
 
19140
SET @counter = @counter + 1;
 
19141
END|
 
19142
SET @counter = 1;
 
19143
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19144
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
19145
SELECT CAST(f_int1 AS CHAR),
 
19146
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19147
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19148
ORDER BY f_int1;
 
19149
DROP TRIGGER trg_3;
 
19150
        
 
19151
# check trigger-12 success:     1
 
19152
DELETE FROM t1
 
19153
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19154
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19155
AND f_charbig = '####updated per insert trigger####';
 
19156
ANALYZE  TABLE t1;
 
19157
Table   Op      Msg_type        Msg_text
 
19158
test.t1 analyze status  OK
 
19159
CHECK    TABLE t1 EXTENDED;
 
19160
Table   Op      Msg_type        Msg_text
 
19161
test.t1 check   status  OK
 
19162
CHECKSUM TABLE t1 EXTENDED;
 
19163
Table   Checksum
 
19164
test.t1 <some_value>
 
19165
OPTIMIZE TABLE t1;
 
19166
Table   Op      Msg_type        Msg_text
 
19167
test.t1 optimize        status  OK
 
19168
# check layout success:    1
 
19169
REPAIR   TABLE t1 EXTENDED;
 
19170
Table   Op      Msg_type        Msg_text
 
19171
test.t1 repair  note    The storage engine for the table doesn't support repair
 
19172
# check layout success:    1
 
19173
TRUNCATE t1;
 
19174
        
 
19175
# check TRUNCATE success:       1
 
19176
# check layout success:    1
 
19177
# End usability test (inc/partition_check.inc)
 
19178
DROP TABLE t1;
 
19179
CREATE TABLE t1 (
 
19180
f_int1 INTEGER,
 
19181
f_int2 INTEGER,
 
19182
f_char1 CHAR(20),
 
19183
f_char2 CHAR(20),
 
19184
f_charbig VARCHAR(1000)
 
19185
 
 
19186
)
 
19187
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
19188
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
19189
(PARTITION part_1 VALUES IN (0),
 
19190
 PARTITION part_2 VALUES IN (1),
 
19191
 PARTITION part_3 VALUES IN (NULL));
 
19192
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19193
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19194
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
19195
ALTER TABLE t1 REBUILD PARTITION part_1;
 
19196
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19197
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19198
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19199
# Start usability test (inc/partition_check.inc)
 
19200
create_command
 
19201
SHOW CREATE TABLE t1;
 
19202
Table   Create Table
 
19203
t1      CREATE TABLE `t1` (
 
19204
  `f_int1` int(11) DEFAULT NULL,
 
19205
  `f_int2` int(11) DEFAULT NULL,
 
19206
  `f_char1` char(20) DEFAULT NULL,
 
19207
  `f_char2` char(20) DEFAULT NULL,
 
19208
  `f_charbig` varchar(1000) DEFAULT NULL
 
19209
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
 
19210
 
 
19211
# check prerequisites-1 success:    1
 
19212
# check COUNT(*) success:    1
 
19213
# check MIN/MAX(f_int1) success:    1
 
19214
# check MIN/MAX(f_int2) success:    1
 
19215
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19216
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19217
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
19218
WHERE f_int1 IN (2,3);
 
19219
# check prerequisites-3 success:    1
 
19220
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
19221
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
19222
# check read via f_int1 success: 1
 
19223
# check read via f_int2 success: 1
 
19224
        
 
19225
# check multiple-1 success:     1
 
19226
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
19227
        
 
19228
# check multiple-2 success:     1
 
19229
INSERT INTO t1 SELECT * FROM t0_template
 
19230
WHERE MOD(f_int1,3) = 0;
 
19231
        
 
19232
# check multiple-3 success:     1
 
19233
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
19234
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
19235
AND @max_row_div2 + @max_row_div4;
 
19236
        
 
19237
# check multiple-4 success:     1
 
19238
DELETE FROM t1
 
19239
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
19240
AND @max_row_div2 + @max_row_div4 + @max_row;
 
19241
        
 
19242
# check multiple-5 success:     1
 
19243
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
19244
INSERT INTO t1
 
19245
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19246
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19247
f_charbig = '#SINGLE#';
 
19248
        
 
19249
# check single-1 success:       1
 
19250
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
19251
INSERT INTO t1
 
19252
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19253
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19254
f_charbig = '#SINGLE#';
 
19255
        
 
19256
# check single-2 success:       1
 
19257
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
19258
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
19259
UPDATE t1 SET f_int1 = @cur_value2
 
19260
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
19261
        
 
19262
# check single-3 success:       1
 
19263
SET @cur_value1= -1;
 
19264
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
19265
UPDATE t1 SET f_int1 = @cur_value1
 
19266
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
19267
        
 
19268
# check single-4 success:       1
 
19269
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
19270
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
19271
        
 
19272
# check single-5 success:       1
 
19273
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
19274
        
 
19275
# check single-6 success:       1
 
19276
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
19277
        
 
19278
# check single-7 success:       1
 
19279
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
19280
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
19281
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
19282
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
19283
f_charbig = '#NULL#';
 
19284
INSERT INTO t1
 
19285
SET f_int1 = NULL , f_int2 = -@max_row,
 
19286
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
19287
f_charbig = '#NULL#';
 
19288
# check null success:    1
 
19289
        
 
19290
# check null-1 success:         1
 
19291
UPDATE t1 SET f_int1 = -@max_row
 
19292
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19293
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19294
        
 
19295
# check null-2 success:         1
 
19296
UPDATE t1 SET f_int1 = NULL
 
19297
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19298
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19299
        
 
19300
# check null-3 success:         1
 
19301
DELETE FROM t1
 
19302
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19303
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19304
        
 
19305
# check null-4 success:         1
 
19306
DELETE FROM t1
 
19307
WHERE f_int1 = 0 AND f_int2 = 0
 
19308
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
19309
AND f_charbig = '#NULL#';
 
19310
SET AUTOCOMMIT= 0;
 
19311
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19312
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19313
FROM t0_template source_tab
 
19314
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19315
        
 
19316
# check transactions-1 success:         1
 
19317
COMMIT WORK;
 
19318
        
 
19319
# check transactions-2 success:         1
 
19320
ROLLBACK WORK;
 
19321
        
 
19322
# check transactions-3 success:         1
 
19323
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19324
COMMIT WORK;
 
19325
ROLLBACK WORK;
 
19326
        
 
19327
# check transactions-4 success:         1
 
19328
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19329
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19330
FROM t0_template source_tab
 
19331
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19332
        
 
19333
# check transactions-5 success:         1
 
19334
ROLLBACK WORK;
 
19335
        
 
19336
# check transactions-6 success:         1
 
19337
# INFO: Storage engine used for t1 seems to be transactional.
 
19338
COMMIT;
 
19339
        
 
19340
# check transactions-7 success:         1
 
19341
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19342
COMMIT WORK;
 
19343
SET @@session.sql_mode = 'traditional';
 
19344
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
19345
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19346
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
19347
'', '', 'was inserted' FROM t0_template
 
19348
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19349
ERROR 22012: Division by 0
 
19350
COMMIT;
 
19351
        
 
19352
# check transactions-8 success:         1
 
19353
# INFO: Storage engine used for t1 seems to be able to revert
 
19354
#       changes made by the failing statement.
 
19355
SET @@session.sql_mode = '';
 
19356
SET AUTOCOMMIT= 1;
 
19357
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19358
COMMIT WORK;
 
19359
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
19360
        
 
19361
# check special-1 success:      1
 
19362
UPDATE t1 SET f_charbig = '';
 
19363
        
 
19364
# check special-2 success:      1
 
19365
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
19366
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19367
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
19368
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19369
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19370
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19371
'just inserted' FROM t0_template
 
19372
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19373
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
19374
BEGIN
 
19375
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19376
f_charbig = 'updated by trigger'
 
19377
      WHERE f_int1 = new.f_int1;
 
19378
END|
 
19379
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19380
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19381
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19382
        
 
19383
# check trigger-1 success:      1
 
19384
DROP TRIGGER trg_1;
 
19385
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19386
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19387
f_charbig = 'just inserted'
 
19388
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19389
DELETE FROM t0_aux
 
19390
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19391
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19392
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19393
'just inserted' FROM t0_template
 
19394
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19395
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
19396
BEGIN
 
19397
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19398
f_charbig = 'updated by trigger'
 
19399
      WHERE f_int1 = new.f_int1;
 
19400
END|
 
19401
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19402
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19403
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19404
        
 
19405
# check trigger-2 success:      1
 
19406
DROP TRIGGER trg_1;
 
19407
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19408
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19409
f_charbig = 'just inserted'
 
19410
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19411
DELETE FROM t0_aux
 
19412
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19413
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19414
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19415
'just inserted' FROM t0_template
 
19416
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19417
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19418
BEGIN
 
19419
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19420
f_charbig = 'updated by trigger'
 
19421
      WHERE f_int1 = new.f_int1;
 
19422
END|
 
19423
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19424
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19425
        
 
19426
# check trigger-3 success:      1
 
19427
DROP TRIGGER trg_1;
 
19428
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19429
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19430
f_charbig = 'just inserted'
 
19431
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19432
DELETE FROM t0_aux
 
19433
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19434
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19435
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19436
'just inserted' FROM t0_template
 
19437
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19438
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19439
BEGIN
 
19440
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19441
f_charbig = 'updated by trigger'
 
19442
      WHERE f_int1 = - old.f_int1;
 
19443
END|
 
19444
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19445
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19446
        
 
19447
# check trigger-4 success:      1
 
19448
DROP TRIGGER trg_1;
 
19449
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19450
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19451
f_charbig = 'just inserted'
 
19452
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19453
DELETE FROM t0_aux
 
19454
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19455
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19456
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19457
'just inserted' FROM t0_template
 
19458
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19459
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19460
BEGIN
 
19461
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19462
f_charbig = 'updated by trigger'
 
19463
      WHERE f_int1 = new.f_int1;
 
19464
END|
 
19465
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19466
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19467
        
 
19468
# check trigger-5 success:      1
 
19469
DROP TRIGGER trg_1;
 
19470
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19471
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19472
f_charbig = 'just inserted'
 
19473
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19474
DELETE FROM t0_aux
 
19475
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19476
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19477
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19478
'just inserted' FROM t0_template
 
19479
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19480
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19481
BEGIN
 
19482
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19483
f_charbig = 'updated by trigger'
 
19484
      WHERE f_int1 = - old.f_int1;
 
19485
END|
 
19486
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19487
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19488
        
 
19489
# check trigger-6 success:      1
 
19490
DROP TRIGGER trg_1;
 
19491
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19492
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19493
f_charbig = 'just inserted'
 
19494
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19495
DELETE FROM t0_aux
 
19496
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19497
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19498
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19499
'just inserted' FROM t0_template
 
19500
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19501
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
19502
BEGIN
 
19503
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19504
f_charbig = 'updated by trigger'
 
19505
      WHERE f_int1 = - old.f_int1;
 
19506
END|
 
19507
DELETE FROM t0_aux
 
19508
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19509
        
 
19510
# check trigger-7 success:      1
 
19511
DROP TRIGGER trg_1;
 
19512
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19513
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19514
f_charbig = 'just inserted'
 
19515
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19516
DELETE FROM t0_aux
 
19517
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19518
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19519
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19520
'just inserted' FROM t0_template
 
19521
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19522
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
19523
BEGIN
 
19524
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19525
f_charbig = 'updated by trigger'
 
19526
      WHERE f_int1 = - old.f_int1;
 
19527
END|
 
19528
DELETE FROM t0_aux
 
19529
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19530
        
 
19531
# check trigger-8 success:      1
 
19532
DROP TRIGGER trg_1;
 
19533
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19534
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19535
f_charbig = 'just inserted'
 
19536
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19537
DELETE FROM t0_aux
 
19538
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19539
DELETE FROM t1
 
19540
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19541
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19542
BEGIN
 
19543
SET new.f_int1 = old.f_int1 + @max_row,
 
19544
new.f_int2 = old.f_int2 - @max_row,
 
19545
new.f_charbig = '####updated per update trigger####';
 
19546
END|
 
19547
UPDATE t1
 
19548
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19549
f_charbig = '####updated per update statement itself####';
 
19550
        
 
19551
# check trigger-9 success:      1
 
19552
DROP TRIGGER trg_2;
 
19553
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19554
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19555
f_charbig = CONCAT('===',f_char1,'===');
 
19556
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19557
BEGIN
 
19558
SET new.f_int1 = new.f_int1 + @max_row,
 
19559
new.f_int2 = new.f_int2 - @max_row,
 
19560
new.f_charbig = '####updated per update trigger####';
 
19561
END|
 
19562
UPDATE t1
 
19563
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19564
f_charbig = '####updated per update statement itself####';
 
19565
        
 
19566
# check trigger-10 success:     1
 
19567
DROP TRIGGER trg_2;
 
19568
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19569
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19570
f_charbig = CONCAT('===',f_char1,'===');
 
19571
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19572
BEGIN
 
19573
SET new.f_int1 = @my_max1 + @counter,
 
19574
new.f_int2 = @my_min2 - @counter,
 
19575
new.f_charbig = '####updated per insert trigger####';
 
19576
SET @counter = @counter + 1;
 
19577
END|
 
19578
SET @counter = 1;
 
19579
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19580
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19581
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19582
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19583
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19584
ORDER BY f_int1;
 
19585
DROP TRIGGER trg_3;
 
19586
        
 
19587
# check trigger-11 success:     1
 
19588
DELETE FROM t1
 
19589
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19590
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19591
AND f_charbig = '####updated per insert trigger####';
 
19592
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19593
BEGIN
 
19594
SET new.f_int1 = @my_max1 + @counter,
 
19595
new.f_int2 = @my_min2 - @counter,
 
19596
new.f_charbig = '####updated per insert trigger####';
 
19597
SET @counter = @counter + 1;
 
19598
END|
 
19599
SET @counter = 1;
 
19600
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19601
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
19602
SELECT CAST(f_int1 AS CHAR),
 
19603
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19604
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19605
ORDER BY f_int1;
 
19606
DROP TRIGGER trg_3;
 
19607
        
 
19608
# check trigger-12 success:     1
 
19609
DELETE FROM t1
 
19610
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19611
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19612
AND f_charbig = '####updated per insert trigger####';
 
19613
ANALYZE  TABLE t1;
 
19614
Table   Op      Msg_type        Msg_text
 
19615
test.t1 analyze status  OK
 
19616
CHECK    TABLE t1 EXTENDED;
 
19617
Table   Op      Msg_type        Msg_text
 
19618
test.t1 check   status  OK
 
19619
CHECKSUM TABLE t1 EXTENDED;
 
19620
Table   Checksum
 
19621
test.t1 <some_value>
 
19622
OPTIMIZE TABLE t1;
 
19623
Table   Op      Msg_type        Msg_text
 
19624
test.t1 optimize        status  OK
 
19625
# check layout success:    1
 
19626
REPAIR   TABLE t1 EXTENDED;
 
19627
Table   Op      Msg_type        Msg_text
 
19628
test.t1 repair  note    The storage engine for the table doesn't support repair
 
19629
# check layout success:    1
 
19630
TRUNCATE t1;
 
19631
        
 
19632
# check TRUNCATE success:       1
 
19633
# check layout success:    1
 
19634
# End usability test (inc/partition_check.inc)
 
19635
DROP TABLE t1;
 
19636
#  4.2 ALTER ... REBUILD PARTITION part_1,part_2;
 
19637
DROP TABLE IF EXISTS t1;
 
19638
CREATE TABLE t1 (
 
19639
f_int1 INTEGER,
 
19640
f_int2 INTEGER,
 
19641
f_char1 CHAR(20),
 
19642
f_char2 CHAR(20),
 
19643
f_charbig VARCHAR(1000)
 
19644
 
 
19645
)
 
19646
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
19647
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19648
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19649
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
19650
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
19651
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19652
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19653
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19654
# Start usability test (inc/partition_check.inc)
 
19655
create_command
 
19656
SHOW CREATE TABLE t1;
 
19657
Table   Create Table
 
19658
t1      CREATE TABLE `t1` (
 
19659
  `f_int1` int(11) DEFAULT NULL,
 
19660
  `f_int2` int(11) DEFAULT NULL,
 
19661
  `f_char1` char(20) DEFAULT NULL,
 
19662
  `f_char2` char(20) DEFAULT NULL,
 
19663
  `f_charbig` varchar(1000) DEFAULT NULL
 
19664
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
 
19665
 
 
19666
# check prerequisites-1 success:    1
 
19667
# check COUNT(*) success:    1
 
19668
# check MIN/MAX(f_int1) success:    1
 
19669
# check MIN/MAX(f_int2) success:    1
 
19670
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19671
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19672
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
19673
WHERE f_int1 IN (2,3);
 
19674
# check prerequisites-3 success:    1
 
19675
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
19676
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
19677
# check read via f_int1 success: 1
 
19678
# check read via f_int2 success: 1
 
19679
        
 
19680
# check multiple-1 success:     1
 
19681
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
19682
        
 
19683
# check multiple-2 success:     1
 
19684
INSERT INTO t1 SELECT * FROM t0_template
 
19685
WHERE MOD(f_int1,3) = 0;
 
19686
        
 
19687
# check multiple-3 success:     1
 
19688
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
19689
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
19690
AND @max_row_div2 + @max_row_div4;
 
19691
        
 
19692
# check multiple-4 success:     1
 
19693
DELETE FROM t1
 
19694
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
19695
AND @max_row_div2 + @max_row_div4 + @max_row;
 
19696
        
 
19697
# check multiple-5 success:     1
 
19698
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
19699
INSERT INTO t1
 
19700
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19701
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19702
f_charbig = '#SINGLE#';
 
19703
        
 
19704
# check single-1 success:       1
 
19705
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
19706
INSERT INTO t1
 
19707
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19708
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19709
f_charbig = '#SINGLE#';
 
19710
        
 
19711
# check single-2 success:       1
 
19712
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
19713
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
19714
UPDATE t1 SET f_int1 = @cur_value2
 
19715
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
19716
        
 
19717
# check single-3 success:       1
 
19718
SET @cur_value1= -1;
 
19719
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
19720
UPDATE t1 SET f_int1 = @cur_value1
 
19721
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
19722
        
 
19723
# check single-4 success:       1
 
19724
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
19725
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
19726
        
 
19727
# check single-5 success:       1
 
19728
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
19729
        
 
19730
# check single-6 success:       1
 
19731
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
19732
        
 
19733
# check single-7 success:       1
 
19734
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
19735
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
19736
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
19737
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
19738
f_charbig = '#NULL#';
 
19739
INSERT INTO t1
 
19740
SET f_int1 = NULL , f_int2 = -@max_row,
 
19741
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
19742
f_charbig = '#NULL#';
 
19743
# check null success:    1
 
19744
        
 
19745
# check null-1 success:         1
 
19746
UPDATE t1 SET f_int1 = -@max_row
 
19747
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19748
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19749
        
 
19750
# check null-2 success:         1
 
19751
UPDATE t1 SET f_int1 = NULL
 
19752
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19753
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19754
        
 
19755
# check null-3 success:         1
 
19756
DELETE FROM t1
 
19757
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19758
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19759
        
 
19760
# check null-4 success:         1
 
19761
DELETE FROM t1
 
19762
WHERE f_int1 = 0 AND f_int2 = 0
 
19763
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
19764
AND f_charbig = '#NULL#';
 
19765
SET AUTOCOMMIT= 0;
 
19766
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19767
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19768
FROM t0_template source_tab
 
19769
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19770
        
 
19771
# check transactions-1 success:         1
 
19772
COMMIT WORK;
 
19773
        
 
19774
# check transactions-2 success:         1
 
19775
ROLLBACK WORK;
 
19776
        
 
19777
# check transactions-3 success:         1
 
19778
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19779
COMMIT WORK;
 
19780
ROLLBACK WORK;
 
19781
        
 
19782
# check transactions-4 success:         1
 
19783
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19784
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19785
FROM t0_template source_tab
 
19786
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19787
        
 
19788
# check transactions-5 success:         1
 
19789
ROLLBACK WORK;
 
19790
        
 
19791
# check transactions-6 success:         1
 
19792
# INFO: Storage engine used for t1 seems to be transactional.
 
19793
COMMIT;
 
19794
        
 
19795
# check transactions-7 success:         1
 
19796
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19797
COMMIT WORK;
 
19798
SET @@session.sql_mode = 'traditional';
 
19799
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
19800
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19801
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
19802
'', '', 'was inserted' FROM t0_template
 
19803
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19804
ERROR 22012: Division by 0
 
19805
COMMIT;
 
19806
        
 
19807
# check transactions-8 success:         1
 
19808
# INFO: Storage engine used for t1 seems to be able to revert
 
19809
#       changes made by the failing statement.
 
19810
SET @@session.sql_mode = '';
 
19811
SET AUTOCOMMIT= 1;
 
19812
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19813
COMMIT WORK;
 
19814
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
19815
        
 
19816
# check special-1 success:      1
 
19817
UPDATE t1 SET f_charbig = '';
 
19818
        
 
19819
# check special-2 success:      1
 
19820
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
19821
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19822
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
19823
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19824
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19825
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19826
'just inserted' FROM t0_template
 
19827
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19828
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
19829
BEGIN
 
19830
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19831
f_charbig = 'updated by trigger'
 
19832
      WHERE f_int1 = new.f_int1;
 
19833
END|
 
19834
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19835
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19836
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19837
        
 
19838
# check trigger-1 success:      1
 
19839
DROP TRIGGER trg_1;
 
19840
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19841
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19842
f_charbig = 'just inserted'
 
19843
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19844
DELETE FROM t0_aux
 
19845
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19846
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19847
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19848
'just inserted' FROM t0_template
 
19849
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19850
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
19851
BEGIN
 
19852
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19853
f_charbig = 'updated by trigger'
 
19854
      WHERE f_int1 = new.f_int1;
 
19855
END|
 
19856
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19857
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19858
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19859
        
 
19860
# check trigger-2 success:      1
 
19861
DROP TRIGGER trg_1;
 
19862
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19863
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19864
f_charbig = 'just inserted'
 
19865
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19866
DELETE FROM t0_aux
 
19867
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19868
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19869
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19870
'just inserted' FROM t0_template
 
19871
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19872
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19873
BEGIN
 
19874
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19875
f_charbig = 'updated by trigger'
 
19876
      WHERE f_int1 = new.f_int1;
 
19877
END|
 
19878
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19879
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19880
        
 
19881
# check trigger-3 success:      1
 
19882
DROP TRIGGER trg_1;
 
19883
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19884
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19885
f_charbig = 'just inserted'
 
19886
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19887
DELETE FROM t0_aux
 
19888
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19889
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19890
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19891
'just inserted' FROM t0_template
 
19892
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19893
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19894
BEGIN
 
19895
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19896
f_charbig = 'updated by trigger'
 
19897
      WHERE f_int1 = - old.f_int1;
 
19898
END|
 
19899
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19900
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19901
        
 
19902
# check trigger-4 success:      1
 
19903
DROP TRIGGER trg_1;
 
19904
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19905
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19906
f_charbig = 'just inserted'
 
19907
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19908
DELETE FROM t0_aux
 
19909
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19910
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19911
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19912
'just inserted' FROM t0_template
 
19913
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19914
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19915
BEGIN
 
19916
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19917
f_charbig = 'updated by trigger'
 
19918
      WHERE f_int1 = new.f_int1;
 
19919
END|
 
19920
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19921
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19922
        
 
19923
# check trigger-5 success:      1
 
19924
DROP TRIGGER trg_1;
 
19925
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19926
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19927
f_charbig = 'just inserted'
 
19928
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19929
DELETE FROM t0_aux
 
19930
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19931
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19932
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19933
'just inserted' FROM t0_template
 
19934
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19935
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19936
BEGIN
 
19937
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19938
f_charbig = 'updated by trigger'
 
19939
      WHERE f_int1 = - old.f_int1;
 
19940
END|
 
19941
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19942
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19943
        
 
19944
# check trigger-6 success:      1
 
19945
DROP TRIGGER trg_1;
 
19946
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19947
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19948
f_charbig = 'just inserted'
 
19949
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19950
DELETE FROM t0_aux
 
19951
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19952
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19953
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19954
'just inserted' FROM t0_template
 
19955
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19956
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
19957
BEGIN
 
19958
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19959
f_charbig = 'updated by trigger'
 
19960
      WHERE f_int1 = - old.f_int1;
 
19961
END|
 
19962
DELETE FROM t0_aux
 
19963
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19964
        
 
19965
# check trigger-7 success:      1
 
19966
DROP TRIGGER trg_1;
 
19967
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19968
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19969
f_charbig = 'just inserted'
 
19970
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19971
DELETE FROM t0_aux
 
19972
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19973
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19974
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19975
'just inserted' FROM t0_template
 
19976
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19977
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
19978
BEGIN
 
19979
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19980
f_charbig = 'updated by trigger'
 
19981
      WHERE f_int1 = - old.f_int1;
 
19982
END|
 
19983
DELETE FROM t0_aux
 
19984
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19985
        
 
19986
# check trigger-8 success:      1
 
19987
DROP TRIGGER trg_1;
 
19988
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19989
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19990
f_charbig = 'just inserted'
 
19991
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19992
DELETE FROM t0_aux
 
19993
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19994
DELETE FROM t1
 
19995
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19996
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19997
BEGIN
 
19998
SET new.f_int1 = old.f_int1 + @max_row,
 
19999
new.f_int2 = old.f_int2 - @max_row,
 
20000
new.f_charbig = '####updated per update trigger####';
 
20001
END|
 
20002
UPDATE t1
 
20003
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20004
f_charbig = '####updated per update statement itself####';
 
20005
        
 
20006
# check trigger-9 success:      1
 
20007
DROP TRIGGER trg_2;
 
20008
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20009
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20010
f_charbig = CONCAT('===',f_char1,'===');
 
20011
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20012
BEGIN
 
20013
SET new.f_int1 = new.f_int1 + @max_row,
 
20014
new.f_int2 = new.f_int2 - @max_row,
 
20015
new.f_charbig = '####updated per update trigger####';
 
20016
END|
 
20017
UPDATE t1
 
20018
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20019
f_charbig = '####updated per update statement itself####';
 
20020
        
 
20021
# check trigger-10 success:     1
 
20022
DROP TRIGGER trg_2;
 
20023
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20024
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20025
f_charbig = CONCAT('===',f_char1,'===');
 
20026
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20027
BEGIN
 
20028
SET new.f_int1 = @my_max1 + @counter,
 
20029
new.f_int2 = @my_min2 - @counter,
 
20030
new.f_charbig = '####updated per insert trigger####';
 
20031
SET @counter = @counter + 1;
 
20032
END|
 
20033
SET @counter = 1;
 
20034
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20035
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20036
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20037
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20038
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20039
ORDER BY f_int1;
 
20040
DROP TRIGGER trg_3;
 
20041
        
 
20042
# check trigger-11 success:     1
 
20043
DELETE FROM t1
 
20044
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20045
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20046
AND f_charbig = '####updated per insert trigger####';
 
20047
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20048
BEGIN
 
20049
SET new.f_int1 = @my_max1 + @counter,
 
20050
new.f_int2 = @my_min2 - @counter,
 
20051
new.f_charbig = '####updated per insert trigger####';
 
20052
SET @counter = @counter + 1;
 
20053
END|
 
20054
SET @counter = 1;
 
20055
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20056
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
20057
SELECT CAST(f_int1 AS CHAR),
 
20058
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20059
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20060
ORDER BY f_int1;
 
20061
DROP TRIGGER trg_3;
 
20062
        
 
20063
# check trigger-12 success:     1
 
20064
DELETE FROM t1
 
20065
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20066
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20067
AND f_charbig = '####updated per insert trigger####';
 
20068
ANALYZE  TABLE t1;
 
20069
Table   Op      Msg_type        Msg_text
 
20070
test.t1 analyze status  OK
 
20071
CHECK    TABLE t1 EXTENDED;
 
20072
Table   Op      Msg_type        Msg_text
 
20073
test.t1 check   status  OK
 
20074
CHECKSUM TABLE t1 EXTENDED;
 
20075
Table   Checksum
 
20076
test.t1 <some_value>
 
20077
OPTIMIZE TABLE t1;
 
20078
Table   Op      Msg_type        Msg_text
 
20079
test.t1 optimize        status  OK
 
20080
# check layout success:    1
 
20081
REPAIR   TABLE t1 EXTENDED;
 
20082
Table   Op      Msg_type        Msg_text
 
20083
test.t1 repair  note    The storage engine for the table doesn't support repair
 
20084
# check layout success:    1
 
20085
TRUNCATE t1;
 
20086
        
 
20087
# check TRUNCATE success:       1
 
20088
# check layout success:    1
 
20089
# End usability test (inc/partition_check.inc)
 
20090
DROP TABLE t1;
 
20091
CREATE TABLE t1 (
 
20092
f_int1 INTEGER,
 
20093
f_int2 INTEGER,
 
20094
f_char1 CHAR(20),
 
20095
f_char2 CHAR(20),
 
20096
f_charbig VARCHAR(1000)
 
20097
 
 
20098
)
 
20099
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
20100
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20101
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20102
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
20103
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
20104
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20105
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20106
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20107
# Start usability test (inc/partition_check.inc)
 
20108
create_command
 
20109
SHOW CREATE TABLE t1;
 
20110
Table   Create Table
 
20111
t1      CREATE TABLE `t1` (
 
20112
  `f_int1` int(11) DEFAULT NULL,
 
20113
  `f_int2` int(11) DEFAULT NULL,
 
20114
  `f_char1` char(20) DEFAULT NULL,
 
20115
  `f_char2` char(20) DEFAULT NULL,
 
20116
  `f_charbig` varchar(1000) DEFAULT NULL
 
20117
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
 
20118
 
 
20119
# check prerequisites-1 success:    1
 
20120
# check COUNT(*) success:    1
 
20121
# check MIN/MAX(f_int1) success:    1
 
20122
# check MIN/MAX(f_int2) success:    1
 
20123
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20124
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20125
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
20126
WHERE f_int1 IN (2,3);
 
20127
# check prerequisites-3 success:    1
 
20128
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
20129
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
20130
# check read via f_int1 success: 1
 
20131
# check read via f_int2 success: 1
 
20132
        
 
20133
# check multiple-1 success:     1
 
20134
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
20135
        
 
20136
# check multiple-2 success:     1
 
20137
INSERT INTO t1 SELECT * FROM t0_template
 
20138
WHERE MOD(f_int1,3) = 0;
 
20139
        
 
20140
# check multiple-3 success:     1
 
20141
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
20142
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
20143
AND @max_row_div2 + @max_row_div4;
 
20144
        
 
20145
# check multiple-4 success:     1
 
20146
DELETE FROM t1
 
20147
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
20148
AND @max_row_div2 + @max_row_div4 + @max_row;
 
20149
        
 
20150
# check multiple-5 success:     1
 
20151
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
20152
INSERT INTO t1
 
20153
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20154
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20155
f_charbig = '#SINGLE#';
 
20156
        
 
20157
# check single-1 success:       1
 
20158
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
20159
INSERT INTO t1
 
20160
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20161
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20162
f_charbig = '#SINGLE#';
 
20163
        
 
20164
# check single-2 success:       1
 
20165
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
20166
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
20167
UPDATE t1 SET f_int1 = @cur_value2
 
20168
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
20169
        
 
20170
# check single-3 success:       1
 
20171
SET @cur_value1= -1;
 
20172
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
20173
UPDATE t1 SET f_int1 = @cur_value1
 
20174
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
20175
        
 
20176
# check single-4 success:       1
 
20177
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
20178
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
20179
        
 
20180
# check single-5 success:       1
 
20181
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
20182
        
 
20183
# check single-6 success:       1
 
20184
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
20185
        
 
20186
# check single-7 success:       1
 
20187
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
20188
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
20189
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
20190
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
20191
f_charbig = '#NULL#';
 
20192
INSERT INTO t1
 
20193
SET f_int1 = NULL , f_int2 = -@max_row,
 
20194
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
20195
f_charbig = '#NULL#';
 
20196
# check null success:    1
 
20197
        
 
20198
# check null-1 success:         1
 
20199
UPDATE t1 SET f_int1 = -@max_row
 
20200
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20201
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20202
        
 
20203
# check null-2 success:         1
 
20204
UPDATE t1 SET f_int1 = NULL
 
20205
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20206
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20207
        
 
20208
# check null-3 success:         1
 
20209
DELETE FROM t1
 
20210
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20211
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20212
        
 
20213
# check null-4 success:         1
 
20214
DELETE FROM t1
 
20215
WHERE f_int1 = 0 AND f_int2 = 0
 
20216
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
20217
AND f_charbig = '#NULL#';
 
20218
SET AUTOCOMMIT= 0;
 
20219
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20220
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20221
FROM t0_template source_tab
 
20222
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20223
        
 
20224
# check transactions-1 success:         1
 
20225
COMMIT WORK;
 
20226
        
 
20227
# check transactions-2 success:         1
 
20228
ROLLBACK WORK;
 
20229
        
 
20230
# check transactions-3 success:         1
 
20231
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20232
COMMIT WORK;
 
20233
ROLLBACK WORK;
 
20234
        
 
20235
# check transactions-4 success:         1
 
20236
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20237
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20238
FROM t0_template source_tab
 
20239
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20240
        
 
20241
# check transactions-5 success:         1
 
20242
ROLLBACK WORK;
 
20243
        
 
20244
# check transactions-6 success:         1
 
20245
# INFO: Storage engine used for t1 seems to be transactional.
 
20246
COMMIT;
 
20247
        
 
20248
# check transactions-7 success:         1
 
20249
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20250
COMMIT WORK;
 
20251
SET @@session.sql_mode = 'traditional';
 
20252
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
20253
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20254
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
20255
'', '', 'was inserted' FROM t0_template
 
20256
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20257
ERROR 22012: Division by 0
 
20258
COMMIT;
 
20259
        
 
20260
# check transactions-8 success:         1
 
20261
# INFO: Storage engine used for t1 seems to be able to revert
 
20262
#       changes made by the failing statement.
 
20263
SET @@session.sql_mode = '';
 
20264
SET AUTOCOMMIT= 1;
 
20265
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20266
COMMIT WORK;
 
20267
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
20268
        
 
20269
# check special-1 success:      1
 
20270
UPDATE t1 SET f_charbig = '';
 
20271
        
 
20272
# check special-2 success:      1
 
20273
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
20274
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20275
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
20276
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20277
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20278
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20279
'just inserted' FROM t0_template
 
20280
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20281
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
20282
BEGIN
 
20283
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20284
f_charbig = 'updated by trigger'
 
20285
      WHERE f_int1 = new.f_int1;
 
20286
END|
 
20287
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20288
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20289
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20290
        
 
20291
# check trigger-1 success:      1
 
20292
DROP TRIGGER trg_1;
 
20293
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20294
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20295
f_charbig = 'just inserted'
 
20296
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20297
DELETE FROM t0_aux
 
20298
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20299
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20300
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20301
'just inserted' FROM t0_template
 
20302
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20303
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
20304
BEGIN
 
20305
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20306
f_charbig = 'updated by trigger'
 
20307
      WHERE f_int1 = new.f_int1;
 
20308
END|
 
20309
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20310
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20311
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20312
        
 
20313
# check trigger-2 success:      1
 
20314
DROP TRIGGER trg_1;
 
20315
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20316
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20317
f_charbig = 'just inserted'
 
20318
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20319
DELETE FROM t0_aux
 
20320
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20321
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20322
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20323
'just inserted' FROM t0_template
 
20324
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20325
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20326
BEGIN
 
20327
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20328
f_charbig = 'updated by trigger'
 
20329
      WHERE f_int1 = new.f_int1;
 
20330
END|
 
20331
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20332
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20333
        
 
20334
# check trigger-3 success:      1
 
20335
DROP TRIGGER trg_1;
 
20336
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20337
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20338
f_charbig = 'just inserted'
 
20339
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20340
DELETE FROM t0_aux
 
20341
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20342
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20343
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20344
'just inserted' FROM t0_template
 
20345
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20346
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20347
BEGIN
 
20348
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20349
f_charbig = 'updated by trigger'
 
20350
      WHERE f_int1 = - old.f_int1;
 
20351
END|
 
20352
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20353
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20354
        
 
20355
# check trigger-4 success:      1
 
20356
DROP TRIGGER trg_1;
 
20357
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20358
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20359
f_charbig = 'just inserted'
 
20360
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20361
DELETE FROM t0_aux
 
20362
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20363
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20364
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20365
'just inserted' FROM t0_template
 
20366
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20367
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20368
BEGIN
 
20369
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20370
f_charbig = 'updated by trigger'
 
20371
      WHERE f_int1 = new.f_int1;
 
20372
END|
 
20373
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20374
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20375
        
 
20376
# check trigger-5 success:      1
 
20377
DROP TRIGGER trg_1;
 
20378
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20379
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20380
f_charbig = 'just inserted'
 
20381
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20382
DELETE FROM t0_aux
 
20383
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20384
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20385
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20386
'just inserted' FROM t0_template
 
20387
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20388
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20389
BEGIN
 
20390
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20391
f_charbig = 'updated by trigger'
 
20392
      WHERE f_int1 = - old.f_int1;
 
20393
END|
 
20394
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20395
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20396
        
 
20397
# check trigger-6 success:      1
 
20398
DROP TRIGGER trg_1;
 
20399
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20400
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20401
f_charbig = 'just inserted'
 
20402
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20403
DELETE FROM t0_aux
 
20404
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20405
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20406
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20407
'just inserted' FROM t0_template
 
20408
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20409
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
20410
BEGIN
 
20411
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20412
f_charbig = 'updated by trigger'
 
20413
      WHERE f_int1 = - old.f_int1;
 
20414
END|
 
20415
DELETE FROM t0_aux
 
20416
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20417
        
 
20418
# check trigger-7 success:      1
 
20419
DROP TRIGGER trg_1;
 
20420
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20421
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20422
f_charbig = 'just inserted'
 
20423
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20424
DELETE FROM t0_aux
 
20425
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20426
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20427
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20428
'just inserted' FROM t0_template
 
20429
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20430
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
20431
BEGIN
 
20432
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20433
f_charbig = 'updated by trigger'
 
20434
      WHERE f_int1 = - old.f_int1;
 
20435
END|
 
20436
DELETE FROM t0_aux
 
20437
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20438
        
 
20439
# check trigger-8 success:      1
 
20440
DROP TRIGGER trg_1;
 
20441
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20442
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20443
f_charbig = 'just inserted'
 
20444
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20445
DELETE FROM t0_aux
 
20446
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20447
DELETE FROM t1
 
20448
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20449
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20450
BEGIN
 
20451
SET new.f_int1 = old.f_int1 + @max_row,
 
20452
new.f_int2 = old.f_int2 - @max_row,
 
20453
new.f_charbig = '####updated per update trigger####';
 
20454
END|
 
20455
UPDATE t1
 
20456
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20457
f_charbig = '####updated per update statement itself####';
 
20458
        
 
20459
# check trigger-9 success:      1
 
20460
DROP TRIGGER trg_2;
 
20461
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20462
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20463
f_charbig = CONCAT('===',f_char1,'===');
 
20464
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20465
BEGIN
 
20466
SET new.f_int1 = new.f_int1 + @max_row,
 
20467
new.f_int2 = new.f_int2 - @max_row,
 
20468
new.f_charbig = '####updated per update trigger####';
 
20469
END|
 
20470
UPDATE t1
 
20471
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20472
f_charbig = '####updated per update statement itself####';
 
20473
        
 
20474
# check trigger-10 success:     1
 
20475
DROP TRIGGER trg_2;
 
20476
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20477
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20478
f_charbig = CONCAT('===',f_char1,'===');
 
20479
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20480
BEGIN
 
20481
SET new.f_int1 = @my_max1 + @counter,
 
20482
new.f_int2 = @my_min2 - @counter,
 
20483
new.f_charbig = '####updated per insert trigger####';
 
20484
SET @counter = @counter + 1;
 
20485
END|
 
20486
SET @counter = 1;
 
20487
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20488
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20489
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20490
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20491
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20492
ORDER BY f_int1;
 
20493
DROP TRIGGER trg_3;
 
20494
        
 
20495
# check trigger-11 success:     1
 
20496
DELETE FROM t1
 
20497
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20498
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20499
AND f_charbig = '####updated per insert trigger####';
 
20500
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20501
BEGIN
 
20502
SET new.f_int1 = @my_max1 + @counter,
 
20503
new.f_int2 = @my_min2 - @counter,
 
20504
new.f_charbig = '####updated per insert trigger####';
 
20505
SET @counter = @counter + 1;
 
20506
END|
 
20507
SET @counter = 1;
 
20508
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20509
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
20510
SELECT CAST(f_int1 AS CHAR),
 
20511
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20512
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20513
ORDER BY f_int1;
 
20514
DROP TRIGGER trg_3;
 
20515
        
 
20516
# check trigger-12 success:     1
 
20517
DELETE FROM t1
 
20518
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20519
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20520
AND f_charbig = '####updated per insert trigger####';
 
20521
ANALYZE  TABLE t1;
 
20522
Table   Op      Msg_type        Msg_text
 
20523
test.t1 analyze status  OK
 
20524
CHECK    TABLE t1 EXTENDED;
 
20525
Table   Op      Msg_type        Msg_text
 
20526
test.t1 check   status  OK
 
20527
CHECKSUM TABLE t1 EXTENDED;
 
20528
Table   Checksum
 
20529
test.t1 <some_value>
 
20530
OPTIMIZE TABLE t1;
 
20531
Table   Op      Msg_type        Msg_text
 
20532
test.t1 optimize        status  OK
 
20533
# check layout success:    1
 
20534
REPAIR   TABLE t1 EXTENDED;
 
20535
Table   Op      Msg_type        Msg_text
 
20536
test.t1 repair  note    The storage engine for the table doesn't support repair
 
20537
# check layout success:    1
 
20538
TRUNCATE t1;
 
20539
        
 
20540
# check TRUNCATE success:       1
 
20541
# check layout success:    1
 
20542
# End usability test (inc/partition_check.inc)
 
20543
DROP TABLE t1;
 
20544
CREATE TABLE t1 (
 
20545
f_int1 INTEGER,
 
20546
f_int2 INTEGER,
 
20547
f_char1 CHAR(20),
 
20548
f_char2 CHAR(20),
 
20549
f_charbig VARCHAR(1000)
 
20550
 
 
20551
)
 
20552
PARTITION BY LIST(MOD(f_int1,4))
 
20553
(PARTITION part_3 VALUES IN (-3),
 
20554
PARTITION part_2 VALUES IN (-2),
 
20555
PARTITION part_1 VALUES IN (-1),
 
20556
PARTITION part_N VALUES IN (NULL),
 
20557
PARTITION part0 VALUES IN (0),
 
20558
PARTITION part1 VALUES IN (1),
 
20559
PARTITION part2 VALUES IN (2),
 
20560
PARTITION part3 VALUES IN (3));
 
20561
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20562
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20563
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
20564
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
20565
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20566
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20567
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20568
# Start usability test (inc/partition_check.inc)
 
20569
create_command
 
20570
SHOW CREATE TABLE t1;
 
20571
Table   Create Table
 
20572
t1      CREATE TABLE `t1` (
 
20573
  `f_int1` int(11) DEFAULT NULL,
 
20574
  `f_int2` int(11) DEFAULT NULL,
 
20575
  `f_char1` char(20) DEFAULT NULL,
 
20576
  `f_char2` char(20) DEFAULT NULL,
 
20577
  `f_charbig` varchar(1000) DEFAULT NULL
 
20578
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
20579
 
 
20580
# check prerequisites-1 success:    1
 
20581
# check COUNT(*) success:    1
 
20582
# check MIN/MAX(f_int1) success:    1
 
20583
# check MIN/MAX(f_int2) success:    1
 
20584
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20585
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20586
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
20587
WHERE f_int1 IN (2,3);
 
20588
# check prerequisites-3 success:    1
 
20589
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
20590
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
20591
# check read via f_int1 success: 1
 
20592
# check read via f_int2 success: 1
 
20593
        
 
20594
# check multiple-1 success:     1
 
20595
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
20596
        
 
20597
# check multiple-2 success:     1
 
20598
INSERT INTO t1 SELECT * FROM t0_template
 
20599
WHERE MOD(f_int1,3) = 0;
 
20600
        
 
20601
# check multiple-3 success:     1
 
20602
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
20603
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
20604
AND @max_row_div2 + @max_row_div4;
 
20605
        
 
20606
# check multiple-4 success:     1
 
20607
DELETE FROM t1
 
20608
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
20609
AND @max_row_div2 + @max_row_div4 + @max_row;
 
20610
        
 
20611
# check multiple-5 success:     1
 
20612
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
20613
INSERT INTO t1
 
20614
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20615
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20616
f_charbig = '#SINGLE#';
 
20617
        
 
20618
# check single-1 success:       1
 
20619
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
20620
INSERT INTO t1
 
20621
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20622
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20623
f_charbig = '#SINGLE#';
 
20624
        
 
20625
# check single-2 success:       1
 
20626
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
20627
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
20628
UPDATE t1 SET f_int1 = @cur_value2
 
20629
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
20630
        
 
20631
# check single-3 success:       1
 
20632
SET @cur_value1= -1;
 
20633
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
20634
UPDATE t1 SET f_int1 = @cur_value1
 
20635
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
20636
        
 
20637
# check single-4 success:       1
 
20638
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
20639
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
20640
        
 
20641
# check single-5 success:       1
 
20642
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
20643
        
 
20644
# check single-6 success:       1
 
20645
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
20646
        
 
20647
# check single-7 success:       1
 
20648
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
20649
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
20650
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
20651
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
20652
f_charbig = '#NULL#';
 
20653
INSERT INTO t1
 
20654
SET f_int1 = NULL , f_int2 = -@max_row,
 
20655
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
20656
f_charbig = '#NULL#';
 
20657
# check null success:    1
 
20658
        
 
20659
# check null-1 success:         1
 
20660
UPDATE t1 SET f_int1 = -@max_row
 
20661
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20662
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20663
        
 
20664
# check null-2 success:         1
 
20665
UPDATE t1 SET f_int1 = NULL
 
20666
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20667
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20668
        
 
20669
# check null-3 success:         1
 
20670
DELETE FROM t1
 
20671
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20672
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20673
        
 
20674
# check null-4 success:         1
 
20675
DELETE FROM t1
 
20676
WHERE f_int1 = 0 AND f_int2 = 0
 
20677
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
20678
AND f_charbig = '#NULL#';
 
20679
SET AUTOCOMMIT= 0;
 
20680
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20681
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20682
FROM t0_template source_tab
 
20683
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20684
        
 
20685
# check transactions-1 success:         1
 
20686
COMMIT WORK;
 
20687
        
 
20688
# check transactions-2 success:         1
 
20689
ROLLBACK WORK;
 
20690
        
 
20691
# check transactions-3 success:         1
 
20692
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20693
COMMIT WORK;
 
20694
ROLLBACK WORK;
 
20695
        
 
20696
# check transactions-4 success:         1
 
20697
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20698
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20699
FROM t0_template source_tab
 
20700
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20701
        
 
20702
# check transactions-5 success:         1
 
20703
ROLLBACK WORK;
 
20704
        
 
20705
# check transactions-6 success:         1
 
20706
# INFO: Storage engine used for t1 seems to be transactional.
 
20707
COMMIT;
 
20708
        
 
20709
# check transactions-7 success:         1
 
20710
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20711
COMMIT WORK;
 
20712
SET @@session.sql_mode = 'traditional';
 
20713
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
20714
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20715
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
20716
'', '', 'was inserted' FROM t0_template
 
20717
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20718
ERROR 22012: Division by 0
 
20719
COMMIT;
 
20720
        
 
20721
# check transactions-8 success:         1
 
20722
# INFO: Storage engine used for t1 seems to be able to revert
 
20723
#       changes made by the failing statement.
 
20724
SET @@session.sql_mode = '';
 
20725
SET AUTOCOMMIT= 1;
 
20726
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20727
COMMIT WORK;
 
20728
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
20729
        
 
20730
# check special-1 success:      1
 
20731
UPDATE t1 SET f_charbig = '';
 
20732
        
 
20733
# check special-2 success:      1
 
20734
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
20735
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20736
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
20737
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20738
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20739
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20740
'just inserted' FROM t0_template
 
20741
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20742
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
20743
BEGIN
 
20744
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20745
f_charbig = 'updated by trigger'
 
20746
      WHERE f_int1 = new.f_int1;
 
20747
END|
 
20748
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20749
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20750
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20751
        
 
20752
# check trigger-1 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 AFTER INSERT 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 = new.f_int1;
 
20769
END|
 
20770
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20771
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20772
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20773
        
 
20774
# check trigger-2 success:      1
 
20775
DROP TRIGGER trg_1;
 
20776
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20777
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20778
f_charbig = 'just inserted'
 
20779
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20780
DELETE FROM t0_aux
 
20781
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20782
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20783
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20784
'just inserted' FROM t0_template
 
20785
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20786
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20787
BEGIN
 
20788
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20789
f_charbig = 'updated by trigger'
 
20790
      WHERE f_int1 = new.f_int1;
 
20791
END|
 
20792
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20793
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20794
        
 
20795
# check trigger-3 success:      1
 
20796
DROP TRIGGER trg_1;
 
20797
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20798
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20799
f_charbig = 'just inserted'
 
20800
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20801
DELETE FROM t0_aux
 
20802
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20803
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20804
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20805
'just inserted' FROM t0_template
 
20806
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20807
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20808
BEGIN
 
20809
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20810
f_charbig = 'updated by trigger'
 
20811
      WHERE f_int1 = - old.f_int1;
 
20812
END|
 
20813
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20814
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20815
        
 
20816
# check trigger-4 success:      1
 
20817
DROP TRIGGER trg_1;
 
20818
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20819
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20820
f_charbig = 'just inserted'
 
20821
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20822
DELETE FROM t0_aux
 
20823
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20824
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20825
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20826
'just inserted' FROM t0_template
 
20827
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20828
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20829
BEGIN
 
20830
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20831
f_charbig = 'updated by trigger'
 
20832
      WHERE f_int1 = new.f_int1;
 
20833
END|
 
20834
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20835
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20836
        
 
20837
# check trigger-5 success:      1
 
20838
DROP TRIGGER trg_1;
 
20839
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20840
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20841
f_charbig = 'just inserted'
 
20842
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20843
DELETE FROM t0_aux
 
20844
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20845
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20846
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20847
'just inserted' FROM t0_template
 
20848
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20849
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20850
BEGIN
 
20851
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20852
f_charbig = 'updated by trigger'
 
20853
      WHERE f_int1 = - old.f_int1;
 
20854
END|
 
20855
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20856
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20857
        
 
20858
# check trigger-6 success:      1
 
20859
DROP TRIGGER trg_1;
 
20860
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20861
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20862
f_charbig = 'just inserted'
 
20863
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20864
DELETE FROM t0_aux
 
20865
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20866
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20867
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20868
'just inserted' FROM t0_template
 
20869
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20870
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
20871
BEGIN
 
20872
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20873
f_charbig = 'updated by trigger'
 
20874
      WHERE f_int1 = - old.f_int1;
 
20875
END|
 
20876
DELETE FROM t0_aux
 
20877
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20878
        
 
20879
# check trigger-7 success:      1
 
20880
DROP TRIGGER trg_1;
 
20881
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20882
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20883
f_charbig = 'just inserted'
 
20884
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20885
DELETE FROM t0_aux
 
20886
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20887
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20888
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20889
'just inserted' FROM t0_template
 
20890
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20891
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
20892
BEGIN
 
20893
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20894
f_charbig = 'updated by trigger'
 
20895
      WHERE f_int1 = - old.f_int1;
 
20896
END|
 
20897
DELETE FROM t0_aux
 
20898
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20899
        
 
20900
# check trigger-8 success:      1
 
20901
DROP TRIGGER trg_1;
 
20902
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20903
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20904
f_charbig = 'just inserted'
 
20905
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20906
DELETE FROM t0_aux
 
20907
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20908
DELETE FROM t1
 
20909
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20910
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20911
BEGIN
 
20912
SET new.f_int1 = old.f_int1 + @max_row,
 
20913
new.f_int2 = old.f_int2 - @max_row,
 
20914
new.f_charbig = '####updated per update trigger####';
 
20915
END|
 
20916
UPDATE t1
 
20917
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20918
f_charbig = '####updated per update statement itself####';
 
20919
        
 
20920
# check trigger-9 success:      1
 
20921
DROP TRIGGER trg_2;
 
20922
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20923
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20924
f_charbig = CONCAT('===',f_char1,'===');
 
20925
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20926
BEGIN
 
20927
SET new.f_int1 = new.f_int1 + @max_row,
 
20928
new.f_int2 = new.f_int2 - @max_row,
 
20929
new.f_charbig = '####updated per update trigger####';
 
20930
END|
 
20931
UPDATE t1
 
20932
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20933
f_charbig = '####updated per update statement itself####';
 
20934
        
 
20935
# check trigger-10 success:     1
 
20936
DROP TRIGGER trg_2;
 
20937
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20938
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20939
f_charbig = CONCAT('===',f_char1,'===');
 
20940
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20941
BEGIN
 
20942
SET new.f_int1 = @my_max1 + @counter,
 
20943
new.f_int2 = @my_min2 - @counter,
 
20944
new.f_charbig = '####updated per insert trigger####';
 
20945
SET @counter = @counter + 1;
 
20946
END|
 
20947
SET @counter = 1;
 
20948
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20949
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20950
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20951
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20952
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20953
ORDER BY f_int1;
 
20954
DROP TRIGGER trg_3;
 
20955
        
 
20956
# check trigger-11 success:     1
 
20957
DELETE FROM t1
 
20958
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20959
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20960
AND f_charbig = '####updated per insert trigger####';
 
20961
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20962
BEGIN
 
20963
SET new.f_int1 = @my_max1 + @counter,
 
20964
new.f_int2 = @my_min2 - @counter,
 
20965
new.f_charbig = '####updated per insert trigger####';
 
20966
SET @counter = @counter + 1;
 
20967
END|
 
20968
SET @counter = 1;
 
20969
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20970
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
20971
SELECT CAST(f_int1 AS CHAR),
 
20972
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20973
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20974
ORDER BY f_int1;
 
20975
DROP TRIGGER trg_3;
 
20976
        
 
20977
# check trigger-12 success:     1
 
20978
DELETE FROM t1
 
20979
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20980
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20981
AND f_charbig = '####updated per insert trigger####';
 
20982
ANALYZE  TABLE t1;
 
20983
Table   Op      Msg_type        Msg_text
 
20984
test.t1 analyze status  OK
 
20985
CHECK    TABLE t1 EXTENDED;
 
20986
Table   Op      Msg_type        Msg_text
 
20987
test.t1 check   status  OK
 
20988
CHECKSUM TABLE t1 EXTENDED;
 
20989
Table   Checksum
 
20990
test.t1 <some_value>
 
20991
OPTIMIZE TABLE t1;
 
20992
Table   Op      Msg_type        Msg_text
 
20993
test.t1 optimize        status  OK
 
20994
# check layout success:    1
 
20995
REPAIR   TABLE t1 EXTENDED;
 
20996
Table   Op      Msg_type        Msg_text
 
20997
test.t1 repair  note    The storage engine for the table doesn't support repair
 
20998
# check layout success:    1
 
20999
TRUNCATE t1;
 
21000
        
 
21001
# check TRUNCATE success:       1
 
21002
# check layout success:    1
 
21003
# End usability test (inc/partition_check.inc)
 
21004
DROP TABLE t1;
 
21005
CREATE TABLE t1 (
 
21006
f_int1 INTEGER,
 
21007
f_int2 INTEGER,
 
21008
f_char1 CHAR(20),
 
21009
f_char2 CHAR(20),
 
21010
f_charbig VARCHAR(1000)
 
21011
 
 
21012
)
 
21013
PARTITION BY RANGE(f_int1)
 
21014
(PARTITION parta VALUES LESS THAN (0),
 
21015
PARTITION part_1 VALUES LESS THAN (5),
 
21016
PARTITION part_2 VALUES LESS THAN (10),
 
21017
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
21018
PARTITION part_4 VALUES LESS THAN (20),
 
21019
PARTITION part_5 VALUES LESS THAN (2147483646));
 
21020
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21021
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21022
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
21023
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
21024
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21025
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21026
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21027
# Start usability test (inc/partition_check.inc)
 
21028
create_command
 
21029
SHOW CREATE TABLE t1;
 
21030
Table   Create Table
 
21031
t1      CREATE TABLE `t1` (
 
21032
  `f_int1` int(11) DEFAULT NULL,
 
21033
  `f_int2` int(11) DEFAULT NULL,
 
21034
  `f_char1` char(20) DEFAULT NULL,
 
21035
  `f_char2` char(20) DEFAULT NULL,
 
21036
  `f_charbig` varchar(1000) DEFAULT NULL
 
21037
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
21038
 
 
21039
# check prerequisites-1 success:    1
 
21040
# check COUNT(*) success:    1
 
21041
# check MIN/MAX(f_int1) success:    1
 
21042
# check MIN/MAX(f_int2) success:    1
 
21043
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21044
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21045
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
21046
WHERE f_int1 IN (2,3);
 
21047
# check prerequisites-3 success:    1
 
21048
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21049
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
21050
# check read via f_int1 success: 1
 
21051
# check read via f_int2 success: 1
 
21052
        
 
21053
# check multiple-1 success:     1
 
21054
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
21055
        
 
21056
# check multiple-2 success:     1
 
21057
INSERT INTO t1 SELECT * FROM t0_template
 
21058
WHERE MOD(f_int1,3) = 0;
 
21059
        
 
21060
# check multiple-3 success:     1
 
21061
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
21062
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
21063
AND @max_row_div2 + @max_row_div4;
 
21064
        
 
21065
# check multiple-4 success:     1
 
21066
DELETE FROM t1
 
21067
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
21068
AND @max_row_div2 + @max_row_div4 + @max_row;
 
21069
        
 
21070
# check multiple-5 success:     1
 
21071
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
21072
INSERT INTO t1
 
21073
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21074
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21075
f_charbig = '#SINGLE#';
 
21076
        
 
21077
# check single-1 success:       1
 
21078
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
21079
INSERT INTO t1
 
21080
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21081
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21082
f_charbig = '#SINGLE#';
 
21083
        
 
21084
# check single-2 success:       1
 
21085
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
21086
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
21087
UPDATE t1 SET f_int1 = @cur_value2
 
21088
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
21089
        
 
21090
# check single-3 success:       1
 
21091
SET @cur_value1= -1;
 
21092
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
21093
UPDATE t1 SET f_int1 = @cur_value1
 
21094
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
21095
        
 
21096
# check single-4 success:       1
 
21097
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
21098
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
21099
        
 
21100
# check single-5 success:       1
 
21101
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
21102
        
 
21103
# check single-6 success:       1
 
21104
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
21105
ERROR HY000: Table has no partition for value 2147483647
 
21106
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
21107
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
21108
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
21109
f_charbig = '#NULL#';
 
21110
INSERT INTO t1
 
21111
SET f_int1 = NULL , f_int2 = -@max_row,
 
21112
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
21113
f_charbig = '#NULL#';
 
21114
# check null success:    1
 
21115
        
 
21116
# check null-1 success:         1
 
21117
UPDATE t1 SET f_int1 = -@max_row
 
21118
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21119
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21120
        
 
21121
# check null-2 success:         1
 
21122
UPDATE t1 SET f_int1 = NULL
 
21123
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21124
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21125
        
 
21126
# check null-3 success:         1
 
21127
DELETE FROM t1
 
21128
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21129
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21130
        
 
21131
# check null-4 success:         1
 
21132
DELETE FROM t1
 
21133
WHERE f_int1 = 0 AND f_int2 = 0
 
21134
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
21135
AND f_charbig = '#NULL#';
 
21136
SET AUTOCOMMIT= 0;
 
21137
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21138
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21139
FROM t0_template source_tab
 
21140
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21141
        
 
21142
# check transactions-1 success:         1
 
21143
COMMIT WORK;
 
21144
        
 
21145
# check transactions-2 success:         1
 
21146
ROLLBACK WORK;
 
21147
        
 
21148
# check transactions-3 success:         1
 
21149
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21150
COMMIT WORK;
 
21151
ROLLBACK WORK;
 
21152
        
 
21153
# check transactions-4 success:         1
 
21154
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21155
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21156
FROM t0_template source_tab
 
21157
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21158
        
 
21159
# check transactions-5 success:         1
 
21160
ROLLBACK WORK;
 
21161
        
 
21162
# check transactions-6 success:         1
 
21163
# INFO: Storage engine used for t1 seems to be transactional.
 
21164
COMMIT;
 
21165
        
 
21166
# check transactions-7 success:         1
 
21167
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21168
COMMIT WORK;
 
21169
SET @@session.sql_mode = 'traditional';
 
21170
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
21171
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21172
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
21173
'', '', 'was inserted' FROM t0_template
 
21174
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21175
ERROR 22012: Division by 0
 
21176
COMMIT;
 
21177
        
 
21178
# check transactions-8 success:         1
 
21179
# INFO: Storage engine used for t1 seems to be able to revert
 
21180
#       changes made by the failing statement.
 
21181
SET @@session.sql_mode = '';
 
21182
SET AUTOCOMMIT= 1;
 
21183
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21184
COMMIT WORK;
 
21185
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
21186
        
 
21187
# check special-1 success:      1
 
21188
UPDATE t1 SET f_charbig = '';
 
21189
        
 
21190
# check special-2 success:      1
 
21191
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
21192
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21193
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
21194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21195
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21196
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21197
'just inserted' FROM t0_template
 
21198
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21199
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
21200
BEGIN
 
21201
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21202
f_charbig = 'updated by trigger'
 
21203
      WHERE f_int1 = new.f_int1;
 
21204
END|
 
21205
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21206
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21207
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21208
        
 
21209
# check trigger-1 success:      1
 
21210
DROP TRIGGER trg_1;
 
21211
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21212
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21213
f_charbig = 'just inserted'
 
21214
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21215
DELETE FROM t0_aux
 
21216
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21217
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21218
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21219
'just inserted' FROM t0_template
 
21220
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21221
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
21222
BEGIN
 
21223
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21224
f_charbig = 'updated by trigger'
 
21225
      WHERE f_int1 = new.f_int1;
 
21226
END|
 
21227
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21228
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21229
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21230
        
 
21231
# check trigger-2 success:      1
 
21232
DROP TRIGGER trg_1;
 
21233
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21234
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21235
f_charbig = 'just inserted'
 
21236
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21237
DELETE FROM t0_aux
 
21238
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21239
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21240
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21241
'just inserted' FROM t0_template
 
21242
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21243
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21244
BEGIN
 
21245
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21246
f_charbig = 'updated by trigger'
 
21247
      WHERE f_int1 = new.f_int1;
 
21248
END|
 
21249
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21250
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21251
        
 
21252
# check trigger-3 success:      1
 
21253
DROP TRIGGER trg_1;
 
21254
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21255
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21256
f_charbig = 'just inserted'
 
21257
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21258
DELETE FROM t0_aux
 
21259
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21260
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21261
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21262
'just inserted' FROM t0_template
 
21263
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21264
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21265
BEGIN
 
21266
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21267
f_charbig = 'updated by trigger'
 
21268
      WHERE f_int1 = - old.f_int1;
 
21269
END|
 
21270
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21271
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21272
        
 
21273
# check trigger-4 success:      1
 
21274
DROP TRIGGER trg_1;
 
21275
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21276
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21277
f_charbig = 'just inserted'
 
21278
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21279
DELETE FROM t0_aux
 
21280
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21281
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21282
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21283
'just inserted' FROM t0_template
 
21284
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21285
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21286
BEGIN
 
21287
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21288
f_charbig = 'updated by trigger'
 
21289
      WHERE f_int1 = new.f_int1;
 
21290
END|
 
21291
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21292
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21293
        
 
21294
# check trigger-5 success:      1
 
21295
DROP TRIGGER trg_1;
 
21296
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21297
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21298
f_charbig = 'just inserted'
 
21299
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21300
DELETE FROM t0_aux
 
21301
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21302
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21303
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21304
'just inserted' FROM t0_template
 
21305
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21306
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21307
BEGIN
 
21308
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21309
f_charbig = 'updated by trigger'
 
21310
      WHERE f_int1 = - old.f_int1;
 
21311
END|
 
21312
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21313
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21314
        
 
21315
# check trigger-6 success:      1
 
21316
DROP TRIGGER trg_1;
 
21317
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21318
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21319
f_charbig = 'just inserted'
 
21320
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21321
DELETE FROM t0_aux
 
21322
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21323
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21324
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21325
'just inserted' FROM t0_template
 
21326
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21327
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
21328
BEGIN
 
21329
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21330
f_charbig = 'updated by trigger'
 
21331
      WHERE f_int1 = - old.f_int1;
 
21332
END|
 
21333
DELETE FROM t0_aux
 
21334
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21335
        
 
21336
# check trigger-7 success:      1
 
21337
DROP TRIGGER trg_1;
 
21338
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21339
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21340
f_charbig = 'just inserted'
 
21341
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21342
DELETE FROM t0_aux
 
21343
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21344
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21345
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21346
'just inserted' FROM t0_template
 
21347
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21348
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
21349
BEGIN
 
21350
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21351
f_charbig = 'updated by trigger'
 
21352
      WHERE f_int1 = - old.f_int1;
 
21353
END|
 
21354
DELETE FROM t0_aux
 
21355
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21356
        
 
21357
# check trigger-8 success:      1
 
21358
DROP TRIGGER trg_1;
 
21359
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21360
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21361
f_charbig = 'just inserted'
 
21362
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21363
DELETE FROM t0_aux
 
21364
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21365
DELETE FROM t1
 
21366
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21367
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21368
BEGIN
 
21369
SET new.f_int1 = old.f_int1 + @max_row,
 
21370
new.f_int2 = old.f_int2 - @max_row,
 
21371
new.f_charbig = '####updated per update trigger####';
 
21372
END|
 
21373
UPDATE t1
 
21374
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21375
f_charbig = '####updated per update statement itself####';
 
21376
        
 
21377
# check trigger-9 success:      1
 
21378
DROP TRIGGER trg_2;
 
21379
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21380
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21381
f_charbig = CONCAT('===',f_char1,'===');
 
21382
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21383
BEGIN
 
21384
SET new.f_int1 = new.f_int1 + @max_row,
 
21385
new.f_int2 = new.f_int2 - @max_row,
 
21386
new.f_charbig = '####updated per update trigger####';
 
21387
END|
 
21388
UPDATE t1
 
21389
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21390
f_charbig = '####updated per update statement itself####';
 
21391
        
 
21392
# check trigger-10 success:     1
 
21393
DROP TRIGGER trg_2;
 
21394
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21395
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21396
f_charbig = CONCAT('===',f_char1,'===');
 
21397
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21398
BEGIN
 
21399
SET new.f_int1 = @my_max1 + @counter,
 
21400
new.f_int2 = @my_min2 - @counter,
 
21401
new.f_charbig = '####updated per insert trigger####';
 
21402
SET @counter = @counter + 1;
 
21403
END|
 
21404
SET @counter = 1;
 
21405
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21406
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21407
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21408
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21409
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21410
ORDER BY f_int1;
 
21411
DROP TRIGGER trg_3;
 
21412
        
 
21413
# check trigger-11 success:     1
 
21414
DELETE FROM t1
 
21415
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21416
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21417
AND f_charbig = '####updated per insert trigger####';
 
21418
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21419
BEGIN
 
21420
SET new.f_int1 = @my_max1 + @counter,
 
21421
new.f_int2 = @my_min2 - @counter,
 
21422
new.f_charbig = '####updated per insert trigger####';
 
21423
SET @counter = @counter + 1;
 
21424
END|
 
21425
SET @counter = 1;
 
21426
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21427
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
21428
SELECT CAST(f_int1 AS CHAR),
 
21429
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21430
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21431
ORDER BY f_int1;
 
21432
DROP TRIGGER trg_3;
 
21433
        
 
21434
# check trigger-12 success:     1
 
21435
DELETE FROM t1
 
21436
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21437
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21438
AND f_charbig = '####updated per insert trigger####';
 
21439
ANALYZE  TABLE t1;
 
21440
Table   Op      Msg_type        Msg_text
 
21441
test.t1 analyze status  OK
 
21442
CHECK    TABLE t1 EXTENDED;
 
21443
Table   Op      Msg_type        Msg_text
 
21444
test.t1 check   status  OK
 
21445
CHECKSUM TABLE t1 EXTENDED;
 
21446
Table   Checksum
 
21447
test.t1 <some_value>
 
21448
OPTIMIZE TABLE t1;
 
21449
Table   Op      Msg_type        Msg_text
 
21450
test.t1 optimize        status  OK
 
21451
# check layout success:    1
 
21452
REPAIR   TABLE t1 EXTENDED;
 
21453
Table   Op      Msg_type        Msg_text
 
21454
test.t1 repair  note    The storage engine for the table doesn't support repair
 
21455
# check layout success:    1
 
21456
TRUNCATE t1;
 
21457
        
 
21458
# check TRUNCATE success:       1
 
21459
# check layout success:    1
 
21460
# End usability test (inc/partition_check.inc)
 
21461
DROP TABLE t1;
 
21462
CREATE TABLE t1 (
 
21463
f_int1 INTEGER,
 
21464
f_int2 INTEGER,
 
21465
f_char1 CHAR(20),
 
21466
f_char2 CHAR(20),
 
21467
f_charbig VARCHAR(1000)
 
21468
 
 
21469
)
 
21470
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
21471
(PARTITION part_1 VALUES LESS THAN (0),
 
21472
PARTITION part_2 VALUES LESS THAN (5),
 
21473
PARTITION part_3 VALUES LESS THAN (10),
 
21474
PARTITION part_4 VALUES LESS THAN (2147483646));
 
21475
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21476
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21477
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
21478
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
21479
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21480
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21481
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21482
# Start usability test (inc/partition_check.inc)
 
21483
create_command
 
21484
SHOW CREATE TABLE t1;
 
21485
Table   Create Table
 
21486
t1      CREATE TABLE `t1` (
 
21487
  `f_int1` int(11) DEFAULT NULL,
 
21488
  `f_int2` int(11) DEFAULT NULL,
 
21489
  `f_char1` char(20) DEFAULT NULL,
 
21490
  `f_char2` char(20) DEFAULT NULL,
 
21491
  `f_charbig` varchar(1000) DEFAULT NULL
 
21492
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
21493
 
 
21494
# check prerequisites-1 success:    1
 
21495
# check COUNT(*) success:    1
 
21496
# check MIN/MAX(f_int1) success:    1
 
21497
# check MIN/MAX(f_int2) success:    1
 
21498
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21499
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21500
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
21501
WHERE f_int1 IN (2,3);
 
21502
# check prerequisites-3 success:    1
 
21503
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21504
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
21505
# check read via f_int1 success: 1
 
21506
# check read via f_int2 success: 1
 
21507
        
 
21508
# check multiple-1 success:     1
 
21509
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
21510
        
 
21511
# check multiple-2 success:     1
 
21512
INSERT INTO t1 SELECT * FROM t0_template
 
21513
WHERE MOD(f_int1,3) = 0;
 
21514
        
 
21515
# check multiple-3 success:     1
 
21516
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
21517
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
21518
AND @max_row_div2 + @max_row_div4;
 
21519
        
 
21520
# check multiple-4 success:     1
 
21521
DELETE FROM t1
 
21522
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
21523
AND @max_row_div2 + @max_row_div4 + @max_row;
 
21524
        
 
21525
# check multiple-5 success:     1
 
21526
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
21527
INSERT INTO t1
 
21528
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21529
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21530
f_charbig = '#SINGLE#';
 
21531
        
 
21532
# check single-1 success:       1
 
21533
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
21534
INSERT INTO t1
 
21535
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21536
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21537
f_charbig = '#SINGLE#';
 
21538
        
 
21539
# check single-2 success:       1
 
21540
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
21541
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
21542
UPDATE t1 SET f_int1 = @cur_value2
 
21543
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
21544
        
 
21545
# check single-3 success:       1
 
21546
SET @cur_value1= -1;
 
21547
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
21548
UPDATE t1 SET f_int1 = @cur_value1
 
21549
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
21550
        
 
21551
# check single-4 success:       1
 
21552
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
21553
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
21554
        
 
21555
# check single-5 success:       1
 
21556
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
21557
        
 
21558
# check single-6 success:       1
 
21559
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
21560
        
 
21561
# check single-7 success:       1
 
21562
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
21563
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
21564
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
21565
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
21566
f_charbig = '#NULL#';
 
21567
INSERT INTO t1
 
21568
SET f_int1 = NULL , f_int2 = -@max_row,
 
21569
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
21570
f_charbig = '#NULL#';
 
21571
# check null success:    1
 
21572
        
 
21573
# check null-1 success:         1
 
21574
UPDATE t1 SET f_int1 = -@max_row
 
21575
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21576
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21577
        
 
21578
# check null-2 success:         1
 
21579
UPDATE t1 SET f_int1 = NULL
 
21580
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21581
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21582
        
 
21583
# check null-3 success:         1
 
21584
DELETE FROM t1
 
21585
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21586
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21587
        
 
21588
# check null-4 success:         1
 
21589
DELETE FROM t1
 
21590
WHERE f_int1 = 0 AND f_int2 = 0
 
21591
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
21592
AND f_charbig = '#NULL#';
 
21593
SET AUTOCOMMIT= 0;
 
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-1 success:         1
 
21600
COMMIT WORK;
 
21601
        
 
21602
# check transactions-2 success:         1
 
21603
ROLLBACK WORK;
 
21604
        
 
21605
# check transactions-3 success:         1
 
21606
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21607
COMMIT WORK;
 
21608
ROLLBACK WORK;
 
21609
        
 
21610
# check transactions-4 success:         1
 
21611
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21612
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21613
FROM t0_template source_tab
 
21614
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21615
        
 
21616
# check transactions-5 success:         1
 
21617
ROLLBACK WORK;
 
21618
        
 
21619
# check transactions-6 success:         1
 
21620
# INFO: Storage engine used for t1 seems to be transactional.
 
21621
COMMIT;
 
21622
        
 
21623
# check transactions-7 success:         1
 
21624
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21625
COMMIT WORK;
 
21626
SET @@session.sql_mode = 'traditional';
 
21627
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
21628
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21629
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
21630
'', '', 'was inserted' FROM t0_template
 
21631
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21632
ERROR 22012: Division by 0
 
21633
COMMIT;
 
21634
        
 
21635
# check transactions-8 success:         1
 
21636
# INFO: Storage engine used for t1 seems to be able to revert
 
21637
#       changes made by the failing statement.
 
21638
SET @@session.sql_mode = '';
 
21639
SET AUTOCOMMIT= 1;
 
21640
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21641
COMMIT WORK;
 
21642
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
21643
        
 
21644
# check special-1 success:      1
 
21645
UPDATE t1 SET f_charbig = '';
 
21646
        
 
21647
# check special-2 success:      1
 
21648
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
21649
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21650
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
21651
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21652
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21653
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21654
'just inserted' FROM t0_template
 
21655
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21656
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
21657
BEGIN
 
21658
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21659
f_charbig = 'updated by trigger'
 
21660
      WHERE f_int1 = new.f_int1;
 
21661
END|
 
21662
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21663
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21664
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21665
        
 
21666
# check trigger-1 success:      1
 
21667
DROP TRIGGER trg_1;
 
21668
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21669
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21670
f_charbig = 'just inserted'
 
21671
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21672
DELETE FROM t0_aux
 
21673
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21674
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21675
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21676
'just inserted' FROM t0_template
 
21677
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21678
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
21679
BEGIN
 
21680
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21681
f_charbig = 'updated by trigger'
 
21682
      WHERE f_int1 = new.f_int1;
 
21683
END|
 
21684
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21685
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21686
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21687
        
 
21688
# check trigger-2 success:      1
 
21689
DROP TRIGGER trg_1;
 
21690
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21691
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21692
f_charbig = 'just inserted'
 
21693
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21694
DELETE FROM t0_aux
 
21695
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21696
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21697
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21698
'just inserted' FROM t0_template
 
21699
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21700
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21701
BEGIN
 
21702
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21703
f_charbig = 'updated by trigger'
 
21704
      WHERE f_int1 = new.f_int1;
 
21705
END|
 
21706
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21707
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21708
        
 
21709
# check trigger-3 success:      1
 
21710
DROP TRIGGER trg_1;
 
21711
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21712
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21713
f_charbig = 'just inserted'
 
21714
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21715
DELETE FROM t0_aux
 
21716
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21717
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21718
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21719
'just inserted' FROM t0_template
 
21720
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21721
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21722
BEGIN
 
21723
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21724
f_charbig = 'updated by trigger'
 
21725
      WHERE f_int1 = - old.f_int1;
 
21726
END|
 
21727
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21728
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21729
        
 
21730
# check trigger-4 success:      1
 
21731
DROP TRIGGER trg_1;
 
21732
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21733
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21734
f_charbig = 'just inserted'
 
21735
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21736
DELETE FROM t0_aux
 
21737
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21738
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21739
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21740
'just inserted' FROM t0_template
 
21741
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21742
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21743
BEGIN
 
21744
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21745
f_charbig = 'updated by trigger'
 
21746
      WHERE f_int1 = new.f_int1;
 
21747
END|
 
21748
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21749
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21750
        
 
21751
# check trigger-5 success:      1
 
21752
DROP TRIGGER trg_1;
 
21753
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21754
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21755
f_charbig = 'just inserted'
 
21756
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21757
DELETE FROM t0_aux
 
21758
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21759
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21760
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21761
'just inserted' FROM t0_template
 
21762
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21763
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21764
BEGIN
 
21765
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21766
f_charbig = 'updated by trigger'
 
21767
      WHERE f_int1 = - old.f_int1;
 
21768
END|
 
21769
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21770
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21771
        
 
21772
# check trigger-6 success:      1
 
21773
DROP TRIGGER trg_1;
 
21774
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21775
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21776
f_charbig = 'just inserted'
 
21777
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21778
DELETE FROM t0_aux
 
21779
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21780
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21781
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21782
'just inserted' FROM t0_template
 
21783
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21784
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
21785
BEGIN
 
21786
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21787
f_charbig = 'updated by trigger'
 
21788
      WHERE f_int1 = - old.f_int1;
 
21789
END|
 
21790
DELETE FROM t0_aux
 
21791
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21792
        
 
21793
# check trigger-7 success:      1
 
21794
DROP TRIGGER trg_1;
 
21795
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21796
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21797
f_charbig = 'just inserted'
 
21798
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21799
DELETE FROM t0_aux
 
21800
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21801
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21802
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21803
'just inserted' FROM t0_template
 
21804
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21805
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
21806
BEGIN
 
21807
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21808
f_charbig = 'updated by trigger'
 
21809
      WHERE f_int1 = - old.f_int1;
 
21810
END|
 
21811
DELETE FROM t0_aux
 
21812
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21813
        
 
21814
# check trigger-8 success:      1
 
21815
DROP TRIGGER trg_1;
 
21816
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21817
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21818
f_charbig = 'just inserted'
 
21819
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21820
DELETE FROM t0_aux
 
21821
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21822
DELETE FROM t1
 
21823
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21824
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21825
BEGIN
 
21826
SET new.f_int1 = old.f_int1 + @max_row,
 
21827
new.f_int2 = old.f_int2 - @max_row,
 
21828
new.f_charbig = '####updated per update trigger####';
 
21829
END|
 
21830
UPDATE t1
 
21831
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21832
f_charbig = '####updated per update statement itself####';
 
21833
        
 
21834
# check trigger-9 success:      1
 
21835
DROP TRIGGER trg_2;
 
21836
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21837
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21838
f_charbig = CONCAT('===',f_char1,'===');
 
21839
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21840
BEGIN
 
21841
SET new.f_int1 = new.f_int1 + @max_row,
 
21842
new.f_int2 = new.f_int2 - @max_row,
 
21843
new.f_charbig = '####updated per update trigger####';
 
21844
END|
 
21845
UPDATE t1
 
21846
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21847
f_charbig = '####updated per update statement itself####';
 
21848
        
 
21849
# check trigger-10 success:     1
 
21850
DROP TRIGGER trg_2;
 
21851
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21852
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21853
f_charbig = CONCAT('===',f_char1,'===');
 
21854
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21855
BEGIN
 
21856
SET new.f_int1 = @my_max1 + @counter,
 
21857
new.f_int2 = @my_min2 - @counter,
 
21858
new.f_charbig = '####updated per insert trigger####';
 
21859
SET @counter = @counter + 1;
 
21860
END|
 
21861
SET @counter = 1;
 
21862
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21863
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21864
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21865
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21866
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21867
ORDER BY f_int1;
 
21868
DROP TRIGGER trg_3;
 
21869
        
 
21870
# check trigger-11 success:     1
 
21871
DELETE FROM t1
 
21872
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21873
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21874
AND f_charbig = '####updated per insert trigger####';
 
21875
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21876
BEGIN
 
21877
SET new.f_int1 = @my_max1 + @counter,
 
21878
new.f_int2 = @my_min2 - @counter,
 
21879
new.f_charbig = '####updated per insert trigger####';
 
21880
SET @counter = @counter + 1;
 
21881
END|
 
21882
SET @counter = 1;
 
21883
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21884
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
21885
SELECT CAST(f_int1 AS CHAR),
 
21886
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21887
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21888
ORDER BY f_int1;
 
21889
DROP TRIGGER trg_3;
 
21890
        
 
21891
# check trigger-12 success:     1
 
21892
DELETE FROM t1
 
21893
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21894
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21895
AND f_charbig = '####updated per insert trigger####';
 
21896
ANALYZE  TABLE t1;
 
21897
Table   Op      Msg_type        Msg_text
 
21898
test.t1 analyze status  OK
 
21899
CHECK    TABLE t1 EXTENDED;
 
21900
Table   Op      Msg_type        Msg_text
 
21901
test.t1 check   status  OK
 
21902
CHECKSUM TABLE t1 EXTENDED;
 
21903
Table   Checksum
 
21904
test.t1 <some_value>
 
21905
OPTIMIZE TABLE t1;
 
21906
Table   Op      Msg_type        Msg_text
 
21907
test.t1 optimize        status  OK
 
21908
# check layout success:    1
 
21909
REPAIR   TABLE t1 EXTENDED;
 
21910
Table   Op      Msg_type        Msg_text
 
21911
test.t1 repair  note    The storage engine for the table doesn't support repair
 
21912
# check layout success:    1
 
21913
TRUNCATE t1;
 
21914
        
 
21915
# check TRUNCATE success:       1
 
21916
# check layout success:    1
 
21917
# End usability test (inc/partition_check.inc)
 
21918
DROP TABLE t1;
 
21919
CREATE TABLE t1 (
 
21920
f_int1 INTEGER,
 
21921
f_int2 INTEGER,
 
21922
f_char1 CHAR(20),
 
21923
f_char2 CHAR(20),
 
21924
f_charbig VARCHAR(1000)
 
21925
 
 
21926
)
 
21927
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
21928
(PARTITION part_1 VALUES LESS THAN (0)
 
21929
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
21930
PARTITION part_2 VALUES LESS THAN (5)
 
21931
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
21932
PARTITION part_3 VALUES LESS THAN (10)
 
21933
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
21934
PARTITION part_4 VALUES LESS THAN (2147483646)
 
21935
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
21936
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21937
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21938
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
21939
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
21940
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21941
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21942
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21943
# Start usability test (inc/partition_check.inc)
 
21944
create_command
 
21945
SHOW CREATE TABLE t1;
 
21946
Table   Create Table
 
21947
t1      CREATE TABLE `t1` (
 
21948
  `f_int1` int(11) DEFAULT NULL,
 
21949
  `f_int2` int(11) DEFAULT NULL,
 
21950
  `f_char1` char(20) DEFAULT NULL,
 
21951
  `f_char2` char(20) DEFAULT NULL,
 
21952
  `f_charbig` varchar(1000) DEFAULT NULL
 
21953
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
21954
 
 
21955
# check prerequisites-1 success:    1
 
21956
# check COUNT(*) success:    1
 
21957
# check MIN/MAX(f_int1) success:    1
 
21958
# check MIN/MAX(f_int2) success:    1
 
21959
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21960
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21961
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
21962
WHERE f_int1 IN (2,3);
 
21963
# check prerequisites-3 success:    1
 
21964
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21965
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
21966
# check read via f_int1 success: 1
 
21967
# check read via f_int2 success: 1
 
21968
        
 
21969
# check multiple-1 success:     1
 
21970
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
21971
        
 
21972
# check multiple-2 success:     1
 
21973
INSERT INTO t1 SELECT * FROM t0_template
 
21974
WHERE MOD(f_int1,3) = 0;
 
21975
        
 
21976
# check multiple-3 success:     1
 
21977
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
21978
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
21979
AND @max_row_div2 + @max_row_div4;
 
21980
        
 
21981
# check multiple-4 success:     1
 
21982
DELETE FROM t1
 
21983
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
21984
AND @max_row_div2 + @max_row_div4 + @max_row;
 
21985
        
 
21986
# check multiple-5 success:     1
 
21987
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
21988
INSERT INTO t1
 
21989
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21990
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21991
f_charbig = '#SINGLE#';
 
21992
        
 
21993
# check single-1 success:       1
 
21994
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
21995
INSERT INTO t1
 
21996
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21997
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21998
f_charbig = '#SINGLE#';
 
21999
        
 
22000
# check single-2 success:       1
 
22001
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
22002
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
22003
UPDATE t1 SET f_int1 = @cur_value2
 
22004
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
22005
        
 
22006
# check single-3 success:       1
 
22007
SET @cur_value1= -1;
 
22008
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
22009
UPDATE t1 SET f_int1 = @cur_value1
 
22010
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
22011
        
 
22012
# check single-4 success:       1
 
22013
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
22014
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
22015
        
 
22016
# check single-5 success:       1
 
22017
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
22018
        
 
22019
# check single-6 success:       1
 
22020
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
22021
ERROR HY000: Table has no partition for value 2147483647
 
22022
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
22023
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
22024
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
22025
f_charbig = '#NULL#';
 
22026
INSERT INTO t1
 
22027
SET f_int1 = NULL , f_int2 = -@max_row,
 
22028
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
22029
f_charbig = '#NULL#';
 
22030
# check null success:    1
 
22031
        
 
22032
# check null-1 success:         1
 
22033
UPDATE t1 SET f_int1 = -@max_row
 
22034
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22035
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22036
        
 
22037
# check null-2 success:         1
 
22038
UPDATE t1 SET f_int1 = NULL
 
22039
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22040
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22041
        
 
22042
# check null-3 success:         1
 
22043
DELETE FROM t1
 
22044
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22045
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22046
        
 
22047
# check null-4 success:         1
 
22048
DELETE FROM t1
 
22049
WHERE f_int1 = 0 AND f_int2 = 0
 
22050
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
22051
AND f_charbig = '#NULL#';
 
22052
SET AUTOCOMMIT= 0;
 
22053
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22054
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22055
FROM t0_template source_tab
 
22056
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22057
        
 
22058
# check transactions-1 success:         1
 
22059
COMMIT WORK;
 
22060
        
 
22061
# check transactions-2 success:         1
 
22062
ROLLBACK WORK;
 
22063
        
 
22064
# check transactions-3 success:         1
 
22065
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22066
COMMIT WORK;
 
22067
ROLLBACK WORK;
 
22068
        
 
22069
# check transactions-4 success:         1
 
22070
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22071
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22072
FROM t0_template source_tab
 
22073
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22074
        
 
22075
# check transactions-5 success:         1
 
22076
ROLLBACK WORK;
 
22077
        
 
22078
# check transactions-6 success:         1
 
22079
# INFO: Storage engine used for t1 seems to be transactional.
 
22080
COMMIT;
 
22081
        
 
22082
# check transactions-7 success:         1
 
22083
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22084
COMMIT WORK;
 
22085
SET @@session.sql_mode = 'traditional';
 
22086
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
22087
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22088
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
22089
'', '', 'was inserted' FROM t0_template
 
22090
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22091
ERROR 22012: Division by 0
 
22092
COMMIT;
 
22093
        
 
22094
# check transactions-8 success:         1
 
22095
# INFO: Storage engine used for t1 seems to be able to revert
 
22096
#       changes made by the failing statement.
 
22097
SET @@session.sql_mode = '';
 
22098
SET AUTOCOMMIT= 1;
 
22099
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22100
COMMIT WORK;
 
22101
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
22102
        
 
22103
# check special-1 success:      1
 
22104
UPDATE t1 SET f_charbig = '';
 
22105
        
 
22106
# check special-2 success:      1
 
22107
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
22108
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22109
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
22110
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22111
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22112
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22113
'just inserted' FROM t0_template
 
22114
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22115
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
22116
BEGIN
 
22117
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22118
f_charbig = 'updated by trigger'
 
22119
      WHERE f_int1 = new.f_int1;
 
22120
END|
 
22121
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22122
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22123
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22124
        
 
22125
# check trigger-1 success:      1
 
22126
DROP TRIGGER trg_1;
 
22127
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22128
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22129
f_charbig = 'just inserted'
 
22130
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22131
DELETE FROM t0_aux
 
22132
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22133
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22134
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22135
'just inserted' FROM t0_template
 
22136
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22137
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
22138
BEGIN
 
22139
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22140
f_charbig = 'updated by trigger'
 
22141
      WHERE f_int1 = new.f_int1;
 
22142
END|
 
22143
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22144
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22145
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22146
        
 
22147
# check trigger-2 success:      1
 
22148
DROP TRIGGER trg_1;
 
22149
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22150
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22151
f_charbig = 'just inserted'
 
22152
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22153
DELETE FROM t0_aux
 
22154
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22155
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22156
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22157
'just inserted' FROM t0_template
 
22158
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22159
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22160
BEGIN
 
22161
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22162
f_charbig = 'updated by trigger'
 
22163
      WHERE f_int1 = new.f_int1;
 
22164
END|
 
22165
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22166
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22167
        
 
22168
# check trigger-3 success:      1
 
22169
DROP TRIGGER trg_1;
 
22170
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22171
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22172
f_charbig = 'just inserted'
 
22173
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22174
DELETE FROM t0_aux
 
22175
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22176
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22177
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22178
'just inserted' FROM t0_template
 
22179
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22180
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22181
BEGIN
 
22182
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22183
f_charbig = 'updated by trigger'
 
22184
      WHERE f_int1 = - old.f_int1;
 
22185
END|
 
22186
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22187
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22188
        
 
22189
# check trigger-4 success:      1
 
22190
DROP TRIGGER trg_1;
 
22191
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22192
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22193
f_charbig = 'just inserted'
 
22194
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22195
DELETE FROM t0_aux
 
22196
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22197
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22198
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22199
'just inserted' FROM t0_template
 
22200
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22201
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22202
BEGIN
 
22203
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22204
f_charbig = 'updated by trigger'
 
22205
      WHERE f_int1 = new.f_int1;
 
22206
END|
 
22207
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22208
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22209
        
 
22210
# check trigger-5 success:      1
 
22211
DROP TRIGGER trg_1;
 
22212
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22213
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22214
f_charbig = 'just inserted'
 
22215
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22216
DELETE FROM t0_aux
 
22217
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22218
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22219
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22220
'just inserted' FROM t0_template
 
22221
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22222
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22223
BEGIN
 
22224
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22225
f_charbig = 'updated by trigger'
 
22226
      WHERE f_int1 = - old.f_int1;
 
22227
END|
 
22228
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22229
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22230
        
 
22231
# check trigger-6 success:      1
 
22232
DROP TRIGGER trg_1;
 
22233
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22234
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22235
f_charbig = 'just inserted'
 
22236
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22237
DELETE FROM t0_aux
 
22238
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22239
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22240
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22241
'just inserted' FROM t0_template
 
22242
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22243
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
22244
BEGIN
 
22245
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22246
f_charbig = 'updated by trigger'
 
22247
      WHERE f_int1 = - old.f_int1;
 
22248
END|
 
22249
DELETE FROM t0_aux
 
22250
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22251
        
 
22252
# check trigger-7 success:      1
 
22253
DROP TRIGGER trg_1;
 
22254
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22255
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22256
f_charbig = 'just inserted'
 
22257
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22258
DELETE FROM t0_aux
 
22259
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22260
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22261
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22262
'just inserted' FROM t0_template
 
22263
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22264
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
22265
BEGIN
 
22266
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22267
f_charbig = 'updated by trigger'
 
22268
      WHERE f_int1 = - old.f_int1;
 
22269
END|
 
22270
DELETE FROM t0_aux
 
22271
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22272
        
 
22273
# check trigger-8 success:      1
 
22274
DROP TRIGGER trg_1;
 
22275
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22276
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22277
f_charbig = 'just inserted'
 
22278
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22279
DELETE FROM t0_aux
 
22280
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22281
DELETE FROM t1
 
22282
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22283
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22284
BEGIN
 
22285
SET new.f_int1 = old.f_int1 + @max_row,
 
22286
new.f_int2 = old.f_int2 - @max_row,
 
22287
new.f_charbig = '####updated per update trigger####';
 
22288
END|
 
22289
UPDATE t1
 
22290
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22291
f_charbig = '####updated per update statement itself####';
 
22292
        
 
22293
# check trigger-9 success:      1
 
22294
DROP TRIGGER trg_2;
 
22295
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22296
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22297
f_charbig = CONCAT('===',f_char1,'===');
 
22298
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22299
BEGIN
 
22300
SET new.f_int1 = new.f_int1 + @max_row,
 
22301
new.f_int2 = new.f_int2 - @max_row,
 
22302
new.f_charbig = '####updated per update trigger####';
 
22303
END|
 
22304
UPDATE t1
 
22305
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22306
f_charbig = '####updated per update statement itself####';
 
22307
        
 
22308
# check trigger-10 success:     1
 
22309
DROP TRIGGER trg_2;
 
22310
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22311
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22312
f_charbig = CONCAT('===',f_char1,'===');
 
22313
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22314
BEGIN
 
22315
SET new.f_int1 = @my_max1 + @counter,
 
22316
new.f_int2 = @my_min2 - @counter,
 
22317
new.f_charbig = '####updated per insert trigger####';
 
22318
SET @counter = @counter + 1;
 
22319
END|
 
22320
SET @counter = 1;
 
22321
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22322
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22323
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22324
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22325
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22326
ORDER BY f_int1;
 
22327
DROP TRIGGER trg_3;
 
22328
        
 
22329
# check trigger-11 success:     1
 
22330
DELETE FROM t1
 
22331
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22332
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22333
AND f_charbig = '####updated per insert trigger####';
 
22334
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22335
BEGIN
 
22336
SET new.f_int1 = @my_max1 + @counter,
 
22337
new.f_int2 = @my_min2 - @counter,
 
22338
new.f_charbig = '####updated per insert trigger####';
 
22339
SET @counter = @counter + 1;
 
22340
END|
 
22341
SET @counter = 1;
 
22342
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22343
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
22344
SELECT CAST(f_int1 AS CHAR),
 
22345
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22346
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22347
ORDER BY f_int1;
 
22348
DROP TRIGGER trg_3;
 
22349
        
 
22350
# check trigger-12 success:     1
 
22351
DELETE FROM t1
 
22352
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22353
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22354
AND f_charbig = '####updated per insert trigger####';
 
22355
ANALYZE  TABLE t1;
 
22356
Table   Op      Msg_type        Msg_text
 
22357
test.t1 analyze status  OK
 
22358
CHECK    TABLE t1 EXTENDED;
 
22359
Table   Op      Msg_type        Msg_text
 
22360
test.t1 check   status  OK
 
22361
CHECKSUM TABLE t1 EXTENDED;
 
22362
Table   Checksum
 
22363
test.t1 <some_value>
 
22364
OPTIMIZE TABLE t1;
 
22365
Table   Op      Msg_type        Msg_text
 
22366
test.t1 optimize        status  OK
 
22367
# check layout success:    1
 
22368
REPAIR   TABLE t1 EXTENDED;
 
22369
Table   Op      Msg_type        Msg_text
 
22370
test.t1 repair  note    The storage engine for the table doesn't support repair
 
22371
# check layout success:    1
 
22372
TRUNCATE t1;
 
22373
        
 
22374
# check TRUNCATE success:       1
 
22375
# check layout success:    1
 
22376
# End usability test (inc/partition_check.inc)
 
22377
DROP TABLE t1;
 
22378
CREATE TABLE t1 (
 
22379
f_int1 INTEGER,
 
22380
f_int2 INTEGER,
 
22381
f_char1 CHAR(20),
 
22382
f_char2 CHAR(20),
 
22383
f_charbig VARCHAR(1000)
 
22384
 
 
22385
)
 
22386
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
22387
(PARTITION part_1 VALUES IN (0)
 
22388
(SUBPARTITION sp11, SUBPARTITION sp12),
 
22389
PARTITION part_2 VALUES IN (1)
 
22390
(SUBPARTITION sp21, SUBPARTITION sp22),
 
22391
PARTITION part_3 VALUES IN (2)
 
22392
(SUBPARTITION sp31, SUBPARTITION sp32),
 
22393
PARTITION part_4 VALUES IN (NULL)
 
22394
(SUBPARTITION sp41, SUBPARTITION sp42));
 
22395
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22396
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22397
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
22398
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
22399
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22400
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22401
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22402
# Start usability test (inc/partition_check.inc)
 
22403
create_command
 
22404
SHOW CREATE TABLE t1;
 
22405
Table   Create Table
 
22406
t1      CREATE TABLE `t1` (
 
22407
  `f_int1` int(11) DEFAULT NULL,
 
22408
  `f_int2` int(11) DEFAULT NULL,
 
22409
  `f_char1` char(20) DEFAULT NULL,
 
22410
  `f_char2` char(20) DEFAULT NULL,
 
22411
  `f_charbig` varchar(1000) DEFAULT NULL
 
22412
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
22413
 
 
22414
# check prerequisites-1 success:    1
 
22415
# check COUNT(*) success:    1
 
22416
# check MIN/MAX(f_int1) success:    1
 
22417
# check MIN/MAX(f_int2) success:    1
 
22418
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22419
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22420
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
22421
WHERE f_int1 IN (2,3);
 
22422
# check prerequisites-3 success:    1
 
22423
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
22424
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
22425
# check read via f_int1 success: 1
 
22426
# check read via f_int2 success: 1
 
22427
        
 
22428
# check multiple-1 success:     1
 
22429
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
22430
        
 
22431
# check multiple-2 success:     1
 
22432
INSERT INTO t1 SELECT * FROM t0_template
 
22433
WHERE MOD(f_int1,3) = 0;
 
22434
        
 
22435
# check multiple-3 success:     1
 
22436
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
22437
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
22438
AND @max_row_div2 + @max_row_div4;
 
22439
        
 
22440
# check multiple-4 success:     1
 
22441
DELETE FROM t1
 
22442
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
22443
AND @max_row_div2 + @max_row_div4 + @max_row;
 
22444
        
 
22445
# check multiple-5 success:     1
 
22446
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
22447
INSERT INTO t1
 
22448
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22449
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22450
f_charbig = '#SINGLE#';
 
22451
        
 
22452
# check single-1 success:       1
 
22453
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
22454
INSERT INTO t1
 
22455
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22456
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22457
f_charbig = '#SINGLE#';
 
22458
        
 
22459
# check single-2 success:       1
 
22460
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
22461
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
22462
UPDATE t1 SET f_int1 = @cur_value2
 
22463
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
22464
        
 
22465
# check single-3 success:       1
 
22466
SET @cur_value1= -1;
 
22467
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
22468
UPDATE t1 SET f_int1 = @cur_value1
 
22469
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
22470
        
 
22471
# check single-4 success:       1
 
22472
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
22473
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
22474
        
 
22475
# check single-5 success:       1
 
22476
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
22477
        
 
22478
# check single-6 success:       1
 
22479
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
22480
        
 
22481
# check single-7 success:       1
 
22482
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
22483
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
22484
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
22485
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
22486
f_charbig = '#NULL#';
 
22487
INSERT INTO t1
 
22488
SET f_int1 = NULL , f_int2 = -@max_row,
 
22489
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
22490
f_charbig = '#NULL#';
 
22491
# check null success:    1
 
22492
        
 
22493
# check null-1 success:         1
 
22494
UPDATE t1 SET f_int1 = -@max_row
 
22495
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22496
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22497
        
 
22498
# check null-2 success:         1
 
22499
UPDATE t1 SET f_int1 = NULL
 
22500
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22501
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22502
        
 
22503
# check null-3 success:         1
 
22504
DELETE FROM t1
 
22505
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22506
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22507
        
 
22508
# check null-4 success:         1
 
22509
DELETE FROM t1
 
22510
WHERE f_int1 = 0 AND f_int2 = 0
 
22511
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
22512
AND f_charbig = '#NULL#';
 
22513
SET AUTOCOMMIT= 0;
 
22514
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22515
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22516
FROM t0_template source_tab
 
22517
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22518
        
 
22519
# check transactions-1 success:         1
 
22520
COMMIT WORK;
 
22521
        
 
22522
# check transactions-2 success:         1
 
22523
ROLLBACK WORK;
 
22524
        
 
22525
# check transactions-3 success:         1
 
22526
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22527
COMMIT WORK;
 
22528
ROLLBACK WORK;
 
22529
        
 
22530
# check transactions-4 success:         1
 
22531
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22532
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22533
FROM t0_template source_tab
 
22534
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22535
        
 
22536
# check transactions-5 success:         1
 
22537
ROLLBACK WORK;
 
22538
        
 
22539
# check transactions-6 success:         1
 
22540
# INFO: Storage engine used for t1 seems to be transactional.
 
22541
COMMIT;
 
22542
        
 
22543
# check transactions-7 success:         1
 
22544
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22545
COMMIT WORK;
 
22546
SET @@session.sql_mode = 'traditional';
 
22547
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
22548
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22549
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
22550
'', '', 'was inserted' FROM t0_template
 
22551
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22552
ERROR 22012: Division by 0
 
22553
COMMIT;
 
22554
        
 
22555
# check transactions-8 success:         1
 
22556
# INFO: Storage engine used for t1 seems to be able to revert
 
22557
#       changes made by the failing statement.
 
22558
SET @@session.sql_mode = '';
 
22559
SET AUTOCOMMIT= 1;
 
22560
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22561
COMMIT WORK;
 
22562
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
22563
        
 
22564
# check special-1 success:      1
 
22565
UPDATE t1 SET f_charbig = '';
 
22566
        
 
22567
# check special-2 success:      1
 
22568
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
22569
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22570
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
22571
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22572
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22573
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22574
'just inserted' FROM t0_template
 
22575
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22576
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
22577
BEGIN
 
22578
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22579
f_charbig = 'updated by trigger'
 
22580
      WHERE f_int1 = new.f_int1;
 
22581
END|
 
22582
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22583
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22584
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22585
        
 
22586
# check trigger-1 success:      1
 
22587
DROP TRIGGER trg_1;
 
22588
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22589
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22590
f_charbig = 'just inserted'
 
22591
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22592
DELETE FROM t0_aux
 
22593
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22594
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22595
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22596
'just inserted' FROM t0_template
 
22597
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22598
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
22599
BEGIN
 
22600
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22601
f_charbig = 'updated by trigger'
 
22602
      WHERE f_int1 = new.f_int1;
 
22603
END|
 
22604
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22605
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22606
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22607
        
 
22608
# check trigger-2 success:      1
 
22609
DROP TRIGGER trg_1;
 
22610
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22611
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22612
f_charbig = 'just inserted'
 
22613
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22614
DELETE FROM t0_aux
 
22615
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22616
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22617
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22618
'just inserted' FROM t0_template
 
22619
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22620
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22621
BEGIN
 
22622
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22623
f_charbig = 'updated by trigger'
 
22624
      WHERE f_int1 = new.f_int1;
 
22625
END|
 
22626
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22627
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22628
        
 
22629
# check trigger-3 success:      1
 
22630
DROP TRIGGER trg_1;
 
22631
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22632
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22633
f_charbig = 'just inserted'
 
22634
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22635
DELETE FROM t0_aux
 
22636
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22637
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22638
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22639
'just inserted' FROM t0_template
 
22640
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22641
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22642
BEGIN
 
22643
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22644
f_charbig = 'updated by trigger'
 
22645
      WHERE f_int1 = - old.f_int1;
 
22646
END|
 
22647
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22648
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22649
        
 
22650
# check trigger-4 success:      1
 
22651
DROP TRIGGER trg_1;
 
22652
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22653
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22654
f_charbig = 'just inserted'
 
22655
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22656
DELETE FROM t0_aux
 
22657
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22658
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22659
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22660
'just inserted' FROM t0_template
 
22661
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22662
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22663
BEGIN
 
22664
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22665
f_charbig = 'updated by trigger'
 
22666
      WHERE f_int1 = new.f_int1;
 
22667
END|
 
22668
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22669
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22670
        
 
22671
# check trigger-5 success:      1
 
22672
DROP TRIGGER trg_1;
 
22673
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22674
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22675
f_charbig = 'just inserted'
 
22676
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22677
DELETE FROM t0_aux
 
22678
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22679
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22680
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22681
'just inserted' FROM t0_template
 
22682
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22683
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22684
BEGIN
 
22685
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22686
f_charbig = 'updated by trigger'
 
22687
      WHERE f_int1 = - old.f_int1;
 
22688
END|
 
22689
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22690
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22691
        
 
22692
# check trigger-6 success:      1
 
22693
DROP TRIGGER trg_1;
 
22694
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22695
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22696
f_charbig = 'just inserted'
 
22697
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22698
DELETE FROM t0_aux
 
22699
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22700
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22701
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22702
'just inserted' FROM t0_template
 
22703
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22704
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
22705
BEGIN
 
22706
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22707
f_charbig = 'updated by trigger'
 
22708
      WHERE f_int1 = - old.f_int1;
 
22709
END|
 
22710
DELETE FROM t0_aux
 
22711
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22712
        
 
22713
# check trigger-7 success:      1
 
22714
DROP TRIGGER trg_1;
 
22715
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22716
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22717
f_charbig = 'just inserted'
 
22718
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22719
DELETE FROM t0_aux
 
22720
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22721
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22722
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22723
'just inserted' FROM t0_template
 
22724
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22725
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
22726
BEGIN
 
22727
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22728
f_charbig = 'updated by trigger'
 
22729
      WHERE f_int1 = - old.f_int1;
 
22730
END|
 
22731
DELETE FROM t0_aux
 
22732
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22733
        
 
22734
# check trigger-8 success:      1
 
22735
DROP TRIGGER trg_1;
 
22736
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22737
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22738
f_charbig = 'just inserted'
 
22739
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22740
DELETE FROM t0_aux
 
22741
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22742
DELETE FROM t1
 
22743
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22744
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22745
BEGIN
 
22746
SET new.f_int1 = old.f_int1 + @max_row,
 
22747
new.f_int2 = old.f_int2 - @max_row,
 
22748
new.f_charbig = '####updated per update trigger####';
 
22749
END|
 
22750
UPDATE t1
 
22751
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22752
f_charbig = '####updated per update statement itself####';
 
22753
        
 
22754
# check trigger-9 success:      1
 
22755
DROP TRIGGER trg_2;
 
22756
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22757
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22758
f_charbig = CONCAT('===',f_char1,'===');
 
22759
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22760
BEGIN
 
22761
SET new.f_int1 = new.f_int1 + @max_row,
 
22762
new.f_int2 = new.f_int2 - @max_row,
 
22763
new.f_charbig = '####updated per update trigger####';
 
22764
END|
 
22765
UPDATE t1
 
22766
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22767
f_charbig = '####updated per update statement itself####';
 
22768
        
 
22769
# check trigger-10 success:     1
 
22770
DROP TRIGGER trg_2;
 
22771
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22772
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22773
f_charbig = CONCAT('===',f_char1,'===');
 
22774
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22775
BEGIN
 
22776
SET new.f_int1 = @my_max1 + @counter,
 
22777
new.f_int2 = @my_min2 - @counter,
 
22778
new.f_charbig = '####updated per insert trigger####';
 
22779
SET @counter = @counter + 1;
 
22780
END|
 
22781
SET @counter = 1;
 
22782
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22783
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22784
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22785
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22786
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22787
ORDER BY f_int1;
 
22788
DROP TRIGGER trg_3;
 
22789
        
 
22790
# check trigger-11 success:     1
 
22791
DELETE FROM t1
 
22792
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22793
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22794
AND f_charbig = '####updated per insert trigger####';
 
22795
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22796
BEGIN
 
22797
SET new.f_int1 = @my_max1 + @counter,
 
22798
new.f_int2 = @my_min2 - @counter,
 
22799
new.f_charbig = '####updated per insert trigger####';
 
22800
SET @counter = @counter + 1;
 
22801
END|
 
22802
SET @counter = 1;
 
22803
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22804
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
22805
SELECT CAST(f_int1 AS CHAR),
 
22806
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22807
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22808
ORDER BY f_int1;
 
22809
DROP TRIGGER trg_3;
 
22810
        
 
22811
# check trigger-12 success:     1
 
22812
DELETE FROM t1
 
22813
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22814
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22815
AND f_charbig = '####updated per insert trigger####';
 
22816
ANALYZE  TABLE t1;
 
22817
Table   Op      Msg_type        Msg_text
 
22818
test.t1 analyze status  OK
 
22819
CHECK    TABLE t1 EXTENDED;
 
22820
Table   Op      Msg_type        Msg_text
 
22821
test.t1 check   status  OK
 
22822
CHECKSUM TABLE t1 EXTENDED;
 
22823
Table   Checksum
 
22824
test.t1 <some_value>
 
22825
OPTIMIZE TABLE t1;
 
22826
Table   Op      Msg_type        Msg_text
 
22827
test.t1 optimize        status  OK
 
22828
# check layout success:    1
 
22829
REPAIR   TABLE t1 EXTENDED;
 
22830
Table   Op      Msg_type        Msg_text
 
22831
test.t1 repair  note    The storage engine for the table doesn't support repair
 
22832
# check layout success:    1
 
22833
TRUNCATE t1;
 
22834
        
 
22835
# check TRUNCATE success:       1
 
22836
# check layout success:    1
 
22837
# End usability test (inc/partition_check.inc)
 
22838
DROP TABLE t1;
 
22839
CREATE TABLE t1 (
 
22840
f_int1 INTEGER,
 
22841
f_int2 INTEGER,
 
22842
f_char1 CHAR(20),
 
22843
f_char2 CHAR(20),
 
22844
f_charbig VARCHAR(1000)
 
22845
 
 
22846
)
 
22847
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
22848
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
22849
(PARTITION part_1 VALUES IN (0),
 
22850
 PARTITION part_2 VALUES IN (1),
 
22851
 PARTITION part_3 VALUES IN (NULL));
 
22852
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22853
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22854
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
22855
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
22856
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22857
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22858
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22859
# Start usability test (inc/partition_check.inc)
 
22860
create_command
 
22861
SHOW CREATE TABLE t1;
 
22862
Table   Create Table
 
22863
t1      CREATE TABLE `t1` (
 
22864
  `f_int1` int(11) DEFAULT NULL,
 
22865
  `f_int2` int(11) DEFAULT NULL,
 
22866
  `f_char1` char(20) DEFAULT NULL,
 
22867
  `f_char2` char(20) DEFAULT NULL,
 
22868
  `f_charbig` varchar(1000) DEFAULT NULL
 
22869
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
 
22870
 
 
22871
# check prerequisites-1 success:    1
 
22872
# check COUNT(*) success:    1
 
22873
# check MIN/MAX(f_int1) success:    1
 
22874
# check MIN/MAX(f_int2) success:    1
 
22875
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22876
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22877
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
22878
WHERE f_int1 IN (2,3);
 
22879
# check prerequisites-3 success:    1
 
22880
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
22881
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
22882
# check read via f_int1 success: 1
 
22883
# check read via f_int2 success: 1
 
22884
        
 
22885
# check multiple-1 success:     1
 
22886
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
22887
        
 
22888
# check multiple-2 success:     1
 
22889
INSERT INTO t1 SELECT * FROM t0_template
 
22890
WHERE MOD(f_int1,3) = 0;
 
22891
        
 
22892
# check multiple-3 success:     1
 
22893
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
22894
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
22895
AND @max_row_div2 + @max_row_div4;
 
22896
        
 
22897
# check multiple-4 success:     1
 
22898
DELETE FROM t1
 
22899
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
22900
AND @max_row_div2 + @max_row_div4 + @max_row;
 
22901
        
 
22902
# check multiple-5 success:     1
 
22903
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
22904
INSERT INTO t1
 
22905
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22906
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22907
f_charbig = '#SINGLE#';
 
22908
        
 
22909
# check single-1 success:       1
 
22910
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
22911
INSERT INTO t1
 
22912
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22913
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22914
f_charbig = '#SINGLE#';
 
22915
        
 
22916
# check single-2 success:       1
 
22917
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
22918
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
22919
UPDATE t1 SET f_int1 = @cur_value2
 
22920
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
22921
        
 
22922
# check single-3 success:       1
 
22923
SET @cur_value1= -1;
 
22924
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
22925
UPDATE t1 SET f_int1 = @cur_value1
 
22926
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
22927
        
 
22928
# check single-4 success:       1
 
22929
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
22930
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
22931
        
 
22932
# check single-5 success:       1
 
22933
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
22934
        
 
22935
# check single-6 success:       1
 
22936
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
22937
        
 
22938
# check single-7 success:       1
 
22939
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
22940
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
22941
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
22942
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
22943
f_charbig = '#NULL#';
 
22944
INSERT INTO t1
 
22945
SET f_int1 = NULL , f_int2 = -@max_row,
 
22946
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
22947
f_charbig = '#NULL#';
 
22948
# check null success:    1
 
22949
        
 
22950
# check null-1 success:         1
 
22951
UPDATE t1 SET f_int1 = -@max_row
 
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-2 success:         1
 
22956
UPDATE t1 SET f_int1 = NULL
 
22957
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22958
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22959
        
 
22960
# check null-3 success:         1
 
22961
DELETE FROM t1
 
22962
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22963
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22964
        
 
22965
# check null-4 success:         1
 
22966
DELETE FROM t1
 
22967
WHERE f_int1 = 0 AND f_int2 = 0
 
22968
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
22969
AND f_charbig = '#NULL#';
 
22970
SET AUTOCOMMIT= 0;
 
22971
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22972
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22973
FROM t0_template source_tab
 
22974
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22975
        
 
22976
# check transactions-1 success:         1
 
22977
COMMIT WORK;
 
22978
        
 
22979
# check transactions-2 success:         1
 
22980
ROLLBACK WORK;
 
22981
        
 
22982
# check transactions-3 success:         1
 
22983
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22984
COMMIT WORK;
 
22985
ROLLBACK WORK;
 
22986
        
 
22987
# check transactions-4 success:         1
 
22988
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22989
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22990
FROM t0_template source_tab
 
22991
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22992
        
 
22993
# check transactions-5 success:         1
 
22994
ROLLBACK WORK;
 
22995
        
 
22996
# check transactions-6 success:         1
 
22997
# INFO: Storage engine used for t1 seems to be transactional.
 
22998
COMMIT;
 
22999
        
 
23000
# check transactions-7 success:         1
 
23001
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23002
COMMIT WORK;
 
23003
SET @@session.sql_mode = 'traditional';
 
23004
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
23005
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23006
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
23007
'', '', 'was inserted' FROM t0_template
 
23008
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23009
ERROR 22012: Division by 0
 
23010
COMMIT;
 
23011
        
 
23012
# check transactions-8 success:         1
 
23013
# INFO: Storage engine used for t1 seems to be able to revert
 
23014
#       changes made by the failing statement.
 
23015
SET @@session.sql_mode = '';
 
23016
SET AUTOCOMMIT= 1;
 
23017
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23018
COMMIT WORK;
 
23019
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
23020
        
 
23021
# check special-1 success:      1
 
23022
UPDATE t1 SET f_charbig = '';
 
23023
        
 
23024
# check special-2 success:      1
 
23025
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
23026
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23027
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
23028
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23029
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23030
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23031
'just inserted' FROM t0_template
 
23032
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23033
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
23034
BEGIN
 
23035
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23036
f_charbig = 'updated by trigger'
 
23037
      WHERE f_int1 = new.f_int1;
 
23038
END|
 
23039
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23040
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23041
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23042
        
 
23043
# check trigger-1 success:      1
 
23044
DROP TRIGGER trg_1;
 
23045
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23046
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23047
f_charbig = 'just inserted'
 
23048
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23049
DELETE FROM t0_aux
 
23050
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23051
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23052
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23053
'just inserted' FROM t0_template
 
23054
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23055
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
23056
BEGIN
 
23057
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23058
f_charbig = 'updated by trigger'
 
23059
      WHERE f_int1 = new.f_int1;
 
23060
END|
 
23061
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23062
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23063
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23064
        
 
23065
# check trigger-2 success:      1
 
23066
DROP TRIGGER trg_1;
 
23067
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23068
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23069
f_charbig = 'just inserted'
 
23070
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23071
DELETE FROM t0_aux
 
23072
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23073
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23074
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23075
'just inserted' FROM t0_template
 
23076
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23077
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23078
BEGIN
 
23079
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23080
f_charbig = 'updated by trigger'
 
23081
      WHERE f_int1 = new.f_int1;
 
23082
END|
 
23083
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23084
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23085
        
 
23086
# check trigger-3 success:      1
 
23087
DROP TRIGGER trg_1;
 
23088
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23089
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23090
f_charbig = 'just inserted'
 
23091
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23092
DELETE FROM t0_aux
 
23093
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23094
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23095
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23096
'just inserted' FROM t0_template
 
23097
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23098
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23099
BEGIN
 
23100
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23101
f_charbig = 'updated by trigger'
 
23102
      WHERE f_int1 = - old.f_int1;
 
23103
END|
 
23104
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23105
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23106
        
 
23107
# check trigger-4 success:      1
 
23108
DROP TRIGGER trg_1;
 
23109
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23110
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23111
f_charbig = 'just inserted'
 
23112
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23113
DELETE FROM t0_aux
 
23114
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23115
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23116
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23117
'just inserted' FROM t0_template
 
23118
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23119
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23120
BEGIN
 
23121
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23122
f_charbig = 'updated by trigger'
 
23123
      WHERE f_int1 = new.f_int1;
 
23124
END|
 
23125
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23126
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23127
        
 
23128
# check trigger-5 success:      1
 
23129
DROP TRIGGER trg_1;
 
23130
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23131
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23132
f_charbig = 'just inserted'
 
23133
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23134
DELETE FROM t0_aux
 
23135
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23136
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23137
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23138
'just inserted' FROM t0_template
 
23139
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23140
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23141
BEGIN
 
23142
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23143
f_charbig = 'updated by trigger'
 
23144
      WHERE f_int1 = - old.f_int1;
 
23145
END|
 
23146
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23147
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23148
        
 
23149
# check trigger-6 success:      1
 
23150
DROP TRIGGER trg_1;
 
23151
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23152
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23153
f_charbig = 'just inserted'
 
23154
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23155
DELETE FROM t0_aux
 
23156
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23157
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23158
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23159
'just inserted' FROM t0_template
 
23160
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23161
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
23162
BEGIN
 
23163
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23164
f_charbig = 'updated by trigger'
 
23165
      WHERE f_int1 = - old.f_int1;
 
23166
END|
 
23167
DELETE FROM t0_aux
 
23168
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23169
        
 
23170
# check trigger-7 success:      1
 
23171
DROP TRIGGER trg_1;
 
23172
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23173
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23174
f_charbig = 'just inserted'
 
23175
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23176
DELETE FROM t0_aux
 
23177
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23178
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23179
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23180
'just inserted' FROM t0_template
 
23181
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23182
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
23183
BEGIN
 
23184
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23185
f_charbig = 'updated by trigger'
 
23186
      WHERE f_int1 = - old.f_int1;
 
23187
END|
 
23188
DELETE FROM t0_aux
 
23189
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23190
        
 
23191
# check trigger-8 success:      1
 
23192
DROP TRIGGER trg_1;
 
23193
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23194
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23195
f_charbig = 'just inserted'
 
23196
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23197
DELETE FROM t0_aux
 
23198
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23199
DELETE FROM t1
 
23200
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23201
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23202
BEGIN
 
23203
SET new.f_int1 = old.f_int1 + @max_row,
 
23204
new.f_int2 = old.f_int2 - @max_row,
 
23205
new.f_charbig = '####updated per update trigger####';
 
23206
END|
 
23207
UPDATE t1
 
23208
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23209
f_charbig = '####updated per update statement itself####';
 
23210
        
 
23211
# check trigger-9 success:      1
 
23212
DROP TRIGGER trg_2;
 
23213
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23214
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23215
f_charbig = CONCAT('===',f_char1,'===');
 
23216
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23217
BEGIN
 
23218
SET new.f_int1 = new.f_int1 + @max_row,
 
23219
new.f_int2 = new.f_int2 - @max_row,
 
23220
new.f_charbig = '####updated per update trigger####';
 
23221
END|
 
23222
UPDATE t1
 
23223
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23224
f_charbig = '####updated per update statement itself####';
 
23225
        
 
23226
# check trigger-10 success:     1
 
23227
DROP TRIGGER trg_2;
 
23228
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23229
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23230
f_charbig = CONCAT('===',f_char1,'===');
 
23231
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23232
BEGIN
 
23233
SET new.f_int1 = @my_max1 + @counter,
 
23234
new.f_int2 = @my_min2 - @counter,
 
23235
new.f_charbig = '####updated per insert trigger####';
 
23236
SET @counter = @counter + 1;
 
23237
END|
 
23238
SET @counter = 1;
 
23239
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23240
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23241
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23242
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23243
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23244
ORDER BY f_int1;
 
23245
DROP TRIGGER trg_3;
 
23246
        
 
23247
# check trigger-11 success:     1
 
23248
DELETE FROM t1
 
23249
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23250
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23251
AND f_charbig = '####updated per insert trigger####';
 
23252
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23253
BEGIN
 
23254
SET new.f_int1 = @my_max1 + @counter,
 
23255
new.f_int2 = @my_min2 - @counter,
 
23256
new.f_charbig = '####updated per insert trigger####';
 
23257
SET @counter = @counter + 1;
 
23258
END|
 
23259
SET @counter = 1;
 
23260
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23261
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
23262
SELECT CAST(f_int1 AS CHAR),
 
23263
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23264
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23265
ORDER BY f_int1;
 
23266
DROP TRIGGER trg_3;
 
23267
        
 
23268
# check trigger-12 success:     1
 
23269
DELETE FROM t1
 
23270
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23271
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23272
AND f_charbig = '####updated per insert trigger####';
 
23273
ANALYZE  TABLE t1;
 
23274
Table   Op      Msg_type        Msg_text
 
23275
test.t1 analyze status  OK
 
23276
CHECK    TABLE t1 EXTENDED;
 
23277
Table   Op      Msg_type        Msg_text
 
23278
test.t1 check   status  OK
 
23279
CHECKSUM TABLE t1 EXTENDED;
 
23280
Table   Checksum
 
23281
test.t1 <some_value>
 
23282
OPTIMIZE TABLE t1;
 
23283
Table   Op      Msg_type        Msg_text
 
23284
test.t1 optimize        status  OK
 
23285
# check layout success:    1
 
23286
REPAIR   TABLE t1 EXTENDED;
 
23287
Table   Op      Msg_type        Msg_text
 
23288
test.t1 repair  note    The storage engine for the table doesn't support repair
 
23289
# check layout success:    1
 
23290
TRUNCATE t1;
 
23291
        
 
23292
# check TRUNCATE success:       1
 
23293
# check layout success:    1
 
23294
# End usability test (inc/partition_check.inc)
 
23295
DROP TABLE t1;
 
23296
#  4.3 ALTER ... REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
23297
DROP TABLE IF EXISTS t1;
 
23298
CREATE TABLE t1 (
 
23299
f_int1 INTEGER,
 
23300
f_int2 INTEGER,
 
23301
f_char1 CHAR(20),
 
23302
f_char2 CHAR(20),
 
23303
f_charbig VARCHAR(1000)
 
23304
 
 
23305
)
 
23306
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
23307
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23308
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23309
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23310
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
23311
ERROR HY000: Error in list of partitions to REBUILD
 
23312
DROP TABLE t1;
 
23313
CREATE TABLE t1 (
 
23314
f_int1 INTEGER,
 
23315
f_int2 INTEGER,
 
23316
f_char1 CHAR(20),
 
23317
f_char2 CHAR(20),
 
23318
f_charbig VARCHAR(1000)
 
23319
 
 
23320
)
 
23321
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
23322
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23323
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23324
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23325
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
23326
ERROR HY000: Error in list of partitions to REBUILD
 
23327
DROP TABLE t1;
 
23328
CREATE TABLE t1 (
 
23329
f_int1 INTEGER,
 
23330
f_int2 INTEGER,
 
23331
f_char1 CHAR(20),
 
23332
f_char2 CHAR(20),
 
23333
f_charbig VARCHAR(1000)
 
23334
 
 
23335
)
 
23336
PARTITION BY LIST(MOD(f_int1,4))
 
23337
(PARTITION part_3 VALUES IN (-3),
 
23338
PARTITION part_2 VALUES IN (-2),
 
23339
PARTITION part_1 VALUES IN (-1),
 
23340
PARTITION part_N VALUES IN (NULL),
 
23341
PARTITION part0 VALUES IN (0),
 
23342
PARTITION part1 VALUES IN (1),
 
23343
PARTITION part2 VALUES IN (2),
 
23344
PARTITION part3 VALUES IN (3));
 
23345
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23346
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23347
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23348
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
23349
ERROR HY000: Error in list of partitions to REBUILD
 
23350
DROP TABLE t1;
 
23351
CREATE TABLE t1 (
 
23352
f_int1 INTEGER,
 
23353
f_int2 INTEGER,
 
23354
f_char1 CHAR(20),
 
23355
f_char2 CHAR(20),
 
23356
f_charbig VARCHAR(1000)
 
23357
 
 
23358
)
 
23359
PARTITION BY RANGE(f_int1)
 
23360
(PARTITION parta VALUES LESS THAN (0),
 
23361
PARTITION part_1 VALUES LESS THAN (5),
 
23362
PARTITION part_2 VALUES LESS THAN (10),
 
23363
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
23364
PARTITION part_4 VALUES LESS THAN (20),
 
23365
PARTITION part_5 VALUES LESS THAN (2147483646));
 
23366
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23367
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23368
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23369
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
23370
ERROR HY000: Error in list of partitions to REBUILD
 
23371
DROP TABLE t1;
 
23372
CREATE TABLE t1 (
 
23373
f_int1 INTEGER,
 
23374
f_int2 INTEGER,
 
23375
f_char1 CHAR(20),
 
23376
f_char2 CHAR(20),
 
23377
f_charbig VARCHAR(1000)
 
23378
 
 
23379
)
 
23380
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
23381
(PARTITION part_1 VALUES LESS THAN (0),
 
23382
PARTITION part_2 VALUES LESS THAN (5),
 
23383
PARTITION part_3 VALUES LESS THAN (10),
 
23384
PARTITION part_4 VALUES LESS THAN (2147483646));
 
23385
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23386
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23387
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23388
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
23389
ERROR HY000: Error in list of partitions to REBUILD
 
23390
DROP TABLE t1;
 
23391
CREATE TABLE t1 (
 
23392
f_int1 INTEGER,
 
23393
f_int2 INTEGER,
 
23394
f_char1 CHAR(20),
 
23395
f_char2 CHAR(20),
 
23396
f_charbig VARCHAR(1000)
 
23397
 
 
23398
)
 
23399
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
23400
(PARTITION part_1 VALUES LESS THAN (0)
 
23401
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
23402
PARTITION part_2 VALUES LESS THAN (5)
 
23403
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
23404
PARTITION part_3 VALUES LESS THAN (10)
 
23405
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
23406
PARTITION part_4 VALUES LESS THAN (2147483646)
 
23407
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
23408
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23409
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23410
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23411
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
23412
ERROR HY000: Error in list of partitions to REBUILD
 
23413
DROP TABLE t1;
 
23414
CREATE TABLE t1 (
 
23415
f_int1 INTEGER,
 
23416
f_int2 INTEGER,
 
23417
f_char1 CHAR(20),
 
23418
f_char2 CHAR(20),
 
23419
f_charbig VARCHAR(1000)
 
23420
 
 
23421
)
 
23422
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
23423
(PARTITION part_1 VALUES IN (0)
 
23424
(SUBPARTITION sp11, SUBPARTITION sp12),
 
23425
PARTITION part_2 VALUES IN (1)
 
23426
(SUBPARTITION sp21, SUBPARTITION sp22),
 
23427
PARTITION part_3 VALUES IN (2)
 
23428
(SUBPARTITION sp31, SUBPARTITION sp32),
 
23429
PARTITION part_4 VALUES IN (NULL)
 
23430
(SUBPARTITION sp41, SUBPARTITION sp42));
 
23431
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23432
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23433
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23434
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
23435
ERROR HY000: Error in list of partitions to REBUILD
 
23436
DROP TABLE t1;
 
23437
CREATE TABLE t1 (
 
23438
f_int1 INTEGER,
 
23439
f_int2 INTEGER,
 
23440
f_char1 CHAR(20),
 
23441
f_char2 CHAR(20),
 
23442
f_charbig VARCHAR(1000)
 
23443
 
 
23444
)
 
23445
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
23446
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
23447
(PARTITION part_1 VALUES IN (0),
 
23448
 PARTITION part_2 VALUES IN (1),
 
23449
 PARTITION part_3 VALUES IN (NULL));
 
23450
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23451
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23452
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23453
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
23454
ERROR HY000: Error in list of partitions to REBUILD
 
23455
DROP TABLE t1;
 
23456
#  4.4 ALTER ... REBUILD PARTITION part_1,part_1,part_1;
 
23457
DROP TABLE IF EXISTS t1;
 
23458
CREATE TABLE t1 (
 
23459
f_int1 INTEGER,
 
23460
f_int2 INTEGER,
 
23461
f_char1 CHAR(20),
 
23462
f_char2 CHAR(20),
 
23463
f_charbig VARCHAR(1000)
 
23464
 
 
23465
)
 
23466
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
23467
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23468
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23469
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23470
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
23471
ERROR HY000: Error in list of partitions to REBUILD
 
23472
DROP TABLE t1;
 
23473
CREATE TABLE t1 (
 
23474
f_int1 INTEGER,
 
23475
f_int2 INTEGER,
 
23476
f_char1 CHAR(20),
 
23477
f_char2 CHAR(20),
 
23478
f_charbig VARCHAR(1000)
 
23479
 
 
23480
)
 
23481
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
23482
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23483
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23484
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23485
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
23486
ERROR HY000: Error in list of partitions to REBUILD
 
23487
DROP TABLE t1;
 
23488
CREATE TABLE t1 (
 
23489
f_int1 INTEGER,
 
23490
f_int2 INTEGER,
 
23491
f_char1 CHAR(20),
 
23492
f_char2 CHAR(20),
 
23493
f_charbig VARCHAR(1000)
 
23494
 
 
23495
)
 
23496
PARTITION BY LIST(MOD(f_int1,4))
 
23497
(PARTITION part_3 VALUES IN (-3),
 
23498
PARTITION part_2 VALUES IN (-2),
 
23499
PARTITION part_1 VALUES IN (-1),
 
23500
PARTITION part_N VALUES IN (NULL),
 
23501
PARTITION part0 VALUES IN (0),
 
23502
PARTITION part1 VALUES IN (1),
 
23503
PARTITION part2 VALUES IN (2),
 
23504
PARTITION part3 VALUES IN (3));
 
23505
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23506
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23507
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23508
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
23509
ERROR HY000: Error in list of partitions to REBUILD
 
23510
DROP TABLE t1;
 
23511
CREATE TABLE t1 (
 
23512
f_int1 INTEGER,
 
23513
f_int2 INTEGER,
 
23514
f_char1 CHAR(20),
 
23515
f_char2 CHAR(20),
 
23516
f_charbig VARCHAR(1000)
 
23517
 
 
23518
)
 
23519
PARTITION BY RANGE(f_int1)
 
23520
(PARTITION parta VALUES LESS THAN (0),
 
23521
PARTITION part_1 VALUES LESS THAN (5),
 
23522
PARTITION part_2 VALUES LESS THAN (10),
 
23523
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
23524
PARTITION part_4 VALUES LESS THAN (20),
 
23525
PARTITION part_5 VALUES LESS THAN (2147483646));
 
23526
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23527
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23528
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23529
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
23530
ERROR HY000: Error in list of partitions to REBUILD
 
23531
DROP TABLE t1;
 
23532
CREATE TABLE t1 (
 
23533
f_int1 INTEGER,
 
23534
f_int2 INTEGER,
 
23535
f_char1 CHAR(20),
 
23536
f_char2 CHAR(20),
 
23537
f_charbig VARCHAR(1000)
 
23538
 
 
23539
)
 
23540
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
23541
(PARTITION part_1 VALUES LESS THAN (0),
 
23542
PARTITION part_2 VALUES LESS THAN (5),
 
23543
PARTITION part_3 VALUES LESS THAN (10),
 
23544
PARTITION part_4 VALUES LESS THAN (2147483646));
 
23545
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23546
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23547
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23548
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
23549
ERROR HY000: Error in list of partitions to REBUILD
 
23550
DROP TABLE t1;
 
23551
CREATE TABLE t1 (
 
23552
f_int1 INTEGER,
 
23553
f_int2 INTEGER,
 
23554
f_char1 CHAR(20),
 
23555
f_char2 CHAR(20),
 
23556
f_charbig VARCHAR(1000)
 
23557
 
 
23558
)
 
23559
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
23560
(PARTITION part_1 VALUES LESS THAN (0)
 
23561
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
23562
PARTITION part_2 VALUES LESS THAN (5)
 
23563
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
23564
PARTITION part_3 VALUES LESS THAN (10)
 
23565
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
23566
PARTITION part_4 VALUES LESS THAN (2147483646)
 
23567
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
23568
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23569
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23570
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23571
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
23572
ERROR HY000: Error in list of partitions to REBUILD
 
23573
DROP TABLE t1;
 
23574
CREATE TABLE t1 (
 
23575
f_int1 INTEGER,
 
23576
f_int2 INTEGER,
 
23577
f_char1 CHAR(20),
 
23578
f_char2 CHAR(20),
 
23579
f_charbig VARCHAR(1000)
 
23580
 
 
23581
)
 
23582
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
23583
(PARTITION part_1 VALUES IN (0)
 
23584
(SUBPARTITION sp11, SUBPARTITION sp12),
 
23585
PARTITION part_2 VALUES IN (1)
 
23586
(SUBPARTITION sp21, SUBPARTITION sp22),
 
23587
PARTITION part_3 VALUES IN (2)
 
23588
(SUBPARTITION sp31, SUBPARTITION sp32),
 
23589
PARTITION part_4 VALUES IN (NULL)
 
23590
(SUBPARTITION sp41, SUBPARTITION sp42));
 
23591
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23592
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23593
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23594
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
23595
ERROR HY000: Error in list of partitions to REBUILD
 
23596
DROP TABLE t1;
 
23597
CREATE TABLE t1 (
 
23598
f_int1 INTEGER,
 
23599
f_int2 INTEGER,
 
23600
f_char1 CHAR(20),
 
23601
f_char2 CHAR(20),
 
23602
f_charbig VARCHAR(1000)
 
23603
 
 
23604
)
 
23605
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
23606
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
23607
(PARTITION part_1 VALUES IN (0),
 
23608
 PARTITION part_2 VALUES IN (1),
 
23609
 PARTITION part_3 VALUES IN (NULL));
 
23610
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23611
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23612
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23613
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
23614
ERROR HY000: Error in list of partitions to REBUILD
 
23615
DROP TABLE t1;
 
23616
#------------------------------------------------------------------------
 
23617
#  5   ALTER ... REPAIR PARTITION
 
23618
#------------------------------------------------------------------------
 
23619
#  5.1 ALTER ... REBUILD PARTITION part_1;
 
23620
DROP TABLE IF EXISTS t1;
 
23621
CREATE TABLE t1 (
 
23622
f_int1 INTEGER,
 
23623
f_int2 INTEGER,
 
23624
f_char1 CHAR(20),
 
23625
f_char2 CHAR(20),
 
23626
f_charbig VARCHAR(1000)
 
23627
 
 
23628
)
 
23629
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
23630
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23631
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23632
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23633
ALTER TABLE t1 REBUILD PARTITION part_1;
 
23634
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23635
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23636
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23637
# Start usability test (inc/partition_check.inc)
 
23638
create_command
 
23639
SHOW CREATE TABLE t1;
 
23640
Table   Create Table
 
23641
t1      CREATE TABLE `t1` (
 
23642
  `f_int1` int(11) DEFAULT NULL,
 
23643
  `f_int2` int(11) DEFAULT NULL,
 
23644
  `f_char1` char(20) DEFAULT NULL,
 
23645
  `f_char2` char(20) DEFAULT NULL,
 
23646
  `f_charbig` varchar(1000) DEFAULT NULL
 
23647
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
 
23648
 
 
23649
# check prerequisites-1 success:    1
 
23650
# check COUNT(*) success:    1
 
23651
# check MIN/MAX(f_int1) success:    1
 
23652
# check MIN/MAX(f_int2) success:    1
 
23653
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23654
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23655
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
23656
WHERE f_int1 IN (2,3);
 
23657
# check prerequisites-3 success:    1
 
23658
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
23659
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
23660
# check read via f_int1 success: 1
 
23661
# check read via f_int2 success: 1
 
23662
        
 
23663
# check multiple-1 success:     1
 
23664
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
23665
        
 
23666
# check multiple-2 success:     1
 
23667
INSERT INTO t1 SELECT * FROM t0_template
 
23668
WHERE MOD(f_int1,3) = 0;
 
23669
        
 
23670
# check multiple-3 success:     1
 
23671
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
23672
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
23673
AND @max_row_div2 + @max_row_div4;
 
23674
        
 
23675
# check multiple-4 success:     1
 
23676
DELETE FROM t1
 
23677
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
23678
AND @max_row_div2 + @max_row_div4 + @max_row;
 
23679
        
 
23680
# check multiple-5 success:     1
 
23681
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
23682
INSERT INTO t1
 
23683
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23684
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23685
f_charbig = '#SINGLE#';
 
23686
        
 
23687
# check single-1 success:       1
 
23688
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
23689
INSERT INTO t1
 
23690
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23691
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23692
f_charbig = '#SINGLE#';
 
23693
        
 
23694
# check single-2 success:       1
 
23695
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
23696
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
23697
UPDATE t1 SET f_int1 = @cur_value2
 
23698
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
23699
        
 
23700
# check single-3 success:       1
 
23701
SET @cur_value1= -1;
 
23702
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
23703
UPDATE t1 SET f_int1 = @cur_value1
 
23704
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
23705
        
 
23706
# check single-4 success:       1
 
23707
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
23708
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
23709
        
 
23710
# check single-5 success:       1
 
23711
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
23712
        
 
23713
# check single-6 success:       1
 
23714
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
23715
        
 
23716
# check single-7 success:       1
 
23717
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
23718
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
23719
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
23720
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
23721
f_charbig = '#NULL#';
 
23722
INSERT INTO t1
 
23723
SET f_int1 = NULL , f_int2 = -@max_row,
 
23724
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
23725
f_charbig = '#NULL#';
 
23726
# check null success:    1
 
23727
        
 
23728
# check null-1 success:         1
 
23729
UPDATE t1 SET f_int1 = -@max_row
 
23730
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23731
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23732
        
 
23733
# check null-2 success:         1
 
23734
UPDATE t1 SET f_int1 = NULL
 
23735
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23736
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23737
        
 
23738
# check null-3 success:         1
 
23739
DELETE FROM t1
 
23740
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23741
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23742
        
 
23743
# check null-4 success:         1
 
23744
DELETE FROM t1
 
23745
WHERE f_int1 = 0 AND f_int2 = 0
 
23746
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
23747
AND f_charbig = '#NULL#';
 
23748
SET AUTOCOMMIT= 0;
 
23749
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23750
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23751
FROM t0_template source_tab
 
23752
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23753
        
 
23754
# check transactions-1 success:         1
 
23755
COMMIT WORK;
 
23756
        
 
23757
# check transactions-2 success:         1
 
23758
ROLLBACK WORK;
 
23759
        
 
23760
# check transactions-3 success:         1
 
23761
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23762
COMMIT WORK;
 
23763
ROLLBACK WORK;
 
23764
        
 
23765
# check transactions-4 success:         1
 
23766
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23767
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23768
FROM t0_template source_tab
 
23769
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23770
        
 
23771
# check transactions-5 success:         1
 
23772
ROLLBACK WORK;
 
23773
        
 
23774
# check transactions-6 success:         1
 
23775
# INFO: Storage engine used for t1 seems to be transactional.
 
23776
COMMIT;
 
23777
        
 
23778
# check transactions-7 success:         1
 
23779
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23780
COMMIT WORK;
 
23781
SET @@session.sql_mode = 'traditional';
 
23782
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
23783
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23784
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
23785
'', '', 'was inserted' FROM t0_template
 
23786
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23787
ERROR 22012: Division by 0
 
23788
COMMIT;
 
23789
        
 
23790
# check transactions-8 success:         1
 
23791
# INFO: Storage engine used for t1 seems to be able to revert
 
23792
#       changes made by the failing statement.
 
23793
SET @@session.sql_mode = '';
 
23794
SET AUTOCOMMIT= 1;
 
23795
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23796
COMMIT WORK;
 
23797
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
23798
        
 
23799
# check special-1 success:      1
 
23800
UPDATE t1 SET f_charbig = '';
 
23801
        
 
23802
# check special-2 success:      1
 
23803
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
23804
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23805
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
23806
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23807
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23808
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23809
'just inserted' FROM t0_template
 
23810
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23811
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
23812
BEGIN
 
23813
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23814
f_charbig = 'updated by trigger'
 
23815
      WHERE f_int1 = new.f_int1;
 
23816
END|
 
23817
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23818
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23819
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23820
        
 
23821
# check trigger-1 success:      1
 
23822
DROP TRIGGER trg_1;
 
23823
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23824
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23825
f_charbig = 'just inserted'
 
23826
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23827
DELETE FROM t0_aux
 
23828
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23829
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23830
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23831
'just inserted' FROM t0_template
 
23832
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23833
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
23834
BEGIN
 
23835
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23836
f_charbig = 'updated by trigger'
 
23837
      WHERE f_int1 = new.f_int1;
 
23838
END|
 
23839
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23840
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23841
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23842
        
 
23843
# check trigger-2 success:      1
 
23844
DROP TRIGGER trg_1;
 
23845
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23846
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23847
f_charbig = 'just inserted'
 
23848
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23849
DELETE FROM t0_aux
 
23850
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23851
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23852
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23853
'just inserted' FROM t0_template
 
23854
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23855
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23856
BEGIN
 
23857
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23858
f_charbig = 'updated by trigger'
 
23859
      WHERE f_int1 = new.f_int1;
 
23860
END|
 
23861
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23862
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23863
        
 
23864
# check trigger-3 success:      1
 
23865
DROP TRIGGER trg_1;
 
23866
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23867
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23868
f_charbig = 'just inserted'
 
23869
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23870
DELETE FROM t0_aux
 
23871
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23872
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23873
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23874
'just inserted' FROM t0_template
 
23875
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23876
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23877
BEGIN
 
23878
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23879
f_charbig = 'updated by trigger'
 
23880
      WHERE f_int1 = - old.f_int1;
 
23881
END|
 
23882
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23883
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23884
        
 
23885
# check trigger-4 success:      1
 
23886
DROP TRIGGER trg_1;
 
23887
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23888
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23889
f_charbig = 'just inserted'
 
23890
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23891
DELETE FROM t0_aux
 
23892
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23893
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23894
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23895
'just inserted' FROM t0_template
 
23896
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23897
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23898
BEGIN
 
23899
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23900
f_charbig = 'updated by trigger'
 
23901
      WHERE f_int1 = new.f_int1;
 
23902
END|
 
23903
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23904
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23905
        
 
23906
# check trigger-5 success:      1
 
23907
DROP TRIGGER trg_1;
 
23908
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23909
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23910
f_charbig = 'just inserted'
 
23911
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23912
DELETE FROM t0_aux
 
23913
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23914
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23915
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23916
'just inserted' FROM t0_template
 
23917
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23918
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23919
BEGIN
 
23920
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23921
f_charbig = 'updated by trigger'
 
23922
      WHERE f_int1 = - old.f_int1;
 
23923
END|
 
23924
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23925
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23926
        
 
23927
# check trigger-6 success:      1
 
23928
DROP TRIGGER trg_1;
 
23929
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23930
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23931
f_charbig = 'just inserted'
 
23932
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23933
DELETE FROM t0_aux
 
23934
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23935
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23936
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23937
'just inserted' FROM t0_template
 
23938
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23939
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
23940
BEGIN
 
23941
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23942
f_charbig = 'updated by trigger'
 
23943
      WHERE f_int1 = - old.f_int1;
 
23944
END|
 
23945
DELETE FROM t0_aux
 
23946
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23947
        
 
23948
# check trigger-7 success:      1
 
23949
DROP TRIGGER trg_1;
 
23950
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23951
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23952
f_charbig = 'just inserted'
 
23953
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23954
DELETE FROM t0_aux
 
23955
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23956
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23957
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23958
'just inserted' FROM t0_template
 
23959
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23960
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
23961
BEGIN
 
23962
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23963
f_charbig = 'updated by trigger'
 
23964
      WHERE f_int1 = - old.f_int1;
 
23965
END|
 
23966
DELETE FROM t0_aux
 
23967
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23968
        
 
23969
# check trigger-8 success:      1
 
23970
DROP TRIGGER trg_1;
 
23971
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23972
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23973
f_charbig = 'just inserted'
 
23974
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23975
DELETE FROM t0_aux
 
23976
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23977
DELETE FROM t1
 
23978
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23979
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23980
BEGIN
 
23981
SET new.f_int1 = old.f_int1 + @max_row,
 
23982
new.f_int2 = old.f_int2 - @max_row,
 
23983
new.f_charbig = '####updated per update trigger####';
 
23984
END|
 
23985
UPDATE t1
 
23986
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23987
f_charbig = '####updated per update statement itself####';
 
23988
        
 
23989
# check trigger-9 success:      1
 
23990
DROP TRIGGER trg_2;
 
23991
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23992
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23993
f_charbig = CONCAT('===',f_char1,'===');
 
23994
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23995
BEGIN
 
23996
SET new.f_int1 = new.f_int1 + @max_row,
 
23997
new.f_int2 = new.f_int2 - @max_row,
 
23998
new.f_charbig = '####updated per update trigger####';
 
23999
END|
 
24000
UPDATE t1
 
24001
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24002
f_charbig = '####updated per update statement itself####';
 
24003
        
 
24004
# check trigger-10 success:     1
 
24005
DROP TRIGGER trg_2;
 
24006
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24007
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24008
f_charbig = CONCAT('===',f_char1,'===');
 
24009
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24010
BEGIN
 
24011
SET new.f_int1 = @my_max1 + @counter,
 
24012
new.f_int2 = @my_min2 - @counter,
 
24013
new.f_charbig = '####updated per insert trigger####';
 
24014
SET @counter = @counter + 1;
 
24015
END|
 
24016
SET @counter = 1;
 
24017
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24018
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24019
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24020
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24021
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24022
ORDER BY f_int1;
 
24023
DROP TRIGGER trg_3;
 
24024
        
 
24025
# check trigger-11 success:     1
 
24026
DELETE FROM t1
 
24027
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24028
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24029
AND f_charbig = '####updated per insert trigger####';
 
24030
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24031
BEGIN
 
24032
SET new.f_int1 = @my_max1 + @counter,
 
24033
new.f_int2 = @my_min2 - @counter,
 
24034
new.f_charbig = '####updated per insert trigger####';
 
24035
SET @counter = @counter + 1;
 
24036
END|
 
24037
SET @counter = 1;
 
24038
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24039
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
24040
SELECT CAST(f_int1 AS CHAR),
 
24041
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24042
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24043
ORDER BY f_int1;
 
24044
DROP TRIGGER trg_3;
 
24045
        
 
24046
# check trigger-12 success:     1
 
24047
DELETE FROM t1
 
24048
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24049
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24050
AND f_charbig = '####updated per insert trigger####';
 
24051
ANALYZE  TABLE t1;
 
24052
Table   Op      Msg_type        Msg_text
 
24053
test.t1 analyze status  OK
 
24054
CHECK    TABLE t1 EXTENDED;
 
24055
Table   Op      Msg_type        Msg_text
 
24056
test.t1 check   status  OK
 
24057
CHECKSUM TABLE t1 EXTENDED;
 
24058
Table   Checksum
 
24059
test.t1 <some_value>
 
24060
OPTIMIZE TABLE t1;
 
24061
Table   Op      Msg_type        Msg_text
 
24062
test.t1 optimize        status  OK
 
24063
# check layout success:    1
 
24064
REPAIR   TABLE t1 EXTENDED;
 
24065
Table   Op      Msg_type        Msg_text
 
24066
test.t1 repair  note    The storage engine for the table doesn't support repair
 
24067
# check layout success:    1
 
24068
TRUNCATE t1;
 
24069
        
 
24070
# check TRUNCATE success:       1
 
24071
# check layout success:    1
 
24072
# End usability test (inc/partition_check.inc)
 
24073
DROP TABLE t1;
 
24074
CREATE TABLE t1 (
 
24075
f_int1 INTEGER,
 
24076
f_int2 INTEGER,
 
24077
f_char1 CHAR(20),
 
24078
f_char2 CHAR(20),
 
24079
f_charbig VARCHAR(1000)
 
24080
 
 
24081
)
 
24082
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
24083
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24084
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24085
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
24086
ALTER TABLE t1 REBUILD PARTITION part_1;
 
24087
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24088
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24089
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24090
# Start usability test (inc/partition_check.inc)
 
24091
create_command
 
24092
SHOW CREATE TABLE t1;
 
24093
Table   Create Table
 
24094
t1      CREATE TABLE `t1` (
 
24095
  `f_int1` int(11) DEFAULT NULL,
 
24096
  `f_int2` int(11) DEFAULT NULL,
 
24097
  `f_char1` char(20) DEFAULT NULL,
 
24098
  `f_char2` char(20) DEFAULT NULL,
 
24099
  `f_charbig` varchar(1000) DEFAULT NULL
 
24100
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
 
24101
 
 
24102
# check prerequisites-1 success:    1
 
24103
# check COUNT(*) success:    1
 
24104
# check MIN/MAX(f_int1) success:    1
 
24105
# check MIN/MAX(f_int2) success:    1
 
24106
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24107
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24108
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
24109
WHERE f_int1 IN (2,3);
 
24110
# check prerequisites-3 success:    1
 
24111
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
24112
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
24113
# check read via f_int1 success: 1
 
24114
# check read via f_int2 success: 1
 
24115
        
 
24116
# check multiple-1 success:     1
 
24117
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
24118
        
 
24119
# check multiple-2 success:     1
 
24120
INSERT INTO t1 SELECT * FROM t0_template
 
24121
WHERE MOD(f_int1,3) = 0;
 
24122
        
 
24123
# check multiple-3 success:     1
 
24124
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
24125
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
24126
AND @max_row_div2 + @max_row_div4;
 
24127
        
 
24128
# check multiple-4 success:     1
 
24129
DELETE FROM t1
 
24130
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
24131
AND @max_row_div2 + @max_row_div4 + @max_row;
 
24132
        
 
24133
# check multiple-5 success:     1
 
24134
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
24135
INSERT INTO t1
 
24136
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24137
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24138
f_charbig = '#SINGLE#';
 
24139
        
 
24140
# check single-1 success:       1
 
24141
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
24142
INSERT INTO t1
 
24143
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24144
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24145
f_charbig = '#SINGLE#';
 
24146
        
 
24147
# check single-2 success:       1
 
24148
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
24149
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
24150
UPDATE t1 SET f_int1 = @cur_value2
 
24151
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
24152
        
 
24153
# check single-3 success:       1
 
24154
SET @cur_value1= -1;
 
24155
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
24156
UPDATE t1 SET f_int1 = @cur_value1
 
24157
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
24158
        
 
24159
# check single-4 success:       1
 
24160
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
24161
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
24162
        
 
24163
# check single-5 success:       1
 
24164
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
24165
        
 
24166
# check single-6 success:       1
 
24167
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
24168
        
 
24169
# check single-7 success:       1
 
24170
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
24171
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
24172
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
24173
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
24174
f_charbig = '#NULL#';
 
24175
INSERT INTO t1
 
24176
SET f_int1 = NULL , f_int2 = -@max_row,
 
24177
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
24178
f_charbig = '#NULL#';
 
24179
# check null success:    1
 
24180
        
 
24181
# check null-1 success:         1
 
24182
UPDATE t1 SET f_int1 = -@max_row
 
24183
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24184
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24185
        
 
24186
# check null-2 success:         1
 
24187
UPDATE t1 SET f_int1 = NULL
 
24188
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24189
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24190
        
 
24191
# check null-3 success:         1
 
24192
DELETE FROM t1
 
24193
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24194
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24195
        
 
24196
# check null-4 success:         1
 
24197
DELETE FROM t1
 
24198
WHERE f_int1 = 0 AND f_int2 = 0
 
24199
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
24200
AND f_charbig = '#NULL#';
 
24201
SET AUTOCOMMIT= 0;
 
24202
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24203
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24204
FROM t0_template source_tab
 
24205
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24206
        
 
24207
# check transactions-1 success:         1
 
24208
COMMIT WORK;
 
24209
        
 
24210
# check transactions-2 success:         1
 
24211
ROLLBACK WORK;
 
24212
        
 
24213
# check transactions-3 success:         1
 
24214
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24215
COMMIT WORK;
 
24216
ROLLBACK WORK;
 
24217
        
 
24218
# check transactions-4 success:         1
 
24219
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24220
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24221
FROM t0_template source_tab
 
24222
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24223
        
 
24224
# check transactions-5 success:         1
 
24225
ROLLBACK WORK;
 
24226
        
 
24227
# check transactions-6 success:         1
 
24228
# INFO: Storage engine used for t1 seems to be transactional.
 
24229
COMMIT;
 
24230
        
 
24231
# check transactions-7 success:         1
 
24232
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24233
COMMIT WORK;
 
24234
SET @@session.sql_mode = 'traditional';
 
24235
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
24236
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24237
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
24238
'', '', 'was inserted' FROM t0_template
 
24239
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24240
ERROR 22012: Division by 0
 
24241
COMMIT;
 
24242
        
 
24243
# check transactions-8 success:         1
 
24244
# INFO: Storage engine used for t1 seems to be able to revert
 
24245
#       changes made by the failing statement.
 
24246
SET @@session.sql_mode = '';
 
24247
SET AUTOCOMMIT= 1;
 
24248
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24249
COMMIT WORK;
 
24250
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
24251
        
 
24252
# check special-1 success:      1
 
24253
UPDATE t1 SET f_charbig = '';
 
24254
        
 
24255
# check special-2 success:      1
 
24256
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
24257
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24258
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
24259
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24260
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24261
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24262
'just inserted' FROM t0_template
 
24263
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24264
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
24265
BEGIN
 
24266
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24267
f_charbig = 'updated by trigger'
 
24268
      WHERE f_int1 = new.f_int1;
 
24269
END|
 
24270
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24271
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24272
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24273
        
 
24274
# check trigger-1 success:      1
 
24275
DROP TRIGGER trg_1;
 
24276
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24277
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24278
f_charbig = 'just inserted'
 
24279
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24280
DELETE FROM t0_aux
 
24281
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24282
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24283
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24284
'just inserted' FROM t0_template
 
24285
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24286
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
24287
BEGIN
 
24288
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24289
f_charbig = 'updated by trigger'
 
24290
      WHERE f_int1 = new.f_int1;
 
24291
END|
 
24292
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24293
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24294
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24295
        
 
24296
# check trigger-2 success:      1
 
24297
DROP TRIGGER trg_1;
 
24298
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24299
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24300
f_charbig = 'just inserted'
 
24301
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24302
DELETE FROM t0_aux
 
24303
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24304
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24305
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24306
'just inserted' FROM t0_template
 
24307
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24308
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24309
BEGIN
 
24310
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24311
f_charbig = 'updated by trigger'
 
24312
      WHERE f_int1 = new.f_int1;
 
24313
END|
 
24314
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24315
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24316
        
 
24317
# check trigger-3 success:      1
 
24318
DROP TRIGGER trg_1;
 
24319
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24320
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24321
f_charbig = 'just inserted'
 
24322
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24323
DELETE FROM t0_aux
 
24324
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24325
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24326
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24327
'just inserted' FROM t0_template
 
24328
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24329
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24330
BEGIN
 
24331
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24332
f_charbig = 'updated by trigger'
 
24333
      WHERE f_int1 = - old.f_int1;
 
24334
END|
 
24335
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24336
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24337
        
 
24338
# check trigger-4 success:      1
 
24339
DROP TRIGGER trg_1;
 
24340
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24341
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24342
f_charbig = 'just inserted'
 
24343
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24344
DELETE FROM t0_aux
 
24345
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24346
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24347
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24348
'just inserted' FROM t0_template
 
24349
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24350
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24351
BEGIN
 
24352
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24353
f_charbig = 'updated by trigger'
 
24354
      WHERE f_int1 = new.f_int1;
 
24355
END|
 
24356
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24357
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24358
        
 
24359
# check trigger-5 success:      1
 
24360
DROP TRIGGER trg_1;
 
24361
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24362
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24363
f_charbig = 'just inserted'
 
24364
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24365
DELETE FROM t0_aux
 
24366
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24367
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24368
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24369
'just inserted' FROM t0_template
 
24370
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24371
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24372
BEGIN
 
24373
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24374
f_charbig = 'updated by trigger'
 
24375
      WHERE f_int1 = - old.f_int1;
 
24376
END|
 
24377
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24378
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24379
        
 
24380
# check trigger-6 success:      1
 
24381
DROP TRIGGER trg_1;
 
24382
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24383
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24384
f_charbig = 'just inserted'
 
24385
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24386
DELETE FROM t0_aux
 
24387
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24388
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24389
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24390
'just inserted' FROM t0_template
 
24391
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24392
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
24393
BEGIN
 
24394
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24395
f_charbig = 'updated by trigger'
 
24396
      WHERE f_int1 = - old.f_int1;
 
24397
END|
 
24398
DELETE FROM t0_aux
 
24399
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24400
        
 
24401
# check trigger-7 success:      1
 
24402
DROP TRIGGER trg_1;
 
24403
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24404
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24405
f_charbig = 'just inserted'
 
24406
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24407
DELETE FROM t0_aux
 
24408
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24409
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24410
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24411
'just inserted' FROM t0_template
 
24412
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24413
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
24414
BEGIN
 
24415
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24416
f_charbig = 'updated by trigger'
 
24417
      WHERE f_int1 = - old.f_int1;
 
24418
END|
 
24419
DELETE FROM t0_aux
 
24420
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24421
        
 
24422
# check trigger-8 success:      1
 
24423
DROP TRIGGER trg_1;
 
24424
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24425
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24426
f_charbig = 'just inserted'
 
24427
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24428
DELETE FROM t0_aux
 
24429
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24430
DELETE FROM t1
 
24431
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24432
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24433
BEGIN
 
24434
SET new.f_int1 = old.f_int1 + @max_row,
 
24435
new.f_int2 = old.f_int2 - @max_row,
 
24436
new.f_charbig = '####updated per update trigger####';
 
24437
END|
 
24438
UPDATE t1
 
24439
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24440
f_charbig = '####updated per update statement itself####';
 
24441
        
 
24442
# check trigger-9 success:      1
 
24443
DROP TRIGGER trg_2;
 
24444
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24445
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24446
f_charbig = CONCAT('===',f_char1,'===');
 
24447
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24448
BEGIN
 
24449
SET new.f_int1 = new.f_int1 + @max_row,
 
24450
new.f_int2 = new.f_int2 - @max_row,
 
24451
new.f_charbig = '####updated per update trigger####';
 
24452
END|
 
24453
UPDATE t1
 
24454
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24455
f_charbig = '####updated per update statement itself####';
 
24456
        
 
24457
# check trigger-10 success:     1
 
24458
DROP TRIGGER trg_2;
 
24459
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24460
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24461
f_charbig = CONCAT('===',f_char1,'===');
 
24462
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24463
BEGIN
 
24464
SET new.f_int1 = @my_max1 + @counter,
 
24465
new.f_int2 = @my_min2 - @counter,
 
24466
new.f_charbig = '####updated per insert trigger####';
 
24467
SET @counter = @counter + 1;
 
24468
END|
 
24469
SET @counter = 1;
 
24470
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24471
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24472
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24473
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24474
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24475
ORDER BY f_int1;
 
24476
DROP TRIGGER trg_3;
 
24477
        
 
24478
# check trigger-11 success:     1
 
24479
DELETE FROM t1
 
24480
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24481
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24482
AND f_charbig = '####updated per insert trigger####';
 
24483
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24484
BEGIN
 
24485
SET new.f_int1 = @my_max1 + @counter,
 
24486
new.f_int2 = @my_min2 - @counter,
 
24487
new.f_charbig = '####updated per insert trigger####';
 
24488
SET @counter = @counter + 1;
 
24489
END|
 
24490
SET @counter = 1;
 
24491
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24492
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
24493
SELECT CAST(f_int1 AS CHAR),
 
24494
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24495
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24496
ORDER BY f_int1;
 
24497
DROP TRIGGER trg_3;
 
24498
        
 
24499
# check trigger-12 success:     1
 
24500
DELETE FROM t1
 
24501
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24502
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24503
AND f_charbig = '####updated per insert trigger####';
 
24504
ANALYZE  TABLE t1;
 
24505
Table   Op      Msg_type        Msg_text
 
24506
test.t1 analyze status  OK
 
24507
CHECK    TABLE t1 EXTENDED;
 
24508
Table   Op      Msg_type        Msg_text
 
24509
test.t1 check   status  OK
 
24510
CHECKSUM TABLE t1 EXTENDED;
 
24511
Table   Checksum
 
24512
test.t1 <some_value>
 
24513
OPTIMIZE TABLE t1;
 
24514
Table   Op      Msg_type        Msg_text
 
24515
test.t1 optimize        status  OK
 
24516
# check layout success:    1
 
24517
REPAIR   TABLE t1 EXTENDED;
 
24518
Table   Op      Msg_type        Msg_text
 
24519
test.t1 repair  note    The storage engine for the table doesn't support repair
 
24520
# check layout success:    1
 
24521
TRUNCATE t1;
 
24522
        
 
24523
# check TRUNCATE success:       1
 
24524
# check layout success:    1
 
24525
# End usability test (inc/partition_check.inc)
 
24526
DROP TABLE t1;
 
24527
CREATE TABLE t1 (
 
24528
f_int1 INTEGER,
 
24529
f_int2 INTEGER,
 
24530
f_char1 CHAR(20),
 
24531
f_char2 CHAR(20),
 
24532
f_charbig VARCHAR(1000)
 
24533
 
 
24534
)
 
24535
PARTITION BY LIST(MOD(f_int1,4))
 
24536
(PARTITION part_3 VALUES IN (-3),
 
24537
PARTITION part_2 VALUES IN (-2),
 
24538
PARTITION part_1 VALUES IN (-1),
 
24539
PARTITION part_N VALUES IN (NULL),
 
24540
PARTITION part0 VALUES IN (0),
 
24541
PARTITION part1 VALUES IN (1),
 
24542
PARTITION part2 VALUES IN (2),
 
24543
PARTITION part3 VALUES IN (3));
 
24544
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24545
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24546
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
24547
ALTER TABLE t1 REBUILD PARTITION part_1;
 
24548
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24549
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24550
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24551
# Start usability test (inc/partition_check.inc)
 
24552
create_command
 
24553
SHOW CREATE TABLE t1;
 
24554
Table   Create Table
 
24555
t1      CREATE TABLE `t1` (
 
24556
  `f_int1` int(11) DEFAULT NULL,
 
24557
  `f_int2` int(11) DEFAULT NULL,
 
24558
  `f_char1` char(20) DEFAULT NULL,
 
24559
  `f_char2` char(20) DEFAULT NULL,
 
24560
  `f_charbig` varchar(1000) DEFAULT NULL
 
24561
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
24562
 
 
24563
# check prerequisites-1 success:    1
 
24564
# check COUNT(*) success:    1
 
24565
# check MIN/MAX(f_int1) success:    1
 
24566
# check MIN/MAX(f_int2) success:    1
 
24567
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24568
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24569
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
24570
WHERE f_int1 IN (2,3);
 
24571
# check prerequisites-3 success:    1
 
24572
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
24573
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
24574
# check read via f_int1 success: 1
 
24575
# check read via f_int2 success: 1
 
24576
        
 
24577
# check multiple-1 success:     1
 
24578
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
24579
        
 
24580
# check multiple-2 success:     1
 
24581
INSERT INTO t1 SELECT * FROM t0_template
 
24582
WHERE MOD(f_int1,3) = 0;
 
24583
        
 
24584
# check multiple-3 success:     1
 
24585
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
24586
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
24587
AND @max_row_div2 + @max_row_div4;
 
24588
        
 
24589
# check multiple-4 success:     1
 
24590
DELETE FROM t1
 
24591
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
24592
AND @max_row_div2 + @max_row_div4 + @max_row;
 
24593
        
 
24594
# check multiple-5 success:     1
 
24595
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
24596
INSERT INTO t1
 
24597
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24598
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24599
f_charbig = '#SINGLE#';
 
24600
        
 
24601
# check single-1 success:       1
 
24602
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
24603
INSERT INTO t1
 
24604
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24605
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24606
f_charbig = '#SINGLE#';
 
24607
        
 
24608
# check single-2 success:       1
 
24609
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
24610
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
24611
UPDATE t1 SET f_int1 = @cur_value2
 
24612
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
24613
        
 
24614
# check single-3 success:       1
 
24615
SET @cur_value1= -1;
 
24616
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
24617
UPDATE t1 SET f_int1 = @cur_value1
 
24618
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
24619
        
 
24620
# check single-4 success:       1
 
24621
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
24622
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
24623
        
 
24624
# check single-5 success:       1
 
24625
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
24626
        
 
24627
# check single-6 success:       1
 
24628
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
24629
        
 
24630
# check single-7 success:       1
 
24631
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
24632
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
24633
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
24634
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
24635
f_charbig = '#NULL#';
 
24636
INSERT INTO t1
 
24637
SET f_int1 = NULL , f_int2 = -@max_row,
 
24638
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
24639
f_charbig = '#NULL#';
 
24640
# check null success:    1
 
24641
        
 
24642
# check null-1 success:         1
 
24643
UPDATE t1 SET f_int1 = -@max_row
 
24644
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24645
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24646
        
 
24647
# check null-2 success:         1
 
24648
UPDATE t1 SET f_int1 = NULL
 
24649
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24650
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24651
        
 
24652
# check null-3 success:         1
 
24653
DELETE FROM t1
 
24654
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24655
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24656
        
 
24657
# check null-4 success:         1
 
24658
DELETE FROM t1
 
24659
WHERE f_int1 = 0 AND f_int2 = 0
 
24660
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
24661
AND f_charbig = '#NULL#';
 
24662
SET AUTOCOMMIT= 0;
 
24663
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24664
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24665
FROM t0_template source_tab
 
24666
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24667
        
 
24668
# check transactions-1 success:         1
 
24669
COMMIT WORK;
 
24670
        
 
24671
# check transactions-2 success:         1
 
24672
ROLLBACK WORK;
 
24673
        
 
24674
# check transactions-3 success:         1
 
24675
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24676
COMMIT WORK;
 
24677
ROLLBACK WORK;
 
24678
        
 
24679
# check transactions-4 success:         1
 
24680
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24681
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24682
FROM t0_template source_tab
 
24683
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24684
        
 
24685
# check transactions-5 success:         1
 
24686
ROLLBACK WORK;
 
24687
        
 
24688
# check transactions-6 success:         1
 
24689
# INFO: Storage engine used for t1 seems to be transactional.
 
24690
COMMIT;
 
24691
        
 
24692
# check transactions-7 success:         1
 
24693
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24694
COMMIT WORK;
 
24695
SET @@session.sql_mode = 'traditional';
 
24696
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
24697
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24698
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
24699
'', '', 'was inserted' FROM t0_template
 
24700
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24701
ERROR 22012: Division by 0
 
24702
COMMIT;
 
24703
        
 
24704
# check transactions-8 success:         1
 
24705
# INFO: Storage engine used for t1 seems to be able to revert
 
24706
#       changes made by the failing statement.
 
24707
SET @@session.sql_mode = '';
 
24708
SET AUTOCOMMIT= 1;
 
24709
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24710
COMMIT WORK;
 
24711
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
24712
        
 
24713
# check special-1 success:      1
 
24714
UPDATE t1 SET f_charbig = '';
 
24715
        
 
24716
# check special-2 success:      1
 
24717
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
24718
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24719
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
24720
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24721
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24722
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24723
'just inserted' FROM t0_template
 
24724
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24725
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
24726
BEGIN
 
24727
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24728
f_charbig = 'updated by trigger'
 
24729
      WHERE f_int1 = new.f_int1;
 
24730
END|
 
24731
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24732
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24733
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24734
        
 
24735
# check trigger-1 success:      1
 
24736
DROP TRIGGER trg_1;
 
24737
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24738
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24739
f_charbig = 'just inserted'
 
24740
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24741
DELETE FROM t0_aux
 
24742
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24743
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24744
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24745
'just inserted' FROM t0_template
 
24746
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24747
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
24748
BEGIN
 
24749
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24750
f_charbig = 'updated by trigger'
 
24751
      WHERE f_int1 = new.f_int1;
 
24752
END|
 
24753
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24754
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24755
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24756
        
 
24757
# check trigger-2 success:      1
 
24758
DROP TRIGGER trg_1;
 
24759
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24760
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24761
f_charbig = 'just inserted'
 
24762
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24763
DELETE FROM t0_aux
 
24764
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24765
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24766
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24767
'just inserted' FROM t0_template
 
24768
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24769
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24770
BEGIN
 
24771
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24772
f_charbig = 'updated by trigger'
 
24773
      WHERE f_int1 = new.f_int1;
 
24774
END|
 
24775
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24776
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24777
        
 
24778
# check trigger-3 success:      1
 
24779
DROP TRIGGER trg_1;
 
24780
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24781
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24782
f_charbig = 'just inserted'
 
24783
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24784
DELETE FROM t0_aux
 
24785
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24786
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24787
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24788
'just inserted' FROM t0_template
 
24789
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24790
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24791
BEGIN
 
24792
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24793
f_charbig = 'updated by trigger'
 
24794
      WHERE f_int1 = - old.f_int1;
 
24795
END|
 
24796
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24797
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24798
        
 
24799
# check trigger-4 success:      1
 
24800
DROP TRIGGER trg_1;
 
24801
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24802
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24803
f_charbig = 'just inserted'
 
24804
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24805
DELETE FROM t0_aux
 
24806
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24807
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24808
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24809
'just inserted' FROM t0_template
 
24810
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24811
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24812
BEGIN
 
24813
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24814
f_charbig = 'updated by trigger'
 
24815
      WHERE f_int1 = new.f_int1;
 
24816
END|
 
24817
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24818
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24819
        
 
24820
# check trigger-5 success:      1
 
24821
DROP TRIGGER trg_1;
 
24822
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24823
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24824
f_charbig = 'just inserted'
 
24825
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24826
DELETE FROM t0_aux
 
24827
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24828
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24829
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24830
'just inserted' FROM t0_template
 
24831
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24832
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24833
BEGIN
 
24834
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24835
f_charbig = 'updated by trigger'
 
24836
      WHERE f_int1 = - old.f_int1;
 
24837
END|
 
24838
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24839
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24840
        
 
24841
# check trigger-6 success:      1
 
24842
DROP TRIGGER trg_1;
 
24843
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24844
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24845
f_charbig = 'just inserted'
 
24846
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24847
DELETE FROM t0_aux
 
24848
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24849
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24850
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24851
'just inserted' FROM t0_template
 
24852
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24853
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
24854
BEGIN
 
24855
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24856
f_charbig = 'updated by trigger'
 
24857
      WHERE f_int1 = - old.f_int1;
 
24858
END|
 
24859
DELETE FROM t0_aux
 
24860
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24861
        
 
24862
# check trigger-7 success:      1
 
24863
DROP TRIGGER trg_1;
 
24864
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24865
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24866
f_charbig = 'just inserted'
 
24867
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24868
DELETE FROM t0_aux
 
24869
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24870
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24871
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24872
'just inserted' FROM t0_template
 
24873
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24874
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
24875
BEGIN
 
24876
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24877
f_charbig = 'updated by trigger'
 
24878
      WHERE f_int1 = - old.f_int1;
 
24879
END|
 
24880
DELETE FROM t0_aux
 
24881
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24882
        
 
24883
# check trigger-8 success:      1
 
24884
DROP TRIGGER trg_1;
 
24885
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24886
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24887
f_charbig = 'just inserted'
 
24888
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24889
DELETE FROM t0_aux
 
24890
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24891
DELETE FROM t1
 
24892
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24893
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24894
BEGIN
 
24895
SET new.f_int1 = old.f_int1 + @max_row,
 
24896
new.f_int2 = old.f_int2 - @max_row,
 
24897
new.f_charbig = '####updated per update trigger####';
 
24898
END|
 
24899
UPDATE t1
 
24900
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24901
f_charbig = '####updated per update statement itself####';
 
24902
        
 
24903
# check trigger-9 success:      1
 
24904
DROP TRIGGER trg_2;
 
24905
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24906
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24907
f_charbig = CONCAT('===',f_char1,'===');
 
24908
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24909
BEGIN
 
24910
SET new.f_int1 = new.f_int1 + @max_row,
 
24911
new.f_int2 = new.f_int2 - @max_row,
 
24912
new.f_charbig = '####updated per update trigger####';
 
24913
END|
 
24914
UPDATE t1
 
24915
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24916
f_charbig = '####updated per update statement itself####';
 
24917
        
 
24918
# check trigger-10 success:     1
 
24919
DROP TRIGGER trg_2;
 
24920
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24921
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24922
f_charbig = CONCAT('===',f_char1,'===');
 
24923
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24924
BEGIN
 
24925
SET new.f_int1 = @my_max1 + @counter,
 
24926
new.f_int2 = @my_min2 - @counter,
 
24927
new.f_charbig = '####updated per insert trigger####';
 
24928
SET @counter = @counter + 1;
 
24929
END|
 
24930
SET @counter = 1;
 
24931
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24932
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24933
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24934
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24935
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24936
ORDER BY f_int1;
 
24937
DROP TRIGGER trg_3;
 
24938
        
 
24939
# check trigger-11 success:     1
 
24940
DELETE FROM t1
 
24941
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24942
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24943
AND f_charbig = '####updated per insert trigger####';
 
24944
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24945
BEGIN
 
24946
SET new.f_int1 = @my_max1 + @counter,
 
24947
new.f_int2 = @my_min2 - @counter,
 
24948
new.f_charbig = '####updated per insert trigger####';
 
24949
SET @counter = @counter + 1;
 
24950
END|
 
24951
SET @counter = 1;
 
24952
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24953
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
24954
SELECT CAST(f_int1 AS CHAR),
 
24955
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24956
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24957
ORDER BY f_int1;
 
24958
DROP TRIGGER trg_3;
 
24959
        
 
24960
# check trigger-12 success:     1
 
24961
DELETE FROM t1
 
24962
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24963
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24964
AND f_charbig = '####updated per insert trigger####';
 
24965
ANALYZE  TABLE t1;
 
24966
Table   Op      Msg_type        Msg_text
 
24967
test.t1 analyze status  OK
 
24968
CHECK    TABLE t1 EXTENDED;
 
24969
Table   Op      Msg_type        Msg_text
 
24970
test.t1 check   status  OK
 
24971
CHECKSUM TABLE t1 EXTENDED;
 
24972
Table   Checksum
 
24973
test.t1 <some_value>
 
24974
OPTIMIZE TABLE t1;
 
24975
Table   Op      Msg_type        Msg_text
 
24976
test.t1 optimize        status  OK
 
24977
# check layout success:    1
 
24978
REPAIR   TABLE t1 EXTENDED;
 
24979
Table   Op      Msg_type        Msg_text
 
24980
test.t1 repair  note    The storage engine for the table doesn't support repair
 
24981
# check layout success:    1
 
24982
TRUNCATE t1;
 
24983
        
 
24984
# check TRUNCATE success:       1
 
24985
# check layout success:    1
 
24986
# End usability test (inc/partition_check.inc)
 
24987
DROP TABLE t1;
 
24988
CREATE TABLE t1 (
 
24989
f_int1 INTEGER,
 
24990
f_int2 INTEGER,
 
24991
f_char1 CHAR(20),
 
24992
f_char2 CHAR(20),
 
24993
f_charbig VARCHAR(1000)
 
24994
 
 
24995
)
 
24996
PARTITION BY RANGE(f_int1)
 
24997
(PARTITION parta VALUES LESS THAN (0),
 
24998
PARTITION part_1 VALUES LESS THAN (5),
 
24999
PARTITION part_2 VALUES LESS THAN (10),
 
25000
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
25001
PARTITION part_4 VALUES LESS THAN (20),
 
25002
PARTITION part_5 VALUES LESS THAN (2147483646));
 
25003
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25004
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25005
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
25006
ALTER TABLE t1 REBUILD PARTITION part_1;
 
25007
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25008
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25009
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25010
# Start usability test (inc/partition_check.inc)
 
25011
create_command
 
25012
SHOW CREATE TABLE t1;
 
25013
Table   Create Table
 
25014
t1      CREATE TABLE `t1` (
 
25015
  `f_int1` int(11) DEFAULT NULL,
 
25016
  `f_int2` int(11) DEFAULT NULL,
 
25017
  `f_char1` char(20) DEFAULT NULL,
 
25018
  `f_char2` char(20) DEFAULT NULL,
 
25019
  `f_charbig` varchar(1000) DEFAULT NULL
 
25020
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
25021
 
 
25022
# check prerequisites-1 success:    1
 
25023
# check COUNT(*) success:    1
 
25024
# check MIN/MAX(f_int1) success:    1
 
25025
# check MIN/MAX(f_int2) success:    1
 
25026
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25027
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25028
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
25029
WHERE f_int1 IN (2,3);
 
25030
# check prerequisites-3 success:    1
 
25031
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25032
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
25033
# check read via f_int1 success: 1
 
25034
# check read via f_int2 success: 1
 
25035
        
 
25036
# check multiple-1 success:     1
 
25037
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
25038
        
 
25039
# check multiple-2 success:     1
 
25040
INSERT INTO t1 SELECT * FROM t0_template
 
25041
WHERE MOD(f_int1,3) = 0;
 
25042
        
 
25043
# check multiple-3 success:     1
 
25044
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
25045
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
25046
AND @max_row_div2 + @max_row_div4;
 
25047
        
 
25048
# check multiple-4 success:     1
 
25049
DELETE FROM t1
 
25050
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
25051
AND @max_row_div2 + @max_row_div4 + @max_row;
 
25052
        
 
25053
# check multiple-5 success:     1
 
25054
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
25055
INSERT INTO t1
 
25056
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25057
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25058
f_charbig = '#SINGLE#';
 
25059
        
 
25060
# check single-1 success:       1
 
25061
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
25062
INSERT INTO t1
 
25063
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25064
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25065
f_charbig = '#SINGLE#';
 
25066
        
 
25067
# check single-2 success:       1
 
25068
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
25069
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
25070
UPDATE t1 SET f_int1 = @cur_value2
 
25071
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
25072
        
 
25073
# check single-3 success:       1
 
25074
SET @cur_value1= -1;
 
25075
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
25076
UPDATE t1 SET f_int1 = @cur_value1
 
25077
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
25078
        
 
25079
# check single-4 success:       1
 
25080
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
25081
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
25082
        
 
25083
# check single-5 success:       1
 
25084
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
25085
        
 
25086
# check single-6 success:       1
 
25087
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
25088
ERROR HY000: Table has no partition for value 2147483647
 
25089
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
25090
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
25091
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
25092
f_charbig = '#NULL#';
 
25093
INSERT INTO t1
 
25094
SET f_int1 = NULL , f_int2 = -@max_row,
 
25095
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
25096
f_charbig = '#NULL#';
 
25097
# check null success:    1
 
25098
        
 
25099
# check null-1 success:         1
 
25100
UPDATE t1 SET f_int1 = -@max_row
 
25101
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25102
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25103
        
 
25104
# check null-2 success:         1
 
25105
UPDATE t1 SET f_int1 = NULL
 
25106
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25107
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25108
        
 
25109
# check null-3 success:         1
 
25110
DELETE FROM t1
 
25111
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25112
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25113
        
 
25114
# check null-4 success:         1
 
25115
DELETE FROM t1
 
25116
WHERE f_int1 = 0 AND f_int2 = 0
 
25117
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
25118
AND f_charbig = '#NULL#';
 
25119
SET AUTOCOMMIT= 0;
 
25120
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25121
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25122
FROM t0_template source_tab
 
25123
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25124
        
 
25125
# check transactions-1 success:         1
 
25126
COMMIT WORK;
 
25127
        
 
25128
# check transactions-2 success:         1
 
25129
ROLLBACK WORK;
 
25130
        
 
25131
# check transactions-3 success:         1
 
25132
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25133
COMMIT WORK;
 
25134
ROLLBACK WORK;
 
25135
        
 
25136
# check transactions-4 success:         1
 
25137
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25138
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25139
FROM t0_template source_tab
 
25140
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25141
        
 
25142
# check transactions-5 success:         1
 
25143
ROLLBACK WORK;
 
25144
        
 
25145
# check transactions-6 success:         1
 
25146
# INFO: Storage engine used for t1 seems to be transactional.
 
25147
COMMIT;
 
25148
        
 
25149
# check transactions-7 success:         1
 
25150
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25151
COMMIT WORK;
 
25152
SET @@session.sql_mode = 'traditional';
 
25153
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
25154
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25155
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
25156
'', '', 'was inserted' FROM t0_template
 
25157
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25158
ERROR 22012: Division by 0
 
25159
COMMIT;
 
25160
        
 
25161
# check transactions-8 success:         1
 
25162
# INFO: Storage engine used for t1 seems to be able to revert
 
25163
#       changes made by the failing statement.
 
25164
SET @@session.sql_mode = '';
 
25165
SET AUTOCOMMIT= 1;
 
25166
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25167
COMMIT WORK;
 
25168
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
25169
        
 
25170
# check special-1 success:      1
 
25171
UPDATE t1 SET f_charbig = '';
 
25172
        
 
25173
# check special-2 success:      1
 
25174
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
25175
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25176
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
25177
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25178
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25179
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25180
'just inserted' FROM t0_template
 
25181
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25182
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
25183
BEGIN
 
25184
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25185
f_charbig = 'updated by trigger'
 
25186
      WHERE f_int1 = new.f_int1;
 
25187
END|
 
25188
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25189
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25190
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25191
        
 
25192
# check trigger-1 success:      1
 
25193
DROP TRIGGER trg_1;
 
25194
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25195
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25196
f_charbig = 'just inserted'
 
25197
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25198
DELETE FROM t0_aux
 
25199
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25200
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25201
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25202
'just inserted' FROM t0_template
 
25203
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25204
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
25205
BEGIN
 
25206
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25207
f_charbig = 'updated by trigger'
 
25208
      WHERE f_int1 = new.f_int1;
 
25209
END|
 
25210
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25211
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25213
        
 
25214
# check trigger-2 success:      1
 
25215
DROP TRIGGER trg_1;
 
25216
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25217
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25218
f_charbig = 'just inserted'
 
25219
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25220
DELETE FROM t0_aux
 
25221
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25222
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25223
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25224
'just inserted' FROM t0_template
 
25225
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25226
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25227
BEGIN
 
25228
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25229
f_charbig = 'updated by trigger'
 
25230
      WHERE f_int1 = new.f_int1;
 
25231
END|
 
25232
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25233
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25234
        
 
25235
# check trigger-3 success:      1
 
25236
DROP TRIGGER trg_1;
 
25237
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25238
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25239
f_charbig = 'just inserted'
 
25240
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25241
DELETE FROM t0_aux
 
25242
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25243
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25244
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25245
'just inserted' FROM t0_template
 
25246
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25247
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25248
BEGIN
 
25249
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25250
f_charbig = 'updated by trigger'
 
25251
      WHERE f_int1 = - old.f_int1;
 
25252
END|
 
25253
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25254
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25255
        
 
25256
# check trigger-4 success:      1
 
25257
DROP TRIGGER trg_1;
 
25258
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25259
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25260
f_charbig = 'just inserted'
 
25261
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25262
DELETE FROM t0_aux
 
25263
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25264
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25265
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25266
'just inserted' FROM t0_template
 
25267
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25268
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25269
BEGIN
 
25270
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25271
f_charbig = 'updated by trigger'
 
25272
      WHERE f_int1 = new.f_int1;
 
25273
END|
 
25274
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25275
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25276
        
 
25277
# check trigger-5 success:      1
 
25278
DROP TRIGGER trg_1;
 
25279
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25280
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25281
f_charbig = 'just inserted'
 
25282
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25283
DELETE FROM t0_aux
 
25284
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25285
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25286
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25287
'just inserted' FROM t0_template
 
25288
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25289
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25290
BEGIN
 
25291
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25292
f_charbig = 'updated by trigger'
 
25293
      WHERE f_int1 = - old.f_int1;
 
25294
END|
 
25295
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25296
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25297
        
 
25298
# check trigger-6 success:      1
 
25299
DROP TRIGGER trg_1;
 
25300
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25301
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25302
f_charbig = 'just inserted'
 
25303
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25304
DELETE FROM t0_aux
 
25305
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25306
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25307
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25308
'just inserted' FROM t0_template
 
25309
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25310
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
25311
BEGIN
 
25312
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25313
f_charbig = 'updated by trigger'
 
25314
      WHERE f_int1 = - old.f_int1;
 
25315
END|
 
25316
DELETE FROM t0_aux
 
25317
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25318
        
 
25319
# check trigger-7 success:      1
 
25320
DROP TRIGGER trg_1;
 
25321
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25322
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25323
f_charbig = 'just inserted'
 
25324
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25325
DELETE FROM t0_aux
 
25326
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25327
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25328
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25329
'just inserted' FROM t0_template
 
25330
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25331
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
25332
BEGIN
 
25333
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25334
f_charbig = 'updated by trigger'
 
25335
      WHERE f_int1 = - old.f_int1;
 
25336
END|
 
25337
DELETE FROM t0_aux
 
25338
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25339
        
 
25340
# check trigger-8 success:      1
 
25341
DROP TRIGGER trg_1;
 
25342
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25343
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25344
f_charbig = 'just inserted'
 
25345
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25346
DELETE FROM t0_aux
 
25347
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25348
DELETE FROM t1
 
25349
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25350
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25351
BEGIN
 
25352
SET new.f_int1 = old.f_int1 + @max_row,
 
25353
new.f_int2 = old.f_int2 - @max_row,
 
25354
new.f_charbig = '####updated per update trigger####';
 
25355
END|
 
25356
UPDATE t1
 
25357
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25358
f_charbig = '####updated per update statement itself####';
 
25359
        
 
25360
# check trigger-9 success:      1
 
25361
DROP TRIGGER trg_2;
 
25362
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25363
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25364
f_charbig = CONCAT('===',f_char1,'===');
 
25365
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25366
BEGIN
 
25367
SET new.f_int1 = new.f_int1 + @max_row,
 
25368
new.f_int2 = new.f_int2 - @max_row,
 
25369
new.f_charbig = '####updated per update trigger####';
 
25370
END|
 
25371
UPDATE t1
 
25372
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25373
f_charbig = '####updated per update statement itself####';
 
25374
        
 
25375
# check trigger-10 success:     1
 
25376
DROP TRIGGER trg_2;
 
25377
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25378
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25379
f_charbig = CONCAT('===',f_char1,'===');
 
25380
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25381
BEGIN
 
25382
SET new.f_int1 = @my_max1 + @counter,
 
25383
new.f_int2 = @my_min2 - @counter,
 
25384
new.f_charbig = '####updated per insert trigger####';
 
25385
SET @counter = @counter + 1;
 
25386
END|
 
25387
SET @counter = 1;
 
25388
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25389
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25390
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25391
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25392
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25393
ORDER BY f_int1;
 
25394
DROP TRIGGER trg_3;
 
25395
        
 
25396
# check trigger-11 success:     1
 
25397
DELETE FROM t1
 
25398
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25399
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25400
AND f_charbig = '####updated per insert trigger####';
 
25401
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25402
BEGIN
 
25403
SET new.f_int1 = @my_max1 + @counter,
 
25404
new.f_int2 = @my_min2 - @counter,
 
25405
new.f_charbig = '####updated per insert trigger####';
 
25406
SET @counter = @counter + 1;
 
25407
END|
 
25408
SET @counter = 1;
 
25409
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25410
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
25411
SELECT CAST(f_int1 AS CHAR),
 
25412
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25413
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25414
ORDER BY f_int1;
 
25415
DROP TRIGGER trg_3;
 
25416
        
 
25417
# check trigger-12 success:     1
 
25418
DELETE FROM t1
 
25419
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25420
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25421
AND f_charbig = '####updated per insert trigger####';
 
25422
ANALYZE  TABLE t1;
 
25423
Table   Op      Msg_type        Msg_text
 
25424
test.t1 analyze status  OK
 
25425
CHECK    TABLE t1 EXTENDED;
 
25426
Table   Op      Msg_type        Msg_text
 
25427
test.t1 check   status  OK
 
25428
CHECKSUM TABLE t1 EXTENDED;
 
25429
Table   Checksum
 
25430
test.t1 <some_value>
 
25431
OPTIMIZE TABLE t1;
 
25432
Table   Op      Msg_type        Msg_text
 
25433
test.t1 optimize        status  OK
 
25434
# check layout success:    1
 
25435
REPAIR   TABLE t1 EXTENDED;
 
25436
Table   Op      Msg_type        Msg_text
 
25437
test.t1 repair  note    The storage engine for the table doesn't support repair
 
25438
# check layout success:    1
 
25439
TRUNCATE t1;
 
25440
        
 
25441
# check TRUNCATE success:       1
 
25442
# check layout success:    1
 
25443
# End usability test (inc/partition_check.inc)
 
25444
DROP TABLE t1;
 
25445
CREATE TABLE t1 (
 
25446
f_int1 INTEGER,
 
25447
f_int2 INTEGER,
 
25448
f_char1 CHAR(20),
 
25449
f_char2 CHAR(20),
 
25450
f_charbig VARCHAR(1000)
 
25451
 
 
25452
)
 
25453
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
25454
(PARTITION part_1 VALUES LESS THAN (0),
 
25455
PARTITION part_2 VALUES LESS THAN (5),
 
25456
PARTITION part_3 VALUES LESS THAN (10),
 
25457
PARTITION part_4 VALUES LESS THAN (2147483646));
 
25458
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25459
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25460
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
25461
ALTER TABLE t1 REBUILD PARTITION part_1;
 
25462
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25463
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25464
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25465
# Start usability test (inc/partition_check.inc)
 
25466
create_command
 
25467
SHOW CREATE TABLE t1;
 
25468
Table   Create Table
 
25469
t1      CREATE TABLE `t1` (
 
25470
  `f_int1` int(11) DEFAULT NULL,
 
25471
  `f_int2` int(11) DEFAULT NULL,
 
25472
  `f_char1` char(20) DEFAULT NULL,
 
25473
  `f_char2` char(20) DEFAULT NULL,
 
25474
  `f_charbig` varchar(1000) DEFAULT NULL
 
25475
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
25476
 
 
25477
# check prerequisites-1 success:    1
 
25478
# check COUNT(*) success:    1
 
25479
# check MIN/MAX(f_int1) success:    1
 
25480
# check MIN/MAX(f_int2) success:    1
 
25481
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25482
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25483
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
25484
WHERE f_int1 IN (2,3);
 
25485
# check prerequisites-3 success:    1
 
25486
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25487
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
25488
# check read via f_int1 success: 1
 
25489
# check read via f_int2 success: 1
 
25490
        
 
25491
# check multiple-1 success:     1
 
25492
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
25493
        
 
25494
# check multiple-2 success:     1
 
25495
INSERT INTO t1 SELECT * FROM t0_template
 
25496
WHERE MOD(f_int1,3) = 0;
 
25497
        
 
25498
# check multiple-3 success:     1
 
25499
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
25500
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
25501
AND @max_row_div2 + @max_row_div4;
 
25502
        
 
25503
# check multiple-4 success:     1
 
25504
DELETE FROM t1
 
25505
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
25506
AND @max_row_div2 + @max_row_div4 + @max_row;
 
25507
        
 
25508
# check multiple-5 success:     1
 
25509
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
25510
INSERT INTO t1
 
25511
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25512
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25513
f_charbig = '#SINGLE#';
 
25514
        
 
25515
# check single-1 success:       1
 
25516
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
25517
INSERT INTO t1
 
25518
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25519
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25520
f_charbig = '#SINGLE#';
 
25521
        
 
25522
# check single-2 success:       1
 
25523
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
25524
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
25525
UPDATE t1 SET f_int1 = @cur_value2
 
25526
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
25527
        
 
25528
# check single-3 success:       1
 
25529
SET @cur_value1= -1;
 
25530
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
25531
UPDATE t1 SET f_int1 = @cur_value1
 
25532
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
25533
        
 
25534
# check single-4 success:       1
 
25535
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
25536
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
25537
        
 
25538
# check single-5 success:       1
 
25539
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
25540
        
 
25541
# check single-6 success:       1
 
25542
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
25543
        
 
25544
# check single-7 success:       1
 
25545
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
25546
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
25547
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
25548
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
25549
f_charbig = '#NULL#';
 
25550
INSERT INTO t1
 
25551
SET f_int1 = NULL , f_int2 = -@max_row,
 
25552
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
25553
f_charbig = '#NULL#';
 
25554
# check null success:    1
 
25555
        
 
25556
# check null-1 success:         1
 
25557
UPDATE t1 SET f_int1 = -@max_row
 
25558
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25559
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25560
        
 
25561
# check null-2 success:         1
 
25562
UPDATE t1 SET f_int1 = NULL
 
25563
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25564
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25565
        
 
25566
# check null-3 success:         1
 
25567
DELETE FROM t1
 
25568
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25569
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25570
        
 
25571
# check null-4 success:         1
 
25572
DELETE FROM t1
 
25573
WHERE f_int1 = 0 AND f_int2 = 0
 
25574
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
25575
AND f_charbig = '#NULL#';
 
25576
SET AUTOCOMMIT= 0;
 
25577
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25578
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25579
FROM t0_template source_tab
 
25580
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25581
        
 
25582
# check transactions-1 success:         1
 
25583
COMMIT WORK;
 
25584
        
 
25585
# check transactions-2 success:         1
 
25586
ROLLBACK WORK;
 
25587
        
 
25588
# check transactions-3 success:         1
 
25589
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25590
COMMIT WORK;
 
25591
ROLLBACK WORK;
 
25592
        
 
25593
# check transactions-4 success:         1
 
25594
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25595
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25596
FROM t0_template source_tab
 
25597
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25598
        
 
25599
# check transactions-5 success:         1
 
25600
ROLLBACK WORK;
 
25601
        
 
25602
# check transactions-6 success:         1
 
25603
# INFO: Storage engine used for t1 seems to be transactional.
 
25604
COMMIT;
 
25605
        
 
25606
# check transactions-7 success:         1
 
25607
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25608
COMMIT WORK;
 
25609
SET @@session.sql_mode = 'traditional';
 
25610
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
25611
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25612
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
25613
'', '', 'was inserted' FROM t0_template
 
25614
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25615
ERROR 22012: Division by 0
 
25616
COMMIT;
 
25617
        
 
25618
# check transactions-8 success:         1
 
25619
# INFO: Storage engine used for t1 seems to be able to revert
 
25620
#       changes made by the failing statement.
 
25621
SET @@session.sql_mode = '';
 
25622
SET AUTOCOMMIT= 1;
 
25623
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25624
COMMIT WORK;
 
25625
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
25626
        
 
25627
# check special-1 success:      1
 
25628
UPDATE t1 SET f_charbig = '';
 
25629
        
 
25630
# check special-2 success:      1
 
25631
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
25632
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25633
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
25634
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25635
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25636
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25637
'just inserted' FROM t0_template
 
25638
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25639
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
25640
BEGIN
 
25641
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25642
f_charbig = 'updated by trigger'
 
25643
      WHERE f_int1 = new.f_int1;
 
25644
END|
 
25645
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25646
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25647
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25648
        
 
25649
# check trigger-1 success:      1
 
25650
DROP TRIGGER trg_1;
 
25651
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25652
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25653
f_charbig = 'just inserted'
 
25654
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25655
DELETE FROM t0_aux
 
25656
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25657
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25658
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25659
'just inserted' FROM t0_template
 
25660
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25661
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
25662
BEGIN
 
25663
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25664
f_charbig = 'updated by trigger'
 
25665
      WHERE f_int1 = new.f_int1;
 
25666
END|
 
25667
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25668
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25669
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25670
        
 
25671
# check trigger-2 success:      1
 
25672
DROP TRIGGER trg_1;
 
25673
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25674
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25675
f_charbig = 'just inserted'
 
25676
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25677
DELETE FROM t0_aux
 
25678
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25679
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25680
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25681
'just inserted' FROM t0_template
 
25682
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25683
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25684
BEGIN
 
25685
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25686
f_charbig = 'updated by trigger'
 
25687
      WHERE f_int1 = new.f_int1;
 
25688
END|
 
25689
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25690
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25691
        
 
25692
# check trigger-3 success:      1
 
25693
DROP TRIGGER trg_1;
 
25694
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25695
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25696
f_charbig = 'just inserted'
 
25697
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25698
DELETE FROM t0_aux
 
25699
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25700
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25701
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25702
'just inserted' FROM t0_template
 
25703
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25704
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25705
BEGIN
 
25706
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25707
f_charbig = 'updated by trigger'
 
25708
      WHERE f_int1 = - old.f_int1;
 
25709
END|
 
25710
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25711
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25712
        
 
25713
# check trigger-4 success:      1
 
25714
DROP TRIGGER trg_1;
 
25715
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25716
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25717
f_charbig = 'just inserted'
 
25718
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25719
DELETE FROM t0_aux
 
25720
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25721
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25722
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25723
'just inserted' FROM t0_template
 
25724
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25725
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25726
BEGIN
 
25727
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25728
f_charbig = 'updated by trigger'
 
25729
      WHERE f_int1 = new.f_int1;
 
25730
END|
 
25731
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25732
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25733
        
 
25734
# check trigger-5 success:      1
 
25735
DROP TRIGGER trg_1;
 
25736
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25737
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25738
f_charbig = 'just inserted'
 
25739
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25740
DELETE FROM t0_aux
 
25741
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25742
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25743
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25744
'just inserted' FROM t0_template
 
25745
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25746
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25747
BEGIN
 
25748
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25749
f_charbig = 'updated by trigger'
 
25750
      WHERE f_int1 = - old.f_int1;
 
25751
END|
 
25752
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25753
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25754
        
 
25755
# check trigger-6 success:      1
 
25756
DROP TRIGGER trg_1;
 
25757
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25758
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25759
f_charbig = 'just inserted'
 
25760
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25761
DELETE FROM t0_aux
 
25762
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25763
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25764
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25765
'just inserted' FROM t0_template
 
25766
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25767
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
25768
BEGIN
 
25769
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25770
f_charbig = 'updated by trigger'
 
25771
      WHERE f_int1 = - old.f_int1;
 
25772
END|
 
25773
DELETE FROM t0_aux
 
25774
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25775
        
 
25776
# check trigger-7 success:      1
 
25777
DROP TRIGGER trg_1;
 
25778
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25779
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25780
f_charbig = 'just inserted'
 
25781
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25782
DELETE FROM t0_aux
 
25783
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25784
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25785
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25786
'just inserted' FROM t0_template
 
25787
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25788
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
25789
BEGIN
 
25790
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25791
f_charbig = 'updated by trigger'
 
25792
      WHERE f_int1 = - old.f_int1;
 
25793
END|
 
25794
DELETE FROM t0_aux
 
25795
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25796
        
 
25797
# check trigger-8 success:      1
 
25798
DROP TRIGGER trg_1;
 
25799
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25800
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25801
f_charbig = 'just inserted'
 
25802
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25803
DELETE FROM t0_aux
 
25804
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25805
DELETE FROM t1
 
25806
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25807
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25808
BEGIN
 
25809
SET new.f_int1 = old.f_int1 + @max_row,
 
25810
new.f_int2 = old.f_int2 - @max_row,
 
25811
new.f_charbig = '####updated per update trigger####';
 
25812
END|
 
25813
UPDATE t1
 
25814
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25815
f_charbig = '####updated per update statement itself####';
 
25816
        
 
25817
# check trigger-9 success:      1
 
25818
DROP TRIGGER trg_2;
 
25819
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25820
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25821
f_charbig = CONCAT('===',f_char1,'===');
 
25822
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25823
BEGIN
 
25824
SET new.f_int1 = new.f_int1 + @max_row,
 
25825
new.f_int2 = new.f_int2 - @max_row,
 
25826
new.f_charbig = '####updated per update trigger####';
 
25827
END|
 
25828
UPDATE t1
 
25829
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25830
f_charbig = '####updated per update statement itself####';
 
25831
        
 
25832
# check trigger-10 success:     1
 
25833
DROP TRIGGER trg_2;
 
25834
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25835
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25836
f_charbig = CONCAT('===',f_char1,'===');
 
25837
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25838
BEGIN
 
25839
SET new.f_int1 = @my_max1 + @counter,
 
25840
new.f_int2 = @my_min2 - @counter,
 
25841
new.f_charbig = '####updated per insert trigger####';
 
25842
SET @counter = @counter + 1;
 
25843
END|
 
25844
SET @counter = 1;
 
25845
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25846
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25847
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25848
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25849
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25850
ORDER BY f_int1;
 
25851
DROP TRIGGER trg_3;
 
25852
        
 
25853
# check trigger-11 success:     1
 
25854
DELETE FROM t1
 
25855
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25856
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25857
AND f_charbig = '####updated per insert trigger####';
 
25858
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25859
BEGIN
 
25860
SET new.f_int1 = @my_max1 + @counter,
 
25861
new.f_int2 = @my_min2 - @counter,
 
25862
new.f_charbig = '####updated per insert trigger####';
 
25863
SET @counter = @counter + 1;
 
25864
END|
 
25865
SET @counter = 1;
 
25866
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25867
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
25868
SELECT CAST(f_int1 AS CHAR),
 
25869
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25870
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25871
ORDER BY f_int1;
 
25872
DROP TRIGGER trg_3;
 
25873
        
 
25874
# check trigger-12 success:     1
 
25875
DELETE FROM t1
 
25876
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25877
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25878
AND f_charbig = '####updated per insert trigger####';
 
25879
ANALYZE  TABLE t1;
 
25880
Table   Op      Msg_type        Msg_text
 
25881
test.t1 analyze status  OK
 
25882
CHECK    TABLE t1 EXTENDED;
 
25883
Table   Op      Msg_type        Msg_text
 
25884
test.t1 check   status  OK
 
25885
CHECKSUM TABLE t1 EXTENDED;
 
25886
Table   Checksum
 
25887
test.t1 <some_value>
 
25888
OPTIMIZE TABLE t1;
 
25889
Table   Op      Msg_type        Msg_text
 
25890
test.t1 optimize        status  OK
 
25891
# check layout success:    1
 
25892
REPAIR   TABLE t1 EXTENDED;
 
25893
Table   Op      Msg_type        Msg_text
 
25894
test.t1 repair  note    The storage engine for the table doesn't support repair
 
25895
# check layout success:    1
 
25896
TRUNCATE t1;
 
25897
        
 
25898
# check TRUNCATE success:       1
 
25899
# check layout success:    1
 
25900
# End usability test (inc/partition_check.inc)
 
25901
DROP TABLE t1;
 
25902
CREATE TABLE t1 (
 
25903
f_int1 INTEGER,
 
25904
f_int2 INTEGER,
 
25905
f_char1 CHAR(20),
 
25906
f_char2 CHAR(20),
 
25907
f_charbig VARCHAR(1000)
 
25908
 
 
25909
)
 
25910
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
25911
(PARTITION part_1 VALUES LESS THAN (0)
 
25912
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
25913
PARTITION part_2 VALUES LESS THAN (5)
 
25914
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
25915
PARTITION part_3 VALUES LESS THAN (10)
 
25916
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
25917
PARTITION part_4 VALUES LESS THAN (2147483646)
 
25918
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
25919
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25920
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25921
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
25922
ALTER TABLE t1 REBUILD PARTITION part_1;
 
25923
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25924
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25925
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25926
# Start usability test (inc/partition_check.inc)
 
25927
create_command
 
25928
SHOW CREATE TABLE t1;
 
25929
Table   Create Table
 
25930
t1      CREATE TABLE `t1` (
 
25931
  `f_int1` int(11) DEFAULT NULL,
 
25932
  `f_int2` int(11) DEFAULT NULL,
 
25933
  `f_char1` char(20) DEFAULT NULL,
 
25934
  `f_char2` char(20) DEFAULT NULL,
 
25935
  `f_charbig` varchar(1000) DEFAULT NULL
 
25936
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
25937
 
 
25938
# check prerequisites-1 success:    1
 
25939
# check COUNT(*) success:    1
 
25940
# check MIN/MAX(f_int1) success:    1
 
25941
# check MIN/MAX(f_int2) success:    1
 
25942
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25943
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25944
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
25945
WHERE f_int1 IN (2,3);
 
25946
# check prerequisites-3 success:    1
 
25947
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25948
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
25949
# check read via f_int1 success: 1
 
25950
# check read via f_int2 success: 1
 
25951
        
 
25952
# check multiple-1 success:     1
 
25953
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
25954
        
 
25955
# check multiple-2 success:     1
 
25956
INSERT INTO t1 SELECT * FROM t0_template
 
25957
WHERE MOD(f_int1,3) = 0;
 
25958
        
 
25959
# check multiple-3 success:     1
 
25960
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
25961
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
25962
AND @max_row_div2 + @max_row_div4;
 
25963
        
 
25964
# check multiple-4 success:     1
 
25965
DELETE FROM t1
 
25966
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
25967
AND @max_row_div2 + @max_row_div4 + @max_row;
 
25968
        
 
25969
# check multiple-5 success:     1
 
25970
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
25971
INSERT INTO t1
 
25972
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25973
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25974
f_charbig = '#SINGLE#';
 
25975
        
 
25976
# check single-1 success:       1
 
25977
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
25978
INSERT INTO t1
 
25979
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25980
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25981
f_charbig = '#SINGLE#';
 
25982
        
 
25983
# check single-2 success:       1
 
25984
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
25985
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
25986
UPDATE t1 SET f_int1 = @cur_value2
 
25987
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
25988
        
 
25989
# check single-3 success:       1
 
25990
SET @cur_value1= -1;
 
25991
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
25992
UPDATE t1 SET f_int1 = @cur_value1
 
25993
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
25994
        
 
25995
# check single-4 success:       1
 
25996
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
25997
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
25998
        
 
25999
# check single-5 success:       1
 
26000
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
26001
        
 
26002
# check single-6 success:       1
 
26003
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
26004
ERROR HY000: Table has no partition for value 2147483647
 
26005
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
26006
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
26007
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
26008
f_charbig = '#NULL#';
 
26009
INSERT INTO t1
 
26010
SET f_int1 = NULL , f_int2 = -@max_row,
 
26011
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
26012
f_charbig = '#NULL#';
 
26013
# check null success:    1
 
26014
        
 
26015
# check null-1 success:         1
 
26016
UPDATE t1 SET f_int1 = -@max_row
 
26017
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26018
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26019
        
 
26020
# check null-2 success:         1
 
26021
UPDATE t1 SET f_int1 = NULL
 
26022
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26023
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26024
        
 
26025
# check null-3 success:         1
 
26026
DELETE FROM t1
 
26027
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26028
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26029
        
 
26030
# check null-4 success:         1
 
26031
DELETE FROM t1
 
26032
WHERE f_int1 = 0 AND f_int2 = 0
 
26033
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
26034
AND f_charbig = '#NULL#';
 
26035
SET AUTOCOMMIT= 0;
 
26036
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26037
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26038
FROM t0_template source_tab
 
26039
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26040
        
 
26041
# check transactions-1 success:         1
 
26042
COMMIT WORK;
 
26043
        
 
26044
# check transactions-2 success:         1
 
26045
ROLLBACK WORK;
 
26046
        
 
26047
# check transactions-3 success:         1
 
26048
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26049
COMMIT WORK;
 
26050
ROLLBACK WORK;
 
26051
        
 
26052
# check transactions-4 success:         1
 
26053
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26054
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26055
FROM t0_template source_tab
 
26056
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26057
        
 
26058
# check transactions-5 success:         1
 
26059
ROLLBACK WORK;
 
26060
        
 
26061
# check transactions-6 success:         1
 
26062
# INFO: Storage engine used for t1 seems to be transactional.
 
26063
COMMIT;
 
26064
        
 
26065
# check transactions-7 success:         1
 
26066
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26067
COMMIT WORK;
 
26068
SET @@session.sql_mode = 'traditional';
 
26069
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
26070
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26071
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
26072
'', '', 'was inserted' FROM t0_template
 
26073
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26074
ERROR 22012: Division by 0
 
26075
COMMIT;
 
26076
        
 
26077
# check transactions-8 success:         1
 
26078
# INFO: Storage engine used for t1 seems to be able to revert
 
26079
#       changes made by the failing statement.
 
26080
SET @@session.sql_mode = '';
 
26081
SET AUTOCOMMIT= 1;
 
26082
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26083
COMMIT WORK;
 
26084
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
26085
        
 
26086
# check special-1 success:      1
 
26087
UPDATE t1 SET f_charbig = '';
 
26088
        
 
26089
# check special-2 success:      1
 
26090
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
26091
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26092
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
26093
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26094
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26095
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26096
'just inserted' FROM t0_template
 
26097
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26098
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
26099
BEGIN
 
26100
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26101
f_charbig = 'updated by trigger'
 
26102
      WHERE f_int1 = new.f_int1;
 
26103
END|
 
26104
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26105
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26106
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26107
        
 
26108
# check trigger-1 success:      1
 
26109
DROP TRIGGER trg_1;
 
26110
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26111
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26112
f_charbig = 'just inserted'
 
26113
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26114
DELETE FROM t0_aux
 
26115
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26116
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26117
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26118
'just inserted' FROM t0_template
 
26119
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26120
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
26121
BEGIN
 
26122
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26123
f_charbig = 'updated by trigger'
 
26124
      WHERE f_int1 = new.f_int1;
 
26125
END|
 
26126
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26127
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26128
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26129
        
 
26130
# check trigger-2 success:      1
 
26131
DROP TRIGGER trg_1;
 
26132
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26133
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26134
f_charbig = 'just inserted'
 
26135
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26136
DELETE FROM t0_aux
 
26137
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26138
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26139
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26140
'just inserted' FROM t0_template
 
26141
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26142
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26143
BEGIN
 
26144
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26145
f_charbig = 'updated by trigger'
 
26146
      WHERE f_int1 = new.f_int1;
 
26147
END|
 
26148
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26149
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26150
        
 
26151
# check trigger-3 success:      1
 
26152
DROP TRIGGER trg_1;
 
26153
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26154
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26155
f_charbig = 'just inserted'
 
26156
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26157
DELETE FROM t0_aux
 
26158
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26159
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26160
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26161
'just inserted' FROM t0_template
 
26162
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26163
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26164
BEGIN
 
26165
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26166
f_charbig = 'updated by trigger'
 
26167
      WHERE f_int1 = - old.f_int1;
 
26168
END|
 
26169
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26170
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26171
        
 
26172
# check trigger-4 success:      1
 
26173
DROP TRIGGER trg_1;
 
26174
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26175
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26176
f_charbig = 'just inserted'
 
26177
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26178
DELETE FROM t0_aux
 
26179
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26180
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26181
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26182
'just inserted' FROM t0_template
 
26183
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26184
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26185
BEGIN
 
26186
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26187
f_charbig = 'updated by trigger'
 
26188
      WHERE f_int1 = new.f_int1;
 
26189
END|
 
26190
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26191
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26192
        
 
26193
# check trigger-5 success:      1
 
26194
DROP TRIGGER trg_1;
 
26195
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26196
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26197
f_charbig = 'just inserted'
 
26198
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26199
DELETE FROM t0_aux
 
26200
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26201
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26202
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26203
'just inserted' FROM t0_template
 
26204
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26205
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26206
BEGIN
 
26207
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26208
f_charbig = 'updated by trigger'
 
26209
      WHERE f_int1 = - old.f_int1;
 
26210
END|
 
26211
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26212
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26213
        
 
26214
# check trigger-6 success:      1
 
26215
DROP TRIGGER trg_1;
 
26216
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26217
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26218
f_charbig = 'just inserted'
 
26219
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26220
DELETE FROM t0_aux
 
26221
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26222
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26223
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26224
'just inserted' FROM t0_template
 
26225
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26226
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
26227
BEGIN
 
26228
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26229
f_charbig = 'updated by trigger'
 
26230
      WHERE f_int1 = - old.f_int1;
 
26231
END|
 
26232
DELETE FROM t0_aux
 
26233
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26234
        
 
26235
# check trigger-7 success:      1
 
26236
DROP TRIGGER trg_1;
 
26237
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26238
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26239
f_charbig = 'just inserted'
 
26240
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26241
DELETE FROM t0_aux
 
26242
WHERE ABS(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 AFTER DELETE 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 = - old.f_int1;
 
26252
END|
 
26253
DELETE FROM t0_aux
 
26254
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26255
        
 
26256
# check trigger-8 success:      1
 
26257
DROP TRIGGER trg_1;
 
26258
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26259
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26260
f_charbig = 'just inserted'
 
26261
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26262
DELETE FROM t0_aux
 
26263
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26264
DELETE FROM t1
 
26265
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26266
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26267
BEGIN
 
26268
SET new.f_int1 = old.f_int1 + @max_row,
 
26269
new.f_int2 = old.f_int2 - @max_row,
 
26270
new.f_charbig = '####updated per update trigger####';
 
26271
END|
 
26272
UPDATE t1
 
26273
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26274
f_charbig = '####updated per update statement itself####';
 
26275
        
 
26276
# check trigger-9 success:      1
 
26277
DROP TRIGGER trg_2;
 
26278
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26279
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26280
f_charbig = CONCAT('===',f_char1,'===');
 
26281
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26282
BEGIN
 
26283
SET new.f_int1 = new.f_int1 + @max_row,
 
26284
new.f_int2 = new.f_int2 - @max_row,
 
26285
new.f_charbig = '####updated per update trigger####';
 
26286
END|
 
26287
UPDATE t1
 
26288
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26289
f_charbig = '####updated per update statement itself####';
 
26290
        
 
26291
# check trigger-10 success:     1
 
26292
DROP TRIGGER trg_2;
 
26293
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26294
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26295
f_charbig = CONCAT('===',f_char1,'===');
 
26296
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26297
BEGIN
 
26298
SET new.f_int1 = @my_max1 + @counter,
 
26299
new.f_int2 = @my_min2 - @counter,
 
26300
new.f_charbig = '####updated per insert trigger####';
 
26301
SET @counter = @counter + 1;
 
26302
END|
 
26303
SET @counter = 1;
 
26304
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26305
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26306
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26307
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26308
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26309
ORDER BY f_int1;
 
26310
DROP TRIGGER trg_3;
 
26311
        
 
26312
# check trigger-11 success:     1
 
26313
DELETE FROM t1
 
26314
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26315
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26316
AND f_charbig = '####updated per insert trigger####';
 
26317
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26318
BEGIN
 
26319
SET new.f_int1 = @my_max1 + @counter,
 
26320
new.f_int2 = @my_min2 - @counter,
 
26321
new.f_charbig = '####updated per insert trigger####';
 
26322
SET @counter = @counter + 1;
 
26323
END|
 
26324
SET @counter = 1;
 
26325
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26326
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
26327
SELECT CAST(f_int1 AS CHAR),
 
26328
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26329
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26330
ORDER BY f_int1;
 
26331
DROP TRIGGER trg_3;
 
26332
        
 
26333
# check trigger-12 success:     1
 
26334
DELETE FROM t1
 
26335
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26336
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26337
AND f_charbig = '####updated per insert trigger####';
 
26338
ANALYZE  TABLE t1;
 
26339
Table   Op      Msg_type        Msg_text
 
26340
test.t1 analyze status  OK
 
26341
CHECK    TABLE t1 EXTENDED;
 
26342
Table   Op      Msg_type        Msg_text
 
26343
test.t1 check   status  OK
 
26344
CHECKSUM TABLE t1 EXTENDED;
 
26345
Table   Checksum
 
26346
test.t1 <some_value>
 
26347
OPTIMIZE TABLE t1;
 
26348
Table   Op      Msg_type        Msg_text
 
26349
test.t1 optimize        status  OK
 
26350
# check layout success:    1
 
26351
REPAIR   TABLE t1 EXTENDED;
 
26352
Table   Op      Msg_type        Msg_text
 
26353
test.t1 repair  note    The storage engine for the table doesn't support repair
 
26354
# check layout success:    1
 
26355
TRUNCATE t1;
 
26356
        
 
26357
# check TRUNCATE success:       1
 
26358
# check layout success:    1
 
26359
# End usability test (inc/partition_check.inc)
 
26360
DROP TABLE t1;
 
26361
CREATE TABLE t1 (
 
26362
f_int1 INTEGER,
 
26363
f_int2 INTEGER,
 
26364
f_char1 CHAR(20),
 
26365
f_char2 CHAR(20),
 
26366
f_charbig VARCHAR(1000)
 
26367
 
 
26368
)
 
26369
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
26370
(PARTITION part_1 VALUES IN (0)
 
26371
(SUBPARTITION sp11, SUBPARTITION sp12),
 
26372
PARTITION part_2 VALUES IN (1)
 
26373
(SUBPARTITION sp21, SUBPARTITION sp22),
 
26374
PARTITION part_3 VALUES IN (2)
 
26375
(SUBPARTITION sp31, SUBPARTITION sp32),
 
26376
PARTITION part_4 VALUES IN (NULL)
 
26377
(SUBPARTITION sp41, SUBPARTITION sp42));
 
26378
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26379
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26380
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
26381
ALTER TABLE t1 REBUILD PARTITION part_1;
 
26382
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26383
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26384
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26385
# Start usability test (inc/partition_check.inc)
 
26386
create_command
 
26387
SHOW CREATE TABLE t1;
 
26388
Table   Create Table
 
26389
t1      CREATE TABLE `t1` (
 
26390
  `f_int1` int(11) DEFAULT NULL,
 
26391
  `f_int2` int(11) DEFAULT NULL,
 
26392
  `f_char1` char(20) DEFAULT NULL,
 
26393
  `f_char2` char(20) DEFAULT NULL,
 
26394
  `f_charbig` varchar(1000) DEFAULT NULL
 
26395
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
26396
 
 
26397
# check prerequisites-1 success:    1
 
26398
# check COUNT(*) success:    1
 
26399
# check MIN/MAX(f_int1) success:    1
 
26400
# check MIN/MAX(f_int2) success:    1
 
26401
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26402
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26403
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
26404
WHERE f_int1 IN (2,3);
 
26405
# check prerequisites-3 success:    1
 
26406
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
26407
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
26408
# check read via f_int1 success: 1
 
26409
# check read via f_int2 success: 1
 
26410
        
 
26411
# check multiple-1 success:     1
 
26412
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
26413
        
 
26414
# check multiple-2 success:     1
 
26415
INSERT INTO t1 SELECT * FROM t0_template
 
26416
WHERE MOD(f_int1,3) = 0;
 
26417
        
 
26418
# check multiple-3 success:     1
 
26419
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
26420
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
26421
AND @max_row_div2 + @max_row_div4;
 
26422
        
 
26423
# check multiple-4 success:     1
 
26424
DELETE FROM t1
 
26425
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
26426
AND @max_row_div2 + @max_row_div4 + @max_row;
 
26427
        
 
26428
# check multiple-5 success:     1
 
26429
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
26430
INSERT INTO t1
 
26431
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26432
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26433
f_charbig = '#SINGLE#';
 
26434
        
 
26435
# check single-1 success:       1
 
26436
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
26437
INSERT INTO t1
 
26438
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26439
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26440
f_charbig = '#SINGLE#';
 
26441
        
 
26442
# check single-2 success:       1
 
26443
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
26444
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
26445
UPDATE t1 SET f_int1 = @cur_value2
 
26446
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
26447
        
 
26448
# check single-3 success:       1
 
26449
SET @cur_value1= -1;
 
26450
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
26451
UPDATE t1 SET f_int1 = @cur_value1
 
26452
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
26453
        
 
26454
# check single-4 success:       1
 
26455
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
26456
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
26457
        
 
26458
# check single-5 success:       1
 
26459
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
26460
        
 
26461
# check single-6 success:       1
 
26462
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
26463
        
 
26464
# check single-7 success:       1
 
26465
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
26466
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
26467
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
26468
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
26469
f_charbig = '#NULL#';
 
26470
INSERT INTO t1
 
26471
SET f_int1 = NULL , f_int2 = -@max_row,
 
26472
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
26473
f_charbig = '#NULL#';
 
26474
# check null success:    1
 
26475
        
 
26476
# check null-1 success:         1
 
26477
UPDATE t1 SET f_int1 = -@max_row
 
26478
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26479
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26480
        
 
26481
# check null-2 success:         1
 
26482
UPDATE t1 SET f_int1 = NULL
 
26483
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26484
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26485
        
 
26486
# check null-3 success:         1
 
26487
DELETE FROM t1
 
26488
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26489
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26490
        
 
26491
# check null-4 success:         1
 
26492
DELETE FROM t1
 
26493
WHERE f_int1 = 0 AND f_int2 = 0
 
26494
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
26495
AND f_charbig = '#NULL#';
 
26496
SET AUTOCOMMIT= 0;
 
26497
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26498
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26499
FROM t0_template source_tab
 
26500
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26501
        
 
26502
# check transactions-1 success:         1
 
26503
COMMIT WORK;
 
26504
        
 
26505
# check transactions-2 success:         1
 
26506
ROLLBACK WORK;
 
26507
        
 
26508
# check transactions-3 success:         1
 
26509
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26510
COMMIT WORK;
 
26511
ROLLBACK WORK;
 
26512
        
 
26513
# check transactions-4 success:         1
 
26514
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26515
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26516
FROM t0_template source_tab
 
26517
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26518
        
 
26519
# check transactions-5 success:         1
 
26520
ROLLBACK WORK;
 
26521
        
 
26522
# check transactions-6 success:         1
 
26523
# INFO: Storage engine used for t1 seems to be transactional.
 
26524
COMMIT;
 
26525
        
 
26526
# check transactions-7 success:         1
 
26527
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26528
COMMIT WORK;
 
26529
SET @@session.sql_mode = 'traditional';
 
26530
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
26531
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26532
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
26533
'', '', 'was inserted' FROM t0_template
 
26534
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26535
ERROR 22012: Division by 0
 
26536
COMMIT;
 
26537
        
 
26538
# check transactions-8 success:         1
 
26539
# INFO: Storage engine used for t1 seems to be able to revert
 
26540
#       changes made by the failing statement.
 
26541
SET @@session.sql_mode = '';
 
26542
SET AUTOCOMMIT= 1;
 
26543
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26544
COMMIT WORK;
 
26545
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
26546
        
 
26547
# check special-1 success:      1
 
26548
UPDATE t1 SET f_charbig = '';
 
26549
        
 
26550
# check special-2 success:      1
 
26551
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
26552
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26553
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
26554
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26555
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26556
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26557
'just inserted' FROM t0_template
 
26558
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26559
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
26560
BEGIN
 
26561
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26562
f_charbig = 'updated by trigger'
 
26563
      WHERE f_int1 = new.f_int1;
 
26564
END|
 
26565
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26566
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26567
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26568
        
 
26569
# check trigger-1 success:      1
 
26570
DROP TRIGGER trg_1;
 
26571
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26572
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26573
f_charbig = 'just inserted'
 
26574
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26575
DELETE FROM t0_aux
 
26576
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26577
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26578
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26579
'just inserted' FROM t0_template
 
26580
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26581
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
26582
BEGIN
 
26583
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26584
f_charbig = 'updated by trigger'
 
26585
      WHERE f_int1 = new.f_int1;
 
26586
END|
 
26587
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26588
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26589
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26590
        
 
26591
# check trigger-2 success:      1
 
26592
DROP TRIGGER trg_1;
 
26593
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26594
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26595
f_charbig = 'just inserted'
 
26596
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26597
DELETE FROM t0_aux
 
26598
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26599
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26600
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26601
'just inserted' FROM t0_template
 
26602
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26603
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26604
BEGIN
 
26605
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26606
f_charbig = 'updated by trigger'
 
26607
      WHERE f_int1 = new.f_int1;
 
26608
END|
 
26609
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26610
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26611
        
 
26612
# check trigger-3 success:      1
 
26613
DROP TRIGGER trg_1;
 
26614
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26615
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26616
f_charbig = 'just inserted'
 
26617
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26618
DELETE FROM t0_aux
 
26619
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26620
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26621
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26622
'just inserted' FROM t0_template
 
26623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26624
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26625
BEGIN
 
26626
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26627
f_charbig = 'updated by trigger'
 
26628
      WHERE f_int1 = - old.f_int1;
 
26629
END|
 
26630
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26631
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26632
        
 
26633
# check trigger-4 success:      1
 
26634
DROP TRIGGER trg_1;
 
26635
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26636
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26637
f_charbig = 'just inserted'
 
26638
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26639
DELETE FROM t0_aux
 
26640
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26641
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26642
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26643
'just inserted' FROM t0_template
 
26644
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26645
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26646
BEGIN
 
26647
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26648
f_charbig = 'updated by trigger'
 
26649
      WHERE f_int1 = new.f_int1;
 
26650
END|
 
26651
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26652
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26653
        
 
26654
# check trigger-5 success:      1
 
26655
DROP TRIGGER trg_1;
 
26656
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26657
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26658
f_charbig = 'just inserted'
 
26659
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26660
DELETE FROM t0_aux
 
26661
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26662
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26663
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26664
'just inserted' FROM t0_template
 
26665
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26666
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26667
BEGIN
 
26668
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26669
f_charbig = 'updated by trigger'
 
26670
      WHERE f_int1 = - old.f_int1;
 
26671
END|
 
26672
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26673
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26674
        
 
26675
# check trigger-6 success:      1
 
26676
DROP TRIGGER trg_1;
 
26677
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26678
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26679
f_charbig = 'just inserted'
 
26680
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26681
DELETE FROM t0_aux
 
26682
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26683
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26684
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26685
'just inserted' FROM t0_template
 
26686
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26687
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
26688
BEGIN
 
26689
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26690
f_charbig = 'updated by trigger'
 
26691
      WHERE f_int1 = - old.f_int1;
 
26692
END|
 
26693
DELETE FROM t0_aux
 
26694
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26695
        
 
26696
# check trigger-7 success:      1
 
26697
DROP TRIGGER trg_1;
 
26698
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26699
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26700
f_charbig = 'just inserted'
 
26701
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26702
DELETE FROM t0_aux
 
26703
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26704
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26705
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26706
'just inserted' FROM t0_template
 
26707
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26708
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
26709
BEGIN
 
26710
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26711
f_charbig = 'updated by trigger'
 
26712
      WHERE f_int1 = - old.f_int1;
 
26713
END|
 
26714
DELETE FROM t0_aux
 
26715
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26716
        
 
26717
# check trigger-8 success:      1
 
26718
DROP TRIGGER trg_1;
 
26719
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26720
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26721
f_charbig = 'just inserted'
 
26722
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26723
DELETE FROM t0_aux
 
26724
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26725
DELETE FROM t1
 
26726
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26727
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26728
BEGIN
 
26729
SET new.f_int1 = old.f_int1 + @max_row,
 
26730
new.f_int2 = old.f_int2 - @max_row,
 
26731
new.f_charbig = '####updated per update trigger####';
 
26732
END|
 
26733
UPDATE t1
 
26734
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26735
f_charbig = '####updated per update statement itself####';
 
26736
        
 
26737
# check trigger-9 success:      1
 
26738
DROP TRIGGER trg_2;
 
26739
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26740
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26741
f_charbig = CONCAT('===',f_char1,'===');
 
26742
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26743
BEGIN
 
26744
SET new.f_int1 = new.f_int1 + @max_row,
 
26745
new.f_int2 = new.f_int2 - @max_row,
 
26746
new.f_charbig = '####updated per update trigger####';
 
26747
END|
 
26748
UPDATE t1
 
26749
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26750
f_charbig = '####updated per update statement itself####';
 
26751
        
 
26752
# check trigger-10 success:     1
 
26753
DROP TRIGGER trg_2;
 
26754
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26755
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26756
f_charbig = CONCAT('===',f_char1,'===');
 
26757
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26758
BEGIN
 
26759
SET new.f_int1 = @my_max1 + @counter,
 
26760
new.f_int2 = @my_min2 - @counter,
 
26761
new.f_charbig = '####updated per insert trigger####';
 
26762
SET @counter = @counter + 1;
 
26763
END|
 
26764
SET @counter = 1;
 
26765
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26766
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26767
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26768
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26769
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26770
ORDER BY f_int1;
 
26771
DROP TRIGGER trg_3;
 
26772
        
 
26773
# check trigger-11 success:     1
 
26774
DELETE FROM t1
 
26775
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26776
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26777
AND f_charbig = '####updated per insert trigger####';
 
26778
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26779
BEGIN
 
26780
SET new.f_int1 = @my_max1 + @counter,
 
26781
new.f_int2 = @my_min2 - @counter,
 
26782
new.f_charbig = '####updated per insert trigger####';
 
26783
SET @counter = @counter + 1;
 
26784
END|
 
26785
SET @counter = 1;
 
26786
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26787
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
26788
SELECT CAST(f_int1 AS CHAR),
 
26789
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26790
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26791
ORDER BY f_int1;
 
26792
DROP TRIGGER trg_3;
 
26793
        
 
26794
# check trigger-12 success:     1
 
26795
DELETE FROM t1
 
26796
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26797
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26798
AND f_charbig = '####updated per insert trigger####';
 
26799
ANALYZE  TABLE t1;
 
26800
Table   Op      Msg_type        Msg_text
 
26801
test.t1 analyze status  OK
 
26802
CHECK    TABLE t1 EXTENDED;
 
26803
Table   Op      Msg_type        Msg_text
 
26804
test.t1 check   status  OK
 
26805
CHECKSUM TABLE t1 EXTENDED;
 
26806
Table   Checksum
 
26807
test.t1 <some_value>
 
26808
OPTIMIZE TABLE t1;
 
26809
Table   Op      Msg_type        Msg_text
 
26810
test.t1 optimize        status  OK
 
26811
# check layout success:    1
 
26812
REPAIR   TABLE t1 EXTENDED;
 
26813
Table   Op      Msg_type        Msg_text
 
26814
test.t1 repair  note    The storage engine for the table doesn't support repair
 
26815
# check layout success:    1
 
26816
TRUNCATE t1;
 
26817
        
 
26818
# check TRUNCATE success:       1
 
26819
# check layout success:    1
 
26820
# End usability test (inc/partition_check.inc)
 
26821
DROP TABLE t1;
 
26822
CREATE TABLE t1 (
 
26823
f_int1 INTEGER,
 
26824
f_int2 INTEGER,
 
26825
f_char1 CHAR(20),
 
26826
f_char2 CHAR(20),
 
26827
f_charbig VARCHAR(1000)
 
26828
 
 
26829
)
 
26830
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
26831
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
26832
(PARTITION part_1 VALUES IN (0),
 
26833
 PARTITION part_2 VALUES IN (1),
 
26834
 PARTITION part_3 VALUES IN (NULL));
 
26835
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26836
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26837
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
26838
ALTER TABLE t1 REBUILD PARTITION part_1;
 
26839
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26840
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26841
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26842
# Start usability test (inc/partition_check.inc)
 
26843
create_command
 
26844
SHOW CREATE TABLE t1;
 
26845
Table   Create Table
 
26846
t1      CREATE TABLE `t1` (
 
26847
  `f_int1` int(11) DEFAULT NULL,
 
26848
  `f_int2` int(11) DEFAULT NULL,
 
26849
  `f_char1` char(20) DEFAULT NULL,
 
26850
  `f_char2` char(20) DEFAULT NULL,
 
26851
  `f_charbig` varchar(1000) DEFAULT NULL
 
26852
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
 
26853
 
 
26854
# check prerequisites-1 success:    1
 
26855
# check COUNT(*) success:    1
 
26856
# check MIN/MAX(f_int1) success:    1
 
26857
# check MIN/MAX(f_int2) success:    1
 
26858
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26859
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26860
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
26861
WHERE f_int1 IN (2,3);
 
26862
# check prerequisites-3 success:    1
 
26863
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
26864
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
26865
# check read via f_int1 success: 1
 
26866
# check read via f_int2 success: 1
 
26867
        
 
26868
# check multiple-1 success:     1
 
26869
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
26870
        
 
26871
# check multiple-2 success:     1
 
26872
INSERT INTO t1 SELECT * FROM t0_template
 
26873
WHERE MOD(f_int1,3) = 0;
 
26874
        
 
26875
# check multiple-3 success:     1
 
26876
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
26877
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
26878
AND @max_row_div2 + @max_row_div4;
 
26879
        
 
26880
# check multiple-4 success:     1
 
26881
DELETE FROM t1
 
26882
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
26883
AND @max_row_div2 + @max_row_div4 + @max_row;
 
26884
        
 
26885
# check multiple-5 success:     1
 
26886
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
26887
INSERT INTO t1
 
26888
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26889
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26890
f_charbig = '#SINGLE#';
 
26891
        
 
26892
# check single-1 success:       1
 
26893
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
26894
INSERT INTO t1
 
26895
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26896
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26897
f_charbig = '#SINGLE#';
 
26898
        
 
26899
# check single-2 success:       1
 
26900
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
26901
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
26902
UPDATE t1 SET f_int1 = @cur_value2
 
26903
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
26904
        
 
26905
# check single-3 success:       1
 
26906
SET @cur_value1= -1;
 
26907
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
26908
UPDATE t1 SET f_int1 = @cur_value1
 
26909
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
26910
        
 
26911
# check single-4 success:       1
 
26912
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
26913
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
26914
        
 
26915
# check single-5 success:       1
 
26916
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
26917
        
 
26918
# check single-6 success:       1
 
26919
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
26920
        
 
26921
# check single-7 success:       1
 
26922
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
26923
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
26924
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
26925
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
26926
f_charbig = '#NULL#';
 
26927
INSERT INTO t1
 
26928
SET f_int1 = NULL , f_int2 = -@max_row,
 
26929
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
26930
f_charbig = '#NULL#';
 
26931
# check null success:    1
 
26932
        
 
26933
# check null-1 success:         1
 
26934
UPDATE t1 SET f_int1 = -@max_row
 
26935
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26936
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26937
        
 
26938
# check null-2 success:         1
 
26939
UPDATE t1 SET f_int1 = NULL
 
26940
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26941
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26942
        
 
26943
# check null-3 success:         1
 
26944
DELETE FROM t1
 
26945
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26946
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26947
        
 
26948
# check null-4 success:         1
 
26949
DELETE FROM t1
 
26950
WHERE f_int1 = 0 AND f_int2 = 0
 
26951
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
26952
AND f_charbig = '#NULL#';
 
26953
SET AUTOCOMMIT= 0;
 
26954
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26955
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26956
FROM t0_template source_tab
 
26957
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26958
        
 
26959
# check transactions-1 success:         1
 
26960
COMMIT WORK;
 
26961
        
 
26962
# check transactions-2 success:         1
 
26963
ROLLBACK WORK;
 
26964
        
 
26965
# check transactions-3 success:         1
 
26966
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26967
COMMIT WORK;
 
26968
ROLLBACK WORK;
 
26969
        
 
26970
# check transactions-4 success:         1
 
26971
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26972
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26973
FROM t0_template source_tab
 
26974
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26975
        
 
26976
# check transactions-5 success:         1
 
26977
ROLLBACK WORK;
 
26978
        
 
26979
# check transactions-6 success:         1
 
26980
# INFO: Storage engine used for t1 seems to be transactional.
 
26981
COMMIT;
 
26982
        
 
26983
# check transactions-7 success:         1
 
26984
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26985
COMMIT WORK;
 
26986
SET @@session.sql_mode = 'traditional';
 
26987
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
26988
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26989
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
26990
'', '', 'was inserted' FROM t0_template
 
26991
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26992
ERROR 22012: Division by 0
 
26993
COMMIT;
 
26994
        
 
26995
# check transactions-8 success:         1
 
26996
# INFO: Storage engine used for t1 seems to be able to revert
 
26997
#       changes made by the failing statement.
 
26998
SET @@session.sql_mode = '';
 
26999
SET AUTOCOMMIT= 1;
 
27000
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27001
COMMIT WORK;
 
27002
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
27003
        
 
27004
# check special-1 success:      1
 
27005
UPDATE t1 SET f_charbig = '';
 
27006
        
 
27007
# check special-2 success:      1
 
27008
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
27009
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27010
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
27011
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27012
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27013
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27014
'just inserted' FROM t0_template
 
27015
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27016
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
27017
BEGIN
 
27018
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27019
f_charbig = 'updated by trigger'
 
27020
      WHERE f_int1 = new.f_int1;
 
27021
END|
 
27022
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27023
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27024
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27025
        
 
27026
# check trigger-1 success:      1
 
27027
DROP TRIGGER trg_1;
 
27028
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27029
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27030
f_charbig = 'just inserted'
 
27031
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27032
DELETE FROM t0_aux
 
27033
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27034
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27035
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27036
'just inserted' FROM t0_template
 
27037
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27038
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
27039
BEGIN
 
27040
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27041
f_charbig = 'updated by trigger'
 
27042
      WHERE f_int1 = new.f_int1;
 
27043
END|
 
27044
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27045
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27046
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27047
        
 
27048
# check trigger-2 success:      1
 
27049
DROP TRIGGER trg_1;
 
27050
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27051
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27052
f_charbig = 'just inserted'
 
27053
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27054
DELETE FROM t0_aux
 
27055
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27056
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27057
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27058
'just inserted' FROM t0_template
 
27059
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27060
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27061
BEGIN
 
27062
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27063
f_charbig = 'updated by trigger'
 
27064
      WHERE f_int1 = new.f_int1;
 
27065
END|
 
27066
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27067
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27068
        
 
27069
# check trigger-3 success:      1
 
27070
DROP TRIGGER trg_1;
 
27071
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27072
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27073
f_charbig = 'just inserted'
 
27074
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27075
DELETE FROM t0_aux
 
27076
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27077
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27078
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27079
'just inserted' FROM t0_template
 
27080
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27081
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27082
BEGIN
 
27083
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27084
f_charbig = 'updated by trigger'
 
27085
      WHERE f_int1 = - old.f_int1;
 
27086
END|
 
27087
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27088
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27089
        
 
27090
# check trigger-4 success:      1
 
27091
DROP TRIGGER trg_1;
 
27092
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27093
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27094
f_charbig = 'just inserted'
 
27095
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27096
DELETE FROM t0_aux
 
27097
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27098
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27099
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27100
'just inserted' FROM t0_template
 
27101
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27102
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27103
BEGIN
 
27104
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27105
f_charbig = 'updated by trigger'
 
27106
      WHERE f_int1 = new.f_int1;
 
27107
END|
 
27108
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27109
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27110
        
 
27111
# check trigger-5 success:      1
 
27112
DROP TRIGGER trg_1;
 
27113
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27114
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27115
f_charbig = 'just inserted'
 
27116
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27117
DELETE FROM t0_aux
 
27118
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27119
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27120
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27121
'just inserted' FROM t0_template
 
27122
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27123
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27124
BEGIN
 
27125
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27126
f_charbig = 'updated by trigger'
 
27127
      WHERE f_int1 = - old.f_int1;
 
27128
END|
 
27129
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27130
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27131
        
 
27132
# check trigger-6 success:      1
 
27133
DROP TRIGGER trg_1;
 
27134
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27135
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27136
f_charbig = 'just inserted'
 
27137
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27138
DELETE FROM t0_aux
 
27139
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27140
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27141
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27142
'just inserted' FROM t0_template
 
27143
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27144
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
27145
BEGIN
 
27146
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27147
f_charbig = 'updated by trigger'
 
27148
      WHERE f_int1 = - old.f_int1;
 
27149
END|
 
27150
DELETE FROM t0_aux
 
27151
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27152
        
 
27153
# check trigger-7 success:      1
 
27154
DROP TRIGGER trg_1;
 
27155
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27156
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27157
f_charbig = 'just inserted'
 
27158
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27159
DELETE FROM t0_aux
 
27160
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27161
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27162
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27163
'just inserted' FROM t0_template
 
27164
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27165
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
27166
BEGIN
 
27167
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27168
f_charbig = 'updated by trigger'
 
27169
      WHERE f_int1 = - old.f_int1;
 
27170
END|
 
27171
DELETE FROM t0_aux
 
27172
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27173
        
 
27174
# check trigger-8 success:      1
 
27175
DROP TRIGGER trg_1;
 
27176
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27177
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27178
f_charbig = 'just inserted'
 
27179
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27180
DELETE FROM t0_aux
 
27181
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27182
DELETE FROM t1
 
27183
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27184
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27185
BEGIN
 
27186
SET new.f_int1 = old.f_int1 + @max_row,
 
27187
new.f_int2 = old.f_int2 - @max_row,
 
27188
new.f_charbig = '####updated per update trigger####';
 
27189
END|
 
27190
UPDATE t1
 
27191
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27192
f_charbig = '####updated per update statement itself####';
 
27193
        
 
27194
# check trigger-9 success:      1
 
27195
DROP TRIGGER trg_2;
 
27196
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27197
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27198
f_charbig = CONCAT('===',f_char1,'===');
 
27199
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27200
BEGIN
 
27201
SET new.f_int1 = new.f_int1 + @max_row,
 
27202
new.f_int2 = new.f_int2 - @max_row,
 
27203
new.f_charbig = '####updated per update trigger####';
 
27204
END|
 
27205
UPDATE t1
 
27206
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27207
f_charbig = '####updated per update statement itself####';
 
27208
        
 
27209
# check trigger-10 success:     1
 
27210
DROP TRIGGER trg_2;
 
27211
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27212
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27213
f_charbig = CONCAT('===',f_char1,'===');
 
27214
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27215
BEGIN
 
27216
SET new.f_int1 = @my_max1 + @counter,
 
27217
new.f_int2 = @my_min2 - @counter,
 
27218
new.f_charbig = '####updated per insert trigger####';
 
27219
SET @counter = @counter + 1;
 
27220
END|
 
27221
SET @counter = 1;
 
27222
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27223
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27224
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27225
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27226
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27227
ORDER BY f_int1;
 
27228
DROP TRIGGER trg_3;
 
27229
        
 
27230
# check trigger-11 success:     1
 
27231
DELETE FROM t1
 
27232
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27233
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27234
AND f_charbig = '####updated per insert trigger####';
 
27235
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27236
BEGIN
 
27237
SET new.f_int1 = @my_max1 + @counter,
 
27238
new.f_int2 = @my_min2 - @counter,
 
27239
new.f_charbig = '####updated per insert trigger####';
 
27240
SET @counter = @counter + 1;
 
27241
END|
 
27242
SET @counter = 1;
 
27243
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27244
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
27245
SELECT CAST(f_int1 AS CHAR),
 
27246
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27247
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27248
ORDER BY f_int1;
 
27249
DROP TRIGGER trg_3;
 
27250
        
 
27251
# check trigger-12 success:     1
 
27252
DELETE FROM t1
 
27253
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27254
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27255
AND f_charbig = '####updated per insert trigger####';
 
27256
ANALYZE  TABLE t1;
 
27257
Table   Op      Msg_type        Msg_text
 
27258
test.t1 analyze status  OK
 
27259
CHECK    TABLE t1 EXTENDED;
 
27260
Table   Op      Msg_type        Msg_text
 
27261
test.t1 check   status  OK
 
27262
CHECKSUM TABLE t1 EXTENDED;
 
27263
Table   Checksum
 
27264
test.t1 <some_value>
 
27265
OPTIMIZE TABLE t1;
 
27266
Table   Op      Msg_type        Msg_text
 
27267
test.t1 optimize        status  OK
 
27268
# check layout success:    1
 
27269
REPAIR   TABLE t1 EXTENDED;
 
27270
Table   Op      Msg_type        Msg_text
 
27271
test.t1 repair  note    The storage engine for the table doesn't support repair
 
27272
# check layout success:    1
 
27273
TRUNCATE t1;
 
27274
        
 
27275
# check TRUNCATE success:       1
 
27276
# check layout success:    1
 
27277
# End usability test (inc/partition_check.inc)
 
27278
DROP TABLE t1;
 
27279
#  5.2 ALTER ... REBUILD PARTITION part_1,part_2;
 
27280
DROP TABLE IF EXISTS t1;
 
27281
CREATE TABLE t1 (
 
27282
f_int1 INTEGER,
 
27283
f_int2 INTEGER,
 
27284
f_char1 CHAR(20),
 
27285
f_char2 CHAR(20),
 
27286
f_charbig VARCHAR(1000)
 
27287
 
 
27288
)
 
27289
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
27290
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27291
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27292
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
27293
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
27294
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27295
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27296
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27297
# Start usability test (inc/partition_check.inc)
 
27298
create_command
 
27299
SHOW CREATE TABLE t1;
 
27300
Table   Create Table
 
27301
t1      CREATE TABLE `t1` (
 
27302
  `f_int1` int(11) DEFAULT NULL,
 
27303
  `f_int2` int(11) DEFAULT NULL,
 
27304
  `f_char1` char(20) DEFAULT NULL,
 
27305
  `f_char2` char(20) DEFAULT NULL,
 
27306
  `f_charbig` varchar(1000) DEFAULT NULL
 
27307
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
 
27308
 
 
27309
# check prerequisites-1 success:    1
 
27310
# check COUNT(*) success:    1
 
27311
# check MIN/MAX(f_int1) success:    1
 
27312
# check MIN/MAX(f_int2) success:    1
 
27313
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27314
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27315
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
27316
WHERE f_int1 IN (2,3);
 
27317
# check prerequisites-3 success:    1
 
27318
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27319
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
27320
# check read via f_int1 success: 1
 
27321
# check read via f_int2 success: 1
 
27322
        
 
27323
# check multiple-1 success:     1
 
27324
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
27325
        
 
27326
# check multiple-2 success:     1
 
27327
INSERT INTO t1 SELECT * FROM t0_template
 
27328
WHERE MOD(f_int1,3) = 0;
 
27329
        
 
27330
# check multiple-3 success:     1
 
27331
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
27332
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
27333
AND @max_row_div2 + @max_row_div4;
 
27334
        
 
27335
# check multiple-4 success:     1
 
27336
DELETE FROM t1
 
27337
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
27338
AND @max_row_div2 + @max_row_div4 + @max_row;
 
27339
        
 
27340
# check multiple-5 success:     1
 
27341
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
27342
INSERT INTO t1
 
27343
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27344
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27345
f_charbig = '#SINGLE#';
 
27346
        
 
27347
# check single-1 success:       1
 
27348
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
27349
INSERT INTO t1
 
27350
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27351
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27352
f_charbig = '#SINGLE#';
 
27353
        
 
27354
# check single-2 success:       1
 
27355
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
27356
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
27357
UPDATE t1 SET f_int1 = @cur_value2
 
27358
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
27359
        
 
27360
# check single-3 success:       1
 
27361
SET @cur_value1= -1;
 
27362
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
27363
UPDATE t1 SET f_int1 = @cur_value1
 
27364
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
27365
        
 
27366
# check single-4 success:       1
 
27367
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
27368
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
27369
        
 
27370
# check single-5 success:       1
 
27371
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
27372
        
 
27373
# check single-6 success:       1
 
27374
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
27375
        
 
27376
# check single-7 success:       1
 
27377
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
27378
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
27379
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
27380
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
27381
f_charbig = '#NULL#';
 
27382
INSERT INTO t1
 
27383
SET f_int1 = NULL , f_int2 = -@max_row,
 
27384
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
27385
f_charbig = '#NULL#';
 
27386
# check null success:    1
 
27387
        
 
27388
# check null-1 success:         1
 
27389
UPDATE t1 SET f_int1 = -@max_row
 
27390
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27391
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27392
        
 
27393
# check null-2 success:         1
 
27394
UPDATE t1 SET f_int1 = NULL
 
27395
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27396
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27397
        
 
27398
# check null-3 success:         1
 
27399
DELETE FROM t1
 
27400
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27401
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27402
        
 
27403
# check null-4 success:         1
 
27404
DELETE FROM t1
 
27405
WHERE f_int1 = 0 AND f_int2 = 0
 
27406
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
27407
AND f_charbig = '#NULL#';
 
27408
SET AUTOCOMMIT= 0;
 
27409
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27410
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27411
FROM t0_template source_tab
 
27412
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27413
        
 
27414
# check transactions-1 success:         1
 
27415
COMMIT WORK;
 
27416
        
 
27417
# check transactions-2 success:         1
 
27418
ROLLBACK WORK;
 
27419
        
 
27420
# check transactions-3 success:         1
 
27421
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27422
COMMIT WORK;
 
27423
ROLLBACK WORK;
 
27424
        
 
27425
# check transactions-4 success:         1
 
27426
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27427
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27428
FROM t0_template source_tab
 
27429
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27430
        
 
27431
# check transactions-5 success:         1
 
27432
ROLLBACK WORK;
 
27433
        
 
27434
# check transactions-6 success:         1
 
27435
# INFO: Storage engine used for t1 seems to be transactional.
 
27436
COMMIT;
 
27437
        
 
27438
# check transactions-7 success:         1
 
27439
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27440
COMMIT WORK;
 
27441
SET @@session.sql_mode = 'traditional';
 
27442
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
27443
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27444
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
27445
'', '', 'was inserted' FROM t0_template
 
27446
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27447
ERROR 22012: Division by 0
 
27448
COMMIT;
 
27449
        
 
27450
# check transactions-8 success:         1
 
27451
# INFO: Storage engine used for t1 seems to be able to revert
 
27452
#       changes made by the failing statement.
 
27453
SET @@session.sql_mode = '';
 
27454
SET AUTOCOMMIT= 1;
 
27455
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27456
COMMIT WORK;
 
27457
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
27458
        
 
27459
# check special-1 success:      1
 
27460
UPDATE t1 SET f_charbig = '';
 
27461
        
 
27462
# check special-2 success:      1
 
27463
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
27464
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27465
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
27466
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27467
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27468
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27469
'just inserted' FROM t0_template
 
27470
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27471
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
27472
BEGIN
 
27473
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27474
f_charbig = 'updated by trigger'
 
27475
      WHERE f_int1 = new.f_int1;
 
27476
END|
 
27477
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27478
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27479
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27480
        
 
27481
# check trigger-1 success:      1
 
27482
DROP TRIGGER trg_1;
 
27483
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27484
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27485
f_charbig = 'just inserted'
 
27486
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27487
DELETE FROM t0_aux
 
27488
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27489
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27490
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27491
'just inserted' FROM t0_template
 
27492
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27493
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
27494
BEGIN
 
27495
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27496
f_charbig = 'updated by trigger'
 
27497
      WHERE f_int1 = new.f_int1;
 
27498
END|
 
27499
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27500
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27501
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27502
        
 
27503
# check trigger-2 success:      1
 
27504
DROP TRIGGER trg_1;
 
27505
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27506
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27507
f_charbig = 'just inserted'
 
27508
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27509
DELETE FROM t0_aux
 
27510
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27511
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27512
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27513
'just inserted' FROM t0_template
 
27514
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27515
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27516
BEGIN
 
27517
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27518
f_charbig = 'updated by trigger'
 
27519
      WHERE f_int1 = new.f_int1;
 
27520
END|
 
27521
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27522
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27523
        
 
27524
# check trigger-3 success:      1
 
27525
DROP TRIGGER trg_1;
 
27526
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27527
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27528
f_charbig = 'just inserted'
 
27529
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27530
DELETE FROM t0_aux
 
27531
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27532
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27533
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27534
'just inserted' FROM t0_template
 
27535
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27536
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27537
BEGIN
 
27538
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27539
f_charbig = 'updated by trigger'
 
27540
      WHERE f_int1 = - old.f_int1;
 
27541
END|
 
27542
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27543
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27544
        
 
27545
# check trigger-4 success:      1
 
27546
DROP TRIGGER trg_1;
 
27547
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27548
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27549
f_charbig = 'just inserted'
 
27550
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27551
DELETE FROM t0_aux
 
27552
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27553
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27554
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27555
'just inserted' FROM t0_template
 
27556
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27557
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27558
BEGIN
 
27559
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27560
f_charbig = 'updated by trigger'
 
27561
      WHERE f_int1 = new.f_int1;
 
27562
END|
 
27563
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27564
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27565
        
 
27566
# check trigger-5 success:      1
 
27567
DROP TRIGGER trg_1;
 
27568
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27569
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27570
f_charbig = 'just inserted'
 
27571
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27572
DELETE FROM t0_aux
 
27573
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27574
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27575
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27576
'just inserted' FROM t0_template
 
27577
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27578
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27579
BEGIN
 
27580
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27581
f_charbig = 'updated by trigger'
 
27582
      WHERE f_int1 = - old.f_int1;
 
27583
END|
 
27584
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27585
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27586
        
 
27587
# check trigger-6 success:      1
 
27588
DROP TRIGGER trg_1;
 
27589
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27590
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27591
f_charbig = 'just inserted'
 
27592
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27593
DELETE FROM t0_aux
 
27594
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27595
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27596
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27597
'just inserted' FROM t0_template
 
27598
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27599
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
27600
BEGIN
 
27601
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27602
f_charbig = 'updated by trigger'
 
27603
      WHERE f_int1 = - old.f_int1;
 
27604
END|
 
27605
DELETE FROM t0_aux
 
27606
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27607
        
 
27608
# check trigger-7 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 DELETE 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 = - old.f_int1;
 
27625
END|
 
27626
DELETE FROM t0_aux
 
27627
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27628
        
 
27629
# check trigger-8 success:      1
 
27630
DROP TRIGGER trg_1;
 
27631
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27632
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27633
f_charbig = 'just inserted'
 
27634
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27635
DELETE FROM t0_aux
 
27636
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27637
DELETE FROM t1
 
27638
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27639
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27640
BEGIN
 
27641
SET new.f_int1 = old.f_int1 + @max_row,
 
27642
new.f_int2 = old.f_int2 - @max_row,
 
27643
new.f_charbig = '####updated per update trigger####';
 
27644
END|
 
27645
UPDATE t1
 
27646
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27647
f_charbig = '####updated per update statement itself####';
 
27648
        
 
27649
# check trigger-9 success:      1
 
27650
DROP TRIGGER trg_2;
 
27651
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27652
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27653
f_charbig = CONCAT('===',f_char1,'===');
 
27654
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27655
BEGIN
 
27656
SET new.f_int1 = new.f_int1 + @max_row,
 
27657
new.f_int2 = new.f_int2 - @max_row,
 
27658
new.f_charbig = '####updated per update trigger####';
 
27659
END|
 
27660
UPDATE t1
 
27661
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27662
f_charbig = '####updated per update statement itself####';
 
27663
        
 
27664
# check trigger-10 success:     1
 
27665
DROP TRIGGER trg_2;
 
27666
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27667
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27668
f_charbig = CONCAT('===',f_char1,'===');
 
27669
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27670
BEGIN
 
27671
SET new.f_int1 = @my_max1 + @counter,
 
27672
new.f_int2 = @my_min2 - @counter,
 
27673
new.f_charbig = '####updated per insert trigger####';
 
27674
SET @counter = @counter + 1;
 
27675
END|
 
27676
SET @counter = 1;
 
27677
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27678
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27679
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27680
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27681
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27682
ORDER BY f_int1;
 
27683
DROP TRIGGER trg_3;
 
27684
        
 
27685
# check trigger-11 success:     1
 
27686
DELETE FROM t1
 
27687
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27688
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27689
AND f_charbig = '####updated per insert trigger####';
 
27690
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27691
BEGIN
 
27692
SET new.f_int1 = @my_max1 + @counter,
 
27693
new.f_int2 = @my_min2 - @counter,
 
27694
new.f_charbig = '####updated per insert trigger####';
 
27695
SET @counter = @counter + 1;
 
27696
END|
 
27697
SET @counter = 1;
 
27698
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27699
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
27700
SELECT CAST(f_int1 AS CHAR),
 
27701
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27702
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27703
ORDER BY f_int1;
 
27704
DROP TRIGGER trg_3;
 
27705
        
 
27706
# check trigger-12 success:     1
 
27707
DELETE FROM t1
 
27708
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27709
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27710
AND f_charbig = '####updated per insert trigger####';
 
27711
ANALYZE  TABLE t1;
 
27712
Table   Op      Msg_type        Msg_text
 
27713
test.t1 analyze status  OK
 
27714
CHECK    TABLE t1 EXTENDED;
 
27715
Table   Op      Msg_type        Msg_text
 
27716
test.t1 check   status  OK
 
27717
CHECKSUM TABLE t1 EXTENDED;
 
27718
Table   Checksum
 
27719
test.t1 <some_value>
 
27720
OPTIMIZE TABLE t1;
 
27721
Table   Op      Msg_type        Msg_text
 
27722
test.t1 optimize        status  OK
 
27723
# check layout success:    1
 
27724
REPAIR   TABLE t1 EXTENDED;
 
27725
Table   Op      Msg_type        Msg_text
 
27726
test.t1 repair  note    The storage engine for the table doesn't support repair
 
27727
# check layout success:    1
 
27728
TRUNCATE t1;
 
27729
        
 
27730
# check TRUNCATE success:       1
 
27731
# check layout success:    1
 
27732
# End usability test (inc/partition_check.inc)
 
27733
DROP TABLE t1;
 
27734
CREATE TABLE t1 (
 
27735
f_int1 INTEGER,
 
27736
f_int2 INTEGER,
 
27737
f_char1 CHAR(20),
 
27738
f_char2 CHAR(20),
 
27739
f_charbig VARCHAR(1000)
 
27740
 
 
27741
)
 
27742
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
27743
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27744
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27745
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
27746
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
27747
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27748
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27749
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27750
# Start usability test (inc/partition_check.inc)
 
27751
create_command
 
27752
SHOW CREATE TABLE t1;
 
27753
Table   Create Table
 
27754
t1      CREATE TABLE `t1` (
 
27755
  `f_int1` int(11) DEFAULT NULL,
 
27756
  `f_int2` int(11) DEFAULT NULL,
 
27757
  `f_char1` char(20) DEFAULT NULL,
 
27758
  `f_char2` char(20) DEFAULT NULL,
 
27759
  `f_charbig` varchar(1000) DEFAULT NULL
 
27760
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
 
27761
 
 
27762
# check prerequisites-1 success:    1
 
27763
# check COUNT(*) success:    1
 
27764
# check MIN/MAX(f_int1) success:    1
 
27765
# check MIN/MAX(f_int2) success:    1
 
27766
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27767
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27768
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
27769
WHERE f_int1 IN (2,3);
 
27770
# check prerequisites-3 success:    1
 
27771
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27772
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
27773
# check read via f_int1 success: 1
 
27774
# check read via f_int2 success: 1
 
27775
        
 
27776
# check multiple-1 success:     1
 
27777
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
27778
        
 
27779
# check multiple-2 success:     1
 
27780
INSERT INTO t1 SELECT * FROM t0_template
 
27781
WHERE MOD(f_int1,3) = 0;
 
27782
        
 
27783
# check multiple-3 success:     1
 
27784
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
27785
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
27786
AND @max_row_div2 + @max_row_div4;
 
27787
        
 
27788
# check multiple-4 success:     1
 
27789
DELETE FROM t1
 
27790
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
27791
AND @max_row_div2 + @max_row_div4 + @max_row;
 
27792
        
 
27793
# check multiple-5 success:     1
 
27794
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
27795
INSERT INTO t1
 
27796
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27797
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27798
f_charbig = '#SINGLE#';
 
27799
        
 
27800
# check single-1 success:       1
 
27801
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
27802
INSERT INTO t1
 
27803
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27804
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27805
f_charbig = '#SINGLE#';
 
27806
        
 
27807
# check single-2 success:       1
 
27808
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
27809
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
27810
UPDATE t1 SET f_int1 = @cur_value2
 
27811
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
27812
        
 
27813
# check single-3 success:       1
 
27814
SET @cur_value1= -1;
 
27815
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
27816
UPDATE t1 SET f_int1 = @cur_value1
 
27817
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
27818
        
 
27819
# check single-4 success:       1
 
27820
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
27821
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
27822
        
 
27823
# check single-5 success:       1
 
27824
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
27825
        
 
27826
# check single-6 success:       1
 
27827
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
27828
        
 
27829
# check single-7 success:       1
 
27830
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
27831
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
27832
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
27833
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
27834
f_charbig = '#NULL#';
 
27835
INSERT INTO t1
 
27836
SET f_int1 = NULL , f_int2 = -@max_row,
 
27837
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
27838
f_charbig = '#NULL#';
 
27839
# check null success:    1
 
27840
        
 
27841
# check null-1 success:         1
 
27842
UPDATE t1 SET f_int1 = -@max_row
 
27843
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27844
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27845
        
 
27846
# check null-2 success:         1
 
27847
UPDATE t1 SET f_int1 = NULL
 
27848
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27849
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27850
        
 
27851
# check null-3 success:         1
 
27852
DELETE FROM t1
 
27853
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27854
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27855
        
 
27856
# check null-4 success:         1
 
27857
DELETE FROM t1
 
27858
WHERE f_int1 = 0 AND f_int2 = 0
 
27859
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
27860
AND f_charbig = '#NULL#';
 
27861
SET AUTOCOMMIT= 0;
 
27862
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27863
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27864
FROM t0_template source_tab
 
27865
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27866
        
 
27867
# check transactions-1 success:         1
 
27868
COMMIT WORK;
 
27869
        
 
27870
# check transactions-2 success:         1
 
27871
ROLLBACK WORK;
 
27872
        
 
27873
# check transactions-3 success:         1
 
27874
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27875
COMMIT WORK;
 
27876
ROLLBACK WORK;
 
27877
        
 
27878
# check transactions-4 success:         1
 
27879
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27880
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27881
FROM t0_template source_tab
 
27882
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27883
        
 
27884
# check transactions-5 success:         1
 
27885
ROLLBACK WORK;
 
27886
        
 
27887
# check transactions-6 success:         1
 
27888
# INFO: Storage engine used for t1 seems to be transactional.
 
27889
COMMIT;
 
27890
        
 
27891
# check transactions-7 success:         1
 
27892
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27893
COMMIT WORK;
 
27894
SET @@session.sql_mode = 'traditional';
 
27895
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
27896
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27897
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
27898
'', '', 'was inserted' FROM t0_template
 
27899
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27900
ERROR 22012: Division by 0
 
27901
COMMIT;
 
27902
        
 
27903
# check transactions-8 success:         1
 
27904
# INFO: Storage engine used for t1 seems to be able to revert
 
27905
#       changes made by the failing statement.
 
27906
SET @@session.sql_mode = '';
 
27907
SET AUTOCOMMIT= 1;
 
27908
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27909
COMMIT WORK;
 
27910
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
27911
        
 
27912
# check special-1 success:      1
 
27913
UPDATE t1 SET f_charbig = '';
 
27914
        
 
27915
# check special-2 success:      1
 
27916
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
27917
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27918
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
27919
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27920
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27921
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27922
'just inserted' FROM t0_template
 
27923
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27924
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
27925
BEGIN
 
27926
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27927
f_charbig = 'updated by trigger'
 
27928
      WHERE f_int1 = new.f_int1;
 
27929
END|
 
27930
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27931
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27932
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27933
        
 
27934
# check trigger-1 success:      1
 
27935
DROP TRIGGER trg_1;
 
27936
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27937
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27938
f_charbig = 'just inserted'
 
27939
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27940
DELETE FROM t0_aux
 
27941
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27942
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27943
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27944
'just inserted' FROM t0_template
 
27945
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27946
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
27947
BEGIN
 
27948
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27949
f_charbig = 'updated by trigger'
 
27950
      WHERE f_int1 = new.f_int1;
 
27951
END|
 
27952
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27953
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27954
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27955
        
 
27956
# check trigger-2 success:      1
 
27957
DROP TRIGGER trg_1;
 
27958
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27959
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27960
f_charbig = 'just inserted'
 
27961
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27962
DELETE FROM t0_aux
 
27963
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27964
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27965
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27966
'just inserted' FROM t0_template
 
27967
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27968
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27969
BEGIN
 
27970
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27971
f_charbig = 'updated by trigger'
 
27972
      WHERE f_int1 = new.f_int1;
 
27973
END|
 
27974
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27975
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27976
        
 
27977
# check trigger-3 success:      1
 
27978
DROP TRIGGER trg_1;
 
27979
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27980
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27981
f_charbig = 'just inserted'
 
27982
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27983
DELETE FROM t0_aux
 
27984
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27985
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27986
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27987
'just inserted' FROM t0_template
 
27988
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27989
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27990
BEGIN
 
27991
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27992
f_charbig = 'updated by trigger'
 
27993
      WHERE f_int1 = - old.f_int1;
 
27994
END|
 
27995
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27996
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27997
        
 
27998
# check trigger-4 success:      1
 
27999
DROP TRIGGER trg_1;
 
28000
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28001
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28002
f_charbig = 'just inserted'
 
28003
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28004
DELETE FROM t0_aux
 
28005
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28006
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28007
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28008
'just inserted' FROM t0_template
 
28009
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28010
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28011
BEGIN
 
28012
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28013
f_charbig = 'updated by trigger'
 
28014
      WHERE f_int1 = new.f_int1;
 
28015
END|
 
28016
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28017
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28018
        
 
28019
# check trigger-5 success:      1
 
28020
DROP TRIGGER trg_1;
 
28021
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28022
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28023
f_charbig = 'just inserted'
 
28024
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28025
DELETE FROM t0_aux
 
28026
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28027
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28028
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28029
'just inserted' FROM t0_template
 
28030
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28031
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28032
BEGIN
 
28033
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28034
f_charbig = 'updated by trigger'
 
28035
      WHERE f_int1 = - old.f_int1;
 
28036
END|
 
28037
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28038
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28039
        
 
28040
# check trigger-6 success:      1
 
28041
DROP TRIGGER trg_1;
 
28042
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28043
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28044
f_charbig = 'just inserted'
 
28045
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28046
DELETE FROM t0_aux
 
28047
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28048
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28049
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28050
'just inserted' FROM t0_template
 
28051
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28052
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
28053
BEGIN
 
28054
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28055
f_charbig = 'updated by trigger'
 
28056
      WHERE f_int1 = - old.f_int1;
 
28057
END|
 
28058
DELETE FROM t0_aux
 
28059
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28060
        
 
28061
# check trigger-7 success:      1
 
28062
DROP TRIGGER trg_1;
 
28063
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28064
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28065
f_charbig = 'just inserted'
 
28066
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28067
DELETE FROM t0_aux
 
28068
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28069
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28070
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28071
'just inserted' FROM t0_template
 
28072
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28073
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
28074
BEGIN
 
28075
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28076
f_charbig = 'updated by trigger'
 
28077
      WHERE f_int1 = - old.f_int1;
 
28078
END|
 
28079
DELETE FROM t0_aux
 
28080
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28081
        
 
28082
# check trigger-8 success:      1
 
28083
DROP TRIGGER trg_1;
 
28084
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28085
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28086
f_charbig = 'just inserted'
 
28087
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28088
DELETE FROM t0_aux
 
28089
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28090
DELETE FROM t1
 
28091
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28092
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28093
BEGIN
 
28094
SET new.f_int1 = old.f_int1 + @max_row,
 
28095
new.f_int2 = old.f_int2 - @max_row,
 
28096
new.f_charbig = '####updated per update trigger####';
 
28097
END|
 
28098
UPDATE t1
 
28099
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28100
f_charbig = '####updated per update statement itself####';
 
28101
        
 
28102
# check trigger-9 success:      1
 
28103
DROP TRIGGER trg_2;
 
28104
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28105
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28106
f_charbig = CONCAT('===',f_char1,'===');
 
28107
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28108
BEGIN
 
28109
SET new.f_int1 = new.f_int1 + @max_row,
 
28110
new.f_int2 = new.f_int2 - @max_row,
 
28111
new.f_charbig = '####updated per update trigger####';
 
28112
END|
 
28113
UPDATE t1
 
28114
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28115
f_charbig = '####updated per update statement itself####';
 
28116
        
 
28117
# check trigger-10 success:     1
 
28118
DROP TRIGGER trg_2;
 
28119
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28120
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28121
f_charbig = CONCAT('===',f_char1,'===');
 
28122
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28123
BEGIN
 
28124
SET new.f_int1 = @my_max1 + @counter,
 
28125
new.f_int2 = @my_min2 - @counter,
 
28126
new.f_charbig = '####updated per insert trigger####';
 
28127
SET @counter = @counter + 1;
 
28128
END|
 
28129
SET @counter = 1;
 
28130
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28131
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28132
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28133
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28134
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28135
ORDER BY f_int1;
 
28136
DROP TRIGGER trg_3;
 
28137
        
 
28138
# check trigger-11 success:     1
 
28139
DELETE FROM t1
 
28140
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28141
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28142
AND f_charbig = '####updated per insert trigger####';
 
28143
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28144
BEGIN
 
28145
SET new.f_int1 = @my_max1 + @counter,
 
28146
new.f_int2 = @my_min2 - @counter,
 
28147
new.f_charbig = '####updated per insert trigger####';
 
28148
SET @counter = @counter + 1;
 
28149
END|
 
28150
SET @counter = 1;
 
28151
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28152
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
28153
SELECT CAST(f_int1 AS CHAR),
 
28154
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28155
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28156
ORDER BY f_int1;
 
28157
DROP TRIGGER trg_3;
 
28158
        
 
28159
# check trigger-12 success:     1
 
28160
DELETE FROM t1
 
28161
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28162
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28163
AND f_charbig = '####updated per insert trigger####';
 
28164
ANALYZE  TABLE t1;
 
28165
Table   Op      Msg_type        Msg_text
 
28166
test.t1 analyze status  OK
 
28167
CHECK    TABLE t1 EXTENDED;
 
28168
Table   Op      Msg_type        Msg_text
 
28169
test.t1 check   status  OK
 
28170
CHECKSUM TABLE t1 EXTENDED;
 
28171
Table   Checksum
 
28172
test.t1 <some_value>
 
28173
OPTIMIZE TABLE t1;
 
28174
Table   Op      Msg_type        Msg_text
 
28175
test.t1 optimize        status  OK
 
28176
# check layout success:    1
 
28177
REPAIR   TABLE t1 EXTENDED;
 
28178
Table   Op      Msg_type        Msg_text
 
28179
test.t1 repair  note    The storage engine for the table doesn't support repair
 
28180
# check layout success:    1
 
28181
TRUNCATE t1;
 
28182
        
 
28183
# check TRUNCATE success:       1
 
28184
# check layout success:    1
 
28185
# End usability test (inc/partition_check.inc)
 
28186
DROP TABLE t1;
 
28187
CREATE TABLE t1 (
 
28188
f_int1 INTEGER,
 
28189
f_int2 INTEGER,
 
28190
f_char1 CHAR(20),
 
28191
f_char2 CHAR(20),
 
28192
f_charbig VARCHAR(1000)
 
28193
 
 
28194
)
 
28195
PARTITION BY LIST(MOD(f_int1,4))
 
28196
(PARTITION part_3 VALUES IN (-3),
 
28197
PARTITION part_2 VALUES IN (-2),
 
28198
PARTITION part_1 VALUES IN (-1),
 
28199
PARTITION part_N VALUES IN (NULL),
 
28200
PARTITION part0 VALUES IN (0),
 
28201
PARTITION part1 VALUES IN (1),
 
28202
PARTITION part2 VALUES IN (2),
 
28203
PARTITION part3 VALUES IN (3));
 
28204
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28205
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28206
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
28207
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
28208
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28209
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28210
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28211
# Start usability test (inc/partition_check.inc)
 
28212
create_command
 
28213
SHOW CREATE TABLE t1;
 
28214
Table   Create Table
 
28215
t1      CREATE TABLE `t1` (
 
28216
  `f_int1` int(11) DEFAULT NULL,
 
28217
  `f_int2` int(11) DEFAULT NULL,
 
28218
  `f_char1` char(20) DEFAULT NULL,
 
28219
  `f_char2` char(20) DEFAULT NULL,
 
28220
  `f_charbig` varchar(1000) DEFAULT NULL
 
28221
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
 
28222
 
 
28223
# check prerequisites-1 success:    1
 
28224
# check COUNT(*) success:    1
 
28225
# check MIN/MAX(f_int1) success:    1
 
28226
# check MIN/MAX(f_int2) success:    1
 
28227
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28228
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28229
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
28230
WHERE f_int1 IN (2,3);
 
28231
# check prerequisites-3 success:    1
 
28232
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
28233
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
28234
# check read via f_int1 success: 1
 
28235
# check read via f_int2 success: 1
 
28236
        
 
28237
# check multiple-1 success:     1
 
28238
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
28239
        
 
28240
# check multiple-2 success:     1
 
28241
INSERT INTO t1 SELECT * FROM t0_template
 
28242
WHERE MOD(f_int1,3) = 0;
 
28243
        
 
28244
# check multiple-3 success:     1
 
28245
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
28246
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
28247
AND @max_row_div2 + @max_row_div4;
 
28248
        
 
28249
# check multiple-4 success:     1
 
28250
DELETE FROM t1
 
28251
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
28252
AND @max_row_div2 + @max_row_div4 + @max_row;
 
28253
        
 
28254
# check multiple-5 success:     1
 
28255
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
28256
INSERT INTO t1
 
28257
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28258
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28259
f_charbig = '#SINGLE#';
 
28260
        
 
28261
# check single-1 success:       1
 
28262
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
28263
INSERT INTO t1
 
28264
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28265
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28266
f_charbig = '#SINGLE#';
 
28267
        
 
28268
# check single-2 success:       1
 
28269
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
28270
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
28271
UPDATE t1 SET f_int1 = @cur_value2
 
28272
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
28273
        
 
28274
# check single-3 success:       1
 
28275
SET @cur_value1= -1;
 
28276
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
28277
UPDATE t1 SET f_int1 = @cur_value1
 
28278
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
28279
        
 
28280
# check single-4 success:       1
 
28281
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
28282
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
28283
        
 
28284
# check single-5 success:       1
 
28285
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
28286
        
 
28287
# check single-6 success:       1
 
28288
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
28289
        
 
28290
# check single-7 success:       1
 
28291
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
28292
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
28293
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
28294
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
28295
f_charbig = '#NULL#';
 
28296
INSERT INTO t1
 
28297
SET f_int1 = NULL , f_int2 = -@max_row,
 
28298
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
28299
f_charbig = '#NULL#';
 
28300
# check null success:    1
 
28301
        
 
28302
# check null-1 success:         1
 
28303
UPDATE t1 SET f_int1 = -@max_row
 
28304
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28305
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28306
        
 
28307
# check null-2 success:         1
 
28308
UPDATE t1 SET f_int1 = NULL
 
28309
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28310
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28311
        
 
28312
# check null-3 success:         1
 
28313
DELETE FROM t1
 
28314
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28315
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28316
        
 
28317
# check null-4 success:         1
 
28318
DELETE FROM t1
 
28319
WHERE f_int1 = 0 AND f_int2 = 0
 
28320
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
28321
AND f_charbig = '#NULL#';
 
28322
SET AUTOCOMMIT= 0;
 
28323
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28324
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28325
FROM t0_template source_tab
 
28326
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28327
        
 
28328
# check transactions-1 success:         1
 
28329
COMMIT WORK;
 
28330
        
 
28331
# check transactions-2 success:         1
 
28332
ROLLBACK WORK;
 
28333
        
 
28334
# check transactions-3 success:         1
 
28335
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28336
COMMIT WORK;
 
28337
ROLLBACK WORK;
 
28338
        
 
28339
# check transactions-4 success:         1
 
28340
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28341
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28342
FROM t0_template source_tab
 
28343
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28344
        
 
28345
# check transactions-5 success:         1
 
28346
ROLLBACK WORK;
 
28347
        
 
28348
# check transactions-6 success:         1
 
28349
# INFO: Storage engine used for t1 seems to be transactional.
 
28350
COMMIT;
 
28351
        
 
28352
# check transactions-7 success:         1
 
28353
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28354
COMMIT WORK;
 
28355
SET @@session.sql_mode = 'traditional';
 
28356
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
28357
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28358
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
28359
'', '', 'was inserted' FROM t0_template
 
28360
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28361
ERROR 22012: Division by 0
 
28362
COMMIT;
 
28363
        
 
28364
# check transactions-8 success:         1
 
28365
# INFO: Storage engine used for t1 seems to be able to revert
 
28366
#       changes made by the failing statement.
 
28367
SET @@session.sql_mode = '';
 
28368
SET AUTOCOMMIT= 1;
 
28369
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28370
COMMIT WORK;
 
28371
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
28372
        
 
28373
# check special-1 success:      1
 
28374
UPDATE t1 SET f_charbig = '';
 
28375
        
 
28376
# check special-2 success:      1
 
28377
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
28378
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28379
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
28380
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28381
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28382
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28383
'just inserted' FROM t0_template
 
28384
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28385
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
28386
BEGIN
 
28387
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28388
f_charbig = 'updated by trigger'
 
28389
      WHERE f_int1 = new.f_int1;
 
28390
END|
 
28391
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28392
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28393
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28394
        
 
28395
# check trigger-1 success:      1
 
28396
DROP TRIGGER trg_1;
 
28397
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28398
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28399
f_charbig = 'just inserted'
 
28400
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28401
DELETE FROM t0_aux
 
28402
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28403
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28404
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28405
'just inserted' FROM t0_template
 
28406
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28407
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
28408
BEGIN
 
28409
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28410
f_charbig = 'updated by trigger'
 
28411
      WHERE f_int1 = new.f_int1;
 
28412
END|
 
28413
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28414
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28415
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28416
        
 
28417
# check trigger-2 success:      1
 
28418
DROP TRIGGER trg_1;
 
28419
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28420
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28421
f_charbig = 'just inserted'
 
28422
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28423
DELETE FROM t0_aux
 
28424
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28425
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28426
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28427
'just inserted' FROM t0_template
 
28428
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28429
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28430
BEGIN
 
28431
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28432
f_charbig = 'updated by trigger'
 
28433
      WHERE f_int1 = new.f_int1;
 
28434
END|
 
28435
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28436
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28437
        
 
28438
# check trigger-3 success:      1
 
28439
DROP TRIGGER trg_1;
 
28440
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28441
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28442
f_charbig = 'just inserted'
 
28443
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28444
DELETE FROM t0_aux
 
28445
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28446
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28447
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28448
'just inserted' FROM t0_template
 
28449
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28450
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28451
BEGIN
 
28452
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28453
f_charbig = 'updated by trigger'
 
28454
      WHERE f_int1 = - old.f_int1;
 
28455
END|
 
28456
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28457
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28458
        
 
28459
# check trigger-4 success:      1
 
28460
DROP TRIGGER trg_1;
 
28461
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28462
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28463
f_charbig = 'just inserted'
 
28464
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28465
DELETE FROM t0_aux
 
28466
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28467
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28468
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28469
'just inserted' FROM t0_template
 
28470
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28471
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28472
BEGIN
 
28473
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28474
f_charbig = 'updated by trigger'
 
28475
      WHERE f_int1 = new.f_int1;
 
28476
END|
 
28477
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28478
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28479
        
 
28480
# check trigger-5 success:      1
 
28481
DROP TRIGGER trg_1;
 
28482
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28483
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28484
f_charbig = 'just inserted'
 
28485
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28486
DELETE FROM t0_aux
 
28487
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28488
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28489
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28490
'just inserted' FROM t0_template
 
28491
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28492
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28493
BEGIN
 
28494
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28495
f_charbig = 'updated by trigger'
 
28496
      WHERE f_int1 = - old.f_int1;
 
28497
END|
 
28498
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28499
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28500
        
 
28501
# check trigger-6 success:      1
 
28502
DROP TRIGGER trg_1;
 
28503
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28504
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28505
f_charbig = 'just inserted'
 
28506
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28507
DELETE FROM t0_aux
 
28508
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28509
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28510
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28511
'just inserted' FROM t0_template
 
28512
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28513
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
28514
BEGIN
 
28515
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28516
f_charbig = 'updated by trigger'
 
28517
      WHERE f_int1 = - old.f_int1;
 
28518
END|
 
28519
DELETE FROM t0_aux
 
28520
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28521
        
 
28522
# check trigger-7 success:      1
 
28523
DROP TRIGGER trg_1;
 
28524
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28525
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28526
f_charbig = 'just inserted'
 
28527
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28528
DELETE FROM t0_aux
 
28529
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28530
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28531
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28532
'just inserted' FROM t0_template
 
28533
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28534
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
28535
BEGIN
 
28536
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28537
f_charbig = 'updated by trigger'
 
28538
      WHERE f_int1 = - old.f_int1;
 
28539
END|
 
28540
DELETE FROM t0_aux
 
28541
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28542
        
 
28543
# check trigger-8 success:      1
 
28544
DROP TRIGGER trg_1;
 
28545
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28546
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28547
f_charbig = 'just inserted'
 
28548
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28549
DELETE FROM t0_aux
 
28550
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28551
DELETE FROM t1
 
28552
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28553
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28554
BEGIN
 
28555
SET new.f_int1 = old.f_int1 + @max_row,
 
28556
new.f_int2 = old.f_int2 - @max_row,
 
28557
new.f_charbig = '####updated per update trigger####';
 
28558
END|
 
28559
UPDATE t1
 
28560
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28561
f_charbig = '####updated per update statement itself####';
 
28562
        
 
28563
# check trigger-9 success:      1
 
28564
DROP TRIGGER trg_2;
 
28565
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28566
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28567
f_charbig = CONCAT('===',f_char1,'===');
 
28568
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28569
BEGIN
 
28570
SET new.f_int1 = new.f_int1 + @max_row,
 
28571
new.f_int2 = new.f_int2 - @max_row,
 
28572
new.f_charbig = '####updated per update trigger####';
 
28573
END|
 
28574
UPDATE t1
 
28575
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28576
f_charbig = '####updated per update statement itself####';
 
28577
        
 
28578
# check trigger-10 success:     1
 
28579
DROP TRIGGER trg_2;
 
28580
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28581
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28582
f_charbig = CONCAT('===',f_char1,'===');
 
28583
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28584
BEGIN
 
28585
SET new.f_int1 = @my_max1 + @counter,
 
28586
new.f_int2 = @my_min2 - @counter,
 
28587
new.f_charbig = '####updated per insert trigger####';
 
28588
SET @counter = @counter + 1;
 
28589
END|
 
28590
SET @counter = 1;
 
28591
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28592
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28593
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28594
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28595
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28596
ORDER BY f_int1;
 
28597
DROP TRIGGER trg_3;
 
28598
        
 
28599
# check trigger-11 success:     1
 
28600
DELETE FROM t1
 
28601
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28602
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28603
AND f_charbig = '####updated per insert trigger####';
 
28604
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28605
BEGIN
 
28606
SET new.f_int1 = @my_max1 + @counter,
 
28607
new.f_int2 = @my_min2 - @counter,
 
28608
new.f_charbig = '####updated per insert trigger####';
 
28609
SET @counter = @counter + 1;
 
28610
END|
 
28611
SET @counter = 1;
 
28612
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28613
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
28614
SELECT CAST(f_int1 AS CHAR),
 
28615
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28616
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28617
ORDER BY f_int1;
 
28618
DROP TRIGGER trg_3;
 
28619
        
 
28620
# check trigger-12 success:     1
 
28621
DELETE FROM t1
 
28622
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28623
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28624
AND f_charbig = '####updated per insert trigger####';
 
28625
ANALYZE  TABLE t1;
 
28626
Table   Op      Msg_type        Msg_text
 
28627
test.t1 analyze status  OK
 
28628
CHECK    TABLE t1 EXTENDED;
 
28629
Table   Op      Msg_type        Msg_text
 
28630
test.t1 check   status  OK
 
28631
CHECKSUM TABLE t1 EXTENDED;
 
28632
Table   Checksum
 
28633
test.t1 <some_value>
 
28634
OPTIMIZE TABLE t1;
 
28635
Table   Op      Msg_type        Msg_text
 
28636
test.t1 optimize        status  OK
 
28637
# check layout success:    1
 
28638
REPAIR   TABLE t1 EXTENDED;
 
28639
Table   Op      Msg_type        Msg_text
 
28640
test.t1 repair  note    The storage engine for the table doesn't support repair
 
28641
# check layout success:    1
 
28642
TRUNCATE t1;
 
28643
        
 
28644
# check TRUNCATE success:       1
 
28645
# check layout success:    1
 
28646
# End usability test (inc/partition_check.inc)
 
28647
DROP TABLE t1;
 
28648
CREATE TABLE t1 (
 
28649
f_int1 INTEGER,
 
28650
f_int2 INTEGER,
 
28651
f_char1 CHAR(20),
 
28652
f_char2 CHAR(20),
 
28653
f_charbig VARCHAR(1000)
 
28654
 
 
28655
)
 
28656
PARTITION BY RANGE(f_int1)
 
28657
(PARTITION parta VALUES LESS THAN (0),
 
28658
PARTITION part_1 VALUES LESS THAN (5),
 
28659
PARTITION part_2 VALUES LESS THAN (10),
 
28660
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
28661
PARTITION part_4 VALUES LESS THAN (20),
 
28662
PARTITION part_5 VALUES LESS THAN (2147483646));
 
28663
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28664
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28665
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
28666
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
28667
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28668
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28669
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28670
# Start usability test (inc/partition_check.inc)
 
28671
create_command
 
28672
SHOW CREATE TABLE t1;
 
28673
Table   Create Table
 
28674
t1      CREATE TABLE `t1` (
 
28675
  `f_int1` int(11) DEFAULT NULL,
 
28676
  `f_int2` int(11) DEFAULT NULL,
 
28677
  `f_char1` char(20) DEFAULT NULL,
 
28678
  `f_char2` char(20) DEFAULT NULL,
 
28679
  `f_charbig` varchar(1000) DEFAULT NULL
 
28680
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
28681
 
 
28682
# check prerequisites-1 success:    1
 
28683
# check COUNT(*) success:    1
 
28684
# check MIN/MAX(f_int1) success:    1
 
28685
# check MIN/MAX(f_int2) success:    1
 
28686
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28687
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28688
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
28689
WHERE f_int1 IN (2,3);
 
28690
# check prerequisites-3 success:    1
 
28691
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
28692
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
28693
# check read via f_int1 success: 1
 
28694
# check read via f_int2 success: 1
 
28695
        
 
28696
# check multiple-1 success:     1
 
28697
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
28698
        
 
28699
# check multiple-2 success:     1
 
28700
INSERT INTO t1 SELECT * FROM t0_template
 
28701
WHERE MOD(f_int1,3) = 0;
 
28702
        
 
28703
# check multiple-3 success:     1
 
28704
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
28705
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
28706
AND @max_row_div2 + @max_row_div4;
 
28707
        
 
28708
# check multiple-4 success:     1
 
28709
DELETE FROM t1
 
28710
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
28711
AND @max_row_div2 + @max_row_div4 + @max_row;
 
28712
        
 
28713
# check multiple-5 success:     1
 
28714
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
28715
INSERT INTO t1
 
28716
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28717
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28718
f_charbig = '#SINGLE#';
 
28719
        
 
28720
# check single-1 success:       1
 
28721
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
28722
INSERT INTO t1
 
28723
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28724
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28725
f_charbig = '#SINGLE#';
 
28726
        
 
28727
# check single-2 success:       1
 
28728
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
28729
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
28730
UPDATE t1 SET f_int1 = @cur_value2
 
28731
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
28732
        
 
28733
# check single-3 success:       1
 
28734
SET @cur_value1= -1;
 
28735
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
28736
UPDATE t1 SET f_int1 = @cur_value1
 
28737
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
28738
        
 
28739
# check single-4 success:       1
 
28740
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
28741
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
28742
        
 
28743
# check single-5 success:       1
 
28744
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
28745
        
 
28746
# check single-6 success:       1
 
28747
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
28748
ERROR HY000: Table has no partition for value 2147483647
 
28749
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
28750
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
28751
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
28752
f_charbig = '#NULL#';
 
28753
INSERT INTO t1
 
28754
SET f_int1 = NULL , f_int2 = -@max_row,
 
28755
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
28756
f_charbig = '#NULL#';
 
28757
# check null success:    1
 
28758
        
 
28759
# check null-1 success:         1
 
28760
UPDATE t1 SET f_int1 = -@max_row
 
28761
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28762
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28763
        
 
28764
# check null-2 success:         1
 
28765
UPDATE t1 SET f_int1 = NULL
 
28766
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28767
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28768
        
 
28769
# check null-3 success:         1
 
28770
DELETE FROM t1
 
28771
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28772
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28773
        
 
28774
# check null-4 success:         1
 
28775
DELETE FROM t1
 
28776
WHERE f_int1 = 0 AND f_int2 = 0
 
28777
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
28778
AND f_charbig = '#NULL#';
 
28779
SET AUTOCOMMIT= 0;
 
28780
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28781
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28782
FROM t0_template source_tab
 
28783
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28784
        
 
28785
# check transactions-1 success:         1
 
28786
COMMIT WORK;
 
28787
        
 
28788
# check transactions-2 success:         1
 
28789
ROLLBACK WORK;
 
28790
        
 
28791
# check transactions-3 success:         1
 
28792
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28793
COMMIT WORK;
 
28794
ROLLBACK WORK;
 
28795
        
 
28796
# check transactions-4 success:         1
 
28797
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28798
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28799
FROM t0_template source_tab
 
28800
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28801
        
 
28802
# check transactions-5 success:         1
 
28803
ROLLBACK WORK;
 
28804
        
 
28805
# check transactions-6 success:         1
 
28806
# INFO: Storage engine used for t1 seems to be transactional.
 
28807
COMMIT;
 
28808
        
 
28809
# check transactions-7 success:         1
 
28810
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28811
COMMIT WORK;
 
28812
SET @@session.sql_mode = 'traditional';
 
28813
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
28814
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28815
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
28816
'', '', 'was inserted' FROM t0_template
 
28817
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28818
ERROR 22012: Division by 0
 
28819
COMMIT;
 
28820
        
 
28821
# check transactions-8 success:         1
 
28822
# INFO: Storage engine used for t1 seems to be able to revert
 
28823
#       changes made by the failing statement.
 
28824
SET @@session.sql_mode = '';
 
28825
SET AUTOCOMMIT= 1;
 
28826
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28827
COMMIT WORK;
 
28828
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
28829
        
 
28830
# check special-1 success:      1
 
28831
UPDATE t1 SET f_charbig = '';
 
28832
        
 
28833
# check special-2 success:      1
 
28834
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
28835
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28836
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
28837
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28838
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28839
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28840
'just inserted' FROM t0_template
 
28841
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28842
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
28843
BEGIN
 
28844
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28845
f_charbig = 'updated by trigger'
 
28846
      WHERE f_int1 = new.f_int1;
 
28847
END|
 
28848
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28849
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28850
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28851
        
 
28852
# check trigger-1 success:      1
 
28853
DROP TRIGGER trg_1;
 
28854
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28855
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28856
f_charbig = 'just inserted'
 
28857
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28858
DELETE FROM t0_aux
 
28859
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28860
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28861
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28862
'just inserted' FROM t0_template
 
28863
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28864
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
28865
BEGIN
 
28866
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28867
f_charbig = 'updated by trigger'
 
28868
      WHERE f_int1 = new.f_int1;
 
28869
END|
 
28870
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28871
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28872
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28873
        
 
28874
# check trigger-2 success:      1
 
28875
DROP TRIGGER trg_1;
 
28876
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28877
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28878
f_charbig = 'just inserted'
 
28879
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28880
DELETE FROM t0_aux
 
28881
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28882
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28883
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28884
'just inserted' FROM t0_template
 
28885
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28886
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28887
BEGIN
 
28888
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28889
f_charbig = 'updated by trigger'
 
28890
      WHERE f_int1 = new.f_int1;
 
28891
END|
 
28892
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28893
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28894
        
 
28895
# check trigger-3 success:      1
 
28896
DROP TRIGGER trg_1;
 
28897
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28898
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28899
f_charbig = 'just inserted'
 
28900
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28901
DELETE FROM t0_aux
 
28902
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28903
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28904
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28905
'just inserted' FROM t0_template
 
28906
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28907
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28908
BEGIN
 
28909
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28910
f_charbig = 'updated by trigger'
 
28911
      WHERE f_int1 = - old.f_int1;
 
28912
END|
 
28913
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28914
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28915
        
 
28916
# check trigger-4 success:      1
 
28917
DROP TRIGGER trg_1;
 
28918
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28919
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28920
f_charbig = 'just inserted'
 
28921
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28922
DELETE FROM t0_aux
 
28923
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28924
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28925
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28926
'just inserted' FROM t0_template
 
28927
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28928
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28929
BEGIN
 
28930
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28931
f_charbig = 'updated by trigger'
 
28932
      WHERE f_int1 = new.f_int1;
 
28933
END|
 
28934
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28935
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28936
        
 
28937
# check trigger-5 success:      1
 
28938
DROP TRIGGER trg_1;
 
28939
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28940
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28941
f_charbig = 'just inserted'
 
28942
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28943
DELETE FROM t0_aux
 
28944
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28945
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28946
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28947
'just inserted' FROM t0_template
 
28948
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28949
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28950
BEGIN
 
28951
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28952
f_charbig = 'updated by trigger'
 
28953
      WHERE f_int1 = - old.f_int1;
 
28954
END|
 
28955
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28956
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28957
        
 
28958
# check trigger-6 success:      1
 
28959
DROP TRIGGER trg_1;
 
28960
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28961
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28962
f_charbig = 'just inserted'
 
28963
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28964
DELETE FROM t0_aux
 
28965
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28966
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28967
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28968
'just inserted' FROM t0_template
 
28969
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28970
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
28971
BEGIN
 
28972
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28973
f_charbig = 'updated by trigger'
 
28974
      WHERE f_int1 = - old.f_int1;
 
28975
END|
 
28976
DELETE FROM t0_aux
 
28977
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28978
        
 
28979
# check trigger-7 success:      1
 
28980
DROP TRIGGER trg_1;
 
28981
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28982
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28983
f_charbig = 'just inserted'
 
28984
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28985
DELETE FROM t0_aux
 
28986
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28987
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28988
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28989
'just inserted' FROM t0_template
 
28990
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28991
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
28992
BEGIN
 
28993
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28994
f_charbig = 'updated by trigger'
 
28995
      WHERE f_int1 = - old.f_int1;
 
28996
END|
 
28997
DELETE FROM t0_aux
 
28998
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28999
        
 
29000
# check trigger-8 success:      1
 
29001
DROP TRIGGER trg_1;
 
29002
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29003
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29004
f_charbig = 'just inserted'
 
29005
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29006
DELETE FROM t0_aux
 
29007
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29008
DELETE FROM t1
 
29009
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29010
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29011
BEGIN
 
29012
SET new.f_int1 = old.f_int1 + @max_row,
 
29013
new.f_int2 = old.f_int2 - @max_row,
 
29014
new.f_charbig = '####updated per update trigger####';
 
29015
END|
 
29016
UPDATE t1
 
29017
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29018
f_charbig = '####updated per update statement itself####';
 
29019
        
 
29020
# check trigger-9 success:      1
 
29021
DROP TRIGGER trg_2;
 
29022
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29023
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29024
f_charbig = CONCAT('===',f_char1,'===');
 
29025
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29026
BEGIN
 
29027
SET new.f_int1 = new.f_int1 + @max_row,
 
29028
new.f_int2 = new.f_int2 - @max_row,
 
29029
new.f_charbig = '####updated per update trigger####';
 
29030
END|
 
29031
UPDATE t1
 
29032
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29033
f_charbig = '####updated per update statement itself####';
 
29034
        
 
29035
# check trigger-10 success:     1
 
29036
DROP TRIGGER trg_2;
 
29037
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29038
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29039
f_charbig = CONCAT('===',f_char1,'===');
 
29040
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29041
BEGIN
 
29042
SET new.f_int1 = @my_max1 + @counter,
 
29043
new.f_int2 = @my_min2 - @counter,
 
29044
new.f_charbig = '####updated per insert trigger####';
 
29045
SET @counter = @counter + 1;
 
29046
END|
 
29047
SET @counter = 1;
 
29048
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29049
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29050
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29051
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29052
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29053
ORDER BY f_int1;
 
29054
DROP TRIGGER trg_3;
 
29055
        
 
29056
# check trigger-11 success:     1
 
29057
DELETE FROM t1
 
29058
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29059
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29060
AND f_charbig = '####updated per insert trigger####';
 
29061
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29062
BEGIN
 
29063
SET new.f_int1 = @my_max1 + @counter,
 
29064
new.f_int2 = @my_min2 - @counter,
 
29065
new.f_charbig = '####updated per insert trigger####';
 
29066
SET @counter = @counter + 1;
 
29067
END|
 
29068
SET @counter = 1;
 
29069
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29070
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
29071
SELECT CAST(f_int1 AS CHAR),
 
29072
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29074
ORDER BY f_int1;
 
29075
DROP TRIGGER trg_3;
 
29076
        
 
29077
# check trigger-12 success:     1
 
29078
DELETE FROM t1
 
29079
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29080
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29081
AND f_charbig = '####updated per insert trigger####';
 
29082
ANALYZE  TABLE t1;
 
29083
Table   Op      Msg_type        Msg_text
 
29084
test.t1 analyze status  OK
 
29085
CHECK    TABLE t1 EXTENDED;
 
29086
Table   Op      Msg_type        Msg_text
 
29087
test.t1 check   status  OK
 
29088
CHECKSUM TABLE t1 EXTENDED;
 
29089
Table   Checksum
 
29090
test.t1 <some_value>
 
29091
OPTIMIZE TABLE t1;
 
29092
Table   Op      Msg_type        Msg_text
 
29093
test.t1 optimize        status  OK
 
29094
# check layout success:    1
 
29095
REPAIR   TABLE t1 EXTENDED;
 
29096
Table   Op      Msg_type        Msg_text
 
29097
test.t1 repair  note    The storage engine for the table doesn't support repair
 
29098
# check layout success:    1
 
29099
TRUNCATE t1;
 
29100
        
 
29101
# check TRUNCATE success:       1
 
29102
# check layout success:    1
 
29103
# End usability test (inc/partition_check.inc)
 
29104
DROP TABLE t1;
 
29105
CREATE TABLE t1 (
 
29106
f_int1 INTEGER,
 
29107
f_int2 INTEGER,
 
29108
f_char1 CHAR(20),
 
29109
f_char2 CHAR(20),
 
29110
f_charbig VARCHAR(1000)
 
29111
 
 
29112
)
 
29113
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
29114
(PARTITION part_1 VALUES LESS THAN (0),
 
29115
PARTITION part_2 VALUES LESS THAN (5),
 
29116
PARTITION part_3 VALUES LESS THAN (10),
 
29117
PARTITION part_4 VALUES LESS THAN (2147483646));
 
29118
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29119
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29120
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
29121
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
29122
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29123
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29124
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29125
# Start usability test (inc/partition_check.inc)
 
29126
create_command
 
29127
SHOW CREATE TABLE t1;
 
29128
Table   Create Table
 
29129
t1      CREATE TABLE `t1` (
 
29130
  `f_int1` int(11) DEFAULT NULL,
 
29131
  `f_int2` int(11) DEFAULT NULL,
 
29132
  `f_char1` char(20) DEFAULT NULL,
 
29133
  `f_char2` char(20) DEFAULT NULL,
 
29134
  `f_charbig` varchar(1000) DEFAULT NULL
 
29135
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
 
29136
 
 
29137
# check prerequisites-1 success:    1
 
29138
# check COUNT(*) success:    1
 
29139
# check MIN/MAX(f_int1) success:    1
 
29140
# check MIN/MAX(f_int2) success:    1
 
29141
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29142
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29143
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
29144
WHERE f_int1 IN (2,3);
 
29145
# check prerequisites-3 success:    1
 
29146
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
29147
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
29148
# check read via f_int1 success: 1
 
29149
# check read via f_int2 success: 1
 
29150
        
 
29151
# check multiple-1 success:     1
 
29152
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
29153
        
 
29154
# check multiple-2 success:     1
 
29155
INSERT INTO t1 SELECT * FROM t0_template
 
29156
WHERE MOD(f_int1,3) = 0;
 
29157
        
 
29158
# check multiple-3 success:     1
 
29159
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
29160
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
29161
AND @max_row_div2 + @max_row_div4;
 
29162
        
 
29163
# check multiple-4 success:     1
 
29164
DELETE FROM t1
 
29165
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
29166
AND @max_row_div2 + @max_row_div4 + @max_row;
 
29167
        
 
29168
# check multiple-5 success:     1
 
29169
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
29170
INSERT INTO t1
 
29171
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29172
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29173
f_charbig = '#SINGLE#';
 
29174
        
 
29175
# check single-1 success:       1
 
29176
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
29177
INSERT INTO t1
 
29178
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29179
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29180
f_charbig = '#SINGLE#';
 
29181
        
 
29182
# check single-2 success:       1
 
29183
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
29184
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
29185
UPDATE t1 SET f_int1 = @cur_value2
 
29186
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
29187
        
 
29188
# check single-3 success:       1
 
29189
SET @cur_value1= -1;
 
29190
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
29191
UPDATE t1 SET f_int1 = @cur_value1
 
29192
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
29193
        
 
29194
# check single-4 success:       1
 
29195
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
29196
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
29197
        
 
29198
# check single-5 success:       1
 
29199
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
29200
        
 
29201
# check single-6 success:       1
 
29202
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
29203
        
 
29204
# check single-7 success:       1
 
29205
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
29206
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
29207
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
29208
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
29209
f_charbig = '#NULL#';
 
29210
INSERT INTO t1
 
29211
SET f_int1 = NULL , f_int2 = -@max_row,
 
29212
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
29213
f_charbig = '#NULL#';
 
29214
# check null success:    1
 
29215
        
 
29216
# check null-1 success:         1
 
29217
UPDATE t1 SET f_int1 = -@max_row
 
29218
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29219
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29220
        
 
29221
# check null-2 success:         1
 
29222
UPDATE t1 SET f_int1 = NULL
 
29223
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29224
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29225
        
 
29226
# check null-3 success:         1
 
29227
DELETE FROM t1
 
29228
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29229
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29230
        
 
29231
# check null-4 success:         1
 
29232
DELETE FROM t1
 
29233
WHERE f_int1 = 0 AND f_int2 = 0
 
29234
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
29235
AND f_charbig = '#NULL#';
 
29236
SET AUTOCOMMIT= 0;
 
29237
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29238
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29239
FROM t0_template source_tab
 
29240
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29241
        
 
29242
# check transactions-1 success:         1
 
29243
COMMIT WORK;
 
29244
        
 
29245
# check transactions-2 success:         1
 
29246
ROLLBACK WORK;
 
29247
        
 
29248
# check transactions-3 success:         1
 
29249
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29250
COMMIT WORK;
 
29251
ROLLBACK WORK;
 
29252
        
 
29253
# check transactions-4 success:         1
 
29254
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29255
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29256
FROM t0_template source_tab
 
29257
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29258
        
 
29259
# check transactions-5 success:         1
 
29260
ROLLBACK WORK;
 
29261
        
 
29262
# check transactions-6 success:         1
 
29263
# INFO: Storage engine used for t1 seems to be transactional.
 
29264
COMMIT;
 
29265
        
 
29266
# check transactions-7 success:         1
 
29267
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29268
COMMIT WORK;
 
29269
SET @@session.sql_mode = 'traditional';
 
29270
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
29271
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29272
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
29273
'', '', 'was inserted' FROM t0_template
 
29274
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29275
ERROR 22012: Division by 0
 
29276
COMMIT;
 
29277
        
 
29278
# check transactions-8 success:         1
 
29279
# INFO: Storage engine used for t1 seems to be able to revert
 
29280
#       changes made by the failing statement.
 
29281
SET @@session.sql_mode = '';
 
29282
SET AUTOCOMMIT= 1;
 
29283
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29284
COMMIT WORK;
 
29285
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
29286
        
 
29287
# check special-1 success:      1
 
29288
UPDATE t1 SET f_charbig = '';
 
29289
        
 
29290
# check special-2 success:      1
 
29291
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
29292
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29293
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
29294
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29295
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29296
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29297
'just inserted' FROM t0_template
 
29298
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29299
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
29300
BEGIN
 
29301
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29302
f_charbig = 'updated by trigger'
 
29303
      WHERE f_int1 = new.f_int1;
 
29304
END|
 
29305
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29306
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29307
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29308
        
 
29309
# check trigger-1 success:      1
 
29310
DROP TRIGGER trg_1;
 
29311
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29312
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29313
f_charbig = 'just inserted'
 
29314
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29315
DELETE FROM t0_aux
 
29316
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29317
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29318
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29319
'just inserted' FROM t0_template
 
29320
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29321
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
29322
BEGIN
 
29323
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29324
f_charbig = 'updated by trigger'
 
29325
      WHERE f_int1 = new.f_int1;
 
29326
END|
 
29327
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29328
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29329
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29330
        
 
29331
# check trigger-2 success:      1
 
29332
DROP TRIGGER trg_1;
 
29333
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29334
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29335
f_charbig = 'just inserted'
 
29336
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29337
DELETE FROM t0_aux
 
29338
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29339
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29340
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29341
'just inserted' FROM t0_template
 
29342
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29343
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29344
BEGIN
 
29345
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29346
f_charbig = 'updated by trigger'
 
29347
      WHERE f_int1 = new.f_int1;
 
29348
END|
 
29349
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29350
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29351
        
 
29352
# check trigger-3 success:      1
 
29353
DROP TRIGGER trg_1;
 
29354
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29355
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29356
f_charbig = 'just inserted'
 
29357
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29358
DELETE FROM t0_aux
 
29359
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29360
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29361
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29362
'just inserted' FROM t0_template
 
29363
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29364
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29365
BEGIN
 
29366
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29367
f_charbig = 'updated by trigger'
 
29368
      WHERE f_int1 = - old.f_int1;
 
29369
END|
 
29370
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29371
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29372
        
 
29373
# check trigger-4 success:      1
 
29374
DROP TRIGGER trg_1;
 
29375
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29376
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29377
f_charbig = 'just inserted'
 
29378
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29379
DELETE FROM t0_aux
 
29380
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29381
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29382
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29383
'just inserted' FROM t0_template
 
29384
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29385
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29386
BEGIN
 
29387
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29388
f_charbig = 'updated by trigger'
 
29389
      WHERE f_int1 = new.f_int1;
 
29390
END|
 
29391
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29392
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29393
        
 
29394
# check trigger-5 success:      1
 
29395
DROP TRIGGER trg_1;
 
29396
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29397
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29398
f_charbig = 'just inserted'
 
29399
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29400
DELETE FROM t0_aux
 
29401
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29402
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29403
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29404
'just inserted' FROM t0_template
 
29405
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29406
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29407
BEGIN
 
29408
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29409
f_charbig = 'updated by trigger'
 
29410
      WHERE f_int1 = - old.f_int1;
 
29411
END|
 
29412
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29413
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29414
        
 
29415
# check trigger-6 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 BEFORE DELETE 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 = - old.f_int1;
 
29432
END|
 
29433
DELETE FROM t0_aux
 
29434
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29435
        
 
29436
# check trigger-7 success:      1
 
29437
DROP TRIGGER trg_1;
 
29438
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29439
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29440
f_charbig = 'just inserted'
 
29441
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29442
DELETE FROM t0_aux
 
29443
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29444
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29445
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29446
'just inserted' FROM t0_template
 
29447
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29448
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
29449
BEGIN
 
29450
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29451
f_charbig = 'updated by trigger'
 
29452
      WHERE f_int1 = - old.f_int1;
 
29453
END|
 
29454
DELETE FROM t0_aux
 
29455
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29456
        
 
29457
# check trigger-8 success:      1
 
29458
DROP TRIGGER trg_1;
 
29459
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29460
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29461
f_charbig = 'just inserted'
 
29462
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29463
DELETE FROM t0_aux
 
29464
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29465
DELETE FROM t1
 
29466
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29467
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29468
BEGIN
 
29469
SET new.f_int1 = old.f_int1 + @max_row,
 
29470
new.f_int2 = old.f_int2 - @max_row,
 
29471
new.f_charbig = '####updated per update trigger####';
 
29472
END|
 
29473
UPDATE t1
 
29474
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29475
f_charbig = '####updated per update statement itself####';
 
29476
        
 
29477
# check trigger-9 success:      1
 
29478
DROP TRIGGER trg_2;
 
29479
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29480
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29481
f_charbig = CONCAT('===',f_char1,'===');
 
29482
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29483
BEGIN
 
29484
SET new.f_int1 = new.f_int1 + @max_row,
 
29485
new.f_int2 = new.f_int2 - @max_row,
 
29486
new.f_charbig = '####updated per update trigger####';
 
29487
END|
 
29488
UPDATE t1
 
29489
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29490
f_charbig = '####updated per update statement itself####';
 
29491
        
 
29492
# check trigger-10 success:     1
 
29493
DROP TRIGGER trg_2;
 
29494
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29495
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29496
f_charbig = CONCAT('===',f_char1,'===');
 
29497
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29498
BEGIN
 
29499
SET new.f_int1 = @my_max1 + @counter,
 
29500
new.f_int2 = @my_min2 - @counter,
 
29501
new.f_charbig = '####updated per insert trigger####';
 
29502
SET @counter = @counter + 1;
 
29503
END|
 
29504
SET @counter = 1;
 
29505
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29506
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29507
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29508
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29509
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29510
ORDER BY f_int1;
 
29511
DROP TRIGGER trg_3;
 
29512
        
 
29513
# check trigger-11 success:     1
 
29514
DELETE FROM t1
 
29515
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29516
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29517
AND f_charbig = '####updated per insert trigger####';
 
29518
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29519
BEGIN
 
29520
SET new.f_int1 = @my_max1 + @counter,
 
29521
new.f_int2 = @my_min2 - @counter,
 
29522
new.f_charbig = '####updated per insert trigger####';
 
29523
SET @counter = @counter + 1;
 
29524
END|
 
29525
SET @counter = 1;
 
29526
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29527
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
29528
SELECT CAST(f_int1 AS CHAR),
 
29529
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29530
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29531
ORDER BY f_int1;
 
29532
DROP TRIGGER trg_3;
 
29533
        
 
29534
# check trigger-12 success:     1
 
29535
DELETE FROM t1
 
29536
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29537
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29538
AND f_charbig = '####updated per insert trigger####';
 
29539
ANALYZE  TABLE t1;
 
29540
Table   Op      Msg_type        Msg_text
 
29541
test.t1 analyze status  OK
 
29542
CHECK    TABLE t1 EXTENDED;
 
29543
Table   Op      Msg_type        Msg_text
 
29544
test.t1 check   status  OK
 
29545
CHECKSUM TABLE t1 EXTENDED;
 
29546
Table   Checksum
 
29547
test.t1 <some_value>
 
29548
OPTIMIZE TABLE t1;
 
29549
Table   Op      Msg_type        Msg_text
 
29550
test.t1 optimize        status  OK
 
29551
# check layout success:    1
 
29552
REPAIR   TABLE t1 EXTENDED;
 
29553
Table   Op      Msg_type        Msg_text
 
29554
test.t1 repair  note    The storage engine for the table doesn't support repair
 
29555
# check layout success:    1
 
29556
TRUNCATE t1;
 
29557
        
 
29558
# check TRUNCATE success:       1
 
29559
# check layout success:    1
 
29560
# End usability test (inc/partition_check.inc)
 
29561
DROP TABLE t1;
 
29562
CREATE TABLE t1 (
 
29563
f_int1 INTEGER,
 
29564
f_int2 INTEGER,
 
29565
f_char1 CHAR(20),
 
29566
f_char2 CHAR(20),
 
29567
f_charbig VARCHAR(1000)
 
29568
 
 
29569
)
 
29570
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
29571
(PARTITION part_1 VALUES LESS THAN (0)
 
29572
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
29573
PARTITION part_2 VALUES LESS THAN (5)
 
29574
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
29575
PARTITION part_3 VALUES LESS THAN (10)
 
29576
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
29577
PARTITION part_4 VALUES LESS THAN (2147483646)
 
29578
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
29579
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29580
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29581
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
29582
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
29583
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29584
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29585
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29586
# Start usability test (inc/partition_check.inc)
 
29587
create_command
 
29588
SHOW CREATE TABLE t1;
 
29589
Table   Create Table
 
29590
t1      CREATE TABLE `t1` (
 
29591
  `f_int1` int(11) DEFAULT NULL,
 
29592
  `f_int2` int(11) DEFAULT NULL,
 
29593
  `f_char1` char(20) DEFAULT NULL,
 
29594
  `f_char2` char(20) DEFAULT NULL,
 
29595
  `f_charbig` varchar(1000) DEFAULT NULL
 
29596
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
 
29597
 
 
29598
# check prerequisites-1 success:    1
 
29599
# check COUNT(*) success:    1
 
29600
# check MIN/MAX(f_int1) success:    1
 
29601
# check MIN/MAX(f_int2) success:    1
 
29602
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29603
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29604
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
29605
WHERE f_int1 IN (2,3);
 
29606
# check prerequisites-3 success:    1
 
29607
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
29608
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
29609
# check read via f_int1 success: 1
 
29610
# check read via f_int2 success: 1
 
29611
        
 
29612
# check multiple-1 success:     1
 
29613
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
29614
        
 
29615
# check multiple-2 success:     1
 
29616
INSERT INTO t1 SELECT * FROM t0_template
 
29617
WHERE MOD(f_int1,3) = 0;
 
29618
        
 
29619
# check multiple-3 success:     1
 
29620
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
29621
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
29622
AND @max_row_div2 + @max_row_div4;
 
29623
        
 
29624
# check multiple-4 success:     1
 
29625
DELETE FROM t1
 
29626
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
29627
AND @max_row_div2 + @max_row_div4 + @max_row;
 
29628
        
 
29629
# check multiple-5 success:     1
 
29630
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
29631
INSERT INTO t1
 
29632
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29633
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29634
f_charbig = '#SINGLE#';
 
29635
        
 
29636
# check single-1 success:       1
 
29637
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
29638
INSERT INTO t1
 
29639
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29640
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29641
f_charbig = '#SINGLE#';
 
29642
        
 
29643
# check single-2 success:       1
 
29644
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
29645
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
29646
UPDATE t1 SET f_int1 = @cur_value2
 
29647
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
29648
        
 
29649
# check single-3 success:       1
 
29650
SET @cur_value1= -1;
 
29651
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
29652
UPDATE t1 SET f_int1 = @cur_value1
 
29653
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
29654
        
 
29655
# check single-4 success:       1
 
29656
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
29657
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
29658
        
 
29659
# check single-5 success:       1
 
29660
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
29661
        
 
29662
# check single-6 success:       1
 
29663
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
29664
ERROR HY000: Table has no partition for value 2147483647
 
29665
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
29666
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
29667
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
29668
f_charbig = '#NULL#';
 
29669
INSERT INTO t1
 
29670
SET f_int1 = NULL , f_int2 = -@max_row,
 
29671
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
29672
f_charbig = '#NULL#';
 
29673
# check null success:    1
 
29674
        
 
29675
# check null-1 success:         1
 
29676
UPDATE t1 SET f_int1 = -@max_row
 
29677
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29678
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29679
        
 
29680
# check null-2 success:         1
 
29681
UPDATE t1 SET f_int1 = NULL
 
29682
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29683
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29684
        
 
29685
# check null-3 success:         1
 
29686
DELETE FROM t1
 
29687
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29688
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29689
        
 
29690
# check null-4 success:         1
 
29691
DELETE FROM t1
 
29692
WHERE f_int1 = 0 AND f_int2 = 0
 
29693
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
29694
AND f_charbig = '#NULL#';
 
29695
SET AUTOCOMMIT= 0;
 
29696
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29697
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29698
FROM t0_template source_tab
 
29699
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29700
        
 
29701
# check transactions-1 success:         1
 
29702
COMMIT WORK;
 
29703
        
 
29704
# check transactions-2 success:         1
 
29705
ROLLBACK WORK;
 
29706
        
 
29707
# check transactions-3 success:         1
 
29708
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29709
COMMIT WORK;
 
29710
ROLLBACK WORK;
 
29711
        
 
29712
# check transactions-4 success:         1
 
29713
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29714
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29715
FROM t0_template source_tab
 
29716
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29717
        
 
29718
# check transactions-5 success:         1
 
29719
ROLLBACK WORK;
 
29720
        
 
29721
# check transactions-6 success:         1
 
29722
# INFO: Storage engine used for t1 seems to be transactional.
 
29723
COMMIT;
 
29724
        
 
29725
# check transactions-7 success:         1
 
29726
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29727
COMMIT WORK;
 
29728
SET @@session.sql_mode = 'traditional';
 
29729
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
29730
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29731
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
29732
'', '', 'was inserted' FROM t0_template
 
29733
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29734
ERROR 22012: Division by 0
 
29735
COMMIT;
 
29736
        
 
29737
# check transactions-8 success:         1
 
29738
# INFO: Storage engine used for t1 seems to be able to revert
 
29739
#       changes made by the failing statement.
 
29740
SET @@session.sql_mode = '';
 
29741
SET AUTOCOMMIT= 1;
 
29742
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29743
COMMIT WORK;
 
29744
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
29745
        
 
29746
# check special-1 success:      1
 
29747
UPDATE t1 SET f_charbig = '';
 
29748
        
 
29749
# check special-2 success:      1
 
29750
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
29751
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29752
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
29753
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29754
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29755
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29756
'just inserted' FROM t0_template
 
29757
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29758
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
29759
BEGIN
 
29760
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29761
f_charbig = 'updated by trigger'
 
29762
      WHERE f_int1 = new.f_int1;
 
29763
END|
 
29764
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29765
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29766
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29767
        
 
29768
# check trigger-1 success:      1
 
29769
DROP TRIGGER trg_1;
 
29770
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29771
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29772
f_charbig = 'just inserted'
 
29773
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29774
DELETE FROM t0_aux
 
29775
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29776
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29777
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29778
'just inserted' FROM t0_template
 
29779
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29780
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
29781
BEGIN
 
29782
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29783
f_charbig = 'updated by trigger'
 
29784
      WHERE f_int1 = new.f_int1;
 
29785
END|
 
29786
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29787
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29788
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29789
        
 
29790
# check trigger-2 success:      1
 
29791
DROP TRIGGER trg_1;
 
29792
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29793
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29794
f_charbig = 'just inserted'
 
29795
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29796
DELETE FROM t0_aux
 
29797
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29798
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29799
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29800
'just inserted' FROM t0_template
 
29801
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29802
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29803
BEGIN
 
29804
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29805
f_charbig = 'updated by trigger'
 
29806
      WHERE f_int1 = new.f_int1;
 
29807
END|
 
29808
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29809
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29810
        
 
29811
# check trigger-3 success:      1
 
29812
DROP TRIGGER trg_1;
 
29813
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29814
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29815
f_charbig = 'just inserted'
 
29816
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29817
DELETE FROM t0_aux
 
29818
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29819
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29820
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29821
'just inserted' FROM t0_template
 
29822
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29823
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29824
BEGIN
 
29825
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29826
f_charbig = 'updated by trigger'
 
29827
      WHERE f_int1 = - old.f_int1;
 
29828
END|
 
29829
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29830
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29831
        
 
29832
# check trigger-4 success:      1
 
29833
DROP TRIGGER trg_1;
 
29834
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29835
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29836
f_charbig = 'just inserted'
 
29837
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29838
DELETE FROM t0_aux
 
29839
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29840
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29841
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29842
'just inserted' FROM t0_template
 
29843
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29844
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29845
BEGIN
 
29846
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29847
f_charbig = 'updated by trigger'
 
29848
      WHERE f_int1 = new.f_int1;
 
29849
END|
 
29850
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29851
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29852
        
 
29853
# check trigger-5 success:      1
 
29854
DROP TRIGGER trg_1;
 
29855
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29856
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29857
f_charbig = 'just inserted'
 
29858
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29859
DELETE FROM t0_aux
 
29860
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29861
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29862
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29863
'just inserted' FROM t0_template
 
29864
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29865
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29866
BEGIN
 
29867
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29868
f_charbig = 'updated by trigger'
 
29869
      WHERE f_int1 = - old.f_int1;
 
29870
END|
 
29871
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29872
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29873
        
 
29874
# check trigger-6 success:      1
 
29875
DROP TRIGGER trg_1;
 
29876
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29877
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29878
f_charbig = 'just inserted'
 
29879
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29880
DELETE FROM t0_aux
 
29881
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29882
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29883
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29884
'just inserted' FROM t0_template
 
29885
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29886
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
29887
BEGIN
 
29888
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29889
f_charbig = 'updated by trigger'
 
29890
      WHERE f_int1 = - old.f_int1;
 
29891
END|
 
29892
DELETE FROM t0_aux
 
29893
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29894
        
 
29895
# check trigger-7 success:      1
 
29896
DROP TRIGGER trg_1;
 
29897
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29898
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29899
f_charbig = 'just inserted'
 
29900
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29901
DELETE FROM t0_aux
 
29902
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29903
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29904
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29905
'just inserted' FROM t0_template
 
29906
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29907
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
29908
BEGIN
 
29909
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29910
f_charbig = 'updated by trigger'
 
29911
      WHERE f_int1 = - old.f_int1;
 
29912
END|
 
29913
DELETE FROM t0_aux
 
29914
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29915
        
 
29916
# check trigger-8 success:      1
 
29917
DROP TRIGGER trg_1;
 
29918
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29919
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29920
f_charbig = 'just inserted'
 
29921
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29922
DELETE FROM t0_aux
 
29923
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29924
DELETE FROM t1
 
29925
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29926
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29927
BEGIN
 
29928
SET new.f_int1 = old.f_int1 + @max_row,
 
29929
new.f_int2 = old.f_int2 - @max_row,
 
29930
new.f_charbig = '####updated per update trigger####';
 
29931
END|
 
29932
UPDATE t1
 
29933
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29934
f_charbig = '####updated per update statement itself####';
 
29935
        
 
29936
# check trigger-9 success:      1
 
29937
DROP TRIGGER trg_2;
 
29938
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29939
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29940
f_charbig = CONCAT('===',f_char1,'===');
 
29941
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29942
BEGIN
 
29943
SET new.f_int1 = new.f_int1 + @max_row,
 
29944
new.f_int2 = new.f_int2 - @max_row,
 
29945
new.f_charbig = '####updated per update trigger####';
 
29946
END|
 
29947
UPDATE t1
 
29948
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29949
f_charbig = '####updated per update statement itself####';
 
29950
        
 
29951
# check trigger-10 success:     1
 
29952
DROP TRIGGER trg_2;
 
29953
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29954
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29955
f_charbig = CONCAT('===',f_char1,'===');
 
29956
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29957
BEGIN
 
29958
SET new.f_int1 = @my_max1 + @counter,
 
29959
new.f_int2 = @my_min2 - @counter,
 
29960
new.f_charbig = '####updated per insert trigger####';
 
29961
SET @counter = @counter + 1;
 
29962
END|
 
29963
SET @counter = 1;
 
29964
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29965
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29966
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29967
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29968
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29969
ORDER BY f_int1;
 
29970
DROP TRIGGER trg_3;
 
29971
        
 
29972
# check trigger-11 success:     1
 
29973
DELETE FROM t1
 
29974
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29975
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29976
AND f_charbig = '####updated per insert trigger####';
 
29977
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29978
BEGIN
 
29979
SET new.f_int1 = @my_max1 + @counter,
 
29980
new.f_int2 = @my_min2 - @counter,
 
29981
new.f_charbig = '####updated per insert trigger####';
 
29982
SET @counter = @counter + 1;
 
29983
END|
 
29984
SET @counter = 1;
 
29985
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29986
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
29987
SELECT CAST(f_int1 AS CHAR),
 
29988
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29989
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29990
ORDER BY f_int1;
 
29991
DROP TRIGGER trg_3;
 
29992
        
 
29993
# check trigger-12 success:     1
 
29994
DELETE FROM t1
 
29995
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29996
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29997
AND f_charbig = '####updated per insert trigger####';
 
29998
ANALYZE  TABLE t1;
 
29999
Table   Op      Msg_type        Msg_text
 
30000
test.t1 analyze status  OK
 
30001
CHECK    TABLE t1 EXTENDED;
 
30002
Table   Op      Msg_type        Msg_text
 
30003
test.t1 check   status  OK
 
30004
CHECKSUM TABLE t1 EXTENDED;
 
30005
Table   Checksum
 
30006
test.t1 <some_value>
 
30007
OPTIMIZE TABLE t1;
 
30008
Table   Op      Msg_type        Msg_text
 
30009
test.t1 optimize        status  OK
 
30010
# check layout success:    1
 
30011
REPAIR   TABLE t1 EXTENDED;
 
30012
Table   Op      Msg_type        Msg_text
 
30013
test.t1 repair  note    The storage engine for the table doesn't support repair
 
30014
# check layout success:    1
 
30015
TRUNCATE t1;
 
30016
        
 
30017
# check TRUNCATE success:       1
 
30018
# check layout success:    1
 
30019
# End usability test (inc/partition_check.inc)
 
30020
DROP TABLE t1;
 
30021
CREATE TABLE t1 (
 
30022
f_int1 INTEGER,
 
30023
f_int2 INTEGER,
 
30024
f_char1 CHAR(20),
 
30025
f_char2 CHAR(20),
 
30026
f_charbig VARCHAR(1000)
 
30027
 
 
30028
)
 
30029
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
30030
(PARTITION part_1 VALUES IN (0)
 
30031
(SUBPARTITION sp11, SUBPARTITION sp12),
 
30032
PARTITION part_2 VALUES IN (1)
 
30033
(SUBPARTITION sp21, SUBPARTITION sp22),
 
30034
PARTITION part_3 VALUES IN (2)
 
30035
(SUBPARTITION sp31, SUBPARTITION sp32),
 
30036
PARTITION part_4 VALUES IN (NULL)
 
30037
(SUBPARTITION sp41, SUBPARTITION sp42));
 
30038
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30039
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30040
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
30041
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
30042
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30043
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30044
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30045
# Start usability test (inc/partition_check.inc)
 
30046
create_command
 
30047
SHOW CREATE TABLE t1;
 
30048
Table   Create Table
 
30049
t1      CREATE TABLE `t1` (
 
30050
  `f_int1` int(11) DEFAULT NULL,
 
30051
  `f_int2` int(11) DEFAULT NULL,
 
30052
  `f_char1` char(20) DEFAULT NULL,
 
30053
  `f_char2` char(20) DEFAULT NULL,
 
30054
  `f_charbig` varchar(1000) DEFAULT NULL
 
30055
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
 
30056
 
 
30057
# check prerequisites-1 success:    1
 
30058
# check COUNT(*) success:    1
 
30059
# check MIN/MAX(f_int1) success:    1
 
30060
# check MIN/MAX(f_int2) success:    1
 
30061
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30062
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30063
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
30064
WHERE f_int1 IN (2,3);
 
30065
# check prerequisites-3 success:    1
 
30066
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
30067
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
30068
# check read via f_int1 success: 1
 
30069
# check read via f_int2 success: 1
 
30070
        
 
30071
# check multiple-1 success:     1
 
30072
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
30073
        
 
30074
# check multiple-2 success:     1
 
30075
INSERT INTO t1 SELECT * FROM t0_template
 
30076
WHERE MOD(f_int1,3) = 0;
 
30077
        
 
30078
# check multiple-3 success:     1
 
30079
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
30080
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
30081
AND @max_row_div2 + @max_row_div4;
 
30082
        
 
30083
# check multiple-4 success:     1
 
30084
DELETE FROM t1
 
30085
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
30086
AND @max_row_div2 + @max_row_div4 + @max_row;
 
30087
        
 
30088
# check multiple-5 success:     1
 
30089
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
30090
INSERT INTO t1
 
30091
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30092
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30093
f_charbig = '#SINGLE#';
 
30094
        
 
30095
# check single-1 success:       1
 
30096
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
30097
INSERT INTO t1
 
30098
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30099
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30100
f_charbig = '#SINGLE#';
 
30101
        
 
30102
# check single-2 success:       1
 
30103
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
30104
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
30105
UPDATE t1 SET f_int1 = @cur_value2
 
30106
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
30107
        
 
30108
# check single-3 success:       1
 
30109
SET @cur_value1= -1;
 
30110
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
30111
UPDATE t1 SET f_int1 = @cur_value1
 
30112
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
30113
        
 
30114
# check single-4 success:       1
 
30115
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
30116
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
30117
        
 
30118
# check single-5 success:       1
 
30119
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
30120
        
 
30121
# check single-6 success:       1
 
30122
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
30123
        
 
30124
# check single-7 success:       1
 
30125
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
30126
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
30127
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
30128
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
30129
f_charbig = '#NULL#';
 
30130
INSERT INTO t1
 
30131
SET f_int1 = NULL , f_int2 = -@max_row,
 
30132
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
30133
f_charbig = '#NULL#';
 
30134
# check null success:    1
 
30135
        
 
30136
# check null-1 success:         1
 
30137
UPDATE t1 SET f_int1 = -@max_row
 
30138
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30139
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30140
        
 
30141
# check null-2 success:         1
 
30142
UPDATE t1 SET f_int1 = NULL
 
30143
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30144
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30145
        
 
30146
# check null-3 success:         1
 
30147
DELETE FROM t1
 
30148
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30149
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30150
        
 
30151
# check null-4 success:         1
 
30152
DELETE FROM t1
 
30153
WHERE f_int1 = 0 AND f_int2 = 0
 
30154
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
30155
AND f_charbig = '#NULL#';
 
30156
SET AUTOCOMMIT= 0;
 
30157
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30158
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30159
FROM t0_template source_tab
 
30160
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30161
        
 
30162
# check transactions-1 success:         1
 
30163
COMMIT WORK;
 
30164
        
 
30165
# check transactions-2 success:         1
 
30166
ROLLBACK WORK;
 
30167
        
 
30168
# check transactions-3 success:         1
 
30169
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30170
COMMIT WORK;
 
30171
ROLLBACK WORK;
 
30172
        
 
30173
# check transactions-4 success:         1
 
30174
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30175
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30176
FROM t0_template source_tab
 
30177
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30178
        
 
30179
# check transactions-5 success:         1
 
30180
ROLLBACK WORK;
 
30181
        
 
30182
# check transactions-6 success:         1
 
30183
# INFO: Storage engine used for t1 seems to be transactional.
 
30184
COMMIT;
 
30185
        
 
30186
# check transactions-7 success:         1
 
30187
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30188
COMMIT WORK;
 
30189
SET @@session.sql_mode = 'traditional';
 
30190
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
30191
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30192
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
30193
'', '', 'was inserted' FROM t0_template
 
30194
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30195
ERROR 22012: Division by 0
 
30196
COMMIT;
 
30197
        
 
30198
# check transactions-8 success:         1
 
30199
# INFO: Storage engine used for t1 seems to be able to revert
 
30200
#       changes made by the failing statement.
 
30201
SET @@session.sql_mode = '';
 
30202
SET AUTOCOMMIT= 1;
 
30203
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30204
COMMIT WORK;
 
30205
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
30206
        
 
30207
# check special-1 success:      1
 
30208
UPDATE t1 SET f_charbig = '';
 
30209
        
 
30210
# check special-2 success:      1
 
30211
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
30212
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30213
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
30214
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30215
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30216
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30217
'just inserted' FROM t0_template
 
30218
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30219
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
30220
BEGIN
 
30221
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30222
f_charbig = 'updated by trigger'
 
30223
      WHERE f_int1 = new.f_int1;
 
30224
END|
 
30225
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30226
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30227
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30228
        
 
30229
# check trigger-1 success:      1
 
30230
DROP TRIGGER trg_1;
 
30231
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30232
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30233
f_charbig = 'just inserted'
 
30234
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30235
DELETE FROM t0_aux
 
30236
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30237
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30238
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30239
'just inserted' FROM t0_template
 
30240
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30241
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
30242
BEGIN
 
30243
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30244
f_charbig = 'updated by trigger'
 
30245
      WHERE f_int1 = new.f_int1;
 
30246
END|
 
30247
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30248
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30249
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30250
        
 
30251
# check trigger-2 success:      1
 
30252
DROP TRIGGER trg_1;
 
30253
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30254
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30255
f_charbig = 'just inserted'
 
30256
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30257
DELETE FROM t0_aux
 
30258
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30259
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30260
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30261
'just inserted' FROM t0_template
 
30262
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30263
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30264
BEGIN
 
30265
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30266
f_charbig = 'updated by trigger'
 
30267
      WHERE f_int1 = new.f_int1;
 
30268
END|
 
30269
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30270
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30271
        
 
30272
# check trigger-3 success:      1
 
30273
DROP TRIGGER trg_1;
 
30274
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30275
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30276
f_charbig = 'just inserted'
 
30277
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30278
DELETE FROM t0_aux
 
30279
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30280
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30281
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30282
'just inserted' FROM t0_template
 
30283
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30284
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30285
BEGIN
 
30286
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30287
f_charbig = 'updated by trigger'
 
30288
      WHERE f_int1 = - old.f_int1;
 
30289
END|
 
30290
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30291
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30292
        
 
30293
# check trigger-4 success:      1
 
30294
DROP TRIGGER trg_1;
 
30295
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30296
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30297
f_charbig = 'just inserted'
 
30298
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30299
DELETE FROM t0_aux
 
30300
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30301
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30302
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30303
'just inserted' FROM t0_template
 
30304
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30305
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30306
BEGIN
 
30307
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30308
f_charbig = 'updated by trigger'
 
30309
      WHERE f_int1 = new.f_int1;
 
30310
END|
 
30311
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30312
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30313
        
 
30314
# check trigger-5 success:      1
 
30315
DROP TRIGGER trg_1;
 
30316
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30317
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30318
f_charbig = 'just inserted'
 
30319
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30320
DELETE FROM t0_aux
 
30321
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30322
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30323
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30324
'just inserted' FROM t0_template
 
30325
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30326
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30327
BEGIN
 
30328
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30329
f_charbig = 'updated by trigger'
 
30330
      WHERE f_int1 = - old.f_int1;
 
30331
END|
 
30332
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30333
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30334
        
 
30335
# check trigger-6 success:      1
 
30336
DROP TRIGGER trg_1;
 
30337
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30338
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30339
f_charbig = 'just inserted'
 
30340
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30341
DELETE FROM t0_aux
 
30342
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30343
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30344
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30345
'just inserted' FROM t0_template
 
30346
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30347
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
30348
BEGIN
 
30349
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30350
f_charbig = 'updated by trigger'
 
30351
      WHERE f_int1 = - old.f_int1;
 
30352
END|
 
30353
DELETE FROM t0_aux
 
30354
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30355
        
 
30356
# check trigger-7 success:      1
 
30357
DROP TRIGGER trg_1;
 
30358
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30359
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30360
f_charbig = 'just inserted'
 
30361
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30362
DELETE FROM t0_aux
 
30363
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30364
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30365
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30366
'just inserted' FROM t0_template
 
30367
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30368
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
30369
BEGIN
 
30370
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30371
f_charbig = 'updated by trigger'
 
30372
      WHERE f_int1 = - old.f_int1;
 
30373
END|
 
30374
DELETE FROM t0_aux
 
30375
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30376
        
 
30377
# check trigger-8 success:      1
 
30378
DROP TRIGGER trg_1;
 
30379
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30380
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30381
f_charbig = 'just inserted'
 
30382
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30383
DELETE FROM t0_aux
 
30384
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30385
DELETE FROM t1
 
30386
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30387
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30388
BEGIN
 
30389
SET new.f_int1 = old.f_int1 + @max_row,
 
30390
new.f_int2 = old.f_int2 - @max_row,
 
30391
new.f_charbig = '####updated per update trigger####';
 
30392
END|
 
30393
UPDATE t1
 
30394
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30395
f_charbig = '####updated per update statement itself####';
 
30396
        
 
30397
# check trigger-9 success:      1
 
30398
DROP TRIGGER trg_2;
 
30399
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30400
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30401
f_charbig = CONCAT('===',f_char1,'===');
 
30402
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30403
BEGIN
 
30404
SET new.f_int1 = new.f_int1 + @max_row,
 
30405
new.f_int2 = new.f_int2 - @max_row,
 
30406
new.f_charbig = '####updated per update trigger####';
 
30407
END|
 
30408
UPDATE t1
 
30409
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30410
f_charbig = '####updated per update statement itself####';
 
30411
        
 
30412
# check trigger-10 success:     1
 
30413
DROP TRIGGER trg_2;
 
30414
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30415
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30416
f_charbig = CONCAT('===',f_char1,'===');
 
30417
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30418
BEGIN
 
30419
SET new.f_int1 = @my_max1 + @counter,
 
30420
new.f_int2 = @my_min2 - @counter,
 
30421
new.f_charbig = '####updated per insert trigger####';
 
30422
SET @counter = @counter + 1;
 
30423
END|
 
30424
SET @counter = 1;
 
30425
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30426
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30427
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30428
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30429
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30430
ORDER BY f_int1;
 
30431
DROP TRIGGER trg_3;
 
30432
        
 
30433
# check trigger-11 success:     1
 
30434
DELETE FROM t1
 
30435
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30436
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30437
AND f_charbig = '####updated per insert trigger####';
 
30438
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30439
BEGIN
 
30440
SET new.f_int1 = @my_max1 + @counter,
 
30441
new.f_int2 = @my_min2 - @counter,
 
30442
new.f_charbig = '####updated per insert trigger####';
 
30443
SET @counter = @counter + 1;
 
30444
END|
 
30445
SET @counter = 1;
 
30446
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30447
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
30448
SELECT CAST(f_int1 AS CHAR),
 
30449
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30450
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30451
ORDER BY f_int1;
 
30452
DROP TRIGGER trg_3;
 
30453
        
 
30454
# check trigger-12 success:     1
 
30455
DELETE FROM t1
 
30456
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30457
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30458
AND f_charbig = '####updated per insert trigger####';
 
30459
ANALYZE  TABLE t1;
 
30460
Table   Op      Msg_type        Msg_text
 
30461
test.t1 analyze status  OK
 
30462
CHECK    TABLE t1 EXTENDED;
 
30463
Table   Op      Msg_type        Msg_text
 
30464
test.t1 check   status  OK
 
30465
CHECKSUM TABLE t1 EXTENDED;
 
30466
Table   Checksum
 
30467
test.t1 <some_value>
 
30468
OPTIMIZE TABLE t1;
 
30469
Table   Op      Msg_type        Msg_text
 
30470
test.t1 optimize        status  OK
 
30471
# check layout success:    1
 
30472
REPAIR   TABLE t1 EXTENDED;
 
30473
Table   Op      Msg_type        Msg_text
 
30474
test.t1 repair  note    The storage engine for the table doesn't support repair
 
30475
# check layout success:    1
 
30476
TRUNCATE t1;
 
30477
        
 
30478
# check TRUNCATE success:       1
 
30479
# check layout success:    1
 
30480
# End usability test (inc/partition_check.inc)
 
30481
DROP TABLE t1;
 
30482
CREATE TABLE t1 (
 
30483
f_int1 INTEGER,
 
30484
f_int2 INTEGER,
 
30485
f_char1 CHAR(20),
 
30486
f_char2 CHAR(20),
 
30487
f_charbig VARCHAR(1000)
 
30488
 
 
30489
)
 
30490
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
30491
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
30492
(PARTITION part_1 VALUES IN (0),
 
30493
 PARTITION part_2 VALUES IN (1),
 
30494
 PARTITION part_3 VALUES IN (NULL));
 
30495
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30496
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30497
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
30498
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
30499
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30500
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30501
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30502
# Start usability test (inc/partition_check.inc)
 
30503
create_command
 
30504
SHOW CREATE TABLE t1;
 
30505
Table   Create Table
 
30506
t1      CREATE TABLE `t1` (
 
30507
  `f_int1` int(11) DEFAULT NULL,
 
30508
  `f_int2` int(11) DEFAULT NULL,
 
30509
  `f_char1` char(20) DEFAULT NULL,
 
30510
  `f_char2` char(20) DEFAULT NULL,
 
30511
  `f_charbig` varchar(1000) DEFAULT NULL
 
30512
) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
 
30513
 
 
30514
# check prerequisites-1 success:    1
 
30515
# check COUNT(*) success:    1
 
30516
# check MIN/MAX(f_int1) success:    1
 
30517
# check MIN/MAX(f_int2) success:    1
 
30518
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30519
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30520
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
30521
WHERE f_int1 IN (2,3);
 
30522
# check prerequisites-3 success:    1
 
30523
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
30524
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
30525
# check read via f_int1 success: 1
 
30526
# check read via f_int2 success: 1
 
30527
        
 
30528
# check multiple-1 success:     1
 
30529
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
30530
        
 
30531
# check multiple-2 success:     1
 
30532
INSERT INTO t1 SELECT * FROM t0_template
 
30533
WHERE MOD(f_int1,3) = 0;
 
30534
        
 
30535
# check multiple-3 success:     1
 
30536
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
30537
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
30538
AND @max_row_div2 + @max_row_div4;
 
30539
        
 
30540
# check multiple-4 success:     1
 
30541
DELETE FROM t1
 
30542
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
30543
AND @max_row_div2 + @max_row_div4 + @max_row;
 
30544
        
 
30545
# check multiple-5 success:     1
 
30546
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
30547
INSERT INTO t1
 
30548
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30549
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30550
f_charbig = '#SINGLE#';
 
30551
        
 
30552
# check single-1 success:       1
 
30553
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
30554
INSERT INTO t1
 
30555
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30556
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30557
f_charbig = '#SINGLE#';
 
30558
        
 
30559
# check single-2 success:       1
 
30560
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
30561
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
30562
UPDATE t1 SET f_int1 = @cur_value2
 
30563
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
30564
        
 
30565
# check single-3 success:       1
 
30566
SET @cur_value1= -1;
 
30567
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
30568
UPDATE t1 SET f_int1 = @cur_value1
 
30569
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
30570
        
 
30571
# check single-4 success:       1
 
30572
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
30573
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
30574
        
 
30575
# check single-5 success:       1
 
30576
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
30577
        
 
30578
# check single-6 success:       1
 
30579
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
30580
        
 
30581
# check single-7 success:       1
 
30582
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
30583
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
30584
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
30585
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
30586
f_charbig = '#NULL#';
 
30587
INSERT INTO t1
 
30588
SET f_int1 = NULL , f_int2 = -@max_row,
 
30589
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
30590
f_charbig = '#NULL#';
 
30591
# check null success:    1
 
30592
        
 
30593
# check null-1 success:         1
 
30594
UPDATE t1 SET f_int1 = -@max_row
 
30595
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30596
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30597
        
 
30598
# check null-2 success:         1
 
30599
UPDATE t1 SET f_int1 = NULL
 
30600
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30601
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30602
        
 
30603
# check null-3 success:         1
 
30604
DELETE FROM t1
 
30605
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30606
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30607
        
 
30608
# check null-4 success:         1
 
30609
DELETE FROM t1
 
30610
WHERE f_int1 = 0 AND f_int2 = 0
 
30611
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
30612
AND f_charbig = '#NULL#';
 
30613
SET AUTOCOMMIT= 0;
 
30614
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30615
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30616
FROM t0_template source_tab
 
30617
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30618
        
 
30619
# check transactions-1 success:         1
 
30620
COMMIT WORK;
 
30621
        
 
30622
# check transactions-2 success:         1
 
30623
ROLLBACK WORK;
 
30624
        
 
30625
# check transactions-3 success:         1
 
30626
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30627
COMMIT WORK;
 
30628
ROLLBACK WORK;
 
30629
        
 
30630
# check transactions-4 success:         1
 
30631
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30632
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30633
FROM t0_template source_tab
 
30634
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30635
        
 
30636
# check transactions-5 success:         1
 
30637
ROLLBACK WORK;
 
30638
        
 
30639
# check transactions-6 success:         1
 
30640
# INFO: Storage engine used for t1 seems to be transactional.
 
30641
COMMIT;
 
30642
        
 
30643
# check transactions-7 success:         1
 
30644
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30645
COMMIT WORK;
 
30646
SET @@session.sql_mode = 'traditional';
 
30647
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
30648
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30649
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
30650
'', '', 'was inserted' FROM t0_template
 
30651
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30652
ERROR 22012: Division by 0
 
30653
COMMIT;
 
30654
        
 
30655
# check transactions-8 success:         1
 
30656
# INFO: Storage engine used for t1 seems to be able to revert
 
30657
#       changes made by the failing statement.
 
30658
SET @@session.sql_mode = '';
 
30659
SET AUTOCOMMIT= 1;
 
30660
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30661
COMMIT WORK;
 
30662
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
30663
        
 
30664
# check special-1 success:      1
 
30665
UPDATE t1 SET f_charbig = '';
 
30666
        
 
30667
# check special-2 success:      1
 
30668
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
30669
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30670
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
30671
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30672
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30673
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30674
'just inserted' FROM t0_template
 
30675
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30676
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
30677
BEGIN
 
30678
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30679
f_charbig = 'updated by trigger'
 
30680
      WHERE f_int1 = new.f_int1;
 
30681
END|
 
30682
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30683
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30684
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30685
        
 
30686
# check trigger-1 success:      1
 
30687
DROP TRIGGER trg_1;
 
30688
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30689
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30690
f_charbig = 'just inserted'
 
30691
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30692
DELETE FROM t0_aux
 
30693
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30694
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30695
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30696
'just inserted' FROM t0_template
 
30697
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30698
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
30699
BEGIN
 
30700
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30701
f_charbig = 'updated by trigger'
 
30702
      WHERE f_int1 = new.f_int1;
 
30703
END|
 
30704
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30705
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30706
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30707
        
 
30708
# check trigger-2 success:      1
 
30709
DROP TRIGGER trg_1;
 
30710
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30711
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30712
f_charbig = 'just inserted'
 
30713
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30714
DELETE FROM t0_aux
 
30715
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30716
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30717
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30718
'just inserted' FROM t0_template
 
30719
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30720
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30721
BEGIN
 
30722
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30723
f_charbig = 'updated by trigger'
 
30724
      WHERE f_int1 = new.f_int1;
 
30725
END|
 
30726
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30727
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30728
        
 
30729
# check trigger-3 success:      1
 
30730
DROP TRIGGER trg_1;
 
30731
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30732
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30733
f_charbig = 'just inserted'
 
30734
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30735
DELETE FROM t0_aux
 
30736
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30737
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30738
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30739
'just inserted' FROM t0_template
 
30740
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30741
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30742
BEGIN
 
30743
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30744
f_charbig = 'updated by trigger'
 
30745
      WHERE f_int1 = - old.f_int1;
 
30746
END|
 
30747
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30748
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30749
        
 
30750
# check trigger-4 success:      1
 
30751
DROP TRIGGER trg_1;
 
30752
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30753
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30754
f_charbig = 'just inserted'
 
30755
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30756
DELETE FROM t0_aux
 
30757
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30758
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30759
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30760
'just inserted' FROM t0_template
 
30761
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30762
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30763
BEGIN
 
30764
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30765
f_charbig = 'updated by trigger'
 
30766
      WHERE f_int1 = new.f_int1;
 
30767
END|
 
30768
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30769
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30770
        
 
30771
# check trigger-5 success:      1
 
30772
DROP TRIGGER trg_1;
 
30773
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30774
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30775
f_charbig = 'just inserted'
 
30776
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30777
DELETE FROM t0_aux
 
30778
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30779
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30780
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30781
'just inserted' FROM t0_template
 
30782
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30783
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30784
BEGIN
 
30785
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30786
f_charbig = 'updated by trigger'
 
30787
      WHERE f_int1 = - old.f_int1;
 
30788
END|
 
30789
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30790
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30791
        
 
30792
# check trigger-6 success:      1
 
30793
DROP TRIGGER trg_1;
 
30794
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30795
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30796
f_charbig = 'just inserted'
 
30797
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30798
DELETE FROM t0_aux
 
30799
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30800
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30801
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30802
'just inserted' FROM t0_template
 
30803
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30804
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
30805
BEGIN
 
30806
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30807
f_charbig = 'updated by trigger'
 
30808
      WHERE f_int1 = - old.f_int1;
 
30809
END|
 
30810
DELETE FROM t0_aux
 
30811
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30812
        
 
30813
# check trigger-7 success:      1
 
30814
DROP TRIGGER trg_1;
 
30815
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30816
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30817
f_charbig = 'just inserted'
 
30818
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30819
DELETE FROM t0_aux
 
30820
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30821
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30822
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30823
'just inserted' FROM t0_template
 
30824
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30825
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
30826
BEGIN
 
30827
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30828
f_charbig = 'updated by trigger'
 
30829
      WHERE f_int1 = - old.f_int1;
 
30830
END|
 
30831
DELETE FROM t0_aux
 
30832
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30833
        
 
30834
# check trigger-8 success:      1
 
30835
DROP TRIGGER trg_1;
 
30836
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30837
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30838
f_charbig = 'just inserted'
 
30839
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30840
DELETE FROM t0_aux
 
30841
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30842
DELETE FROM t1
 
30843
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30844
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30845
BEGIN
 
30846
SET new.f_int1 = old.f_int1 + @max_row,
 
30847
new.f_int2 = old.f_int2 - @max_row,
 
30848
new.f_charbig = '####updated per update trigger####';
 
30849
END|
 
30850
UPDATE t1
 
30851
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30852
f_charbig = '####updated per update statement itself####';
 
30853
        
 
30854
# check trigger-9 success:      1
 
30855
DROP TRIGGER trg_2;
 
30856
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30857
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30858
f_charbig = CONCAT('===',f_char1,'===');
 
30859
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30860
BEGIN
 
30861
SET new.f_int1 = new.f_int1 + @max_row,
 
30862
new.f_int2 = new.f_int2 - @max_row,
 
30863
new.f_charbig = '####updated per update trigger####';
 
30864
END|
 
30865
UPDATE t1
 
30866
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30867
f_charbig = '####updated per update statement itself####';
 
30868
        
 
30869
# check trigger-10 success:     1
 
30870
DROP TRIGGER trg_2;
 
30871
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30872
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30873
f_charbig = CONCAT('===',f_char1,'===');
 
30874
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30875
BEGIN
 
30876
SET new.f_int1 = @my_max1 + @counter,
 
30877
new.f_int2 = @my_min2 - @counter,
 
30878
new.f_charbig = '####updated per insert trigger####';
 
30879
SET @counter = @counter + 1;
 
30880
END|
 
30881
SET @counter = 1;
 
30882
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30883
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30884
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30885
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30886
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30887
ORDER BY f_int1;
 
30888
DROP TRIGGER trg_3;
 
30889
        
 
30890
# check trigger-11 success:     1
 
30891
DELETE FROM t1
 
30892
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30893
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30894
AND f_charbig = '####updated per insert trigger####';
 
30895
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30896
BEGIN
 
30897
SET new.f_int1 = @my_max1 + @counter,
 
30898
new.f_int2 = @my_min2 - @counter,
 
30899
new.f_charbig = '####updated per insert trigger####';
 
30900
SET @counter = @counter + 1;
 
30901
END|
 
30902
SET @counter = 1;
 
30903
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30904
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
30905
SELECT CAST(f_int1 AS CHAR),
 
30906
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30907
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30908
ORDER BY f_int1;
 
30909
DROP TRIGGER trg_3;
 
30910
        
 
30911
# check trigger-12 success:     1
 
30912
DELETE FROM t1
 
30913
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30914
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30915
AND f_charbig = '####updated per insert trigger####';
 
30916
ANALYZE  TABLE t1;
 
30917
Table   Op      Msg_type        Msg_text
 
30918
test.t1 analyze status  OK
 
30919
CHECK    TABLE t1 EXTENDED;
 
30920
Table   Op      Msg_type        Msg_text
 
30921
test.t1 check   status  OK
 
30922
CHECKSUM TABLE t1 EXTENDED;
 
30923
Table   Checksum
 
30924
test.t1 <some_value>
 
30925
OPTIMIZE TABLE t1;
 
30926
Table   Op      Msg_type        Msg_text
 
30927
test.t1 optimize        status  OK
 
30928
# check layout success:    1
 
30929
REPAIR   TABLE t1 EXTENDED;
 
30930
Table   Op      Msg_type        Msg_text
 
30931
test.t1 repair  note    The storage engine for the table doesn't support repair
 
30932
# check layout success:    1
 
30933
TRUNCATE t1;
 
30934
        
 
30935
# check TRUNCATE success:       1
 
30936
# check layout success:    1
 
30937
# End usability test (inc/partition_check.inc)
 
30938
DROP TABLE t1;
 
30939
#  5.3 ALTER ... REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
30940
DROP TABLE IF EXISTS t1;
 
30941
CREATE TABLE t1 (
 
30942
f_int1 INTEGER,
 
30943
f_int2 INTEGER,
 
30944
f_char1 CHAR(20),
 
30945
f_char2 CHAR(20),
 
30946
f_charbig VARCHAR(1000)
 
30947
 
 
30948
)
 
30949
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
30950
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30951
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30952
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
30953
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
30954
ERROR HY000: Error in list of partitions to REBUILD
 
30955
DROP TABLE t1;
 
30956
CREATE TABLE t1 (
 
30957
f_int1 INTEGER,
 
30958
f_int2 INTEGER,
 
30959
f_char1 CHAR(20),
 
30960
f_char2 CHAR(20),
 
30961
f_charbig VARCHAR(1000)
 
30962
 
 
30963
)
 
30964
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
30965
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30966
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30967
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
30968
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
30969
ERROR HY000: Error in list of partitions to REBUILD
 
30970
DROP TABLE t1;
 
30971
CREATE TABLE t1 (
 
30972
f_int1 INTEGER,
 
30973
f_int2 INTEGER,
 
30974
f_char1 CHAR(20),
 
30975
f_char2 CHAR(20),
 
30976
f_charbig VARCHAR(1000)
 
30977
 
 
30978
)
 
30979
PARTITION BY LIST(MOD(f_int1,4))
 
30980
(PARTITION part_3 VALUES IN (-3),
 
30981
PARTITION part_2 VALUES IN (-2),
 
30982
PARTITION part_1 VALUES IN (-1),
 
30983
PARTITION part_N VALUES IN (NULL),
 
30984
PARTITION part0 VALUES IN (0),
 
30985
PARTITION part1 VALUES IN (1),
 
30986
PARTITION part2 VALUES IN (2),
 
30987
PARTITION part3 VALUES IN (3));
 
30988
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30989
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30990
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
30991
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
30992
ERROR HY000: Error in list of partitions to REBUILD
 
30993
DROP TABLE t1;
 
30994
CREATE TABLE t1 (
 
30995
f_int1 INTEGER,
 
30996
f_int2 INTEGER,
 
30997
f_char1 CHAR(20),
 
30998
f_char2 CHAR(20),
 
30999
f_charbig VARCHAR(1000)
 
31000
 
 
31001
)
 
31002
PARTITION BY RANGE(f_int1)
 
31003
(PARTITION parta VALUES LESS THAN (0),
 
31004
PARTITION part_1 VALUES LESS THAN (5),
 
31005
PARTITION part_2 VALUES LESS THAN (10),
 
31006
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
31007
PARTITION part_4 VALUES LESS THAN (20),
 
31008
PARTITION part_5 VALUES LESS THAN (2147483646));
 
31009
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31010
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31011
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31012
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
31013
ERROR HY000: Error in list of partitions to REBUILD
 
31014
DROP TABLE t1;
 
31015
CREATE TABLE t1 (
 
31016
f_int1 INTEGER,
 
31017
f_int2 INTEGER,
 
31018
f_char1 CHAR(20),
 
31019
f_char2 CHAR(20),
 
31020
f_charbig VARCHAR(1000)
 
31021
 
 
31022
)
 
31023
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
31024
(PARTITION part_1 VALUES LESS THAN (0),
 
31025
PARTITION part_2 VALUES LESS THAN (5),
 
31026
PARTITION part_3 VALUES LESS THAN (10),
 
31027
PARTITION part_4 VALUES LESS THAN (2147483646));
 
31028
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31029
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31030
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31031
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
31032
ERROR HY000: Error in list of partitions to REBUILD
 
31033
DROP TABLE t1;
 
31034
CREATE TABLE t1 (
 
31035
f_int1 INTEGER,
 
31036
f_int2 INTEGER,
 
31037
f_char1 CHAR(20),
 
31038
f_char2 CHAR(20),
 
31039
f_charbig VARCHAR(1000)
 
31040
 
 
31041
)
 
31042
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
31043
(PARTITION part_1 VALUES LESS THAN (0)
 
31044
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
31045
PARTITION part_2 VALUES LESS THAN (5)
 
31046
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
31047
PARTITION part_3 VALUES LESS THAN (10)
 
31048
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
31049
PARTITION part_4 VALUES LESS THAN (2147483646)
 
31050
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
31051
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31052
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31053
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31054
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
31055
ERROR HY000: Error in list of partitions to REBUILD
 
31056
DROP TABLE t1;
 
31057
CREATE TABLE t1 (
 
31058
f_int1 INTEGER,
 
31059
f_int2 INTEGER,
 
31060
f_char1 CHAR(20),
 
31061
f_char2 CHAR(20),
 
31062
f_charbig VARCHAR(1000)
 
31063
 
 
31064
)
 
31065
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
31066
(PARTITION part_1 VALUES IN (0)
 
31067
(SUBPARTITION sp11, SUBPARTITION sp12),
 
31068
PARTITION part_2 VALUES IN (1)
 
31069
(SUBPARTITION sp21, SUBPARTITION sp22),
 
31070
PARTITION part_3 VALUES IN (2)
 
31071
(SUBPARTITION sp31, SUBPARTITION sp32),
 
31072
PARTITION part_4 VALUES IN (NULL)
 
31073
(SUBPARTITION sp41, SUBPARTITION sp42));
 
31074
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31075
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31076
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31077
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
31078
ERROR HY000: Error in list of partitions to REBUILD
 
31079
DROP TABLE t1;
 
31080
CREATE TABLE t1 (
 
31081
f_int1 INTEGER,
 
31082
f_int2 INTEGER,
 
31083
f_char1 CHAR(20),
 
31084
f_char2 CHAR(20),
 
31085
f_charbig VARCHAR(1000)
 
31086
 
 
31087
)
 
31088
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
31089
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
31090
(PARTITION part_1 VALUES IN (0),
 
31091
 PARTITION part_2 VALUES IN (1),
 
31092
 PARTITION part_3 VALUES IN (NULL));
 
31093
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31094
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31095
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31096
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
31097
ERROR HY000: Error in list of partitions to REBUILD
 
31098
DROP TABLE t1;
 
31099
#  5.4 ALTER ... REBUILD PARTITION part_1,part_1,part_1;
 
31100
DROP TABLE IF EXISTS t1;
 
31101
CREATE TABLE t1 (
 
31102
f_int1 INTEGER,
 
31103
f_int2 INTEGER,
 
31104
f_char1 CHAR(20),
 
31105
f_char2 CHAR(20),
 
31106
f_charbig VARCHAR(1000)
 
31107
 
 
31108
)
 
31109
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
31110
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31111
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31112
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31113
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
31114
ERROR HY000: Error in list of partitions to REBUILD
 
31115
DROP TABLE t1;
 
31116
CREATE TABLE t1 (
 
31117
f_int1 INTEGER,
 
31118
f_int2 INTEGER,
 
31119
f_char1 CHAR(20),
 
31120
f_char2 CHAR(20),
 
31121
f_charbig VARCHAR(1000)
 
31122
 
 
31123
)
 
31124
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
31125
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31126
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31127
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31128
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
31129
ERROR HY000: Error in list of partitions to REBUILD
 
31130
DROP TABLE t1;
 
31131
CREATE TABLE t1 (
 
31132
f_int1 INTEGER,
 
31133
f_int2 INTEGER,
 
31134
f_char1 CHAR(20),
 
31135
f_char2 CHAR(20),
 
31136
f_charbig VARCHAR(1000)
 
31137
 
 
31138
)
 
31139
PARTITION BY LIST(MOD(f_int1,4))
 
31140
(PARTITION part_3 VALUES IN (-3),
 
31141
PARTITION part_2 VALUES IN (-2),
 
31142
PARTITION part_1 VALUES IN (-1),
 
31143
PARTITION part_N VALUES IN (NULL),
 
31144
PARTITION part0 VALUES IN (0),
 
31145
PARTITION part1 VALUES IN (1),
 
31146
PARTITION part2 VALUES IN (2),
 
31147
PARTITION part3 VALUES IN (3));
 
31148
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31149
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31150
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31151
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
31152
ERROR HY000: Error in list of partitions to REBUILD
 
31153
DROP TABLE t1;
 
31154
CREATE TABLE t1 (
 
31155
f_int1 INTEGER,
 
31156
f_int2 INTEGER,
 
31157
f_char1 CHAR(20),
 
31158
f_char2 CHAR(20),
 
31159
f_charbig VARCHAR(1000)
 
31160
 
 
31161
)
 
31162
PARTITION BY RANGE(f_int1)
 
31163
(PARTITION parta VALUES LESS THAN (0),
 
31164
PARTITION part_1 VALUES LESS THAN (5),
 
31165
PARTITION part_2 VALUES LESS THAN (10),
 
31166
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
31167
PARTITION part_4 VALUES LESS THAN (20),
 
31168
PARTITION part_5 VALUES LESS THAN (2147483646));
 
31169
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31170
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31171
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31172
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
31173
ERROR HY000: Error in list of partitions to REBUILD
 
31174
DROP TABLE t1;
 
31175
CREATE TABLE t1 (
 
31176
f_int1 INTEGER,
 
31177
f_int2 INTEGER,
 
31178
f_char1 CHAR(20),
 
31179
f_char2 CHAR(20),
 
31180
f_charbig VARCHAR(1000)
 
31181
 
 
31182
)
 
31183
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
31184
(PARTITION part_1 VALUES LESS THAN (0),
 
31185
PARTITION part_2 VALUES LESS THAN (5),
 
31186
PARTITION part_3 VALUES LESS THAN (10),
 
31187
PARTITION part_4 VALUES LESS THAN (2147483646));
 
31188
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31189
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31190
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31191
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
31192
ERROR HY000: Error in list of partitions to REBUILD
 
31193
DROP TABLE t1;
 
31194
CREATE TABLE t1 (
 
31195
f_int1 INTEGER,
 
31196
f_int2 INTEGER,
 
31197
f_char1 CHAR(20),
 
31198
f_char2 CHAR(20),
 
31199
f_charbig VARCHAR(1000)
 
31200
 
 
31201
)
 
31202
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
31203
(PARTITION part_1 VALUES LESS THAN (0)
 
31204
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
31205
PARTITION part_2 VALUES LESS THAN (5)
 
31206
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
31207
PARTITION part_3 VALUES LESS THAN (10)
 
31208
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
31209
PARTITION part_4 VALUES LESS THAN (2147483646)
 
31210
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
31211
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31212
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31213
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31214
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
31215
ERROR HY000: Error in list of partitions to REBUILD
 
31216
DROP TABLE t1;
 
31217
CREATE TABLE t1 (
 
31218
f_int1 INTEGER,
 
31219
f_int2 INTEGER,
 
31220
f_char1 CHAR(20),
 
31221
f_char2 CHAR(20),
 
31222
f_charbig VARCHAR(1000)
 
31223
 
 
31224
)
 
31225
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
31226
(PARTITION part_1 VALUES IN (0)
 
31227
(SUBPARTITION sp11, SUBPARTITION sp12),
 
31228
PARTITION part_2 VALUES IN (1)
 
31229
(SUBPARTITION sp21, SUBPARTITION sp22),
 
31230
PARTITION part_3 VALUES IN (2)
 
31231
(SUBPARTITION sp31, SUBPARTITION sp32),
 
31232
PARTITION part_4 VALUES IN (NULL)
 
31233
(SUBPARTITION sp41, SUBPARTITION sp42));
 
31234
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31235
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31236
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31237
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
31238
ERROR HY000: Error in list of partitions to REBUILD
 
31239
DROP TABLE t1;
 
31240
CREATE TABLE t1 (
 
31241
f_int1 INTEGER,
 
31242
f_int2 INTEGER,
 
31243
f_char1 CHAR(20),
 
31244
f_char2 CHAR(20),
 
31245
f_charbig VARCHAR(1000)
 
31246
 
 
31247
)
 
31248
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
31249
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
31250
(PARTITION part_1 VALUES IN (0),
 
31251
 PARTITION part_2 VALUES IN (1),
 
31252
 PARTITION part_3 VALUES IN (NULL));
 
31253
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31254
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31255
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31256
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
31257
ERROR HY000: Error in list of partitions to REBUILD
 
31258
DROP TABLE t1;
 
31259
#------------------------------------------------------------------------
 
31260
#  6   ALTER ... REMOVE PARTITIONING
 
31261
#------------------------------------------------------------------------
 
31262
#  6.1 ALTER ... REMOVE PARTITIONING;
 
31263
DROP TABLE IF EXISTS t1;
 
31264
CREATE TABLE t1 (
 
31265
f_int1 INTEGER,
 
31266
f_int2 INTEGER,
 
31267
f_char1 CHAR(20),
 
31268
f_char2 CHAR(20),
 
31269
f_charbig VARCHAR(1000)
 
31270
 
 
31271
)
 
31272
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
31273
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31274
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31275
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31276
ALTER TABLE t1 REMOVE PARTITIONING;
 
31277
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31278
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31279
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31280
# Start usability test (inc/partition_check.inc)
 
31281
create_command
 
31282
SHOW CREATE TABLE t1;
 
31283
Table   Create Table
 
31284
t1      CREATE TABLE `t1` (
 
31285
  `f_int1` int(11) DEFAULT NULL,
 
31286
  `f_int2` int(11) DEFAULT NULL,
 
31287
  `f_char1` char(20) DEFAULT NULL,
 
31288
  `f_char2` char(20) DEFAULT NULL,
 
31289
  `f_charbig` varchar(1000) DEFAULT NULL
 
31290
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
31291
 
 
31292
# check prerequisites-1 success:    1
 
31293
# check COUNT(*) success:    1
 
31294
# check MIN/MAX(f_int1) success:    1
 
31295
# check MIN/MAX(f_int2) success:    1
 
31296
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31297
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31298
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
31299
WHERE f_int1 IN (2,3);
 
31300
# check prerequisites-3 success:    1
 
31301
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
31302
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
31303
# check read via f_int1 success: 1
 
31304
# check read via f_int2 success: 1
 
31305
        
 
31306
# check multiple-1 success:     1
 
31307
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
31308
        
 
31309
# check multiple-2 success:     1
 
31310
INSERT INTO t1 SELECT * FROM t0_template
 
31311
WHERE MOD(f_int1,3) = 0;
 
31312
        
 
31313
# check multiple-3 success:     1
 
31314
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
31315
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
31316
AND @max_row_div2 + @max_row_div4;
 
31317
        
 
31318
# check multiple-4 success:     1
 
31319
DELETE FROM t1
 
31320
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
31321
AND @max_row_div2 + @max_row_div4 + @max_row;
 
31322
        
 
31323
# check multiple-5 success:     1
 
31324
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
31325
INSERT INTO t1
 
31326
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31327
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31328
f_charbig = '#SINGLE#';
 
31329
        
 
31330
# check single-1 success:       1
 
31331
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
31332
INSERT INTO t1
 
31333
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31334
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31335
f_charbig = '#SINGLE#';
 
31336
        
 
31337
# check single-2 success:       1
 
31338
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
31339
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
31340
UPDATE t1 SET f_int1 = @cur_value2
 
31341
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
31342
        
 
31343
# check single-3 success:       1
 
31344
SET @cur_value1= -1;
 
31345
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
31346
UPDATE t1 SET f_int1 = @cur_value1
 
31347
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
31348
        
 
31349
# check single-4 success:       1
 
31350
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
31351
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
31352
        
 
31353
# check single-5 success:       1
 
31354
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
31355
        
 
31356
# check single-6 success:       1
 
31357
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
31358
        
 
31359
# check single-7 success:       1
 
31360
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
31361
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
31362
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
31363
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
31364
f_charbig = '#NULL#';
 
31365
INSERT INTO t1
 
31366
SET f_int1 = NULL , f_int2 = -@max_row,
 
31367
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
31368
f_charbig = '#NULL#';
 
31369
# check null success:    1
 
31370
        
 
31371
# check null-1 success:         1
 
31372
UPDATE t1 SET f_int1 = -@max_row
 
31373
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31374
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31375
        
 
31376
# check null-2 success:         1
 
31377
UPDATE t1 SET f_int1 = NULL
 
31378
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31379
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31380
        
 
31381
# check null-3 success:         1
 
31382
DELETE FROM t1
 
31383
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31384
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31385
        
 
31386
# check null-4 success:         1
 
31387
DELETE FROM t1
 
31388
WHERE f_int1 = 0 AND f_int2 = 0
 
31389
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
31390
AND f_charbig = '#NULL#';
 
31391
SET AUTOCOMMIT= 0;
 
31392
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31393
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31394
FROM t0_template source_tab
 
31395
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31396
        
 
31397
# check transactions-1 success:         1
 
31398
COMMIT WORK;
 
31399
        
 
31400
# check transactions-2 success:         1
 
31401
ROLLBACK WORK;
 
31402
        
 
31403
# check transactions-3 success:         1
 
31404
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31405
COMMIT WORK;
 
31406
ROLLBACK WORK;
 
31407
        
 
31408
# check transactions-4 success:         1
 
31409
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31410
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31411
FROM t0_template source_tab
 
31412
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31413
        
 
31414
# check transactions-5 success:         1
 
31415
ROLLBACK WORK;
 
31416
        
 
31417
# check transactions-6 success:         1
 
31418
# INFO: Storage engine used for t1 seems to be transactional.
 
31419
COMMIT;
 
31420
        
 
31421
# check transactions-7 success:         1
 
31422
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31423
COMMIT WORK;
 
31424
SET @@session.sql_mode = 'traditional';
 
31425
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
31426
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31427
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
31428
'', '', 'was inserted' FROM t0_template
 
31429
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31430
ERROR 22012: Division by 0
 
31431
COMMIT;
 
31432
        
 
31433
# check transactions-8 success:         1
 
31434
# INFO: Storage engine used for t1 seems to be able to revert
 
31435
#       changes made by the failing statement.
 
31436
SET @@session.sql_mode = '';
 
31437
SET AUTOCOMMIT= 1;
 
31438
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31439
COMMIT WORK;
 
31440
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
31441
        
 
31442
# check special-1 success:      1
 
31443
UPDATE t1 SET f_charbig = '';
 
31444
        
 
31445
# check special-2 success:      1
 
31446
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
31447
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31448
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
31449
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31450
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31451
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31452
'just inserted' FROM t0_template
 
31453
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31454
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
31455
BEGIN
 
31456
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31457
f_charbig = 'updated by trigger'
 
31458
      WHERE f_int1 = new.f_int1;
 
31459
END|
 
31460
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31461
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31462
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31463
        
 
31464
# check trigger-1 success:      1
 
31465
DROP TRIGGER trg_1;
 
31466
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31467
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31468
f_charbig = 'just inserted'
 
31469
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31470
DELETE FROM t0_aux
 
31471
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31472
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31473
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31474
'just inserted' FROM t0_template
 
31475
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31476
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
31477
BEGIN
 
31478
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31479
f_charbig = 'updated by trigger'
 
31480
      WHERE f_int1 = new.f_int1;
 
31481
END|
 
31482
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31483
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31484
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31485
        
 
31486
# check trigger-2 success:      1
 
31487
DROP TRIGGER trg_1;
 
31488
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31489
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31490
f_charbig = 'just inserted'
 
31491
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31492
DELETE FROM t0_aux
 
31493
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31494
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31495
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31496
'just inserted' FROM t0_template
 
31497
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31498
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31499
BEGIN
 
31500
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31501
f_charbig = 'updated by trigger'
 
31502
      WHERE f_int1 = new.f_int1;
 
31503
END|
 
31504
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31505
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31506
        
 
31507
# check trigger-3 success:      1
 
31508
DROP TRIGGER trg_1;
 
31509
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31510
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31511
f_charbig = 'just inserted'
 
31512
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31513
DELETE FROM t0_aux
 
31514
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31515
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31516
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31517
'just inserted' FROM t0_template
 
31518
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31519
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31520
BEGIN
 
31521
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31522
f_charbig = 'updated by trigger'
 
31523
      WHERE f_int1 = - old.f_int1;
 
31524
END|
 
31525
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31526
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31527
        
 
31528
# check trigger-4 success:      1
 
31529
DROP TRIGGER trg_1;
 
31530
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31531
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31532
f_charbig = 'just inserted'
 
31533
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31534
DELETE FROM t0_aux
 
31535
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31536
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31537
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31538
'just inserted' FROM t0_template
 
31539
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31540
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31541
BEGIN
 
31542
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31543
f_charbig = 'updated by trigger'
 
31544
      WHERE f_int1 = new.f_int1;
 
31545
END|
 
31546
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31547
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31548
        
 
31549
# check trigger-5 success:      1
 
31550
DROP TRIGGER trg_1;
 
31551
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31552
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31553
f_charbig = 'just inserted'
 
31554
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31555
DELETE FROM t0_aux
 
31556
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31557
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31558
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31559
'just inserted' FROM t0_template
 
31560
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31561
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31562
BEGIN
 
31563
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31564
f_charbig = 'updated by trigger'
 
31565
      WHERE f_int1 = - old.f_int1;
 
31566
END|
 
31567
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31568
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31569
        
 
31570
# check trigger-6 success:      1
 
31571
DROP TRIGGER trg_1;
 
31572
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31573
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31574
f_charbig = 'just inserted'
 
31575
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31576
DELETE FROM t0_aux
 
31577
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31578
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31579
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31580
'just inserted' FROM t0_template
 
31581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31582
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
31583
BEGIN
 
31584
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31585
f_charbig = 'updated by trigger'
 
31586
      WHERE f_int1 = - old.f_int1;
 
31587
END|
 
31588
DELETE FROM t0_aux
 
31589
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31590
        
 
31591
# check trigger-7 success:      1
 
31592
DROP TRIGGER trg_1;
 
31593
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31594
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31595
f_charbig = 'just inserted'
 
31596
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31597
DELETE FROM t0_aux
 
31598
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31599
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31600
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31601
'just inserted' FROM t0_template
 
31602
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31603
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
31604
BEGIN
 
31605
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31606
f_charbig = 'updated by trigger'
 
31607
      WHERE f_int1 = - old.f_int1;
 
31608
END|
 
31609
DELETE FROM t0_aux
 
31610
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31611
        
 
31612
# check trigger-8 success:      1
 
31613
DROP TRIGGER trg_1;
 
31614
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31615
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31616
f_charbig = 'just inserted'
 
31617
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31618
DELETE FROM t0_aux
 
31619
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31620
DELETE FROM t1
 
31621
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31622
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31623
BEGIN
 
31624
SET new.f_int1 = old.f_int1 + @max_row,
 
31625
new.f_int2 = old.f_int2 - @max_row,
 
31626
new.f_charbig = '####updated per update trigger####';
 
31627
END|
 
31628
UPDATE t1
 
31629
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31630
f_charbig = '####updated per update statement itself####';
 
31631
        
 
31632
# check trigger-9 success:      1
 
31633
DROP TRIGGER trg_2;
 
31634
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31635
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31636
f_charbig = CONCAT('===',f_char1,'===');
 
31637
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31638
BEGIN
 
31639
SET new.f_int1 = new.f_int1 + @max_row,
 
31640
new.f_int2 = new.f_int2 - @max_row,
 
31641
new.f_charbig = '####updated per update trigger####';
 
31642
END|
 
31643
UPDATE t1
 
31644
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31645
f_charbig = '####updated per update statement itself####';
 
31646
        
 
31647
# check trigger-10 success:     1
 
31648
DROP TRIGGER trg_2;
 
31649
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31650
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31651
f_charbig = CONCAT('===',f_char1,'===');
 
31652
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31653
BEGIN
 
31654
SET new.f_int1 = @my_max1 + @counter,
 
31655
new.f_int2 = @my_min2 - @counter,
 
31656
new.f_charbig = '####updated per insert trigger####';
 
31657
SET @counter = @counter + 1;
 
31658
END|
 
31659
SET @counter = 1;
 
31660
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31661
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31662
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31663
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31664
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31665
ORDER BY f_int1;
 
31666
DROP TRIGGER trg_3;
 
31667
        
 
31668
# check trigger-11 success:     1
 
31669
DELETE FROM t1
 
31670
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31671
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31672
AND f_charbig = '####updated per insert trigger####';
 
31673
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31674
BEGIN
 
31675
SET new.f_int1 = @my_max1 + @counter,
 
31676
new.f_int2 = @my_min2 - @counter,
 
31677
new.f_charbig = '####updated per insert trigger####';
 
31678
SET @counter = @counter + 1;
 
31679
END|
 
31680
SET @counter = 1;
 
31681
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31682
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
31683
SELECT CAST(f_int1 AS CHAR),
 
31684
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31685
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31686
ORDER BY f_int1;
 
31687
DROP TRIGGER trg_3;
 
31688
        
 
31689
# check trigger-12 success:     1
 
31690
DELETE FROM t1
 
31691
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31692
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31693
AND f_charbig = '####updated per insert trigger####';
 
31694
ANALYZE  TABLE t1;
 
31695
Table   Op      Msg_type        Msg_text
 
31696
test.t1 analyze status  OK
 
31697
CHECK    TABLE t1 EXTENDED;
 
31698
Table   Op      Msg_type        Msg_text
 
31699
test.t1 check   status  OK
 
31700
CHECKSUM TABLE t1 EXTENDED;
 
31701
Table   Checksum
 
31702
test.t1 <some_value>
 
31703
OPTIMIZE TABLE t1;
 
31704
Table   Op      Msg_type        Msg_text
 
31705
test.t1 optimize        status  OK
 
31706
# check layout success:    1
 
31707
REPAIR   TABLE t1 EXTENDED;
 
31708
Table   Op      Msg_type        Msg_text
 
31709
test.t1 repair  note    The storage engine for the table doesn't support repair
 
31710
# check layout success:    1
 
31711
TRUNCATE t1;
 
31712
        
 
31713
# check TRUNCATE success:       1
 
31714
# check layout success:    1
 
31715
# End usability test (inc/partition_check.inc)
 
31716
DROP TABLE t1;
 
31717
CREATE TABLE t1 (
 
31718
f_int1 INTEGER,
 
31719
f_int2 INTEGER,
 
31720
f_char1 CHAR(20),
 
31721
f_char2 CHAR(20),
 
31722
f_charbig VARCHAR(1000)
 
31723
 
 
31724
)
 
31725
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
31726
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31727
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31728
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31729
ALTER TABLE t1 REMOVE PARTITIONING;
 
31730
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31731
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31732
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31733
# Start usability test (inc/partition_check.inc)
 
31734
create_command
 
31735
SHOW CREATE TABLE t1;
 
31736
Table   Create Table
 
31737
t1      CREATE TABLE `t1` (
 
31738
  `f_int1` int(11) DEFAULT NULL,
 
31739
  `f_int2` int(11) DEFAULT NULL,
 
31740
  `f_char1` char(20) DEFAULT NULL,
 
31741
  `f_char2` char(20) DEFAULT NULL,
 
31742
  `f_charbig` varchar(1000) DEFAULT NULL
 
31743
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
31744
 
 
31745
# check prerequisites-1 success:    1
 
31746
# check COUNT(*) success:    1
 
31747
# check MIN/MAX(f_int1) success:    1
 
31748
# check MIN/MAX(f_int2) success:    1
 
31749
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31750
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31751
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
31752
WHERE f_int1 IN (2,3);
 
31753
# check prerequisites-3 success:    1
 
31754
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
31755
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
31756
# check read via f_int1 success: 1
 
31757
# check read via f_int2 success: 1
 
31758
        
 
31759
# check multiple-1 success:     1
 
31760
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
31761
        
 
31762
# check multiple-2 success:     1
 
31763
INSERT INTO t1 SELECT * FROM t0_template
 
31764
WHERE MOD(f_int1,3) = 0;
 
31765
        
 
31766
# check multiple-3 success:     1
 
31767
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
31768
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
31769
AND @max_row_div2 + @max_row_div4;
 
31770
        
 
31771
# check multiple-4 success:     1
 
31772
DELETE FROM t1
 
31773
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
31774
AND @max_row_div2 + @max_row_div4 + @max_row;
 
31775
        
 
31776
# check multiple-5 success:     1
 
31777
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
31778
INSERT INTO t1
 
31779
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31780
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31781
f_charbig = '#SINGLE#';
 
31782
        
 
31783
# check single-1 success:       1
 
31784
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
31785
INSERT INTO t1
 
31786
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31787
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31788
f_charbig = '#SINGLE#';
 
31789
        
 
31790
# check single-2 success:       1
 
31791
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
31792
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
31793
UPDATE t1 SET f_int1 = @cur_value2
 
31794
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
31795
        
 
31796
# check single-3 success:       1
 
31797
SET @cur_value1= -1;
 
31798
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
31799
UPDATE t1 SET f_int1 = @cur_value1
 
31800
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
31801
        
 
31802
# check single-4 success:       1
 
31803
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
31804
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
31805
        
 
31806
# check single-5 success:       1
 
31807
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
31808
        
 
31809
# check single-6 success:       1
 
31810
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
31811
        
 
31812
# check single-7 success:       1
 
31813
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
31814
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
31815
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
31816
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
31817
f_charbig = '#NULL#';
 
31818
INSERT INTO t1
 
31819
SET f_int1 = NULL , f_int2 = -@max_row,
 
31820
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
31821
f_charbig = '#NULL#';
 
31822
# check null success:    1
 
31823
        
 
31824
# check null-1 success:         1
 
31825
UPDATE t1 SET f_int1 = -@max_row
 
31826
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31827
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31828
        
 
31829
# check null-2 success:         1
 
31830
UPDATE t1 SET f_int1 = NULL
 
31831
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31832
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31833
        
 
31834
# check null-3 success:         1
 
31835
DELETE FROM t1
 
31836
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31837
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31838
        
 
31839
# check null-4 success:         1
 
31840
DELETE FROM t1
 
31841
WHERE f_int1 = 0 AND f_int2 = 0
 
31842
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
31843
AND f_charbig = '#NULL#';
 
31844
SET AUTOCOMMIT= 0;
 
31845
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31846
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31847
FROM t0_template source_tab
 
31848
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31849
        
 
31850
# check transactions-1 success:         1
 
31851
COMMIT WORK;
 
31852
        
 
31853
# check transactions-2 success:         1
 
31854
ROLLBACK WORK;
 
31855
        
 
31856
# check transactions-3 success:         1
 
31857
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31858
COMMIT WORK;
 
31859
ROLLBACK WORK;
 
31860
        
 
31861
# check transactions-4 success:         1
 
31862
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31863
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31864
FROM t0_template source_tab
 
31865
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31866
        
 
31867
# check transactions-5 success:         1
 
31868
ROLLBACK WORK;
 
31869
        
 
31870
# check transactions-6 success:         1
 
31871
# INFO: Storage engine used for t1 seems to be transactional.
 
31872
COMMIT;
 
31873
        
 
31874
# check transactions-7 success:         1
 
31875
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31876
COMMIT WORK;
 
31877
SET @@session.sql_mode = 'traditional';
 
31878
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
31879
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31880
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
31881
'', '', 'was inserted' FROM t0_template
 
31882
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31883
ERROR 22012: Division by 0
 
31884
COMMIT;
 
31885
        
 
31886
# check transactions-8 success:         1
 
31887
# INFO: Storage engine used for t1 seems to be able to revert
 
31888
#       changes made by the failing statement.
 
31889
SET @@session.sql_mode = '';
 
31890
SET AUTOCOMMIT= 1;
 
31891
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31892
COMMIT WORK;
 
31893
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
31894
        
 
31895
# check special-1 success:      1
 
31896
UPDATE t1 SET f_charbig = '';
 
31897
        
 
31898
# check special-2 success:      1
 
31899
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
31900
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31901
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
31902
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31903
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31904
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31905
'just inserted' FROM t0_template
 
31906
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31907
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
31908
BEGIN
 
31909
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31910
f_charbig = 'updated by trigger'
 
31911
      WHERE f_int1 = new.f_int1;
 
31912
END|
 
31913
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31914
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31915
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31916
        
 
31917
# check trigger-1 success:      1
 
31918
DROP TRIGGER trg_1;
 
31919
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31920
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31921
f_charbig = 'just inserted'
 
31922
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31923
DELETE FROM t0_aux
 
31924
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31925
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31926
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31927
'just inserted' FROM t0_template
 
31928
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31929
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
31930
BEGIN
 
31931
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31932
f_charbig = 'updated by trigger'
 
31933
      WHERE f_int1 = new.f_int1;
 
31934
END|
 
31935
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31936
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31937
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31938
        
 
31939
# check trigger-2 success:      1
 
31940
DROP TRIGGER trg_1;
 
31941
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31942
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31943
f_charbig = 'just inserted'
 
31944
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31945
DELETE FROM t0_aux
 
31946
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31947
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31948
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31949
'just inserted' FROM t0_template
 
31950
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31951
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31952
BEGIN
 
31953
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31954
f_charbig = 'updated by trigger'
 
31955
      WHERE f_int1 = new.f_int1;
 
31956
END|
 
31957
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31958
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31959
        
 
31960
# check trigger-3 success:      1
 
31961
DROP TRIGGER trg_1;
 
31962
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31963
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31964
f_charbig = 'just inserted'
 
31965
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31966
DELETE FROM t0_aux
 
31967
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31968
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31969
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31970
'just inserted' FROM t0_template
 
31971
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31972
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31973
BEGIN
 
31974
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31975
f_charbig = 'updated by trigger'
 
31976
      WHERE f_int1 = - old.f_int1;
 
31977
END|
 
31978
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31979
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31980
        
 
31981
# check trigger-4 success:      1
 
31982
DROP TRIGGER trg_1;
 
31983
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31984
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31985
f_charbig = 'just inserted'
 
31986
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31987
DELETE FROM t0_aux
 
31988
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31989
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31990
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31991
'just inserted' FROM t0_template
 
31992
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31993
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31994
BEGIN
 
31995
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31996
f_charbig = 'updated by trigger'
 
31997
      WHERE f_int1 = new.f_int1;
 
31998
END|
 
31999
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32000
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32001
        
 
32002
# check trigger-5 success:      1
 
32003
DROP TRIGGER trg_1;
 
32004
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32005
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32006
f_charbig = 'just inserted'
 
32007
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32008
DELETE FROM t0_aux
 
32009
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32010
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32011
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32012
'just inserted' FROM t0_template
 
32013
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32014
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32015
BEGIN
 
32016
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32017
f_charbig = 'updated by trigger'
 
32018
      WHERE f_int1 = - old.f_int1;
 
32019
END|
 
32020
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32021
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32022
        
 
32023
# check trigger-6 success:      1
 
32024
DROP TRIGGER trg_1;
 
32025
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32026
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32027
f_charbig = 'just inserted'
 
32028
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32029
DELETE FROM t0_aux
 
32030
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32031
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32032
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32033
'just inserted' FROM t0_template
 
32034
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32035
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
32036
BEGIN
 
32037
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32038
f_charbig = 'updated by trigger'
 
32039
      WHERE f_int1 = - old.f_int1;
 
32040
END|
 
32041
DELETE FROM t0_aux
 
32042
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32043
        
 
32044
# check trigger-7 success:      1
 
32045
DROP TRIGGER trg_1;
 
32046
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32047
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32048
f_charbig = 'just inserted'
 
32049
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32050
DELETE FROM t0_aux
 
32051
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32052
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32053
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32054
'just inserted' FROM t0_template
 
32055
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32056
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
32057
BEGIN
 
32058
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32059
f_charbig = 'updated by trigger'
 
32060
      WHERE f_int1 = - old.f_int1;
 
32061
END|
 
32062
DELETE FROM t0_aux
 
32063
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32064
        
 
32065
# check trigger-8 success:      1
 
32066
DROP TRIGGER trg_1;
 
32067
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32068
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32069
f_charbig = 'just inserted'
 
32070
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32071
DELETE FROM t0_aux
 
32072
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32073
DELETE FROM t1
 
32074
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32075
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32076
BEGIN
 
32077
SET new.f_int1 = old.f_int1 + @max_row,
 
32078
new.f_int2 = old.f_int2 - @max_row,
 
32079
new.f_charbig = '####updated per update trigger####';
 
32080
END|
 
32081
UPDATE t1
 
32082
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32083
f_charbig = '####updated per update statement itself####';
 
32084
        
 
32085
# check trigger-9 success:      1
 
32086
DROP TRIGGER trg_2;
 
32087
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32088
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32089
f_charbig = CONCAT('===',f_char1,'===');
 
32090
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32091
BEGIN
 
32092
SET new.f_int1 = new.f_int1 + @max_row,
 
32093
new.f_int2 = new.f_int2 - @max_row,
 
32094
new.f_charbig = '####updated per update trigger####';
 
32095
END|
 
32096
UPDATE t1
 
32097
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32098
f_charbig = '####updated per update statement itself####';
 
32099
        
 
32100
# check trigger-10 success:     1
 
32101
DROP TRIGGER trg_2;
 
32102
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32103
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32104
f_charbig = CONCAT('===',f_char1,'===');
 
32105
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32106
BEGIN
 
32107
SET new.f_int1 = @my_max1 + @counter,
 
32108
new.f_int2 = @my_min2 - @counter,
 
32109
new.f_charbig = '####updated per insert trigger####';
 
32110
SET @counter = @counter + 1;
 
32111
END|
 
32112
SET @counter = 1;
 
32113
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32114
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32115
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32116
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32117
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32118
ORDER BY f_int1;
 
32119
DROP TRIGGER trg_3;
 
32120
        
 
32121
# check trigger-11 success:     1
 
32122
DELETE FROM t1
 
32123
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32124
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32125
AND f_charbig = '####updated per insert trigger####';
 
32126
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32127
BEGIN
 
32128
SET new.f_int1 = @my_max1 + @counter,
 
32129
new.f_int2 = @my_min2 - @counter,
 
32130
new.f_charbig = '####updated per insert trigger####';
 
32131
SET @counter = @counter + 1;
 
32132
END|
 
32133
SET @counter = 1;
 
32134
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32135
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
32136
SELECT CAST(f_int1 AS CHAR),
 
32137
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32138
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32139
ORDER BY f_int1;
 
32140
DROP TRIGGER trg_3;
 
32141
        
 
32142
# check trigger-12 success:     1
 
32143
DELETE FROM t1
 
32144
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32145
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32146
AND f_charbig = '####updated per insert trigger####';
 
32147
ANALYZE  TABLE t1;
 
32148
Table   Op      Msg_type        Msg_text
 
32149
test.t1 analyze status  OK
 
32150
CHECK    TABLE t1 EXTENDED;
 
32151
Table   Op      Msg_type        Msg_text
 
32152
test.t1 check   status  OK
 
32153
CHECKSUM TABLE t1 EXTENDED;
 
32154
Table   Checksum
 
32155
test.t1 <some_value>
 
32156
OPTIMIZE TABLE t1;
 
32157
Table   Op      Msg_type        Msg_text
 
32158
test.t1 optimize        status  OK
 
32159
# check layout success:    1
 
32160
REPAIR   TABLE t1 EXTENDED;
 
32161
Table   Op      Msg_type        Msg_text
 
32162
test.t1 repair  note    The storage engine for the table doesn't support repair
 
32163
# check layout success:    1
 
32164
TRUNCATE t1;
 
32165
        
 
32166
# check TRUNCATE success:       1
 
32167
# check layout success:    1
 
32168
# End usability test (inc/partition_check.inc)
 
32169
DROP TABLE t1;
 
32170
CREATE TABLE t1 (
 
32171
f_int1 INTEGER,
 
32172
f_int2 INTEGER,
 
32173
f_char1 CHAR(20),
 
32174
f_char2 CHAR(20),
 
32175
f_charbig VARCHAR(1000)
 
32176
 
 
32177
)
 
32178
PARTITION BY LIST(MOD(f_int1,4))
 
32179
(PARTITION part_3 VALUES IN (-3),
 
32180
PARTITION part_2 VALUES IN (-2),
 
32181
PARTITION part_1 VALUES IN (-1),
 
32182
PARTITION part_N VALUES IN (NULL),
 
32183
PARTITION part0 VALUES IN (0),
 
32184
PARTITION part1 VALUES IN (1),
 
32185
PARTITION part2 VALUES IN (2),
 
32186
PARTITION part3 VALUES IN (3));
 
32187
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32188
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
32189
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
32190
ALTER TABLE t1 REMOVE PARTITIONING;
 
32191
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32192
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
32193
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
32194
# Start usability test (inc/partition_check.inc)
 
32195
create_command
 
32196
SHOW CREATE TABLE t1;
 
32197
Table   Create Table
 
32198
t1      CREATE TABLE `t1` (
 
32199
  `f_int1` int(11) DEFAULT NULL,
 
32200
  `f_int2` int(11) DEFAULT NULL,
 
32201
  `f_char1` char(20) DEFAULT NULL,
 
32202
  `f_char2` char(20) DEFAULT NULL,
 
32203
  `f_charbig` varchar(1000) DEFAULT NULL
 
32204
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
32205
 
 
32206
# check prerequisites-1 success:    1
 
32207
# check COUNT(*) success:    1
 
32208
# check MIN/MAX(f_int1) success:    1
 
32209
# check MIN/MAX(f_int2) success:    1
 
32210
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32211
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32212
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
32213
WHERE f_int1 IN (2,3);
 
32214
# check prerequisites-3 success:    1
 
32215
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
32216
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
32217
# check read via f_int1 success: 1
 
32218
# check read via f_int2 success: 1
 
32219
        
 
32220
# check multiple-1 success:     1
 
32221
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
32222
        
 
32223
# check multiple-2 success:     1
 
32224
INSERT INTO t1 SELECT * FROM t0_template
 
32225
WHERE MOD(f_int1,3) = 0;
 
32226
        
 
32227
# check multiple-3 success:     1
 
32228
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
32229
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
32230
AND @max_row_div2 + @max_row_div4;
 
32231
        
 
32232
# check multiple-4 success:     1
 
32233
DELETE FROM t1
 
32234
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
32235
AND @max_row_div2 + @max_row_div4 + @max_row;
 
32236
        
 
32237
# check multiple-5 success:     1
 
32238
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
32239
INSERT INTO t1
 
32240
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32241
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32242
f_charbig = '#SINGLE#';
 
32243
        
 
32244
# check single-1 success:       1
 
32245
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
32246
INSERT INTO t1
 
32247
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32248
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32249
f_charbig = '#SINGLE#';
 
32250
        
 
32251
# check single-2 success:       1
 
32252
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
32253
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
32254
UPDATE t1 SET f_int1 = @cur_value2
 
32255
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
32256
        
 
32257
# check single-3 success:       1
 
32258
SET @cur_value1= -1;
 
32259
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
32260
UPDATE t1 SET f_int1 = @cur_value1
 
32261
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
32262
        
 
32263
# check single-4 success:       1
 
32264
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
32265
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
32266
        
 
32267
# check single-5 success:       1
 
32268
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
32269
        
 
32270
# check single-6 success:       1
 
32271
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
32272
        
 
32273
# check single-7 success:       1
 
32274
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
32275
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
32276
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
32277
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
32278
f_charbig = '#NULL#';
 
32279
INSERT INTO t1
 
32280
SET f_int1 = NULL , f_int2 = -@max_row,
 
32281
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
32282
f_charbig = '#NULL#';
 
32283
# check null success:    1
 
32284
        
 
32285
# check null-1 success:         1
 
32286
UPDATE t1 SET f_int1 = -@max_row
 
32287
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32288
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32289
        
 
32290
# check null-2 success:         1
 
32291
UPDATE t1 SET f_int1 = NULL
 
32292
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32293
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32294
        
 
32295
# check null-3 success:         1
 
32296
DELETE FROM t1
 
32297
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32298
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32299
        
 
32300
# check null-4 success:         1
 
32301
DELETE FROM t1
 
32302
WHERE f_int1 = 0 AND f_int2 = 0
 
32303
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
32304
AND f_charbig = '#NULL#';
 
32305
SET AUTOCOMMIT= 0;
 
32306
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32307
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32308
FROM t0_template source_tab
 
32309
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32310
        
 
32311
# check transactions-1 success:         1
 
32312
COMMIT WORK;
 
32313
        
 
32314
# check transactions-2 success:         1
 
32315
ROLLBACK WORK;
 
32316
        
 
32317
# check transactions-3 success:         1
 
32318
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32319
COMMIT WORK;
 
32320
ROLLBACK WORK;
 
32321
        
 
32322
# check transactions-4 success:         1
 
32323
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32324
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32325
FROM t0_template source_tab
 
32326
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32327
        
 
32328
# check transactions-5 success:         1
 
32329
ROLLBACK WORK;
 
32330
        
 
32331
# check transactions-6 success:         1
 
32332
# INFO: Storage engine used for t1 seems to be transactional.
 
32333
COMMIT;
 
32334
        
 
32335
# check transactions-7 success:         1
 
32336
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32337
COMMIT WORK;
 
32338
SET @@session.sql_mode = 'traditional';
 
32339
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
32340
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32341
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
32342
'', '', 'was inserted' FROM t0_template
 
32343
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32344
ERROR 22012: Division by 0
 
32345
COMMIT;
 
32346
        
 
32347
# check transactions-8 success:         1
 
32348
# INFO: Storage engine used for t1 seems to be able to revert
 
32349
#       changes made by the failing statement.
 
32350
SET @@session.sql_mode = '';
 
32351
SET AUTOCOMMIT= 1;
 
32352
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32353
COMMIT WORK;
 
32354
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
32355
        
 
32356
# check special-1 success:      1
 
32357
UPDATE t1 SET f_charbig = '';
 
32358
        
 
32359
# check special-2 success:      1
 
32360
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
32361
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32362
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
32363
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32364
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32365
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32366
'just inserted' FROM t0_template
 
32367
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32368
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
32369
BEGIN
 
32370
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32371
f_charbig = 'updated by trigger'
 
32372
      WHERE f_int1 = new.f_int1;
 
32373
END|
 
32374
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32375
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32376
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32377
        
 
32378
# check trigger-1 success:      1
 
32379
DROP TRIGGER trg_1;
 
32380
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32381
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32382
f_charbig = 'just inserted'
 
32383
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32384
DELETE FROM t0_aux
 
32385
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32386
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32387
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32388
'just inserted' FROM t0_template
 
32389
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32390
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
32391
BEGIN
 
32392
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32393
f_charbig = 'updated by trigger'
 
32394
      WHERE f_int1 = new.f_int1;
 
32395
END|
 
32396
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32397
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32398
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32399
        
 
32400
# check trigger-2 success:      1
 
32401
DROP TRIGGER trg_1;
 
32402
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32403
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32404
f_charbig = 'just inserted'
 
32405
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32406
DELETE FROM t0_aux
 
32407
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32408
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32409
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32410
'just inserted' FROM t0_template
 
32411
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32412
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32413
BEGIN
 
32414
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32415
f_charbig = 'updated by trigger'
 
32416
      WHERE f_int1 = new.f_int1;
 
32417
END|
 
32418
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32419
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32420
        
 
32421
# check trigger-3 success:      1
 
32422
DROP TRIGGER trg_1;
 
32423
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32424
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32425
f_charbig = 'just inserted'
 
32426
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32427
DELETE FROM t0_aux
 
32428
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32429
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32430
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32431
'just inserted' FROM t0_template
 
32432
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32433
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32434
BEGIN
 
32435
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32436
f_charbig = 'updated by trigger'
 
32437
      WHERE f_int1 = - old.f_int1;
 
32438
END|
 
32439
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32440
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32441
        
 
32442
# check trigger-4 success:      1
 
32443
DROP TRIGGER trg_1;
 
32444
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32445
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32446
f_charbig = 'just inserted'
 
32447
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32448
DELETE FROM t0_aux
 
32449
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32450
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32451
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32452
'just inserted' FROM t0_template
 
32453
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32454
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32455
BEGIN
 
32456
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32457
f_charbig = 'updated by trigger'
 
32458
      WHERE f_int1 = new.f_int1;
 
32459
END|
 
32460
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32461
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32462
        
 
32463
# check trigger-5 success:      1
 
32464
DROP TRIGGER trg_1;
 
32465
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32466
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32467
f_charbig = 'just inserted'
 
32468
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32469
DELETE FROM t0_aux
 
32470
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32471
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32472
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32473
'just inserted' FROM t0_template
 
32474
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32475
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32476
BEGIN
 
32477
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32478
f_charbig = 'updated by trigger'
 
32479
      WHERE f_int1 = - old.f_int1;
 
32480
END|
 
32481
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32482
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32483
        
 
32484
# check trigger-6 success:      1
 
32485
DROP TRIGGER trg_1;
 
32486
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32487
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32488
f_charbig = 'just inserted'
 
32489
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32490
DELETE FROM t0_aux
 
32491
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32492
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32493
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32494
'just inserted' FROM t0_template
 
32495
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32496
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
32497
BEGIN
 
32498
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32499
f_charbig = 'updated by trigger'
 
32500
      WHERE f_int1 = - old.f_int1;
 
32501
END|
 
32502
DELETE FROM t0_aux
 
32503
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32504
        
 
32505
# check trigger-7 success:      1
 
32506
DROP TRIGGER trg_1;
 
32507
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32508
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32509
f_charbig = 'just inserted'
 
32510
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32511
DELETE FROM t0_aux
 
32512
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32513
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32514
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32515
'just inserted' FROM t0_template
 
32516
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32517
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
32518
BEGIN
 
32519
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32520
f_charbig = 'updated by trigger'
 
32521
      WHERE f_int1 = - old.f_int1;
 
32522
END|
 
32523
DELETE FROM t0_aux
 
32524
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32525
        
 
32526
# check trigger-8 success:      1
 
32527
DROP TRIGGER trg_1;
 
32528
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32529
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32530
f_charbig = 'just inserted'
 
32531
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32532
DELETE FROM t0_aux
 
32533
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32534
DELETE FROM t1
 
32535
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32536
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32537
BEGIN
 
32538
SET new.f_int1 = old.f_int1 + @max_row,
 
32539
new.f_int2 = old.f_int2 - @max_row,
 
32540
new.f_charbig = '####updated per update trigger####';
 
32541
END|
 
32542
UPDATE t1
 
32543
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32544
f_charbig = '####updated per update statement itself####';
 
32545
        
 
32546
# check trigger-9 success:      1
 
32547
DROP TRIGGER trg_2;
 
32548
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32549
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32550
f_charbig = CONCAT('===',f_char1,'===');
 
32551
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32552
BEGIN
 
32553
SET new.f_int1 = new.f_int1 + @max_row,
 
32554
new.f_int2 = new.f_int2 - @max_row,
 
32555
new.f_charbig = '####updated per update trigger####';
 
32556
END|
 
32557
UPDATE t1
 
32558
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32559
f_charbig = '####updated per update statement itself####';
 
32560
        
 
32561
# check trigger-10 success:     1
 
32562
DROP TRIGGER trg_2;
 
32563
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32564
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32565
f_charbig = CONCAT('===',f_char1,'===');
 
32566
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32567
BEGIN
 
32568
SET new.f_int1 = @my_max1 + @counter,
 
32569
new.f_int2 = @my_min2 - @counter,
 
32570
new.f_charbig = '####updated per insert trigger####';
 
32571
SET @counter = @counter + 1;
 
32572
END|
 
32573
SET @counter = 1;
 
32574
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32575
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32576
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32577
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32578
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32579
ORDER BY f_int1;
 
32580
DROP TRIGGER trg_3;
 
32581
        
 
32582
# check trigger-11 success:     1
 
32583
DELETE FROM t1
 
32584
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32585
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32586
AND f_charbig = '####updated per insert trigger####';
 
32587
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32588
BEGIN
 
32589
SET new.f_int1 = @my_max1 + @counter,
 
32590
new.f_int2 = @my_min2 - @counter,
 
32591
new.f_charbig = '####updated per insert trigger####';
 
32592
SET @counter = @counter + 1;
 
32593
END|
 
32594
SET @counter = 1;
 
32595
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32596
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
32597
SELECT CAST(f_int1 AS CHAR),
 
32598
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32599
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32600
ORDER BY f_int1;
 
32601
DROP TRIGGER trg_3;
 
32602
        
 
32603
# check trigger-12 success:     1
 
32604
DELETE FROM t1
 
32605
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32606
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32607
AND f_charbig = '####updated per insert trigger####';
 
32608
ANALYZE  TABLE t1;
 
32609
Table   Op      Msg_type        Msg_text
 
32610
test.t1 analyze status  OK
 
32611
CHECK    TABLE t1 EXTENDED;
 
32612
Table   Op      Msg_type        Msg_text
 
32613
test.t1 check   status  OK
 
32614
CHECKSUM TABLE t1 EXTENDED;
 
32615
Table   Checksum
 
32616
test.t1 <some_value>
 
32617
OPTIMIZE TABLE t1;
 
32618
Table   Op      Msg_type        Msg_text
 
32619
test.t1 optimize        status  OK
 
32620
# check layout success:    1
 
32621
REPAIR   TABLE t1 EXTENDED;
 
32622
Table   Op      Msg_type        Msg_text
 
32623
test.t1 repair  note    The storage engine for the table doesn't support repair
 
32624
# check layout success:    1
 
32625
TRUNCATE t1;
 
32626
        
 
32627
# check TRUNCATE success:       1
 
32628
# check layout success:    1
 
32629
# End usability test (inc/partition_check.inc)
 
32630
DROP TABLE t1;
 
32631
CREATE TABLE t1 (
 
32632
f_int1 INTEGER,
 
32633
f_int2 INTEGER,
 
32634
f_char1 CHAR(20),
 
32635
f_char2 CHAR(20),
 
32636
f_charbig VARCHAR(1000)
 
32637
 
 
32638
)
 
32639
PARTITION BY RANGE(f_int1)
 
32640
(PARTITION parta VALUES LESS THAN (0),
 
32641
PARTITION part_1 VALUES LESS THAN (5),
 
32642
PARTITION part_2 VALUES LESS THAN (10),
 
32643
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
32644
PARTITION part_4 VALUES LESS THAN (20),
 
32645
PARTITION part_5 VALUES LESS THAN (2147483646));
 
32646
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32647
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
32648
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
32649
ALTER TABLE t1 REMOVE PARTITIONING;
 
32650
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32651
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
32652
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
32653
# Start usability test (inc/partition_check.inc)
 
32654
create_command
 
32655
SHOW CREATE TABLE t1;
 
32656
Table   Create Table
 
32657
t1      CREATE TABLE `t1` (
 
32658
  `f_int1` int(11) DEFAULT NULL,
 
32659
  `f_int2` int(11) DEFAULT NULL,
 
32660
  `f_char1` char(20) DEFAULT NULL,
 
32661
  `f_char2` char(20) DEFAULT NULL,
 
32662
  `f_charbig` varchar(1000) DEFAULT NULL
 
32663
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
32664
 
 
32665
# check prerequisites-1 success:    1
 
32666
# check COUNT(*) success:    1
 
32667
# check MIN/MAX(f_int1) success:    1
 
32668
# check MIN/MAX(f_int2) success:    1
 
32669
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32670
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32671
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
32672
WHERE f_int1 IN (2,3);
 
32673
# check prerequisites-3 success:    1
 
32674
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
32675
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
32676
# check read via f_int1 success: 1
 
32677
# check read via f_int2 success: 1
 
32678
        
 
32679
# check multiple-1 success:     1
 
32680
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
32681
        
 
32682
# check multiple-2 success:     1
 
32683
INSERT INTO t1 SELECT * FROM t0_template
 
32684
WHERE MOD(f_int1,3) = 0;
 
32685
        
 
32686
# check multiple-3 success:     1
 
32687
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
32688
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
32689
AND @max_row_div2 + @max_row_div4;
 
32690
        
 
32691
# check multiple-4 success:     1
 
32692
DELETE FROM t1
 
32693
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
32694
AND @max_row_div2 + @max_row_div4 + @max_row;
 
32695
        
 
32696
# check multiple-5 success:     1
 
32697
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
32698
INSERT INTO t1
 
32699
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32700
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32701
f_charbig = '#SINGLE#';
 
32702
        
 
32703
# check single-1 success:       1
 
32704
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
32705
INSERT INTO t1
 
32706
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32707
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32708
f_charbig = '#SINGLE#';
 
32709
        
 
32710
# check single-2 success:       1
 
32711
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
32712
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
32713
UPDATE t1 SET f_int1 = @cur_value2
 
32714
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
32715
        
 
32716
# check single-3 success:       1
 
32717
SET @cur_value1= -1;
 
32718
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
32719
UPDATE t1 SET f_int1 = @cur_value1
 
32720
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
32721
        
 
32722
# check single-4 success:       1
 
32723
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
32724
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
32725
        
 
32726
# check single-5 success:       1
 
32727
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
32728
        
 
32729
# check single-6 success:       1
 
32730
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
32731
        
 
32732
# check single-7 success:       1
 
32733
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
32734
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
32735
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
32736
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
32737
f_charbig = '#NULL#';
 
32738
INSERT INTO t1
 
32739
SET f_int1 = NULL , f_int2 = -@max_row,
 
32740
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
32741
f_charbig = '#NULL#';
 
32742
# check null success:    1
 
32743
        
 
32744
# check null-1 success:         1
 
32745
UPDATE t1 SET f_int1 = -@max_row
 
32746
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32747
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32748
        
 
32749
# check null-2 success:         1
 
32750
UPDATE t1 SET f_int1 = NULL
 
32751
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32752
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32753
        
 
32754
# check null-3 success:         1
 
32755
DELETE FROM t1
 
32756
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32757
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32758
        
 
32759
# check null-4 success:         1
 
32760
DELETE FROM t1
 
32761
WHERE f_int1 = 0 AND f_int2 = 0
 
32762
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
32763
AND f_charbig = '#NULL#';
 
32764
SET AUTOCOMMIT= 0;
 
32765
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32766
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32767
FROM t0_template source_tab
 
32768
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32769
        
 
32770
# check transactions-1 success:         1
 
32771
COMMIT WORK;
 
32772
        
 
32773
# check transactions-2 success:         1
 
32774
ROLLBACK WORK;
 
32775
        
 
32776
# check transactions-3 success:         1
 
32777
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32778
COMMIT WORK;
 
32779
ROLLBACK WORK;
 
32780
        
 
32781
# check transactions-4 success:         1
 
32782
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32783
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32784
FROM t0_template source_tab
 
32785
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32786
        
 
32787
# check transactions-5 success:         1
 
32788
ROLLBACK WORK;
 
32789
        
 
32790
# check transactions-6 success:         1
 
32791
# INFO: Storage engine used for t1 seems to be transactional.
 
32792
COMMIT;
 
32793
        
 
32794
# check transactions-7 success:         1
 
32795
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32796
COMMIT WORK;
 
32797
SET @@session.sql_mode = 'traditional';
 
32798
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
32799
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32800
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
32801
'', '', 'was inserted' FROM t0_template
 
32802
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32803
ERROR 22012: Division by 0
 
32804
COMMIT;
 
32805
        
 
32806
# check transactions-8 success:         1
 
32807
# INFO: Storage engine used for t1 seems to be able to revert
 
32808
#       changes made by the failing statement.
 
32809
SET @@session.sql_mode = '';
 
32810
SET AUTOCOMMIT= 1;
 
32811
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32812
COMMIT WORK;
 
32813
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
32814
        
 
32815
# check special-1 success:      1
 
32816
UPDATE t1 SET f_charbig = '';
 
32817
        
 
32818
# check special-2 success:      1
 
32819
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
32820
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32821
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
32822
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32823
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32824
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32825
'just inserted' FROM t0_template
 
32826
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32827
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
32828
BEGIN
 
32829
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32830
f_charbig = 'updated by trigger'
 
32831
      WHERE f_int1 = new.f_int1;
 
32832
END|
 
32833
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32834
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32835
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32836
        
 
32837
# check trigger-1 success:      1
 
32838
DROP TRIGGER trg_1;
 
32839
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32840
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32841
f_charbig = 'just inserted'
 
32842
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32843
DELETE FROM t0_aux
 
32844
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32845
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32846
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32847
'just inserted' FROM t0_template
 
32848
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32849
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
32850
BEGIN
 
32851
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32852
f_charbig = 'updated by trigger'
 
32853
      WHERE f_int1 = new.f_int1;
 
32854
END|
 
32855
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32856
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32857
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32858
        
 
32859
# check trigger-2 success:      1
 
32860
DROP TRIGGER trg_1;
 
32861
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32862
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32863
f_charbig = 'just inserted'
 
32864
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32865
DELETE FROM t0_aux
 
32866
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32867
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32868
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32869
'just inserted' FROM t0_template
 
32870
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32871
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32872
BEGIN
 
32873
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32874
f_charbig = 'updated by trigger'
 
32875
      WHERE f_int1 = new.f_int1;
 
32876
END|
 
32877
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32878
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32879
        
 
32880
# check trigger-3 success:      1
 
32881
DROP TRIGGER trg_1;
 
32882
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32883
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32884
f_charbig = 'just inserted'
 
32885
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32886
DELETE FROM t0_aux
 
32887
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32888
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32889
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32890
'just inserted' FROM t0_template
 
32891
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32892
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32893
BEGIN
 
32894
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32895
f_charbig = 'updated by trigger'
 
32896
      WHERE f_int1 = - old.f_int1;
 
32897
END|
 
32898
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32899
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32900
        
 
32901
# check trigger-4 success:      1
 
32902
DROP TRIGGER trg_1;
 
32903
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32904
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32905
f_charbig = 'just inserted'
 
32906
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32907
DELETE FROM t0_aux
 
32908
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32909
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32910
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32911
'just inserted' FROM t0_template
 
32912
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32913
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32914
BEGIN
 
32915
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32916
f_charbig = 'updated by trigger'
 
32917
      WHERE f_int1 = new.f_int1;
 
32918
END|
 
32919
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32920
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32921
        
 
32922
# check trigger-5 success:      1
 
32923
DROP TRIGGER trg_1;
 
32924
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32925
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32926
f_charbig = 'just inserted'
 
32927
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32928
DELETE FROM t0_aux
 
32929
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32930
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32931
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32932
'just inserted' FROM t0_template
 
32933
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32934
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32935
BEGIN
 
32936
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32937
f_charbig = 'updated by trigger'
 
32938
      WHERE f_int1 = - old.f_int1;
 
32939
END|
 
32940
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32941
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32942
        
 
32943
# check trigger-6 success:      1
 
32944
DROP TRIGGER trg_1;
 
32945
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32946
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32947
f_charbig = 'just inserted'
 
32948
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32949
DELETE FROM t0_aux
 
32950
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32951
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32952
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32953
'just inserted' FROM t0_template
 
32954
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32955
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
32956
BEGIN
 
32957
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32958
f_charbig = 'updated by trigger'
 
32959
      WHERE f_int1 = - old.f_int1;
 
32960
END|
 
32961
DELETE FROM t0_aux
 
32962
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32963
        
 
32964
# check trigger-7 success:      1
 
32965
DROP TRIGGER trg_1;
 
32966
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32967
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32968
f_charbig = 'just inserted'
 
32969
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32970
DELETE FROM t0_aux
 
32971
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32972
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32973
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32974
'just inserted' FROM t0_template
 
32975
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32976
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
32977
BEGIN
 
32978
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32979
f_charbig = 'updated by trigger'
 
32980
      WHERE f_int1 = - old.f_int1;
 
32981
END|
 
32982
DELETE FROM t0_aux
 
32983
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32984
        
 
32985
# check trigger-8 success:      1
 
32986
DROP TRIGGER trg_1;
 
32987
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32988
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32989
f_charbig = 'just inserted'
 
32990
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32991
DELETE FROM t0_aux
 
32992
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32993
DELETE FROM t1
 
32994
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32995
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32996
BEGIN
 
32997
SET new.f_int1 = old.f_int1 + @max_row,
 
32998
new.f_int2 = old.f_int2 - @max_row,
 
32999
new.f_charbig = '####updated per update trigger####';
 
33000
END|
 
33001
UPDATE t1
 
33002
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33003
f_charbig = '####updated per update statement itself####';
 
33004
        
 
33005
# check trigger-9 success:      1
 
33006
DROP TRIGGER trg_2;
 
33007
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33008
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33009
f_charbig = CONCAT('===',f_char1,'===');
 
33010
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33011
BEGIN
 
33012
SET new.f_int1 = new.f_int1 + @max_row,
 
33013
new.f_int2 = new.f_int2 - @max_row,
 
33014
new.f_charbig = '####updated per update trigger####';
 
33015
END|
 
33016
UPDATE t1
 
33017
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33018
f_charbig = '####updated per update statement itself####';
 
33019
        
 
33020
# check trigger-10 success:     1
 
33021
DROP TRIGGER trg_2;
 
33022
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33023
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33024
f_charbig = CONCAT('===',f_char1,'===');
 
33025
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33026
BEGIN
 
33027
SET new.f_int1 = @my_max1 + @counter,
 
33028
new.f_int2 = @my_min2 - @counter,
 
33029
new.f_charbig = '####updated per insert trigger####';
 
33030
SET @counter = @counter + 1;
 
33031
END|
 
33032
SET @counter = 1;
 
33033
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33034
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33035
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33036
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33037
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33038
ORDER BY f_int1;
 
33039
DROP TRIGGER trg_3;
 
33040
        
 
33041
# check trigger-11 success:     1
 
33042
DELETE FROM t1
 
33043
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33044
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33045
AND f_charbig = '####updated per insert trigger####';
 
33046
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33047
BEGIN
 
33048
SET new.f_int1 = @my_max1 + @counter,
 
33049
new.f_int2 = @my_min2 - @counter,
 
33050
new.f_charbig = '####updated per insert trigger####';
 
33051
SET @counter = @counter + 1;
 
33052
END|
 
33053
SET @counter = 1;
 
33054
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33055
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
33056
SELECT CAST(f_int1 AS CHAR),
 
33057
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33058
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33059
ORDER BY f_int1;
 
33060
DROP TRIGGER trg_3;
 
33061
        
 
33062
# check trigger-12 success:     1
 
33063
DELETE FROM t1
 
33064
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33065
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33066
AND f_charbig = '####updated per insert trigger####';
 
33067
ANALYZE  TABLE t1;
 
33068
Table   Op      Msg_type        Msg_text
 
33069
test.t1 analyze status  OK
 
33070
CHECK    TABLE t1 EXTENDED;
 
33071
Table   Op      Msg_type        Msg_text
 
33072
test.t1 check   status  OK
 
33073
CHECKSUM TABLE t1 EXTENDED;
 
33074
Table   Checksum
 
33075
test.t1 <some_value>
 
33076
OPTIMIZE TABLE t1;
 
33077
Table   Op      Msg_type        Msg_text
 
33078
test.t1 optimize        status  OK
 
33079
# check layout success:    1
 
33080
REPAIR   TABLE t1 EXTENDED;
 
33081
Table   Op      Msg_type        Msg_text
 
33082
test.t1 repair  note    The storage engine for the table doesn't support repair
 
33083
# check layout success:    1
 
33084
TRUNCATE t1;
 
33085
        
 
33086
# check TRUNCATE success:       1
 
33087
# check layout success:    1
 
33088
# End usability test (inc/partition_check.inc)
 
33089
DROP TABLE t1;
 
33090
CREATE TABLE t1 (
 
33091
f_int1 INTEGER,
 
33092
f_int2 INTEGER,
 
33093
f_char1 CHAR(20),
 
33094
f_char2 CHAR(20),
 
33095
f_charbig VARCHAR(1000)
 
33096
 
 
33097
)
 
33098
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
33099
(PARTITION part_1 VALUES LESS THAN (0),
 
33100
PARTITION part_2 VALUES LESS THAN (5),
 
33101
PARTITION part_3 VALUES LESS THAN (10),
 
33102
PARTITION part_4 VALUES LESS THAN (2147483646));
 
33103
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33104
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
33105
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
33106
ALTER TABLE t1 REMOVE PARTITIONING;
 
33107
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33108
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
33109
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
33110
# Start usability test (inc/partition_check.inc)
 
33111
create_command
 
33112
SHOW CREATE TABLE t1;
 
33113
Table   Create Table
 
33114
t1      CREATE TABLE `t1` (
 
33115
  `f_int1` int(11) DEFAULT NULL,
 
33116
  `f_int2` int(11) DEFAULT NULL,
 
33117
  `f_char1` char(20) DEFAULT NULL,
 
33118
  `f_char2` char(20) DEFAULT NULL,
 
33119
  `f_charbig` varchar(1000) DEFAULT NULL
 
33120
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
33121
 
 
33122
# check prerequisites-1 success:    1
 
33123
# check COUNT(*) success:    1
 
33124
# check MIN/MAX(f_int1) success:    1
 
33125
# check MIN/MAX(f_int2) success:    1
 
33126
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33127
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33128
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
33129
WHERE f_int1 IN (2,3);
 
33130
# check prerequisites-3 success:    1
 
33131
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
33132
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
33133
# check read via f_int1 success: 1
 
33134
# check read via f_int2 success: 1
 
33135
        
 
33136
# check multiple-1 success:     1
 
33137
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
33138
        
 
33139
# check multiple-2 success:     1
 
33140
INSERT INTO t1 SELECT * FROM t0_template
 
33141
WHERE MOD(f_int1,3) = 0;
 
33142
        
 
33143
# check multiple-3 success:     1
 
33144
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
33145
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
33146
AND @max_row_div2 + @max_row_div4;
 
33147
        
 
33148
# check multiple-4 success:     1
 
33149
DELETE FROM t1
 
33150
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
33151
AND @max_row_div2 + @max_row_div4 + @max_row;
 
33152
        
 
33153
# check multiple-5 success:     1
 
33154
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
33155
INSERT INTO t1
 
33156
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
33157
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
33158
f_charbig = '#SINGLE#';
 
33159
        
 
33160
# check single-1 success:       1
 
33161
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
33162
INSERT INTO t1
 
33163
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
33164
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
33165
f_charbig = '#SINGLE#';
 
33166
        
 
33167
# check single-2 success:       1
 
33168
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
33169
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
33170
UPDATE t1 SET f_int1 = @cur_value2
 
33171
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
33172
        
 
33173
# check single-3 success:       1
 
33174
SET @cur_value1= -1;
 
33175
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
33176
UPDATE t1 SET f_int1 = @cur_value1
 
33177
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
33178
        
 
33179
# check single-4 success:       1
 
33180
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
33181
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
33182
        
 
33183
# check single-5 success:       1
 
33184
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
33185
        
 
33186
# check single-6 success:       1
 
33187
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
33188
        
 
33189
# check single-7 success:       1
 
33190
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
33191
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
33192
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
33193
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
33194
f_charbig = '#NULL#';
 
33195
INSERT INTO t1
 
33196
SET f_int1 = NULL , f_int2 = -@max_row,
 
33197
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
33198
f_charbig = '#NULL#';
 
33199
# check null success:    1
 
33200
        
 
33201
# check null-1 success:         1
 
33202
UPDATE t1 SET f_int1 = -@max_row
 
33203
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33204
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33205
        
 
33206
# check null-2 success:         1
 
33207
UPDATE t1 SET f_int1 = NULL
 
33208
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33209
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33210
        
 
33211
# check null-3 success:         1
 
33212
DELETE FROM t1
 
33213
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33214
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33215
        
 
33216
# check null-4 success:         1
 
33217
DELETE FROM t1
 
33218
WHERE f_int1 = 0 AND f_int2 = 0
 
33219
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
33220
AND f_charbig = '#NULL#';
 
33221
SET AUTOCOMMIT= 0;
 
33222
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33223
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33224
FROM t0_template source_tab
 
33225
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33226
        
 
33227
# check transactions-1 success:         1
 
33228
COMMIT WORK;
 
33229
        
 
33230
# check transactions-2 success:         1
 
33231
ROLLBACK WORK;
 
33232
        
 
33233
# check transactions-3 success:         1
 
33234
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33235
COMMIT WORK;
 
33236
ROLLBACK WORK;
 
33237
        
 
33238
# check transactions-4 success:         1
 
33239
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33240
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33241
FROM t0_template source_tab
 
33242
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33243
        
 
33244
# check transactions-5 success:         1
 
33245
ROLLBACK WORK;
 
33246
        
 
33247
# check transactions-6 success:         1
 
33248
# INFO: Storage engine used for t1 seems to be transactional.
 
33249
COMMIT;
 
33250
        
 
33251
# check transactions-7 success:         1
 
33252
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33253
COMMIT WORK;
 
33254
SET @@session.sql_mode = 'traditional';
 
33255
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
33256
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33257
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
33258
'', '', 'was inserted' FROM t0_template
 
33259
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33260
ERROR 22012: Division by 0
 
33261
COMMIT;
 
33262
        
 
33263
# check transactions-8 success:         1
 
33264
# INFO: Storage engine used for t1 seems to be able to revert
 
33265
#       changes made by the failing statement.
 
33266
SET @@session.sql_mode = '';
 
33267
SET AUTOCOMMIT= 1;
 
33268
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33269
COMMIT WORK;
 
33270
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
33271
        
 
33272
# check special-1 success:      1
 
33273
UPDATE t1 SET f_charbig = '';
 
33274
        
 
33275
# check special-2 success:      1
 
33276
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
33277
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33278
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
33279
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33280
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33281
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33282
'just inserted' FROM t0_template
 
33283
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33284
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
33285
BEGIN
 
33286
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33287
f_charbig = 'updated by trigger'
 
33288
      WHERE f_int1 = new.f_int1;
 
33289
END|
 
33290
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33291
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33292
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33293
        
 
33294
# check trigger-1 success:      1
 
33295
DROP TRIGGER trg_1;
 
33296
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33297
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33298
f_charbig = 'just inserted'
 
33299
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33300
DELETE FROM t0_aux
 
33301
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33302
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33303
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33304
'just inserted' FROM t0_template
 
33305
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33306
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
33307
BEGIN
 
33308
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33309
f_charbig = 'updated by trigger'
 
33310
      WHERE f_int1 = new.f_int1;
 
33311
END|
 
33312
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33313
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33314
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33315
        
 
33316
# check trigger-2 success:      1
 
33317
DROP TRIGGER trg_1;
 
33318
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33319
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33320
f_charbig = 'just inserted'
 
33321
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33322
DELETE FROM t0_aux
 
33323
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33324
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33325
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33326
'just inserted' FROM t0_template
 
33327
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33328
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33329
BEGIN
 
33330
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33331
f_charbig = 'updated by trigger'
 
33332
      WHERE f_int1 = new.f_int1;
 
33333
END|
 
33334
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33335
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33336
        
 
33337
# check trigger-3 success:      1
 
33338
DROP TRIGGER trg_1;
 
33339
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33340
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33341
f_charbig = 'just inserted'
 
33342
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33343
DELETE FROM t0_aux
 
33344
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33345
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33346
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33347
'just inserted' FROM t0_template
 
33348
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33349
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33350
BEGIN
 
33351
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33352
f_charbig = 'updated by trigger'
 
33353
      WHERE f_int1 = - old.f_int1;
 
33354
END|
 
33355
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33356
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33357
        
 
33358
# check trigger-4 success:      1
 
33359
DROP TRIGGER trg_1;
 
33360
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33361
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33362
f_charbig = 'just inserted'
 
33363
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33364
DELETE FROM t0_aux
 
33365
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33366
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33367
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33368
'just inserted' FROM t0_template
 
33369
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33370
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
33371
BEGIN
 
33372
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33373
f_charbig = 'updated by trigger'
 
33374
      WHERE f_int1 = new.f_int1;
 
33375
END|
 
33376
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33377
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33378
        
 
33379
# check trigger-5 success:      1
 
33380
DROP TRIGGER trg_1;
 
33381
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33382
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33383
f_charbig = 'just inserted'
 
33384
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33385
DELETE FROM t0_aux
 
33386
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33387
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33388
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33389
'just inserted' FROM t0_template
 
33390
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33391
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
33392
BEGIN
 
33393
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33394
f_charbig = 'updated by trigger'
 
33395
      WHERE f_int1 = - old.f_int1;
 
33396
END|
 
33397
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33398
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33399
        
 
33400
# check trigger-6 success:      1
 
33401
DROP TRIGGER trg_1;
 
33402
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33403
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33404
f_charbig = 'just inserted'
 
33405
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33406
DELETE FROM t0_aux
 
33407
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33408
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33409
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33410
'just inserted' FROM t0_template
 
33411
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33412
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
33413
BEGIN
 
33414
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33415
f_charbig = 'updated by trigger'
 
33416
      WHERE f_int1 = - old.f_int1;
 
33417
END|
 
33418
DELETE FROM t0_aux
 
33419
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33420
        
 
33421
# check trigger-7 success:      1
 
33422
DROP TRIGGER trg_1;
 
33423
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33424
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33425
f_charbig = 'just inserted'
 
33426
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33427
DELETE FROM t0_aux
 
33428
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33429
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33430
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33431
'just inserted' FROM t0_template
 
33432
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33433
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
33434
BEGIN
 
33435
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33436
f_charbig = 'updated by trigger'
 
33437
      WHERE f_int1 = - old.f_int1;
 
33438
END|
 
33439
DELETE FROM t0_aux
 
33440
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33441
        
 
33442
# check trigger-8 success:      1
 
33443
DROP TRIGGER trg_1;
 
33444
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33445
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33446
f_charbig = 'just inserted'
 
33447
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33448
DELETE FROM t0_aux
 
33449
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33450
DELETE FROM t1
 
33451
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33452
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33453
BEGIN
 
33454
SET new.f_int1 = old.f_int1 + @max_row,
 
33455
new.f_int2 = old.f_int2 - @max_row,
 
33456
new.f_charbig = '####updated per update trigger####';
 
33457
END|
 
33458
UPDATE t1
 
33459
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33460
f_charbig = '####updated per update statement itself####';
 
33461
        
 
33462
# check trigger-9 success:      1
 
33463
DROP TRIGGER trg_2;
 
33464
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33465
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33466
f_charbig = CONCAT('===',f_char1,'===');
 
33467
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33468
BEGIN
 
33469
SET new.f_int1 = new.f_int1 + @max_row,
 
33470
new.f_int2 = new.f_int2 - @max_row,
 
33471
new.f_charbig = '####updated per update trigger####';
 
33472
END|
 
33473
UPDATE t1
 
33474
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33475
f_charbig = '####updated per update statement itself####';
 
33476
        
 
33477
# check trigger-10 success:     1
 
33478
DROP TRIGGER trg_2;
 
33479
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33480
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33481
f_charbig = CONCAT('===',f_char1,'===');
 
33482
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33483
BEGIN
 
33484
SET new.f_int1 = @my_max1 + @counter,
 
33485
new.f_int2 = @my_min2 - @counter,
 
33486
new.f_charbig = '####updated per insert trigger####';
 
33487
SET @counter = @counter + 1;
 
33488
END|
 
33489
SET @counter = 1;
 
33490
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33491
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33492
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33493
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33494
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33495
ORDER BY f_int1;
 
33496
DROP TRIGGER trg_3;
 
33497
        
 
33498
# check trigger-11 success:     1
 
33499
DELETE FROM t1
 
33500
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33501
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33502
AND f_charbig = '####updated per insert trigger####';
 
33503
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33504
BEGIN
 
33505
SET new.f_int1 = @my_max1 + @counter,
 
33506
new.f_int2 = @my_min2 - @counter,
 
33507
new.f_charbig = '####updated per insert trigger####';
 
33508
SET @counter = @counter + 1;
 
33509
END|
 
33510
SET @counter = 1;
 
33511
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33512
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
33513
SELECT CAST(f_int1 AS CHAR),
 
33514
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33515
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33516
ORDER BY f_int1;
 
33517
DROP TRIGGER trg_3;
 
33518
        
 
33519
# check trigger-12 success:     1
 
33520
DELETE FROM t1
 
33521
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33522
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33523
AND f_charbig = '####updated per insert trigger####';
 
33524
ANALYZE  TABLE t1;
 
33525
Table   Op      Msg_type        Msg_text
 
33526
test.t1 analyze status  OK
 
33527
CHECK    TABLE t1 EXTENDED;
 
33528
Table   Op      Msg_type        Msg_text
 
33529
test.t1 check   status  OK
 
33530
CHECKSUM TABLE t1 EXTENDED;
 
33531
Table   Checksum
 
33532
test.t1 <some_value>
 
33533
OPTIMIZE TABLE t1;
 
33534
Table   Op      Msg_type        Msg_text
 
33535
test.t1 optimize        status  OK
 
33536
# check layout success:    1
 
33537
REPAIR   TABLE t1 EXTENDED;
 
33538
Table   Op      Msg_type        Msg_text
 
33539
test.t1 repair  note    The storage engine for the table doesn't support repair
 
33540
# check layout success:    1
 
33541
TRUNCATE t1;
 
33542
        
 
33543
# check TRUNCATE success:       1
 
33544
# check layout success:    1
 
33545
# End usability test (inc/partition_check.inc)
 
33546
DROP TABLE t1;
 
33547
CREATE TABLE t1 (
 
33548
f_int1 INTEGER,
 
33549
f_int2 INTEGER,
 
33550
f_char1 CHAR(20),
 
33551
f_char2 CHAR(20),
 
33552
f_charbig VARCHAR(1000)
 
33553
 
 
33554
)
 
33555
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
33556
(PARTITION part_1 VALUES LESS THAN (0)
 
33557
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
33558
PARTITION part_2 VALUES LESS THAN (5)
 
33559
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
33560
PARTITION part_3 VALUES LESS THAN (10)
 
33561
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
33562
PARTITION part_4 VALUES LESS THAN (2147483646)
 
33563
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
33564
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33565
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
33566
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
33567
ALTER TABLE t1 REMOVE PARTITIONING;
 
33568
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33569
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
33570
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
33571
# Start usability test (inc/partition_check.inc)
 
33572
create_command
 
33573
SHOW CREATE TABLE t1;
 
33574
Table   Create Table
 
33575
t1      CREATE TABLE `t1` (
 
33576
  `f_int1` int(11) DEFAULT NULL,
 
33577
  `f_int2` int(11) DEFAULT NULL,
 
33578
  `f_char1` char(20) DEFAULT NULL,
 
33579
  `f_char2` char(20) DEFAULT NULL,
 
33580
  `f_charbig` varchar(1000) DEFAULT NULL
 
33581
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
33582
 
 
33583
# check prerequisites-1 success:    1
 
33584
# check COUNT(*) success:    1
 
33585
# check MIN/MAX(f_int1) success:    1
 
33586
# check MIN/MAX(f_int2) success:    1
 
33587
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33588
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33589
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
33590
WHERE f_int1 IN (2,3);
 
33591
# check prerequisites-3 success:    1
 
33592
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
33593
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
33594
# check read via f_int1 success: 1
 
33595
# check read via f_int2 success: 1
 
33596
        
 
33597
# check multiple-1 success:     1
 
33598
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
33599
        
 
33600
# check multiple-2 success:     1
 
33601
INSERT INTO t1 SELECT * FROM t0_template
 
33602
WHERE MOD(f_int1,3) = 0;
 
33603
        
 
33604
# check multiple-3 success:     1
 
33605
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
33606
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
33607
AND @max_row_div2 + @max_row_div4;
 
33608
        
 
33609
# check multiple-4 success:     1
 
33610
DELETE FROM t1
 
33611
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
33612
AND @max_row_div2 + @max_row_div4 + @max_row;
 
33613
        
 
33614
# check multiple-5 success:     1
 
33615
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
33616
INSERT INTO t1
 
33617
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
33618
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
33619
f_charbig = '#SINGLE#';
 
33620
        
 
33621
# check single-1 success:       1
 
33622
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
33623
INSERT INTO t1
 
33624
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
33625
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
33626
f_charbig = '#SINGLE#';
 
33627
        
 
33628
# check single-2 success:       1
 
33629
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
33630
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
33631
UPDATE t1 SET f_int1 = @cur_value2
 
33632
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
33633
        
 
33634
# check single-3 success:       1
 
33635
SET @cur_value1= -1;
 
33636
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
33637
UPDATE t1 SET f_int1 = @cur_value1
 
33638
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
33639
        
 
33640
# check single-4 success:       1
 
33641
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
33642
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
33643
        
 
33644
# check single-5 success:       1
 
33645
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
33646
        
 
33647
# check single-6 success:       1
 
33648
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
33649
        
 
33650
# check single-7 success:       1
 
33651
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
33652
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
33653
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
33654
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
33655
f_charbig = '#NULL#';
 
33656
INSERT INTO t1
 
33657
SET f_int1 = NULL , f_int2 = -@max_row,
 
33658
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
33659
f_charbig = '#NULL#';
 
33660
# check null success:    1
 
33661
        
 
33662
# check null-1 success:         1
 
33663
UPDATE t1 SET f_int1 = -@max_row
 
33664
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33665
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33666
        
 
33667
# check null-2 success:         1
 
33668
UPDATE t1 SET f_int1 = NULL
 
33669
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33670
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33671
        
 
33672
# check null-3 success:         1
 
33673
DELETE FROM t1
 
33674
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33675
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33676
        
 
33677
# check null-4 success:         1
 
33678
DELETE FROM t1
 
33679
WHERE f_int1 = 0 AND f_int2 = 0
 
33680
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
33681
AND f_charbig = '#NULL#';
 
33682
SET AUTOCOMMIT= 0;
 
33683
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33684
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33685
FROM t0_template source_tab
 
33686
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33687
        
 
33688
# check transactions-1 success:         1
 
33689
COMMIT WORK;
 
33690
        
 
33691
# check transactions-2 success:         1
 
33692
ROLLBACK WORK;
 
33693
        
 
33694
# check transactions-3 success:         1
 
33695
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33696
COMMIT WORK;
 
33697
ROLLBACK WORK;
 
33698
        
 
33699
# check transactions-4 success:         1
 
33700
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33701
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33702
FROM t0_template source_tab
 
33703
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33704
        
 
33705
# check transactions-5 success:         1
 
33706
ROLLBACK WORK;
 
33707
        
 
33708
# check transactions-6 success:         1
 
33709
# INFO: Storage engine used for t1 seems to be transactional.
 
33710
COMMIT;
 
33711
        
 
33712
# check transactions-7 success:         1
 
33713
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33714
COMMIT WORK;
 
33715
SET @@session.sql_mode = 'traditional';
 
33716
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
33717
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33718
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
33719
'', '', 'was inserted' FROM t0_template
 
33720
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33721
ERROR 22012: Division by 0
 
33722
COMMIT;
 
33723
        
 
33724
# check transactions-8 success:         1
 
33725
# INFO: Storage engine used for t1 seems to be able to revert
 
33726
#       changes made by the failing statement.
 
33727
SET @@session.sql_mode = '';
 
33728
SET AUTOCOMMIT= 1;
 
33729
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33730
COMMIT WORK;
 
33731
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
33732
        
 
33733
# check special-1 success:      1
 
33734
UPDATE t1 SET f_charbig = '';
 
33735
        
 
33736
# check special-2 success:      1
 
33737
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
33738
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33739
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
33740
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33741
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33742
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33743
'just inserted' FROM t0_template
 
33744
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33745
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
33746
BEGIN
 
33747
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33748
f_charbig = 'updated by trigger'
 
33749
      WHERE f_int1 = new.f_int1;
 
33750
END|
 
33751
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33752
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33753
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33754
        
 
33755
# check trigger-1 success:      1
 
33756
DROP TRIGGER trg_1;
 
33757
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33758
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33759
f_charbig = 'just inserted'
 
33760
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33761
DELETE FROM t0_aux
 
33762
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33763
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33764
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33765
'just inserted' FROM t0_template
 
33766
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33767
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
33768
BEGIN
 
33769
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33770
f_charbig = 'updated by trigger'
 
33771
      WHERE f_int1 = new.f_int1;
 
33772
END|
 
33773
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33774
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33775
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33776
        
 
33777
# check trigger-2 success:      1
 
33778
DROP TRIGGER trg_1;
 
33779
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33780
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33781
f_charbig = 'just inserted'
 
33782
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33783
DELETE FROM t0_aux
 
33784
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33785
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33786
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33787
'just inserted' FROM t0_template
 
33788
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33789
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33790
BEGIN
 
33791
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33792
f_charbig = 'updated by trigger'
 
33793
      WHERE f_int1 = new.f_int1;
 
33794
END|
 
33795
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33796
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33797
        
 
33798
# check trigger-3 success:      1
 
33799
DROP TRIGGER trg_1;
 
33800
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33801
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33802
f_charbig = 'just inserted'
 
33803
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33804
DELETE FROM t0_aux
 
33805
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33806
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33807
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33808
'just inserted' FROM t0_template
 
33809
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33810
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33811
BEGIN
 
33812
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33813
f_charbig = 'updated by trigger'
 
33814
      WHERE f_int1 = - old.f_int1;
 
33815
END|
 
33816
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33817
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33818
        
 
33819
# check trigger-4 success:      1
 
33820
DROP TRIGGER trg_1;
 
33821
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33822
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33823
f_charbig = 'just inserted'
 
33824
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33825
DELETE FROM t0_aux
 
33826
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33827
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33828
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33829
'just inserted' FROM t0_template
 
33830
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33831
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
33832
BEGIN
 
33833
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33834
f_charbig = 'updated by trigger'
 
33835
      WHERE f_int1 = new.f_int1;
 
33836
END|
 
33837
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33838
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33839
        
 
33840
# check trigger-5 success:      1
 
33841
DROP TRIGGER trg_1;
 
33842
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33843
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33844
f_charbig = 'just inserted'
 
33845
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33846
DELETE FROM t0_aux
 
33847
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33848
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33849
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33850
'just inserted' FROM t0_template
 
33851
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33852
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
33853
BEGIN
 
33854
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33855
f_charbig = 'updated by trigger'
 
33856
      WHERE f_int1 = - old.f_int1;
 
33857
END|
 
33858
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33859
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33860
        
 
33861
# check trigger-6 success:      1
 
33862
DROP TRIGGER trg_1;
 
33863
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33864
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33865
f_charbig = 'just inserted'
 
33866
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33867
DELETE FROM t0_aux
 
33868
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33869
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33870
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33871
'just inserted' FROM t0_template
 
33872
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33873
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
33874
BEGIN
 
33875
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33876
f_charbig = 'updated by trigger'
 
33877
      WHERE f_int1 = - old.f_int1;
 
33878
END|
 
33879
DELETE FROM t0_aux
 
33880
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33881
        
 
33882
# check trigger-7 success:      1
 
33883
DROP TRIGGER trg_1;
 
33884
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33885
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33886
f_charbig = 'just inserted'
 
33887
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33888
DELETE FROM t0_aux
 
33889
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33890
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33891
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33892
'just inserted' FROM t0_template
 
33893
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33894
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
33895
BEGIN
 
33896
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33897
f_charbig = 'updated by trigger'
 
33898
      WHERE f_int1 = - old.f_int1;
 
33899
END|
 
33900
DELETE FROM t0_aux
 
33901
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33902
        
 
33903
# check trigger-8 success:      1
 
33904
DROP TRIGGER trg_1;
 
33905
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33906
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33907
f_charbig = 'just inserted'
 
33908
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33909
DELETE FROM t0_aux
 
33910
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33911
DELETE FROM t1
 
33912
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33913
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33914
BEGIN
 
33915
SET new.f_int1 = old.f_int1 + @max_row,
 
33916
new.f_int2 = old.f_int2 - @max_row,
 
33917
new.f_charbig = '####updated per update trigger####';
 
33918
END|
 
33919
UPDATE t1
 
33920
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33921
f_charbig = '####updated per update statement itself####';
 
33922
        
 
33923
# check trigger-9 success:      1
 
33924
DROP TRIGGER trg_2;
 
33925
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33926
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33927
f_charbig = CONCAT('===',f_char1,'===');
 
33928
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33929
BEGIN
 
33930
SET new.f_int1 = new.f_int1 + @max_row,
 
33931
new.f_int2 = new.f_int2 - @max_row,
 
33932
new.f_charbig = '####updated per update trigger####';
 
33933
END|
 
33934
UPDATE t1
 
33935
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33936
f_charbig = '####updated per update statement itself####';
 
33937
        
 
33938
# check trigger-10 success:     1
 
33939
DROP TRIGGER trg_2;
 
33940
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33941
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33942
f_charbig = CONCAT('===',f_char1,'===');
 
33943
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33944
BEGIN
 
33945
SET new.f_int1 = @my_max1 + @counter,
 
33946
new.f_int2 = @my_min2 - @counter,
 
33947
new.f_charbig = '####updated per insert trigger####';
 
33948
SET @counter = @counter + 1;
 
33949
END|
 
33950
SET @counter = 1;
 
33951
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33952
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33953
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33954
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33955
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33956
ORDER BY f_int1;
 
33957
DROP TRIGGER trg_3;
 
33958
        
 
33959
# check trigger-11 success:     1
 
33960
DELETE FROM t1
 
33961
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33962
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33963
AND f_charbig = '####updated per insert trigger####';
 
33964
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33965
BEGIN
 
33966
SET new.f_int1 = @my_max1 + @counter,
 
33967
new.f_int2 = @my_min2 - @counter,
 
33968
new.f_charbig = '####updated per insert trigger####';
 
33969
SET @counter = @counter + 1;
 
33970
END|
 
33971
SET @counter = 1;
 
33972
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33973
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
33974
SELECT CAST(f_int1 AS CHAR),
 
33975
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33976
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33977
ORDER BY f_int1;
 
33978
DROP TRIGGER trg_3;
 
33979
        
 
33980
# check trigger-12 success:     1
 
33981
DELETE FROM t1
 
33982
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33983
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33984
AND f_charbig = '####updated per insert trigger####';
 
33985
ANALYZE  TABLE t1;
 
33986
Table   Op      Msg_type        Msg_text
 
33987
test.t1 analyze status  OK
 
33988
CHECK    TABLE t1 EXTENDED;
 
33989
Table   Op      Msg_type        Msg_text
 
33990
test.t1 check   status  OK
 
33991
CHECKSUM TABLE t1 EXTENDED;
 
33992
Table   Checksum
 
33993
test.t1 <some_value>
 
33994
OPTIMIZE TABLE t1;
 
33995
Table   Op      Msg_type        Msg_text
 
33996
test.t1 optimize        status  OK
 
33997
# check layout success:    1
 
33998
REPAIR   TABLE t1 EXTENDED;
 
33999
Table   Op      Msg_type        Msg_text
 
34000
test.t1 repair  note    The storage engine for the table doesn't support repair
 
34001
# check layout success:    1
 
34002
TRUNCATE t1;
 
34003
        
 
34004
# check TRUNCATE success:       1
 
34005
# check layout success:    1
 
34006
# End usability test (inc/partition_check.inc)
 
34007
DROP TABLE t1;
 
34008
CREATE TABLE t1 (
 
34009
f_int1 INTEGER,
 
34010
f_int2 INTEGER,
 
34011
f_char1 CHAR(20),
 
34012
f_char2 CHAR(20),
 
34013
f_charbig VARCHAR(1000)
 
34014
 
 
34015
)
 
34016
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
34017
(PARTITION part_1 VALUES IN (0)
 
34018
(SUBPARTITION sp11, SUBPARTITION sp12),
 
34019
PARTITION part_2 VALUES IN (1)
 
34020
(SUBPARTITION sp21, SUBPARTITION sp22),
 
34021
PARTITION part_3 VALUES IN (2)
 
34022
(SUBPARTITION sp31, SUBPARTITION sp32),
 
34023
PARTITION part_4 VALUES IN (NULL)
 
34024
(SUBPARTITION sp41, SUBPARTITION sp42));
 
34025
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34026
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
34027
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
34028
ALTER TABLE t1 REMOVE PARTITIONING;
 
34029
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34030
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
34031
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
34032
# Start usability test (inc/partition_check.inc)
 
34033
create_command
 
34034
SHOW CREATE TABLE t1;
 
34035
Table   Create Table
 
34036
t1      CREATE TABLE `t1` (
 
34037
  `f_int1` int(11) DEFAULT NULL,
 
34038
  `f_int2` int(11) DEFAULT NULL,
 
34039
  `f_char1` char(20) DEFAULT NULL,
 
34040
  `f_char2` char(20) DEFAULT NULL,
 
34041
  `f_charbig` varchar(1000) DEFAULT NULL
 
34042
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
34043
 
 
34044
# check prerequisites-1 success:    1
 
34045
# check COUNT(*) success:    1
 
34046
# check MIN/MAX(f_int1) success:    1
 
34047
# check MIN/MAX(f_int2) success:    1
 
34048
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34049
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
34050
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
34051
WHERE f_int1 IN (2,3);
 
34052
# check prerequisites-3 success:    1
 
34053
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
34054
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
34055
# check read via f_int1 success: 1
 
34056
# check read via f_int2 success: 1
 
34057
        
 
34058
# check multiple-1 success:     1
 
34059
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
34060
        
 
34061
# check multiple-2 success:     1
 
34062
INSERT INTO t1 SELECT * FROM t0_template
 
34063
WHERE MOD(f_int1,3) = 0;
 
34064
        
 
34065
# check multiple-3 success:     1
 
34066
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
34067
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
34068
AND @max_row_div2 + @max_row_div4;
 
34069
        
 
34070
# check multiple-4 success:     1
 
34071
DELETE FROM t1
 
34072
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
34073
AND @max_row_div2 + @max_row_div4 + @max_row;
 
34074
        
 
34075
# check multiple-5 success:     1
 
34076
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
34077
INSERT INTO t1
 
34078
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
34079
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
34080
f_charbig = '#SINGLE#';
 
34081
        
 
34082
# check single-1 success:       1
 
34083
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
34084
INSERT INTO t1
 
34085
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
34086
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
34087
f_charbig = '#SINGLE#';
 
34088
        
 
34089
# check single-2 success:       1
 
34090
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
34091
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
34092
UPDATE t1 SET f_int1 = @cur_value2
 
34093
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
34094
        
 
34095
# check single-3 success:       1
 
34096
SET @cur_value1= -1;
 
34097
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
34098
UPDATE t1 SET f_int1 = @cur_value1
 
34099
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
34100
        
 
34101
# check single-4 success:       1
 
34102
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
34103
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
34104
        
 
34105
# check single-5 success:       1
 
34106
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
34107
        
 
34108
# check single-6 success:       1
 
34109
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
34110
        
 
34111
# check single-7 success:       1
 
34112
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
34113
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
34114
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
34115
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
34116
f_charbig = '#NULL#';
 
34117
INSERT INTO t1
 
34118
SET f_int1 = NULL , f_int2 = -@max_row,
 
34119
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
34120
f_charbig = '#NULL#';
 
34121
# check null success:    1
 
34122
        
 
34123
# check null-1 success:         1
 
34124
UPDATE t1 SET f_int1 = -@max_row
 
34125
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34126
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34127
        
 
34128
# check null-2 success:         1
 
34129
UPDATE t1 SET f_int1 = NULL
 
34130
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34131
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34132
        
 
34133
# check null-3 success:         1
 
34134
DELETE FROM t1
 
34135
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34136
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34137
        
 
34138
# check null-4 success:         1
 
34139
DELETE FROM t1
 
34140
WHERE f_int1 = 0 AND f_int2 = 0
 
34141
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
34142
AND f_charbig = '#NULL#';
 
34143
SET AUTOCOMMIT= 0;
 
34144
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34145
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34146
FROM t0_template source_tab
 
34147
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34148
        
 
34149
# check transactions-1 success:         1
 
34150
COMMIT WORK;
 
34151
        
 
34152
# check transactions-2 success:         1
 
34153
ROLLBACK WORK;
 
34154
        
 
34155
# check transactions-3 success:         1
 
34156
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34157
COMMIT WORK;
 
34158
ROLLBACK WORK;
 
34159
        
 
34160
# check transactions-4 success:         1
 
34161
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34162
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34163
FROM t0_template source_tab
 
34164
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34165
        
 
34166
# check transactions-5 success:         1
 
34167
ROLLBACK WORK;
 
34168
        
 
34169
# check transactions-6 success:         1
 
34170
# INFO: Storage engine used for t1 seems to be transactional.
 
34171
COMMIT;
 
34172
        
 
34173
# check transactions-7 success:         1
 
34174
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34175
COMMIT WORK;
 
34176
SET @@session.sql_mode = 'traditional';
 
34177
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
34178
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34179
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
34180
'', '', 'was inserted' FROM t0_template
 
34181
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34182
ERROR 22012: Division by 0
 
34183
COMMIT;
 
34184
        
 
34185
# check transactions-8 success:         1
 
34186
# INFO: Storage engine used for t1 seems to be able to revert
 
34187
#       changes made by the failing statement.
 
34188
SET @@session.sql_mode = '';
 
34189
SET AUTOCOMMIT= 1;
 
34190
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34191
COMMIT WORK;
 
34192
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
34193
        
 
34194
# check special-1 success:      1
 
34195
UPDATE t1 SET f_charbig = '';
 
34196
        
 
34197
# check special-2 success:      1
 
34198
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
34199
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34200
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
34201
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34202
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34203
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34204
'just inserted' FROM t0_template
 
34205
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34206
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
34207
BEGIN
 
34208
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34209
f_charbig = 'updated by trigger'
 
34210
      WHERE f_int1 = new.f_int1;
 
34211
END|
 
34212
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34213
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34214
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34215
        
 
34216
# check trigger-1 success:      1
 
34217
DROP TRIGGER trg_1;
 
34218
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34219
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34220
f_charbig = 'just inserted'
 
34221
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34222
DELETE FROM t0_aux
 
34223
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34224
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34225
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34226
'just inserted' FROM t0_template
 
34227
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34228
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
34229
BEGIN
 
34230
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34231
f_charbig = 'updated by trigger'
 
34232
      WHERE f_int1 = new.f_int1;
 
34233
END|
 
34234
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34235
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34236
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34237
        
 
34238
# check trigger-2 success:      1
 
34239
DROP TRIGGER trg_1;
 
34240
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34241
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34242
f_charbig = 'just inserted'
 
34243
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34244
DELETE FROM t0_aux
 
34245
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34246
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34247
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34248
'just inserted' FROM t0_template
 
34249
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34250
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34251
BEGIN
 
34252
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34253
f_charbig = 'updated by trigger'
 
34254
      WHERE f_int1 = new.f_int1;
 
34255
END|
 
34256
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34257
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34258
        
 
34259
# check trigger-3 success:      1
 
34260
DROP TRIGGER trg_1;
 
34261
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34262
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34263
f_charbig = 'just inserted'
 
34264
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34265
DELETE FROM t0_aux
 
34266
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34267
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34268
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34269
'just inserted' FROM t0_template
 
34270
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34271
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34272
BEGIN
 
34273
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34274
f_charbig = 'updated by trigger'
 
34275
      WHERE f_int1 = - old.f_int1;
 
34276
END|
 
34277
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34278
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34279
        
 
34280
# check trigger-4 success:      1
 
34281
DROP TRIGGER trg_1;
 
34282
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34283
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34284
f_charbig = 'just inserted'
 
34285
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34286
DELETE FROM t0_aux
 
34287
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34288
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34289
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34290
'just inserted' FROM t0_template
 
34291
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34292
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34293
BEGIN
 
34294
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34295
f_charbig = 'updated by trigger'
 
34296
      WHERE f_int1 = new.f_int1;
 
34297
END|
 
34298
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34299
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34300
        
 
34301
# check trigger-5 success:      1
 
34302
DROP TRIGGER trg_1;
 
34303
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34304
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34305
f_charbig = 'just inserted'
 
34306
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34307
DELETE FROM t0_aux
 
34308
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34309
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34310
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34311
'just inserted' FROM t0_template
 
34312
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34313
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34314
BEGIN
 
34315
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34316
f_charbig = 'updated by trigger'
 
34317
      WHERE f_int1 = - old.f_int1;
 
34318
END|
 
34319
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34320
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34321
        
 
34322
# check trigger-6 success:      1
 
34323
DROP TRIGGER trg_1;
 
34324
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34325
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34326
f_charbig = 'just inserted'
 
34327
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34328
DELETE FROM t0_aux
 
34329
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34330
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34331
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34332
'just inserted' FROM t0_template
 
34333
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34334
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
34335
BEGIN
 
34336
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34337
f_charbig = 'updated by trigger'
 
34338
      WHERE f_int1 = - old.f_int1;
 
34339
END|
 
34340
DELETE FROM t0_aux
 
34341
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34342
        
 
34343
# check trigger-7 success:      1
 
34344
DROP TRIGGER trg_1;
 
34345
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34346
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34347
f_charbig = 'just inserted'
 
34348
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34349
DELETE FROM t0_aux
 
34350
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34351
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34352
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34353
'just inserted' FROM t0_template
 
34354
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34355
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
34356
BEGIN
 
34357
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34358
f_charbig = 'updated by trigger'
 
34359
      WHERE f_int1 = - old.f_int1;
 
34360
END|
 
34361
DELETE FROM t0_aux
 
34362
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34363
        
 
34364
# check trigger-8 success:      1
 
34365
DROP TRIGGER trg_1;
 
34366
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34367
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34368
f_charbig = 'just inserted'
 
34369
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34370
DELETE FROM t0_aux
 
34371
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34372
DELETE FROM t1
 
34373
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34374
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
34375
BEGIN
 
34376
SET new.f_int1 = old.f_int1 + @max_row,
 
34377
new.f_int2 = old.f_int2 - @max_row,
 
34378
new.f_charbig = '####updated per update trigger####';
 
34379
END|
 
34380
UPDATE t1
 
34381
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
34382
f_charbig = '####updated per update statement itself####';
 
34383
        
 
34384
# check trigger-9 success:      1
 
34385
DROP TRIGGER trg_2;
 
34386
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34387
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34388
f_charbig = CONCAT('===',f_char1,'===');
 
34389
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
34390
BEGIN
 
34391
SET new.f_int1 = new.f_int1 + @max_row,
 
34392
new.f_int2 = new.f_int2 - @max_row,
 
34393
new.f_charbig = '####updated per update trigger####';
 
34394
END|
 
34395
UPDATE t1
 
34396
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
34397
f_charbig = '####updated per update statement itself####';
 
34398
        
 
34399
# check trigger-10 success:     1
 
34400
DROP TRIGGER trg_2;
 
34401
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34402
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34403
f_charbig = CONCAT('===',f_char1,'===');
 
34404
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
34405
BEGIN
 
34406
SET new.f_int1 = @my_max1 + @counter,
 
34407
new.f_int2 = @my_min2 - @counter,
 
34408
new.f_charbig = '####updated per insert trigger####';
 
34409
SET @counter = @counter + 1;
 
34410
END|
 
34411
SET @counter = 1;
 
34412
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
34413
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34414
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
34415
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
34416
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
34417
ORDER BY f_int1;
 
34418
DROP TRIGGER trg_3;
 
34419
        
 
34420
# check trigger-11 success:     1
 
34421
DELETE FROM t1
 
34422
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
34423
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
34424
AND f_charbig = '####updated per insert trigger####';
 
34425
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
34426
BEGIN
 
34427
SET new.f_int1 = @my_max1 + @counter,
 
34428
new.f_int2 = @my_min2 - @counter,
 
34429
new.f_charbig = '####updated per insert trigger####';
 
34430
SET @counter = @counter + 1;
 
34431
END|
 
34432
SET @counter = 1;
 
34433
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
34434
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
34435
SELECT CAST(f_int1 AS CHAR),
 
34436
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
34437
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
34438
ORDER BY f_int1;
 
34439
DROP TRIGGER trg_3;
 
34440
        
 
34441
# check trigger-12 success:     1
 
34442
DELETE FROM t1
 
34443
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
34444
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
34445
AND f_charbig = '####updated per insert trigger####';
 
34446
ANALYZE  TABLE t1;
 
34447
Table   Op      Msg_type        Msg_text
 
34448
test.t1 analyze status  OK
 
34449
CHECK    TABLE t1 EXTENDED;
 
34450
Table   Op      Msg_type        Msg_text
 
34451
test.t1 check   status  OK
 
34452
CHECKSUM TABLE t1 EXTENDED;
 
34453
Table   Checksum
 
34454
test.t1 <some_value>
 
34455
OPTIMIZE TABLE t1;
 
34456
Table   Op      Msg_type        Msg_text
 
34457
test.t1 optimize        status  OK
 
34458
# check layout success:    1
 
34459
REPAIR   TABLE t1 EXTENDED;
 
34460
Table   Op      Msg_type        Msg_text
 
34461
test.t1 repair  note    The storage engine for the table doesn't support repair
 
34462
# check layout success:    1
 
34463
TRUNCATE t1;
 
34464
        
 
34465
# check TRUNCATE success:       1
 
34466
# check layout success:    1
 
34467
# End usability test (inc/partition_check.inc)
 
34468
DROP TABLE t1;
 
34469
CREATE TABLE t1 (
 
34470
f_int1 INTEGER,
 
34471
f_int2 INTEGER,
 
34472
f_char1 CHAR(20),
 
34473
f_char2 CHAR(20),
 
34474
f_charbig VARCHAR(1000)
 
34475
 
 
34476
)
 
34477
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
34478
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
34479
(PARTITION part_1 VALUES IN (0),
 
34480
 PARTITION part_2 VALUES IN (1),
 
34481
 PARTITION part_3 VALUES IN (NULL));
 
34482
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34483
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
34484
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
34485
ALTER TABLE t1 REMOVE PARTITIONING;
 
34486
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34487
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
34488
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
34489
# Start usability test (inc/partition_check.inc)
 
34490
create_command
 
34491
SHOW CREATE TABLE t1;
 
34492
Table   Create Table
 
34493
t1      CREATE TABLE `t1` (
 
34494
  `f_int1` int(11) DEFAULT NULL,
 
34495
  `f_int2` int(11) DEFAULT NULL,
 
34496
  `f_char1` char(20) DEFAULT NULL,
 
34497
  `f_char2` char(20) DEFAULT NULL,
 
34498
  `f_charbig` varchar(1000) DEFAULT NULL
 
34499
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
34500
 
 
34501
# check prerequisites-1 success:    1
 
34502
# check COUNT(*) success:    1
 
34503
# check MIN/MAX(f_int1) success:    1
 
34504
# check MIN/MAX(f_int2) success:    1
 
34505
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34506
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
34507
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
34508
WHERE f_int1 IN (2,3);
 
34509
# check prerequisites-3 success:    1
 
34510
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
34511
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
34512
# check read via f_int1 success: 1
 
34513
# check read via f_int2 success: 1
 
34514
        
 
34515
# check multiple-1 success:     1
 
34516
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
34517
        
 
34518
# check multiple-2 success:     1
 
34519
INSERT INTO t1 SELECT * FROM t0_template
 
34520
WHERE MOD(f_int1,3) = 0;
 
34521
        
 
34522
# check multiple-3 success:     1
 
34523
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
34524
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
34525
AND @max_row_div2 + @max_row_div4;
 
34526
        
 
34527
# check multiple-4 success:     1
 
34528
DELETE FROM t1
 
34529
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
34530
AND @max_row_div2 + @max_row_div4 + @max_row;
 
34531
        
 
34532
# check multiple-5 success:     1
 
34533
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
34534
INSERT INTO t1
 
34535
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
34536
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
34537
f_charbig = '#SINGLE#';
 
34538
        
 
34539
# check single-1 success:       1
 
34540
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
34541
INSERT INTO t1
 
34542
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
34543
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
34544
f_charbig = '#SINGLE#';
 
34545
        
 
34546
# check single-2 success:       1
 
34547
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
34548
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
34549
UPDATE t1 SET f_int1 = @cur_value2
 
34550
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
34551
        
 
34552
# check single-3 success:       1
 
34553
SET @cur_value1= -1;
 
34554
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
34555
UPDATE t1 SET f_int1 = @cur_value1
 
34556
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
34557
        
 
34558
# check single-4 success:       1
 
34559
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
34560
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
34561
        
 
34562
# check single-5 success:       1
 
34563
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
34564
        
 
34565
# check single-6 success:       1
 
34566
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
34567
        
 
34568
# check single-7 success:       1
 
34569
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
34570
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
34571
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
34572
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
34573
f_charbig = '#NULL#';
 
34574
INSERT INTO t1
 
34575
SET f_int1 = NULL , f_int2 = -@max_row,
 
34576
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
34577
f_charbig = '#NULL#';
 
34578
# check null success:    1
 
34579
        
 
34580
# check null-1 success:         1
 
34581
UPDATE t1 SET f_int1 = -@max_row
 
34582
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34583
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34584
        
 
34585
# check null-2 success:         1
 
34586
UPDATE t1 SET f_int1 = NULL
 
34587
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34588
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34589
        
 
34590
# check null-3 success:         1
 
34591
DELETE FROM t1
 
34592
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34593
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34594
        
 
34595
# check null-4 success:         1
 
34596
DELETE FROM t1
 
34597
WHERE f_int1 = 0 AND f_int2 = 0
 
34598
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
34599
AND f_charbig = '#NULL#';
 
34600
SET AUTOCOMMIT= 0;
 
34601
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34602
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34603
FROM t0_template source_tab
 
34604
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34605
        
 
34606
# check transactions-1 success:         1
 
34607
COMMIT WORK;
 
34608
        
 
34609
# check transactions-2 success:         1
 
34610
ROLLBACK WORK;
 
34611
        
 
34612
# check transactions-3 success:         1
 
34613
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34614
COMMIT WORK;
 
34615
ROLLBACK WORK;
 
34616
        
 
34617
# check transactions-4 success:         1
 
34618
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34619
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34620
FROM t0_template source_tab
 
34621
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34622
        
 
34623
# check transactions-5 success:         1
 
34624
ROLLBACK WORK;
 
34625
        
 
34626
# check transactions-6 success:         1
 
34627
# INFO: Storage engine used for t1 seems to be transactional.
 
34628
COMMIT;
 
34629
        
 
34630
# check transactions-7 success:         1
 
34631
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34632
COMMIT WORK;
 
34633
SET @@session.sql_mode = 'traditional';
 
34634
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
34635
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34636
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
34637
'', '', 'was inserted' FROM t0_template
 
34638
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34639
ERROR 22012: Division by 0
 
34640
COMMIT;
 
34641
        
 
34642
# check transactions-8 success:         1
 
34643
# INFO: Storage engine used for t1 seems to be able to revert
 
34644
#       changes made by the failing statement.
 
34645
SET @@session.sql_mode = '';
 
34646
SET AUTOCOMMIT= 1;
 
34647
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34648
COMMIT WORK;
 
34649
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
34650
        
 
34651
# check special-1 success:      1
 
34652
UPDATE t1 SET f_charbig = '';
 
34653
        
 
34654
# check special-2 success:      1
 
34655
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
34656
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34657
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
34658
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34659
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34660
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34661
'just inserted' FROM t0_template
 
34662
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34663
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
34664
BEGIN
 
34665
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34666
f_charbig = 'updated by trigger'
 
34667
      WHERE f_int1 = new.f_int1;
 
34668
END|
 
34669
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34670
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34671
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34672
        
 
34673
# check trigger-1 success:      1
 
34674
DROP TRIGGER trg_1;
 
34675
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34676
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34677
f_charbig = 'just inserted'
 
34678
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34679
DELETE FROM t0_aux
 
34680
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34681
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34682
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34683
'just inserted' FROM t0_template
 
34684
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34685
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
34686
BEGIN
 
34687
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34688
f_charbig = 'updated by trigger'
 
34689
      WHERE f_int1 = new.f_int1;
 
34690
END|
 
34691
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34692
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34693
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34694
        
 
34695
# check trigger-2 success:      1
 
34696
DROP TRIGGER trg_1;
 
34697
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34698
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34699
f_charbig = 'just inserted'
 
34700
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34701
DELETE FROM t0_aux
 
34702
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34703
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34704
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34705
'just inserted' FROM t0_template
 
34706
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34707
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34708
BEGIN
 
34709
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34710
f_charbig = 'updated by trigger'
 
34711
      WHERE f_int1 = new.f_int1;
 
34712
END|
 
34713
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34714
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34715
        
 
34716
# check trigger-3 success:      1
 
34717
DROP TRIGGER trg_1;
 
34718
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34719
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34720
f_charbig = 'just inserted'
 
34721
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34722
DELETE FROM t0_aux
 
34723
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34724
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34725
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34726
'just inserted' FROM t0_template
 
34727
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34728
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34729
BEGIN
 
34730
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34731
f_charbig = 'updated by trigger'
 
34732
      WHERE f_int1 = - old.f_int1;
 
34733
END|
 
34734
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34735
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34736
        
 
34737
# check trigger-4 success:      1
 
34738
DROP TRIGGER trg_1;
 
34739
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34740
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34741
f_charbig = 'just inserted'
 
34742
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34743
DELETE FROM t0_aux
 
34744
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34745
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34746
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34747
'just inserted' FROM t0_template
 
34748
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34749
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34750
BEGIN
 
34751
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34752
f_charbig = 'updated by trigger'
 
34753
      WHERE f_int1 = new.f_int1;
 
34754
END|
 
34755
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34756
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34757
        
 
34758
# check trigger-5 success:      1
 
34759
DROP TRIGGER trg_1;
 
34760
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34761
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34762
f_charbig = 'just inserted'
 
34763
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34764
DELETE FROM t0_aux
 
34765
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34766
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34767
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34768
'just inserted' FROM t0_template
 
34769
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34770
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34771
BEGIN
 
34772
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34773
f_charbig = 'updated by trigger'
 
34774
      WHERE f_int1 = - old.f_int1;
 
34775
END|
 
34776
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34777
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34778
        
 
34779
# check trigger-6 success:      1
 
34780
DROP TRIGGER trg_1;
 
34781
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34782
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34783
f_charbig = 'just inserted'
 
34784
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34785
DELETE FROM t0_aux
 
34786
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34787
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34788
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34789
'just inserted' FROM t0_template
 
34790
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34791
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
34792
BEGIN
 
34793
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34794
f_charbig = 'updated by trigger'
 
34795
      WHERE f_int1 = - old.f_int1;
 
34796
END|
 
34797
DELETE FROM t0_aux
 
34798
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34799
        
 
34800
# check trigger-7 success:      1
 
34801
DROP TRIGGER trg_1;
 
34802
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34803
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34804
f_charbig = 'just inserted'
 
34805
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34806
DELETE FROM t0_aux
 
34807
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34808
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34809
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34810
'just inserted' FROM t0_template
 
34811
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34812
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
34813
BEGIN
 
34814
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34815
f_charbig = 'updated by trigger'
 
34816
      WHERE f_int1 = - old.f_int1;
 
34817
END|
 
34818
DELETE FROM t0_aux
 
34819
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34820
        
 
34821
# check trigger-8 success:      1
 
34822
DROP TRIGGER trg_1;
 
34823
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34824
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34825
f_charbig = 'just inserted'
 
34826
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34827
DELETE FROM t0_aux
 
34828
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34829
DELETE FROM t1
 
34830
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34831
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
34832
BEGIN
 
34833
SET new.f_int1 = old.f_int1 + @max_row,
 
34834
new.f_int2 = old.f_int2 - @max_row,
 
34835
new.f_charbig = '####updated per update trigger####';
 
34836
END|
 
34837
UPDATE t1
 
34838
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
34839
f_charbig = '####updated per update statement itself####';
 
34840
        
 
34841
# check trigger-9 success:      1
 
34842
DROP TRIGGER trg_2;
 
34843
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34844
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34845
f_charbig = CONCAT('===',f_char1,'===');
 
34846
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
34847
BEGIN
 
34848
SET new.f_int1 = new.f_int1 + @max_row,
 
34849
new.f_int2 = new.f_int2 - @max_row,
 
34850
new.f_charbig = '####updated per update trigger####';
 
34851
END|
 
34852
UPDATE t1
 
34853
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
34854
f_charbig = '####updated per update statement itself####';
 
34855
        
 
34856
# check trigger-10 success:     1
 
34857
DROP TRIGGER trg_2;
 
34858
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34859
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34860
f_charbig = CONCAT('===',f_char1,'===');
 
34861
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
34862
BEGIN
 
34863
SET new.f_int1 = @my_max1 + @counter,
 
34864
new.f_int2 = @my_min2 - @counter,
 
34865
new.f_charbig = '####updated per insert trigger####';
 
34866
SET @counter = @counter + 1;
 
34867
END|
 
34868
SET @counter = 1;
 
34869
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
34870
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34871
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
34872
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
34873
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
34874
ORDER BY f_int1;
 
34875
DROP TRIGGER trg_3;
 
34876
        
 
34877
# check trigger-11 success:     1
 
34878
DELETE FROM t1
 
34879
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
34880
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
34881
AND f_charbig = '####updated per insert trigger####';
 
34882
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
34883
BEGIN
 
34884
SET new.f_int1 = @my_max1 + @counter,
 
34885
new.f_int2 = @my_min2 - @counter,
 
34886
new.f_charbig = '####updated per insert trigger####';
 
34887
SET @counter = @counter + 1;
 
34888
END|
 
34889
SET @counter = 1;
 
34890
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
34891
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
34892
SELECT CAST(f_int1 AS CHAR),
 
34893
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
34894
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
34895
ORDER BY f_int1;
 
34896
DROP TRIGGER trg_3;
 
34897
        
 
34898
# check trigger-12 success:     1
 
34899
DELETE FROM t1
 
34900
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
34901
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
34902
AND f_charbig = '####updated per insert trigger####';
 
34903
ANALYZE  TABLE t1;
 
34904
Table   Op      Msg_type        Msg_text
 
34905
test.t1 analyze status  OK
 
34906
CHECK    TABLE t1 EXTENDED;
 
34907
Table   Op      Msg_type        Msg_text
 
34908
test.t1 check   status  OK
 
34909
CHECKSUM TABLE t1 EXTENDED;
 
34910
Table   Checksum
 
34911
test.t1 <some_value>
 
34912
OPTIMIZE TABLE t1;
 
34913
Table   Op      Msg_type        Msg_text
 
34914
test.t1 optimize        status  OK
 
34915
# check layout success:    1
 
34916
REPAIR   TABLE t1 EXTENDED;
 
34917
Table   Op      Msg_type        Msg_text
 
34918
test.t1 repair  note    The storage engine for the table doesn't support repair
 
34919
# check layout success:    1
 
34920
TRUNCATE t1;
 
34921
        
 
34922
# check TRUNCATE success:       1
 
34923
# check layout success:    1
 
34924
# End usability test (inc/partition_check.inc)
 
34925
DROP TABLE t1;
 
34926
DROP VIEW  IF EXISTS v1;
 
34927
DROP TABLE IF EXISTS t1;
 
34928
DROP TABLE IF EXISTS t0_aux;
 
34929
DROP TABLE IF EXISTS t0_definition;
 
34930
DROP TABLE IF EXISTS t0_template;