~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_myisam.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 = 'MyISAM';
 
3
 
 
4
#------------------------------------------------------------------------
 
5
#  0. Setting of auxiliary variables + Creation of an auxiliary tables
 
6
#     needed in many testcases
 
7
#------------------------------------------------------------------------
 
8
SELECT @max_row DIV 2 INTO @max_row_div2;
 
9
SELECT @max_row DIV 3 INTO @max_row_div3;
 
10
SELECT @max_row DIV 4 INTO @max_row_div4;
 
11
SET @max_int_4 = 2147483647;
 
12
DROP TABLE IF EXISTS t0_template;
 
13
CREATE TABLE t0_template (
 
14
f_int1 INTEGER,
 
15
f_int2 INTEGER,
 
16
f_char1 CHAR(20),
 
17
f_char2 CHAR(20),
 
18
f_charbig VARCHAR(1000) ,
 
19
PRIMARY KEY(f_int1))
 
20
ENGINE = MEMORY;
 
21
#     Logging of <max_row> INSERTs into t0_template suppressed
 
22
DROP TABLE IF EXISTS t0_definition;
 
23
CREATE TABLE t0_definition (
 
24
state CHAR(3),
 
25
create_command VARBINARY(5000),
 
26
file_list      VARBINARY(10000),
 
27
PRIMARY KEY (state)
 
28
) ENGINE = MEMORY;
 
29
DROP TABLE IF EXISTS t0_aux;
 
30
CREATE TABLE t0_aux ( f_int1 INTEGER,
 
31
f_int2 INTEGER,
 
32
f_char1 CHAR(20),
 
33
f_char2 CHAR(20),
 
34
f_charbig VARCHAR(1000) )
 
35
ENGINE = MEMORY;
 
36
SET AUTOCOMMIT= 1;
 
37
SET @@session.sql_mode= '';
 
38
# End of basic preparations needed for all tests
 
39
#-----------------------------------------------
 
40
 
 
41
#========================================================================
 
42
#  1.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=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */
 
76
 
 
77
unified filelist
 
78
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
79
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
80
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
81
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
82
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
83
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
84
 
 
85
# check prerequisites-1 success:    1
 
86
# check COUNT(*) success:    1
 
87
# check MIN/MAX(f_int1) success:    1
 
88
# check MIN/MAX(f_int2) success:    1
 
89
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
90
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
91
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
92
WHERE f_int1 IN (2,3);
 
93
# check prerequisites-3 success:    1
 
94
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
95
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
96
# check read via f_int1 success: 1
 
97
# check read via f_int2 success: 1
 
98
        
 
99
# check multiple-1 success:     1
 
100
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
101
        
 
102
# check multiple-2 success:     1
 
103
INSERT INTO t1 SELECT * FROM t0_template
 
104
WHERE MOD(f_int1,3) = 0;
 
105
        
 
106
# check multiple-3 success:     1
 
107
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
108
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
109
AND @max_row_div2 + @max_row_div4;
 
110
        
 
111
# check multiple-4 success:     1
 
112
DELETE FROM t1
 
113
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
114
AND @max_row_div2 + @max_row_div4 + @max_row;
 
115
        
 
116
# check multiple-5 success:     1
 
117
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
118
INSERT INTO t1
 
119
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
120
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
121
f_charbig = '#SINGLE#';
 
122
        
 
123
# check single-1 success:       1
 
124
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
125
INSERT INTO t1
 
126
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
127
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
128
f_charbig = '#SINGLE#';
 
129
        
 
130
# check single-2 success:       1
 
131
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
132
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
133
UPDATE t1 SET f_int1 = @cur_value2
 
134
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
135
        
 
136
# check single-3 success:       1
 
137
SET @cur_value1= -1;
 
138
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
139
UPDATE t1 SET f_int1 = @cur_value1
 
140
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
141
        
 
142
# check single-4 success:       1
 
143
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
144
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
145
        
 
146
# check single-5 success:       1
 
147
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
148
        
 
149
# check single-6 success:       1
 
150
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
151
        
 
152
# check single-7 success:       1
 
153
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
154
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
155
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
156
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
157
f_charbig = '#NULL#';
 
158
INSERT INTO t1
 
159
SET f_int1 = NULL , f_int2 = -@max_row,
 
160
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
161
f_charbig = '#NULL#';
 
162
# check null success:    1
 
163
        
 
164
# check null-1 success:         1
 
165
UPDATE t1 SET f_int1 = -@max_row
 
166
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
167
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
168
        
 
169
# check null-2 success:         1
 
170
UPDATE t1 SET f_int1 = NULL
 
171
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
172
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
173
        
 
174
# check null-3 success:         1
 
175
DELETE FROM t1
 
176
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
177
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
178
        
 
179
# check null-4 success:         1
 
180
DELETE FROM t1
 
181
WHERE f_int1 = 0 AND f_int2 = 0
 
182
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
183
AND f_charbig = '#NULL#';
 
184
SET AUTOCOMMIT= 0;
 
185
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
186
SELECT f_int1, f_int1, '', '', 'was inserted'
 
187
FROM t0_template source_tab
 
188
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
189
        
 
190
# check transactions-1 success:         1
 
191
COMMIT WORK;
 
192
        
 
193
# check transactions-2 success:         1
 
194
ROLLBACK WORK;
 
195
        
 
196
# check transactions-3 success:         1
 
197
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
198
COMMIT WORK;
 
199
ROLLBACK WORK;
 
200
        
 
201
# check transactions-4 success:         1
 
202
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
203
SELECT f_int1, f_int1, '', '', 'was inserted'
 
204
FROM t0_template source_tab
 
205
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
206
        
 
207
# check transactions-5 success:         1
 
208
ROLLBACK WORK;
 
209
Warnings:
 
210
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
211
        
 
212
# check transactions-6 success:         1
 
213
# INFO: Storage engine used for t1 seems to be not transactional.
 
214
COMMIT;
 
215
        
 
216
# check transactions-7 success:         1
 
217
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
218
COMMIT WORK;
 
219
SET @@session.sql_mode = 'traditional';
 
220
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
221
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
222
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
223
'', '', 'was inserted' FROM t0_template
 
224
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
225
ERROR 22012: Division by 0
 
226
COMMIT;
 
227
        
 
228
# check transactions-8 success:         1
 
229
# INFO: Storage engine used for t1 seems to be unable to revert
 
230
#       changes made by the failing statement.
 
231
SET @@session.sql_mode = '';
 
232
SET AUTOCOMMIT= 1;
 
233
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
234
COMMIT WORK;
 
235
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
236
        
 
237
# check special-1 success:      1
 
238
UPDATE t1 SET f_charbig = '';
 
239
        
 
240
# check special-2 success:      1
 
241
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
242
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
243
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
244
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
245
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
246
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
247
'just inserted' FROM t0_template
 
248
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
249
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
250
BEGIN
 
251
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
252
f_charbig = 'updated by trigger'
 
253
      WHERE f_int1 = new.f_int1;
 
254
END|
 
255
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
256
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
257
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
258
        
 
259
# check trigger-1 success:      1
 
260
DROP TRIGGER trg_1;
 
261
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
262
f_int2 = CAST(f_char1 AS SIGNED INT),
 
263
f_charbig = 'just inserted'
 
264
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
265
DELETE FROM t0_aux
 
266
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
267
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
268
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
269
'just inserted' FROM t0_template
 
270
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
271
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
272
BEGIN
 
273
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
274
f_charbig = 'updated by trigger'
 
275
      WHERE f_int1 = new.f_int1;
 
276
END|
 
277
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
278
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
279
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
280
        
 
281
# check trigger-2 success:      1
 
282
DROP TRIGGER trg_1;
 
283
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
284
f_int2 = CAST(f_char1 AS SIGNED INT),
 
285
f_charbig = 'just inserted'
 
286
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
287
DELETE FROM t0_aux
 
288
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
289
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
290
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
291
'just inserted' FROM t0_template
 
292
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
293
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
294
BEGIN
 
295
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
296
f_charbig = 'updated by trigger'
 
297
      WHERE f_int1 = new.f_int1;
 
298
END|
 
299
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
300
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
301
        
 
302
# check trigger-3 success:      1
 
303
DROP TRIGGER trg_1;
 
304
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
305
f_int2 = CAST(f_char1 AS SIGNED INT),
 
306
f_charbig = 'just inserted'
 
307
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
308
DELETE FROM t0_aux
 
309
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
310
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
311
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
312
'just inserted' FROM t0_template
 
313
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
314
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
315
BEGIN
 
316
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
317
f_charbig = 'updated by trigger'
 
318
      WHERE f_int1 = - old.f_int1;
 
319
END|
 
320
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
321
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
322
        
 
323
# check trigger-4 success:      1
 
324
DROP TRIGGER trg_1;
 
325
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
326
f_int2 = CAST(f_char1 AS SIGNED INT),
 
327
f_charbig = 'just inserted'
 
328
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
329
DELETE FROM t0_aux
 
330
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
331
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
332
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
333
'just inserted' FROM t0_template
 
334
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
335
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
336
BEGIN
 
337
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
338
f_charbig = 'updated by trigger'
 
339
      WHERE f_int1 = new.f_int1;
 
340
END|
 
341
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
342
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
343
        
 
344
# check trigger-5 success:      1
 
345
DROP TRIGGER trg_1;
 
346
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
347
f_int2 = CAST(f_char1 AS SIGNED INT),
 
348
f_charbig = 'just inserted'
 
349
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
350
DELETE FROM t0_aux
 
351
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
352
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
353
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
354
'just inserted' FROM t0_template
 
355
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
356
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
357
BEGIN
 
358
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
359
f_charbig = 'updated by trigger'
 
360
      WHERE f_int1 = - old.f_int1;
 
361
END|
 
362
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
363
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
364
        
 
365
# check trigger-6 success:      1
 
366
DROP TRIGGER trg_1;
 
367
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
368
f_int2 = CAST(f_char1 AS SIGNED INT),
 
369
f_charbig = 'just inserted'
 
370
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
371
DELETE FROM t0_aux
 
372
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
373
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
374
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
375
'just inserted' FROM t0_template
 
376
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
377
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
378
BEGIN
 
379
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
380
f_charbig = 'updated by trigger'
 
381
      WHERE f_int1 = - old.f_int1;
 
382
END|
 
383
DELETE FROM t0_aux
 
384
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
385
        
 
386
# check trigger-7 success:      1
 
387
DROP TRIGGER trg_1;
 
388
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
389
f_int2 = CAST(f_char1 AS SIGNED INT),
 
390
f_charbig = 'just inserted'
 
391
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
392
DELETE FROM t0_aux
 
393
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
394
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
395
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
396
'just inserted' FROM t0_template
 
397
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
398
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
399
BEGIN
 
400
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
401
f_charbig = 'updated by trigger'
 
402
      WHERE f_int1 = - old.f_int1;
 
403
END|
 
404
DELETE FROM t0_aux
 
405
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
406
        
 
407
# check trigger-8 success:      1
 
408
DROP TRIGGER trg_1;
 
409
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
410
f_int2 = CAST(f_char1 AS SIGNED INT),
 
411
f_charbig = 'just inserted'
 
412
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
413
DELETE FROM t0_aux
 
414
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
415
DELETE FROM t1
 
416
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
417
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
418
BEGIN
 
419
SET new.f_int1 = old.f_int1 + @max_row,
 
420
new.f_int2 = old.f_int2 - @max_row,
 
421
new.f_charbig = '####updated per update trigger####';
 
422
END|
 
423
UPDATE t1
 
424
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
425
f_charbig = '####updated per update statement itself####';
 
426
        
 
427
# check trigger-9 success:      1
 
428
DROP TRIGGER trg_2;
 
429
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
430
f_int2 = CAST(f_char1 AS SIGNED INT),
 
431
f_charbig = CONCAT('===',f_char1,'===');
 
432
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
433
BEGIN
 
434
SET new.f_int1 = new.f_int1 + @max_row,
 
435
new.f_int2 = new.f_int2 - @max_row,
 
436
new.f_charbig = '####updated per update trigger####';
 
437
END|
 
438
UPDATE t1
 
439
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
440
f_charbig = '####updated per update statement itself####';
 
441
        
 
442
# check trigger-10 success:     1
 
443
DROP TRIGGER trg_2;
 
444
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
445
f_int2 = CAST(f_char1 AS SIGNED INT),
 
446
f_charbig = CONCAT('===',f_char1,'===');
 
447
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
448
BEGIN
 
449
SET new.f_int1 = @my_max1 + @counter,
 
450
new.f_int2 = @my_min2 - @counter,
 
451
new.f_charbig = '####updated per insert trigger####';
 
452
SET @counter = @counter + 1;
 
453
END|
 
454
SET @counter = 1;
 
455
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
456
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
457
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
458
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
459
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
460
ORDER BY f_int1;
 
461
DROP TRIGGER trg_3;
 
462
        
 
463
# check trigger-11 success:     1
 
464
DELETE FROM t1
 
465
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
466
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
467
AND f_charbig = '####updated per insert trigger####';
 
468
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
469
BEGIN
 
470
SET new.f_int1 = @my_max1 + @counter,
 
471
new.f_int2 = @my_min2 - @counter,
 
472
new.f_charbig = '####updated per insert trigger####';
 
473
SET @counter = @counter + 1;
 
474
END|
 
475
SET @counter = 1;
 
476
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
477
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
478
SELECT CAST(f_int1 AS CHAR),
 
479
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
480
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
481
ORDER BY f_int1;
 
482
DROP TRIGGER trg_3;
 
483
        
 
484
# check trigger-12 success:     1
 
485
DELETE FROM t1
 
486
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
487
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
488
AND f_charbig = '####updated per insert trigger####';
 
489
ANALYZE  TABLE t1;
 
490
Table   Op      Msg_type        Msg_text
 
491
test.t1 analyze status  OK
 
492
CHECK    TABLE t1 EXTENDED;
 
493
Table   Op      Msg_type        Msg_text
 
494
test.t1 check   status  OK
 
495
CHECKSUM TABLE t1 EXTENDED;
 
496
Table   Checksum
 
497
test.t1 <some_value>
 
498
OPTIMIZE TABLE t1;
 
499
Table   Op      Msg_type        Msg_text
 
500
test.t1 optimize        status  OK
 
501
# check layout success:    1
 
502
REPAIR   TABLE t1 EXTENDED;
 
503
Table   Op      Msg_type        Msg_text
 
504
test.t1 repair  status  OK
 
505
# check layout success:    1
 
506
TRUNCATE t1;
 
507
        
 
508
# check TRUNCATE success:       1
 
509
# check layout success:    1
 
510
# End usability test (inc/partition_check.inc)
 
511
DROP TABLE t1;
 
512
CREATE TABLE t1 (
 
513
f_int1 INTEGER,
 
514
f_int2 INTEGER,
 
515
f_char1 CHAR(20),
 
516
f_char2 CHAR(20),
 
517
f_charbig VARCHAR(1000)
 
518
 
 
519
)
 
520
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
521
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
522
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
523
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
524
ALTER TABLE t1 ANALYZE PARTITION part_1;
 
525
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
526
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
527
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
528
# Start usability test (inc/partition_check.inc)
 
529
create_command
 
530
SHOW CREATE TABLE t1;
 
531
Table   Create Table
 
532
t1      CREATE TABLE `t1` (
 
533
  `f_int1` int(11) DEFAULT NULL,
 
534
  `f_int2` int(11) DEFAULT NULL,
 
535
  `f_char1` char(20) DEFAULT NULL,
 
536
  `f_char2` char(20) DEFAULT NULL,
 
537
  `f_charbig` varchar(1000) DEFAULT NULL
 
538
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */
 
539
 
 
540
unified filelist
 
541
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
542
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
543
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
544
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
545
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
546
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
547
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
548
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
549
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
550
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
551
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
552
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
553
 
 
554
# check prerequisites-1 success:    1
 
555
# check COUNT(*) success:    1
 
556
# check MIN/MAX(f_int1) success:    1
 
557
# check MIN/MAX(f_int2) success:    1
 
558
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
559
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
560
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
561
WHERE f_int1 IN (2,3);
 
562
# check prerequisites-3 success:    1
 
563
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
564
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
565
# check read via f_int1 success: 1
 
566
# check read via f_int2 success: 1
 
567
        
 
568
# check multiple-1 success:     1
 
569
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
570
        
 
571
# check multiple-2 success:     1
 
572
INSERT INTO t1 SELECT * FROM t0_template
 
573
WHERE MOD(f_int1,3) = 0;
 
574
        
 
575
# check multiple-3 success:     1
 
576
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
577
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
578
AND @max_row_div2 + @max_row_div4;
 
579
        
 
580
# check multiple-4 success:     1
 
581
DELETE FROM t1
 
582
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
583
AND @max_row_div2 + @max_row_div4 + @max_row;
 
584
        
 
585
# check multiple-5 success:     1
 
586
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
587
INSERT INTO t1
 
588
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
589
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
590
f_charbig = '#SINGLE#';
 
591
        
 
592
# check single-1 success:       1
 
593
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
594
INSERT INTO t1
 
595
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
596
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
597
f_charbig = '#SINGLE#';
 
598
        
 
599
# check single-2 success:       1
 
600
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
601
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
602
UPDATE t1 SET f_int1 = @cur_value2
 
603
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
604
        
 
605
# check single-3 success:       1
 
606
SET @cur_value1= -1;
 
607
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
608
UPDATE t1 SET f_int1 = @cur_value1
 
609
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
610
        
 
611
# check single-4 success:       1
 
612
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
613
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
614
        
 
615
# check single-5 success:       1
 
616
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
617
        
 
618
# check single-6 success:       1
 
619
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
620
        
 
621
# check single-7 success:       1
 
622
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
623
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
624
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
625
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
626
f_charbig = '#NULL#';
 
627
INSERT INTO t1
 
628
SET f_int1 = NULL , f_int2 = -@max_row,
 
629
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
630
f_charbig = '#NULL#';
 
631
# check null success:    1
 
632
        
 
633
# check null-1 success:         1
 
634
UPDATE t1 SET f_int1 = -@max_row
 
635
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
636
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
637
        
 
638
# check null-2 success:         1
 
639
UPDATE t1 SET f_int1 = NULL
 
640
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
641
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
642
        
 
643
# check null-3 success:         1
 
644
DELETE FROM t1
 
645
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
646
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
647
        
 
648
# check null-4 success:         1
 
649
DELETE FROM t1
 
650
WHERE f_int1 = 0 AND f_int2 = 0
 
651
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
652
AND f_charbig = '#NULL#';
 
653
SET AUTOCOMMIT= 0;
 
654
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
655
SELECT f_int1, f_int1, '', '', 'was inserted'
 
656
FROM t0_template source_tab
 
657
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
658
        
 
659
# check transactions-1 success:         1
 
660
COMMIT WORK;
 
661
        
 
662
# check transactions-2 success:         1
 
663
ROLLBACK WORK;
 
664
        
 
665
# check transactions-3 success:         1
 
666
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
667
COMMIT WORK;
 
668
ROLLBACK WORK;
 
669
        
 
670
# check transactions-4 success:         1
 
671
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
672
SELECT f_int1, f_int1, '', '', 'was inserted'
 
673
FROM t0_template source_tab
 
674
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
675
        
 
676
# check transactions-5 success:         1
 
677
ROLLBACK WORK;
 
678
Warnings:
 
679
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
680
        
 
681
# check transactions-6 success:         1
 
682
# INFO: Storage engine used for t1 seems to be not transactional.
 
683
COMMIT;
 
684
        
 
685
# check transactions-7 success:         1
 
686
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
687
COMMIT WORK;
 
688
SET @@session.sql_mode = 'traditional';
 
689
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
690
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
691
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
692
'', '', 'was inserted' FROM t0_template
 
693
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
694
ERROR 22012: Division by 0
 
695
COMMIT;
 
696
        
 
697
# check transactions-8 success:         1
 
698
# INFO: Storage engine used for t1 seems to be unable to revert
 
699
#       changes made by the failing statement.
 
700
SET @@session.sql_mode = '';
 
701
SET AUTOCOMMIT= 1;
 
702
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
703
COMMIT WORK;
 
704
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
705
        
 
706
# check special-1 success:      1
 
707
UPDATE t1 SET f_charbig = '';
 
708
        
 
709
# check special-2 success:      1
 
710
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
711
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
712
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
713
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
714
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
715
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
716
'just inserted' FROM t0_template
 
717
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
718
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
719
BEGIN
 
720
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
721
f_charbig = 'updated by trigger'
 
722
      WHERE f_int1 = new.f_int1;
 
723
END|
 
724
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
725
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
726
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
727
        
 
728
# check trigger-1 success:      1
 
729
DROP TRIGGER trg_1;
 
730
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
731
f_int2 = CAST(f_char1 AS SIGNED INT),
 
732
f_charbig = 'just inserted'
 
733
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
734
DELETE FROM t0_aux
 
735
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
736
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
737
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
738
'just inserted' FROM t0_template
 
739
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
740
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
741
BEGIN
 
742
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
743
f_charbig = 'updated by trigger'
 
744
      WHERE f_int1 = new.f_int1;
 
745
END|
 
746
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
747
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
748
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
749
        
 
750
# check trigger-2 success:      1
 
751
DROP TRIGGER trg_1;
 
752
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
753
f_int2 = CAST(f_char1 AS SIGNED INT),
 
754
f_charbig = 'just inserted'
 
755
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
756
DELETE FROM t0_aux
 
757
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
758
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
759
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
760
'just inserted' FROM t0_template
 
761
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
762
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
763
BEGIN
 
764
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
765
f_charbig = 'updated by trigger'
 
766
      WHERE f_int1 = new.f_int1;
 
767
END|
 
768
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
769
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
770
        
 
771
# check trigger-3 success:      1
 
772
DROP TRIGGER trg_1;
 
773
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
774
f_int2 = CAST(f_char1 AS SIGNED INT),
 
775
f_charbig = 'just inserted'
 
776
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
777
DELETE FROM t0_aux
 
778
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
779
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
780
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
781
'just inserted' FROM t0_template
 
782
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
783
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
784
BEGIN
 
785
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
786
f_charbig = 'updated by trigger'
 
787
      WHERE f_int1 = - old.f_int1;
 
788
END|
 
789
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
790
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
791
        
 
792
# check trigger-4 success:      1
 
793
DROP TRIGGER trg_1;
 
794
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
795
f_int2 = CAST(f_char1 AS SIGNED INT),
 
796
f_charbig = 'just inserted'
 
797
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
798
DELETE FROM t0_aux
 
799
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
800
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
801
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
802
'just inserted' FROM t0_template
 
803
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
804
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
805
BEGIN
 
806
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
807
f_charbig = 'updated by trigger'
 
808
      WHERE f_int1 = new.f_int1;
 
809
END|
 
810
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
811
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
812
        
 
813
# check trigger-5 success:      1
 
814
DROP TRIGGER trg_1;
 
815
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
816
f_int2 = CAST(f_char1 AS SIGNED INT),
 
817
f_charbig = 'just inserted'
 
818
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
819
DELETE FROM t0_aux
 
820
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
821
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
822
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
823
'just inserted' FROM t0_template
 
824
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
825
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
826
BEGIN
 
827
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
828
f_charbig = 'updated by trigger'
 
829
      WHERE f_int1 = - old.f_int1;
 
830
END|
 
831
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
832
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
833
        
 
834
# check trigger-6 success:      1
 
835
DROP TRIGGER trg_1;
 
836
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
837
f_int2 = CAST(f_char1 AS SIGNED INT),
 
838
f_charbig = 'just inserted'
 
839
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
840
DELETE FROM t0_aux
 
841
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
842
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
843
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
844
'just inserted' FROM t0_template
 
845
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
846
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
847
BEGIN
 
848
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
849
f_charbig = 'updated by trigger'
 
850
      WHERE f_int1 = - old.f_int1;
 
851
END|
 
852
DELETE FROM t0_aux
 
853
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
854
        
 
855
# check trigger-7 success:      1
 
856
DROP TRIGGER trg_1;
 
857
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
858
f_int2 = CAST(f_char1 AS SIGNED INT),
 
859
f_charbig = 'just inserted'
 
860
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
861
DELETE FROM t0_aux
 
862
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
863
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
864
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
865
'just inserted' FROM t0_template
 
866
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
867
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
868
BEGIN
 
869
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
870
f_charbig = 'updated by trigger'
 
871
      WHERE f_int1 = - old.f_int1;
 
872
END|
 
873
DELETE FROM t0_aux
 
874
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
875
        
 
876
# check trigger-8 success:      1
 
877
DROP TRIGGER trg_1;
 
878
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
879
f_int2 = CAST(f_char1 AS SIGNED INT),
 
880
f_charbig = 'just inserted'
 
881
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
882
DELETE FROM t0_aux
 
883
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
884
DELETE FROM t1
 
885
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
886
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
887
BEGIN
 
888
SET new.f_int1 = old.f_int1 + @max_row,
 
889
new.f_int2 = old.f_int2 - @max_row,
 
890
new.f_charbig = '####updated per update trigger####';
 
891
END|
 
892
UPDATE t1
 
893
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
894
f_charbig = '####updated per update statement itself####';
 
895
        
 
896
# check trigger-9 success:      1
 
897
DROP TRIGGER trg_2;
 
898
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
899
f_int2 = CAST(f_char1 AS SIGNED INT),
 
900
f_charbig = CONCAT('===',f_char1,'===');
 
901
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
902
BEGIN
 
903
SET new.f_int1 = new.f_int1 + @max_row,
 
904
new.f_int2 = new.f_int2 - @max_row,
 
905
new.f_charbig = '####updated per update trigger####';
 
906
END|
 
907
UPDATE t1
 
908
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
909
f_charbig = '####updated per update statement itself####';
 
910
        
 
911
# check trigger-10 success:     1
 
912
DROP TRIGGER trg_2;
 
913
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
914
f_int2 = CAST(f_char1 AS SIGNED INT),
 
915
f_charbig = CONCAT('===',f_char1,'===');
 
916
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
917
BEGIN
 
918
SET new.f_int1 = @my_max1 + @counter,
 
919
new.f_int2 = @my_min2 - @counter,
 
920
new.f_charbig = '####updated per insert trigger####';
 
921
SET @counter = @counter + 1;
 
922
END|
 
923
SET @counter = 1;
 
924
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
925
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
926
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
927
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
928
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
929
ORDER BY f_int1;
 
930
DROP TRIGGER trg_3;
 
931
        
 
932
# check trigger-11 success:     1
 
933
DELETE FROM t1
 
934
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
935
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
936
AND f_charbig = '####updated per insert trigger####';
 
937
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
938
BEGIN
 
939
SET new.f_int1 = @my_max1 + @counter,
 
940
new.f_int2 = @my_min2 - @counter,
 
941
new.f_charbig = '####updated per insert trigger####';
 
942
SET @counter = @counter + 1;
 
943
END|
 
944
SET @counter = 1;
 
945
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
946
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
947
SELECT CAST(f_int1 AS CHAR),
 
948
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
949
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
950
ORDER BY f_int1;
 
951
DROP TRIGGER trg_3;
 
952
        
 
953
# check trigger-12 success:     1
 
954
DELETE FROM t1
 
955
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
956
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
957
AND f_charbig = '####updated per insert trigger####';
 
958
ANALYZE  TABLE t1;
 
959
Table   Op      Msg_type        Msg_text
 
960
test.t1 analyze status  OK
 
961
CHECK    TABLE t1 EXTENDED;
 
962
Table   Op      Msg_type        Msg_text
 
963
test.t1 check   status  OK
 
964
CHECKSUM TABLE t1 EXTENDED;
 
965
Table   Checksum
 
966
test.t1 <some_value>
 
967
OPTIMIZE TABLE t1;
 
968
Table   Op      Msg_type        Msg_text
 
969
test.t1 optimize        status  OK
 
970
# check layout success:    1
 
971
REPAIR   TABLE t1 EXTENDED;
 
972
Table   Op      Msg_type        Msg_text
 
973
test.t1 repair  status  OK
 
974
# check layout success:    1
 
975
TRUNCATE t1;
 
976
        
 
977
# check TRUNCATE success:       1
 
978
# check layout success:    1
 
979
# End usability test (inc/partition_check.inc)
 
980
DROP TABLE t1;
 
981
CREATE TABLE t1 (
 
982
f_int1 INTEGER,
 
983
f_int2 INTEGER,
 
984
f_char1 CHAR(20),
 
985
f_char2 CHAR(20),
 
986
f_charbig VARCHAR(1000)
 
987
 
 
988
)
 
989
PARTITION BY LIST(MOD(f_int1,4))
 
990
(PARTITION part_3 VALUES IN (-3),
 
991
PARTITION part_2 VALUES IN (-2),
 
992
PARTITION part_1 VALUES IN (-1),
 
993
PARTITION part_N VALUES IN (NULL),
 
994
PARTITION part0 VALUES IN (0),
 
995
PARTITION part1 VALUES IN (1),
 
996
PARTITION part2 VALUES IN (2),
 
997
PARTITION part3 VALUES IN (3));
 
998
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
999
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1000
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
1001
ALTER TABLE t1 ANALYZE PARTITION part_1;
 
1002
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1003
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1004
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1005
# Start usability test (inc/partition_check.inc)
 
1006
create_command
 
1007
SHOW CREATE TABLE t1;
 
1008
Table   Create Table
 
1009
t1      CREATE TABLE `t1` (
 
1010
  `f_int1` int(11) DEFAULT NULL,
 
1011
  `f_int2` int(11) DEFAULT NULL,
 
1012
  `f_char1` char(20) DEFAULT NULL,
 
1013
  `f_char2` char(20) DEFAULT NULL,
 
1014
  `f_charbig` varchar(1000) DEFAULT NULL
 
1015
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
1016
 
 
1017
unified filelist
 
1018
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
1019
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
1020
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
1021
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
1022
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
1023
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
1024
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
1025
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
1026
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
1027
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
1028
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
1029
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
1030
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
1031
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
1032
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
1033
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
1034
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
1035
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
1036
 
 
1037
# check prerequisites-1 success:    1
 
1038
# check COUNT(*) success:    1
 
1039
# check MIN/MAX(f_int1) success:    1
 
1040
# check MIN/MAX(f_int2) success:    1
 
1041
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1042
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1043
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1044
WHERE f_int1 IN (2,3);
 
1045
# check prerequisites-3 success:    1
 
1046
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1047
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
1048
# check read via f_int1 success: 1
 
1049
# check read via f_int2 success: 1
 
1050
        
 
1051
# check multiple-1 success:     1
 
1052
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1053
        
 
1054
# check multiple-2 success:     1
 
1055
INSERT INTO t1 SELECT * FROM t0_template
 
1056
WHERE MOD(f_int1,3) = 0;
 
1057
        
 
1058
# check multiple-3 success:     1
 
1059
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1060
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1061
AND @max_row_div2 + @max_row_div4;
 
1062
        
 
1063
# check multiple-4 success:     1
 
1064
DELETE FROM t1
 
1065
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1066
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1067
        
 
1068
# check multiple-5 success:     1
 
1069
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1070
INSERT INTO t1
 
1071
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1072
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1073
f_charbig = '#SINGLE#';
 
1074
        
 
1075
# check single-1 success:       1
 
1076
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1077
INSERT INTO t1
 
1078
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1079
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1080
f_charbig = '#SINGLE#';
 
1081
        
 
1082
# check single-2 success:       1
 
1083
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1084
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1085
UPDATE t1 SET f_int1 = @cur_value2
 
1086
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1087
        
 
1088
# check single-3 success:       1
 
1089
SET @cur_value1= -1;
 
1090
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1091
UPDATE t1 SET f_int1 = @cur_value1
 
1092
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1093
        
 
1094
# check single-4 success:       1
 
1095
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1096
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1097
        
 
1098
# check single-5 success:       1
 
1099
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1100
        
 
1101
# check single-6 success:       1
 
1102
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1103
        
 
1104
# check single-7 success:       1
 
1105
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
1106
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1107
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1108
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1109
f_charbig = '#NULL#';
 
1110
INSERT INTO t1
 
1111
SET f_int1 = NULL , f_int2 = -@max_row,
 
1112
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1113
f_charbig = '#NULL#';
 
1114
# check null success:    1
 
1115
        
 
1116
# check null-1 success:         1
 
1117
UPDATE t1 SET f_int1 = -@max_row
 
1118
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1119
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1120
        
 
1121
# check null-2 success:         1
 
1122
UPDATE t1 SET f_int1 = NULL
 
1123
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1124
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1125
        
 
1126
# check null-3 success:         1
 
1127
DELETE FROM t1
 
1128
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1129
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1130
        
 
1131
# check null-4 success:         1
 
1132
DELETE FROM t1
 
1133
WHERE f_int1 = 0 AND f_int2 = 0
 
1134
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1135
AND f_charbig = '#NULL#';
 
1136
SET AUTOCOMMIT= 0;
 
1137
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1138
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1139
FROM t0_template source_tab
 
1140
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1141
        
 
1142
# check transactions-1 success:         1
 
1143
COMMIT WORK;
 
1144
        
 
1145
# check transactions-2 success:         1
 
1146
ROLLBACK WORK;
 
1147
        
 
1148
# check transactions-3 success:         1
 
1149
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1150
COMMIT WORK;
 
1151
ROLLBACK WORK;
 
1152
        
 
1153
# check transactions-4 success:         1
 
1154
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1155
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1156
FROM t0_template source_tab
 
1157
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1158
        
 
1159
# check transactions-5 success:         1
 
1160
ROLLBACK WORK;
 
1161
Warnings:
 
1162
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
1163
        
 
1164
# check transactions-6 success:         1
 
1165
# INFO: Storage engine used for t1 seems to be not transactional.
 
1166
COMMIT;
 
1167
        
 
1168
# check transactions-7 success:         1
 
1169
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1170
COMMIT WORK;
 
1171
SET @@session.sql_mode = 'traditional';
 
1172
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1173
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1174
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1175
'', '', 'was inserted' FROM t0_template
 
1176
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1177
ERROR 22012: Division by 0
 
1178
COMMIT;
 
1179
        
 
1180
# check transactions-8 success:         1
 
1181
# INFO: Storage engine used for t1 seems to be unable to revert
 
1182
#       changes made by the failing statement.
 
1183
SET @@session.sql_mode = '';
 
1184
SET AUTOCOMMIT= 1;
 
1185
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1186
COMMIT WORK;
 
1187
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
1188
        
 
1189
# check special-1 success:      1
 
1190
UPDATE t1 SET f_charbig = '';
 
1191
        
 
1192
# check special-2 success:      1
 
1193
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
1194
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1195
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
1196
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1197
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1198
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1199
'just inserted' FROM t0_template
 
1200
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1201
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
1202
BEGIN
 
1203
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1204
f_charbig = 'updated by trigger'
 
1205
      WHERE f_int1 = new.f_int1;
 
1206
END|
 
1207
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1208
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1209
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1210
        
 
1211
# check trigger-1 success:      1
 
1212
DROP TRIGGER trg_1;
 
1213
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1214
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1215
f_charbig = 'just inserted'
 
1216
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1217
DELETE FROM t0_aux
 
1218
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1219
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1220
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1221
'just inserted' FROM t0_template
 
1222
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1223
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1224
BEGIN
 
1225
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1226
f_charbig = 'updated by trigger'
 
1227
      WHERE f_int1 = new.f_int1;
 
1228
END|
 
1229
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1230
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1231
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1232
        
 
1233
# check trigger-2 success:      1
 
1234
DROP TRIGGER trg_1;
 
1235
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1236
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1237
f_charbig = 'just inserted'
 
1238
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1239
DELETE FROM t0_aux
 
1240
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1241
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1242
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1243
'just inserted' FROM t0_template
 
1244
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1245
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1246
BEGIN
 
1247
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1248
f_charbig = 'updated by trigger'
 
1249
      WHERE f_int1 = new.f_int1;
 
1250
END|
 
1251
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1252
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1253
        
 
1254
# check trigger-3 success:      1
 
1255
DROP TRIGGER trg_1;
 
1256
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1257
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1258
f_charbig = 'just inserted'
 
1259
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1260
DELETE FROM t0_aux
 
1261
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1262
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1263
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1264
'just inserted' FROM t0_template
 
1265
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1266
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1267
BEGIN
 
1268
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1269
f_charbig = 'updated by trigger'
 
1270
      WHERE f_int1 = - old.f_int1;
 
1271
END|
 
1272
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1273
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1274
        
 
1275
# check trigger-4 success:      1
 
1276
DROP TRIGGER trg_1;
 
1277
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1278
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1279
f_charbig = 'just inserted'
 
1280
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1281
DELETE FROM t0_aux
 
1282
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1283
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1284
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1285
'just inserted' FROM t0_template
 
1286
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1287
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1288
BEGIN
 
1289
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1290
f_charbig = 'updated by trigger'
 
1291
      WHERE f_int1 = new.f_int1;
 
1292
END|
 
1293
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1294
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1295
        
 
1296
# check trigger-5 success:      1
 
1297
DROP TRIGGER trg_1;
 
1298
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1299
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1300
f_charbig = 'just inserted'
 
1301
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1302
DELETE FROM t0_aux
 
1303
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1304
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1305
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1306
'just inserted' FROM t0_template
 
1307
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1308
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1309
BEGIN
 
1310
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1311
f_charbig = 'updated by trigger'
 
1312
      WHERE f_int1 = - old.f_int1;
 
1313
END|
 
1314
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1315
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1316
        
 
1317
# check trigger-6 success:      1
 
1318
DROP TRIGGER trg_1;
 
1319
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1320
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1321
f_charbig = 'just inserted'
 
1322
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1323
DELETE FROM t0_aux
 
1324
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1325
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1326
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1327
'just inserted' FROM t0_template
 
1328
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1329
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1330
BEGIN
 
1331
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1332
f_charbig = 'updated by trigger'
 
1333
      WHERE f_int1 = - old.f_int1;
 
1334
END|
 
1335
DELETE FROM t0_aux
 
1336
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1337
        
 
1338
# check trigger-7 success:      1
 
1339
DROP TRIGGER trg_1;
 
1340
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1341
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1342
f_charbig = 'just inserted'
 
1343
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1344
DELETE FROM t0_aux
 
1345
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1346
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1347
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1348
'just inserted' FROM t0_template
 
1349
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1350
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1351
BEGIN
 
1352
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1353
f_charbig = 'updated by trigger'
 
1354
      WHERE f_int1 = - old.f_int1;
 
1355
END|
 
1356
DELETE FROM t0_aux
 
1357
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1358
        
 
1359
# check trigger-8 success:      1
 
1360
DROP TRIGGER trg_1;
 
1361
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1362
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1363
f_charbig = 'just inserted'
 
1364
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1365
DELETE FROM t0_aux
 
1366
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1367
DELETE FROM t1
 
1368
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1369
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1370
BEGIN
 
1371
SET new.f_int1 = old.f_int1 + @max_row,
 
1372
new.f_int2 = old.f_int2 - @max_row,
 
1373
new.f_charbig = '####updated per update trigger####';
 
1374
END|
 
1375
UPDATE t1
 
1376
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1377
f_charbig = '####updated per update statement itself####';
 
1378
        
 
1379
# check trigger-9 success:      1
 
1380
DROP TRIGGER trg_2;
 
1381
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1382
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1383
f_charbig = CONCAT('===',f_char1,'===');
 
1384
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1385
BEGIN
 
1386
SET new.f_int1 = new.f_int1 + @max_row,
 
1387
new.f_int2 = new.f_int2 - @max_row,
 
1388
new.f_charbig = '####updated per update trigger####';
 
1389
END|
 
1390
UPDATE t1
 
1391
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1392
f_charbig = '####updated per update statement itself####';
 
1393
        
 
1394
# check trigger-10 success:     1
 
1395
DROP TRIGGER trg_2;
 
1396
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1397
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1398
f_charbig = CONCAT('===',f_char1,'===');
 
1399
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1400
BEGIN
 
1401
SET new.f_int1 = @my_max1 + @counter,
 
1402
new.f_int2 = @my_min2 - @counter,
 
1403
new.f_charbig = '####updated per insert trigger####';
 
1404
SET @counter = @counter + 1;
 
1405
END|
 
1406
SET @counter = 1;
 
1407
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1408
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1409
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1410
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1411
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1412
ORDER BY f_int1;
 
1413
DROP TRIGGER trg_3;
 
1414
        
 
1415
# check trigger-11 success:     1
 
1416
DELETE FROM t1
 
1417
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1418
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1419
AND f_charbig = '####updated per insert trigger####';
 
1420
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1421
BEGIN
 
1422
SET new.f_int1 = @my_max1 + @counter,
 
1423
new.f_int2 = @my_min2 - @counter,
 
1424
new.f_charbig = '####updated per insert trigger####';
 
1425
SET @counter = @counter + 1;
 
1426
END|
 
1427
SET @counter = 1;
 
1428
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1429
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1430
SELECT CAST(f_int1 AS CHAR),
 
1431
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1432
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1433
ORDER BY f_int1;
 
1434
DROP TRIGGER trg_3;
 
1435
        
 
1436
# check trigger-12 success:     1
 
1437
DELETE FROM t1
 
1438
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1439
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1440
AND f_charbig = '####updated per insert trigger####';
 
1441
ANALYZE  TABLE t1;
 
1442
Table   Op      Msg_type        Msg_text
 
1443
test.t1 analyze status  OK
 
1444
CHECK    TABLE t1 EXTENDED;
 
1445
Table   Op      Msg_type        Msg_text
 
1446
test.t1 check   status  OK
 
1447
CHECKSUM TABLE t1 EXTENDED;
 
1448
Table   Checksum
 
1449
test.t1 <some_value>
 
1450
OPTIMIZE TABLE t1;
 
1451
Table   Op      Msg_type        Msg_text
 
1452
test.t1 optimize        status  OK
 
1453
# check layout success:    1
 
1454
REPAIR   TABLE t1 EXTENDED;
 
1455
Table   Op      Msg_type        Msg_text
 
1456
test.t1 repair  status  OK
 
1457
# check layout success:    1
 
1458
TRUNCATE t1;
 
1459
        
 
1460
# check TRUNCATE success:       1
 
1461
# check layout success:    1
 
1462
# End usability test (inc/partition_check.inc)
 
1463
DROP TABLE t1;
 
1464
CREATE TABLE t1 (
 
1465
f_int1 INTEGER,
 
1466
f_int2 INTEGER,
 
1467
f_char1 CHAR(20),
 
1468
f_char2 CHAR(20),
 
1469
f_charbig VARCHAR(1000)
 
1470
 
 
1471
)
 
1472
PARTITION BY RANGE(f_int1)
 
1473
(PARTITION parta VALUES LESS THAN (0),
 
1474
PARTITION part_1 VALUES LESS THAN (5),
 
1475
PARTITION part_2 VALUES LESS THAN (10),
 
1476
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
1477
PARTITION part_4 VALUES LESS THAN (20),
 
1478
PARTITION part_5 VALUES LESS THAN (2147483646));
 
1479
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1480
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1481
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
1482
ALTER TABLE t1 ANALYZE PARTITION part_1;
 
1483
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1484
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1485
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1486
# Start usability test (inc/partition_check.inc)
 
1487
create_command
 
1488
SHOW CREATE TABLE t1;
 
1489
Table   Create Table
 
1490
t1      CREATE TABLE `t1` (
 
1491
  `f_int1` int(11) DEFAULT NULL,
 
1492
  `f_int2` int(11) DEFAULT NULL,
 
1493
  `f_char1` char(20) DEFAULT NULL,
 
1494
  `f_char2` char(20) DEFAULT NULL,
 
1495
  `f_charbig` varchar(1000) DEFAULT NULL
 
1496
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
1497
 
 
1498
unified filelist
 
1499
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
1500
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
1501
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
1502
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
1503
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
1504
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
1505
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
1506
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
1507
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
1508
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
1509
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
1510
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
1511
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
1512
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
1513
 
 
1514
# check prerequisites-1 success:    1
 
1515
# check COUNT(*) success:    1
 
1516
# check MIN/MAX(f_int1) success:    1
 
1517
# check MIN/MAX(f_int2) success:    1
 
1518
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1519
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1520
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1521
WHERE f_int1 IN (2,3);
 
1522
# check prerequisites-3 success:    1
 
1523
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1524
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
1525
# check read via f_int1 success: 1
 
1526
# check read via f_int2 success: 1
 
1527
        
 
1528
# check multiple-1 success:     1
 
1529
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1530
        
 
1531
# check multiple-2 success:     1
 
1532
INSERT INTO t1 SELECT * FROM t0_template
 
1533
WHERE MOD(f_int1,3) = 0;
 
1534
        
 
1535
# check multiple-3 success:     1
 
1536
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1537
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1538
AND @max_row_div2 + @max_row_div4;
 
1539
        
 
1540
# check multiple-4 success:     1
 
1541
DELETE FROM t1
 
1542
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1543
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1544
        
 
1545
# check multiple-5 success:     1
 
1546
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1547
INSERT INTO t1
 
1548
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1549
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1550
f_charbig = '#SINGLE#';
 
1551
        
 
1552
# check single-1 success:       1
 
1553
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1554
INSERT INTO t1
 
1555
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1556
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1557
f_charbig = '#SINGLE#';
 
1558
        
 
1559
# check single-2 success:       1
 
1560
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1561
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1562
UPDATE t1 SET f_int1 = @cur_value2
 
1563
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1564
        
 
1565
# check single-3 success:       1
 
1566
SET @cur_value1= -1;
 
1567
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1568
UPDATE t1 SET f_int1 = @cur_value1
 
1569
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1570
        
 
1571
# check single-4 success:       1
 
1572
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1573
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1574
        
 
1575
# check single-5 success:       1
 
1576
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1577
        
 
1578
# check single-6 success:       1
 
1579
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1580
ERROR HY000: Table has no partition for value 2147483647
 
1581
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1582
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1583
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1584
f_charbig = '#NULL#';
 
1585
INSERT INTO t1
 
1586
SET f_int1 = NULL , f_int2 = -@max_row,
 
1587
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1588
f_charbig = '#NULL#';
 
1589
# check null success:    1
 
1590
        
 
1591
# check null-1 success:         1
 
1592
UPDATE t1 SET f_int1 = -@max_row
 
1593
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1594
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1595
        
 
1596
# check null-2 success:         1
 
1597
UPDATE t1 SET f_int1 = NULL
 
1598
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1599
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1600
        
 
1601
# check null-3 success:         1
 
1602
DELETE FROM t1
 
1603
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1604
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1605
        
 
1606
# check null-4 success:         1
 
1607
DELETE FROM t1
 
1608
WHERE f_int1 = 0 AND f_int2 = 0
 
1609
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1610
AND f_charbig = '#NULL#';
 
1611
SET AUTOCOMMIT= 0;
 
1612
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1613
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1614
FROM t0_template source_tab
 
1615
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1616
        
 
1617
# check transactions-1 success:         1
 
1618
COMMIT WORK;
 
1619
        
 
1620
# check transactions-2 success:         1
 
1621
ROLLBACK WORK;
 
1622
        
 
1623
# check transactions-3 success:         1
 
1624
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1625
COMMIT WORK;
 
1626
ROLLBACK WORK;
 
1627
        
 
1628
# check transactions-4 success:         1
 
1629
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1630
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1631
FROM t0_template source_tab
 
1632
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1633
        
 
1634
# check transactions-5 success:         1
 
1635
ROLLBACK WORK;
 
1636
Warnings:
 
1637
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
1638
        
 
1639
# check transactions-6 success:         1
 
1640
# INFO: Storage engine used for t1 seems to be not transactional.
 
1641
COMMIT;
 
1642
        
 
1643
# check transactions-7 success:         1
 
1644
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1645
COMMIT WORK;
 
1646
SET @@session.sql_mode = 'traditional';
 
1647
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1648
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1649
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1650
'', '', 'was inserted' FROM t0_template
 
1651
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1652
ERROR 22012: Division by 0
 
1653
COMMIT;
 
1654
        
 
1655
# check transactions-8 success:         1
 
1656
# INFO: Storage engine used for t1 seems to be unable to revert
 
1657
#       changes made by the failing statement.
 
1658
SET @@session.sql_mode = '';
 
1659
SET AUTOCOMMIT= 1;
 
1660
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1661
COMMIT WORK;
 
1662
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
1663
        
 
1664
# check special-1 success:      1
 
1665
UPDATE t1 SET f_charbig = '';
 
1666
        
 
1667
# check special-2 success:      1
 
1668
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
1669
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1670
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
1671
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1672
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1673
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1674
'just inserted' FROM t0_template
 
1675
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1676
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
1677
BEGIN
 
1678
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1679
f_charbig = 'updated by trigger'
 
1680
      WHERE f_int1 = new.f_int1;
 
1681
END|
 
1682
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1683
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1684
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1685
        
 
1686
# check trigger-1 success:      1
 
1687
DROP TRIGGER trg_1;
 
1688
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1689
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1690
f_charbig = 'just inserted'
 
1691
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1692
DELETE FROM t0_aux
 
1693
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1694
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1695
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1696
'just inserted' FROM t0_template
 
1697
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1698
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1699
BEGIN
 
1700
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1701
f_charbig = 'updated by trigger'
 
1702
      WHERE f_int1 = new.f_int1;
 
1703
END|
 
1704
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1705
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1706
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1707
        
 
1708
# check trigger-2 success:      1
 
1709
DROP TRIGGER trg_1;
 
1710
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1711
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1712
f_charbig = 'just inserted'
 
1713
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1714
DELETE FROM t0_aux
 
1715
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1716
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1717
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1718
'just inserted' FROM t0_template
 
1719
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1720
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1721
BEGIN
 
1722
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1723
f_charbig = 'updated by trigger'
 
1724
      WHERE f_int1 = new.f_int1;
 
1725
END|
 
1726
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1727
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1728
        
 
1729
# check trigger-3 success:      1
 
1730
DROP TRIGGER trg_1;
 
1731
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1732
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1733
f_charbig = 'just inserted'
 
1734
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1735
DELETE FROM t0_aux
 
1736
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1737
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1738
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1739
'just inserted' FROM t0_template
 
1740
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1741
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1742
BEGIN
 
1743
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1744
f_charbig = 'updated by trigger'
 
1745
      WHERE f_int1 = - old.f_int1;
 
1746
END|
 
1747
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1748
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1749
        
 
1750
# check trigger-4 success:      1
 
1751
DROP TRIGGER trg_1;
 
1752
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1753
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1754
f_charbig = 'just inserted'
 
1755
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1756
DELETE FROM t0_aux
 
1757
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1758
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1759
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1760
'just inserted' FROM t0_template
 
1761
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1762
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1763
BEGIN
 
1764
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1765
f_charbig = 'updated by trigger'
 
1766
      WHERE f_int1 = new.f_int1;
 
1767
END|
 
1768
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1769
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1770
        
 
1771
# check trigger-5 success:      1
 
1772
DROP TRIGGER trg_1;
 
1773
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1774
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1775
f_charbig = 'just inserted'
 
1776
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1777
DELETE FROM t0_aux
 
1778
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1779
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1780
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1781
'just inserted' FROM t0_template
 
1782
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1783
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1784
BEGIN
 
1785
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1786
f_charbig = 'updated by trigger'
 
1787
      WHERE f_int1 = - old.f_int1;
 
1788
END|
 
1789
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1790
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1791
        
 
1792
# check trigger-6 success:      1
 
1793
DROP TRIGGER trg_1;
 
1794
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1795
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1796
f_charbig = 'just inserted'
 
1797
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1798
DELETE FROM t0_aux
 
1799
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1800
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1801
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1802
'just inserted' FROM t0_template
 
1803
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1804
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1805
BEGIN
 
1806
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1807
f_charbig = 'updated by trigger'
 
1808
      WHERE f_int1 = - old.f_int1;
 
1809
END|
 
1810
DELETE FROM t0_aux
 
1811
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1812
        
 
1813
# check trigger-7 success:      1
 
1814
DROP TRIGGER trg_1;
 
1815
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1816
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1817
f_charbig = 'just inserted'
 
1818
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1819
DELETE FROM t0_aux
 
1820
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1821
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1822
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1823
'just inserted' FROM t0_template
 
1824
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1825
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1826
BEGIN
 
1827
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1828
f_charbig = 'updated by trigger'
 
1829
      WHERE f_int1 = - old.f_int1;
 
1830
END|
 
1831
DELETE FROM t0_aux
 
1832
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1833
        
 
1834
# check trigger-8 success:      1
 
1835
DROP TRIGGER trg_1;
 
1836
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1837
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1838
f_charbig = 'just inserted'
 
1839
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1840
DELETE FROM t0_aux
 
1841
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1842
DELETE FROM t1
 
1843
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1844
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1845
BEGIN
 
1846
SET new.f_int1 = old.f_int1 + @max_row,
 
1847
new.f_int2 = old.f_int2 - @max_row,
 
1848
new.f_charbig = '####updated per update trigger####';
 
1849
END|
 
1850
UPDATE t1
 
1851
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1852
f_charbig = '####updated per update statement itself####';
 
1853
        
 
1854
# check trigger-9 success:      1
 
1855
DROP TRIGGER trg_2;
 
1856
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1857
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1858
f_charbig = CONCAT('===',f_char1,'===');
 
1859
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1860
BEGIN
 
1861
SET new.f_int1 = new.f_int1 + @max_row,
 
1862
new.f_int2 = new.f_int2 - @max_row,
 
1863
new.f_charbig = '####updated per update trigger####';
 
1864
END|
 
1865
UPDATE t1
 
1866
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1867
f_charbig = '####updated per update statement itself####';
 
1868
        
 
1869
# check trigger-10 success:     1
 
1870
DROP TRIGGER trg_2;
 
1871
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1872
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1873
f_charbig = CONCAT('===',f_char1,'===');
 
1874
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1875
BEGIN
 
1876
SET new.f_int1 = @my_max1 + @counter,
 
1877
new.f_int2 = @my_min2 - @counter,
 
1878
new.f_charbig = '####updated per insert trigger####';
 
1879
SET @counter = @counter + 1;
 
1880
END|
 
1881
SET @counter = 1;
 
1882
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1883
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1884
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1885
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1886
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1887
ORDER BY f_int1;
 
1888
DROP TRIGGER trg_3;
 
1889
        
 
1890
# check trigger-11 success:     1
 
1891
DELETE FROM t1
 
1892
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1893
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1894
AND f_charbig = '####updated per insert trigger####';
 
1895
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1896
BEGIN
 
1897
SET new.f_int1 = @my_max1 + @counter,
 
1898
new.f_int2 = @my_min2 - @counter,
 
1899
new.f_charbig = '####updated per insert trigger####';
 
1900
SET @counter = @counter + 1;
 
1901
END|
 
1902
SET @counter = 1;
 
1903
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1904
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1905
SELECT CAST(f_int1 AS CHAR),
 
1906
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1907
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1908
ORDER BY f_int1;
 
1909
DROP TRIGGER trg_3;
 
1910
        
 
1911
# check trigger-12 success:     1
 
1912
DELETE FROM t1
 
1913
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1914
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1915
AND f_charbig = '####updated per insert trigger####';
 
1916
ANALYZE  TABLE t1;
 
1917
Table   Op      Msg_type        Msg_text
 
1918
test.t1 analyze status  OK
 
1919
CHECK    TABLE t1 EXTENDED;
 
1920
Table   Op      Msg_type        Msg_text
 
1921
test.t1 check   status  OK
 
1922
CHECKSUM TABLE t1 EXTENDED;
 
1923
Table   Checksum
 
1924
test.t1 <some_value>
 
1925
OPTIMIZE TABLE t1;
 
1926
Table   Op      Msg_type        Msg_text
 
1927
test.t1 optimize        status  OK
 
1928
# check layout success:    1
 
1929
REPAIR   TABLE t1 EXTENDED;
 
1930
Table   Op      Msg_type        Msg_text
 
1931
test.t1 repair  status  OK
 
1932
# check layout success:    1
 
1933
TRUNCATE t1;
 
1934
        
 
1935
# check TRUNCATE success:       1
 
1936
# check layout success:    1
 
1937
# End usability test (inc/partition_check.inc)
 
1938
DROP TABLE t1;
 
1939
CREATE TABLE t1 (
 
1940
f_int1 INTEGER,
 
1941
f_int2 INTEGER,
 
1942
f_char1 CHAR(20),
 
1943
f_char2 CHAR(20),
 
1944
f_charbig VARCHAR(1000)
 
1945
 
 
1946
)
 
1947
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
1948
(PARTITION part_1 VALUES LESS THAN (0),
 
1949
PARTITION part_2 VALUES LESS THAN (5),
 
1950
PARTITION part_3 VALUES LESS THAN (10),
 
1951
PARTITION part_4 VALUES LESS THAN (2147483646));
 
1952
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1953
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1954
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
1955
ALTER TABLE t1 ANALYZE PARTITION part_1;
 
1956
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1957
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
1958
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
1959
# Start usability test (inc/partition_check.inc)
 
1960
create_command
 
1961
SHOW CREATE TABLE t1;
 
1962
Table   Create Table
 
1963
t1      CREATE TABLE `t1` (
 
1964
  `f_int1` int(11) DEFAULT NULL,
 
1965
  `f_int2` int(11) DEFAULT NULL,
 
1966
  `f_char1` char(20) DEFAULT NULL,
 
1967
  `f_char2` char(20) DEFAULT NULL,
 
1968
  `f_charbig` varchar(1000) DEFAULT NULL
 
1969
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
1970
 
 
1971
unified filelist
 
1972
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
1973
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
1974
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
1975
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
1976
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
1977
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
1978
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
1979
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
1980
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
1981
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
1982
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
1983
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
1984
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYD
 
1985
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYI
 
1986
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYD
 
1987
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYI
 
1988
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
1989
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
1990
 
 
1991
# check prerequisites-1 success:    1
 
1992
# check COUNT(*) success:    1
 
1993
# check MIN/MAX(f_int1) success:    1
 
1994
# check MIN/MAX(f_int2) success:    1
 
1995
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1996
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1997
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1998
WHERE f_int1 IN (2,3);
 
1999
# check prerequisites-3 success:    1
 
2000
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2001
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
2002
# check read via f_int1 success: 1
 
2003
# check read via f_int2 success: 1
 
2004
        
 
2005
# check multiple-1 success:     1
 
2006
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2007
        
 
2008
# check multiple-2 success:     1
 
2009
INSERT INTO t1 SELECT * FROM t0_template
 
2010
WHERE MOD(f_int1,3) = 0;
 
2011
        
 
2012
# check multiple-3 success:     1
 
2013
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2014
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2015
AND @max_row_div2 + @max_row_div4;
 
2016
        
 
2017
# check multiple-4 success:     1
 
2018
DELETE FROM t1
 
2019
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2020
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2021
        
 
2022
# check multiple-5 success:     1
 
2023
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2024
INSERT INTO t1
 
2025
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2026
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2027
f_charbig = '#SINGLE#';
 
2028
        
 
2029
# check single-1 success:       1
 
2030
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2031
INSERT INTO t1
 
2032
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2033
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2034
f_charbig = '#SINGLE#';
 
2035
        
 
2036
# check single-2 success:       1
 
2037
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2038
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2039
UPDATE t1 SET f_int1 = @cur_value2
 
2040
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2041
        
 
2042
# check single-3 success:       1
 
2043
SET @cur_value1= -1;
 
2044
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2045
UPDATE t1 SET f_int1 = @cur_value1
 
2046
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2047
        
 
2048
# check single-4 success:       1
 
2049
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2050
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2051
        
 
2052
# check single-5 success:       1
 
2053
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2054
        
 
2055
# check single-6 success:       1
 
2056
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2057
        
 
2058
# check single-7 success:       1
 
2059
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
2060
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2061
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2062
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2063
f_charbig = '#NULL#';
 
2064
INSERT INTO t1
 
2065
SET f_int1 = NULL , f_int2 = -@max_row,
 
2066
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2067
f_charbig = '#NULL#';
 
2068
# check null success:    1
 
2069
        
 
2070
# check null-1 success:         1
 
2071
UPDATE t1 SET f_int1 = -@max_row
 
2072
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2073
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2074
        
 
2075
# check null-2 success:         1
 
2076
UPDATE t1 SET f_int1 = NULL
 
2077
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2078
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2079
        
 
2080
# check null-3 success:         1
 
2081
DELETE FROM t1
 
2082
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2083
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2084
        
 
2085
# check null-4 success:         1
 
2086
DELETE FROM t1
 
2087
WHERE f_int1 = 0 AND f_int2 = 0
 
2088
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2089
AND f_charbig = '#NULL#';
 
2090
SET AUTOCOMMIT= 0;
 
2091
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2092
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2093
FROM t0_template source_tab
 
2094
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2095
        
 
2096
# check transactions-1 success:         1
 
2097
COMMIT WORK;
 
2098
        
 
2099
# check transactions-2 success:         1
 
2100
ROLLBACK WORK;
 
2101
        
 
2102
# check transactions-3 success:         1
 
2103
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2104
COMMIT WORK;
 
2105
ROLLBACK WORK;
 
2106
        
 
2107
# check transactions-4 success:         1
 
2108
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2109
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2110
FROM t0_template source_tab
 
2111
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2112
        
 
2113
# check transactions-5 success:         1
 
2114
ROLLBACK WORK;
 
2115
Warnings:
 
2116
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
2117
        
 
2118
# check transactions-6 success:         1
 
2119
# INFO: Storage engine used for t1 seems to be not transactional.
 
2120
COMMIT;
 
2121
        
 
2122
# check transactions-7 success:         1
 
2123
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2124
COMMIT WORK;
 
2125
SET @@session.sql_mode = 'traditional';
 
2126
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2127
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2128
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2129
'', '', 'was inserted' FROM t0_template
 
2130
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2131
ERROR 22012: Division by 0
 
2132
COMMIT;
 
2133
        
 
2134
# check transactions-8 success:         1
 
2135
# INFO: Storage engine used for t1 seems to be unable to revert
 
2136
#       changes made by the failing statement.
 
2137
SET @@session.sql_mode = '';
 
2138
SET AUTOCOMMIT= 1;
 
2139
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2140
COMMIT WORK;
 
2141
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2142
        
 
2143
# check special-1 success:      1
 
2144
UPDATE t1 SET f_charbig = '';
 
2145
        
 
2146
# check special-2 success:      1
 
2147
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2148
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2149
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2150
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2151
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2152
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2153
'just inserted' FROM t0_template
 
2154
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2155
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2156
BEGIN
 
2157
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2158
f_charbig = 'updated by trigger'
 
2159
      WHERE f_int1 = new.f_int1;
 
2160
END|
 
2161
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2162
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2163
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2164
        
 
2165
# check trigger-1 success:      1
 
2166
DROP TRIGGER trg_1;
 
2167
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2168
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2169
f_charbig = 'just inserted'
 
2170
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2171
DELETE FROM t0_aux
 
2172
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2173
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2174
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2175
'just inserted' FROM t0_template
 
2176
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2177
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2178
BEGIN
 
2179
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2180
f_charbig = 'updated by trigger'
 
2181
      WHERE f_int1 = new.f_int1;
 
2182
END|
 
2183
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2184
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2185
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2186
        
 
2187
# check trigger-2 success:      1
 
2188
DROP TRIGGER trg_1;
 
2189
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2190
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2191
f_charbig = 'just inserted'
 
2192
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2193
DELETE FROM t0_aux
 
2194
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2195
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2196
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2197
'just inserted' FROM t0_template
 
2198
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2199
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2200
BEGIN
 
2201
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2202
f_charbig = 'updated by trigger'
 
2203
      WHERE f_int1 = new.f_int1;
 
2204
END|
 
2205
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2206
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2207
        
 
2208
# check trigger-3 success:      1
 
2209
DROP TRIGGER trg_1;
 
2210
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2211
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2212
f_charbig = 'just inserted'
 
2213
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2214
DELETE FROM t0_aux
 
2215
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2216
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2217
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2218
'just inserted' FROM t0_template
 
2219
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2220
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2221
BEGIN
 
2222
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2223
f_charbig = 'updated by trigger'
 
2224
      WHERE f_int1 = - old.f_int1;
 
2225
END|
 
2226
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2227
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2228
        
 
2229
# check trigger-4 success:      1
 
2230
DROP TRIGGER trg_1;
 
2231
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2232
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2233
f_charbig = 'just inserted'
 
2234
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2235
DELETE FROM t0_aux
 
2236
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2237
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2238
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2239
'just inserted' FROM t0_template
 
2240
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2241
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2242
BEGIN
 
2243
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2244
f_charbig = 'updated by trigger'
 
2245
      WHERE f_int1 = new.f_int1;
 
2246
END|
 
2247
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2248
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2249
        
 
2250
# check trigger-5 success:      1
 
2251
DROP TRIGGER trg_1;
 
2252
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2253
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2254
f_charbig = 'just inserted'
 
2255
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2256
DELETE FROM t0_aux
 
2257
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2258
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2259
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2260
'just inserted' FROM t0_template
 
2261
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2262
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2263
BEGIN
 
2264
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2265
f_charbig = 'updated by trigger'
 
2266
      WHERE f_int1 = - old.f_int1;
 
2267
END|
 
2268
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2269
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2270
        
 
2271
# check trigger-6 success:      1
 
2272
DROP TRIGGER trg_1;
 
2273
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2274
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2275
f_charbig = 'just inserted'
 
2276
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2277
DELETE FROM t0_aux
 
2278
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2279
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2280
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2281
'just inserted' FROM t0_template
 
2282
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2283
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2284
BEGIN
 
2285
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2286
f_charbig = 'updated by trigger'
 
2287
      WHERE f_int1 = - old.f_int1;
 
2288
END|
 
2289
DELETE FROM t0_aux
 
2290
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2291
        
 
2292
# check trigger-7 success:      1
 
2293
DROP TRIGGER trg_1;
 
2294
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2295
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2296
f_charbig = 'just inserted'
 
2297
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2298
DELETE FROM t0_aux
 
2299
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2300
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2301
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2302
'just inserted' FROM t0_template
 
2303
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2304
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2305
BEGIN
 
2306
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2307
f_charbig = 'updated by trigger'
 
2308
      WHERE f_int1 = - old.f_int1;
 
2309
END|
 
2310
DELETE FROM t0_aux
 
2311
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2312
        
 
2313
# check trigger-8 success:      1
 
2314
DROP TRIGGER trg_1;
 
2315
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2316
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2317
f_charbig = 'just inserted'
 
2318
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2319
DELETE FROM t0_aux
 
2320
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2321
DELETE FROM t1
 
2322
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2323
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2324
BEGIN
 
2325
SET new.f_int1 = old.f_int1 + @max_row,
 
2326
new.f_int2 = old.f_int2 - @max_row,
 
2327
new.f_charbig = '####updated per update trigger####';
 
2328
END|
 
2329
UPDATE t1
 
2330
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2331
f_charbig = '####updated per update statement itself####';
 
2332
        
 
2333
# check trigger-9 success:      1
 
2334
DROP TRIGGER trg_2;
 
2335
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2336
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2337
f_charbig = CONCAT('===',f_char1,'===');
 
2338
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2339
BEGIN
 
2340
SET new.f_int1 = new.f_int1 + @max_row,
 
2341
new.f_int2 = new.f_int2 - @max_row,
 
2342
new.f_charbig = '####updated per update trigger####';
 
2343
END|
 
2344
UPDATE t1
 
2345
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2346
f_charbig = '####updated per update statement itself####';
 
2347
        
 
2348
# check trigger-10 success:     1
 
2349
DROP TRIGGER trg_2;
 
2350
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2351
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2352
f_charbig = CONCAT('===',f_char1,'===');
 
2353
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2354
BEGIN
 
2355
SET new.f_int1 = @my_max1 + @counter,
 
2356
new.f_int2 = @my_min2 - @counter,
 
2357
new.f_charbig = '####updated per insert trigger####';
 
2358
SET @counter = @counter + 1;
 
2359
END|
 
2360
SET @counter = 1;
 
2361
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2362
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2363
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2364
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2365
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2366
ORDER BY f_int1;
 
2367
DROP TRIGGER trg_3;
 
2368
        
 
2369
# check trigger-11 success:     1
 
2370
DELETE FROM t1
 
2371
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2372
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2373
AND f_charbig = '####updated per insert trigger####';
 
2374
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2375
BEGIN
 
2376
SET new.f_int1 = @my_max1 + @counter,
 
2377
new.f_int2 = @my_min2 - @counter,
 
2378
new.f_charbig = '####updated per insert trigger####';
 
2379
SET @counter = @counter + 1;
 
2380
END|
 
2381
SET @counter = 1;
 
2382
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2383
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2384
SELECT CAST(f_int1 AS CHAR),
 
2385
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2386
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2387
ORDER BY f_int1;
 
2388
DROP TRIGGER trg_3;
 
2389
        
 
2390
# check trigger-12 success:     1
 
2391
DELETE FROM t1
 
2392
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2393
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2394
AND f_charbig = '####updated per insert trigger####';
 
2395
ANALYZE  TABLE t1;
 
2396
Table   Op      Msg_type        Msg_text
 
2397
test.t1 analyze status  OK
 
2398
CHECK    TABLE t1 EXTENDED;
 
2399
Table   Op      Msg_type        Msg_text
 
2400
test.t1 check   status  OK
 
2401
CHECKSUM TABLE t1 EXTENDED;
 
2402
Table   Checksum
 
2403
test.t1 <some_value>
 
2404
OPTIMIZE TABLE t1;
 
2405
Table   Op      Msg_type        Msg_text
 
2406
test.t1 optimize        status  OK
 
2407
# check layout success:    1
 
2408
REPAIR   TABLE t1 EXTENDED;
 
2409
Table   Op      Msg_type        Msg_text
 
2410
test.t1 repair  status  OK
 
2411
# check layout success:    1
 
2412
TRUNCATE t1;
 
2413
        
 
2414
# check TRUNCATE success:       1
 
2415
# check layout success:    1
 
2416
# End usability test (inc/partition_check.inc)
 
2417
DROP TABLE t1;
 
2418
CREATE TABLE t1 (
 
2419
f_int1 INTEGER,
 
2420
f_int2 INTEGER,
 
2421
f_char1 CHAR(20),
 
2422
f_char2 CHAR(20),
 
2423
f_charbig VARCHAR(1000)
 
2424
 
 
2425
)
 
2426
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
2427
(PARTITION part_1 VALUES LESS THAN (0)
 
2428
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
2429
PARTITION part_2 VALUES LESS THAN (5)
 
2430
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
2431
PARTITION part_3 VALUES LESS THAN (10)
 
2432
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
2433
PARTITION part_4 VALUES LESS THAN (2147483646)
 
2434
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
2435
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2436
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2437
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
2438
ALTER TABLE t1 ANALYZE PARTITION part_1;
 
2439
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2440
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2441
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2442
# Start usability test (inc/partition_check.inc)
 
2443
create_command
 
2444
SHOW CREATE TABLE t1;
 
2445
Table   Create Table
 
2446
t1      CREATE TABLE `t1` (
 
2447
  `f_int1` int(11) DEFAULT NULL,
 
2448
  `f_int2` int(11) DEFAULT NULL,
 
2449
  `f_char1` char(20) DEFAULT NULL,
 
2450
  `f_char2` char(20) DEFAULT NULL,
 
2451
  `f_charbig` varchar(1000) DEFAULT NULL
 
2452
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
2453
 
 
2454
unified filelist
 
2455
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYD
 
2456
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYI
 
2457
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYD
 
2458
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYI
 
2459
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYD
 
2460
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYI
 
2461
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYD
 
2462
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYI
 
2463
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYD
 
2464
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYI
 
2465
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYD
 
2466
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYI
 
2467
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYD
 
2468
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYI
 
2469
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYD
 
2470
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYI
 
2471
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
2472
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
2473
 
 
2474
# check prerequisites-1 success:    1
 
2475
# check COUNT(*) success:    1
 
2476
# check MIN/MAX(f_int1) success:    1
 
2477
# check MIN/MAX(f_int2) success:    1
 
2478
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2479
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2480
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2481
WHERE f_int1 IN (2,3);
 
2482
# check prerequisites-3 success:    1
 
2483
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2484
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
2485
# check read via f_int1 success: 1
 
2486
# check read via f_int2 success: 1
 
2487
        
 
2488
# check multiple-1 success:     1
 
2489
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2490
        
 
2491
# check multiple-2 success:     1
 
2492
INSERT INTO t1 SELECT * FROM t0_template
 
2493
WHERE MOD(f_int1,3) = 0;
 
2494
        
 
2495
# check multiple-3 success:     1
 
2496
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2497
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2498
AND @max_row_div2 + @max_row_div4;
 
2499
        
 
2500
# check multiple-4 success:     1
 
2501
DELETE FROM t1
 
2502
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2503
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2504
        
 
2505
# check multiple-5 success:     1
 
2506
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2507
INSERT INTO t1
 
2508
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2509
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2510
f_charbig = '#SINGLE#';
 
2511
        
 
2512
# check single-1 success:       1
 
2513
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2514
INSERT INTO t1
 
2515
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2516
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2517
f_charbig = '#SINGLE#';
 
2518
        
 
2519
# check single-2 success:       1
 
2520
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2521
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2522
UPDATE t1 SET f_int1 = @cur_value2
 
2523
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2524
        
 
2525
# check single-3 success:       1
 
2526
SET @cur_value1= -1;
 
2527
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2528
UPDATE t1 SET f_int1 = @cur_value1
 
2529
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2530
        
 
2531
# check single-4 success:       1
 
2532
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2533
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2534
        
 
2535
# check single-5 success:       1
 
2536
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2537
        
 
2538
# check single-6 success:       1
 
2539
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2540
ERROR HY000: Table has no partition for value 2147483647
 
2541
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2542
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2543
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2544
f_charbig = '#NULL#';
 
2545
INSERT INTO t1
 
2546
SET f_int1 = NULL , f_int2 = -@max_row,
 
2547
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2548
f_charbig = '#NULL#';
 
2549
# check null success:    1
 
2550
        
 
2551
# check null-1 success:         1
 
2552
UPDATE t1 SET f_int1 = -@max_row
 
2553
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2554
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2555
        
 
2556
# check null-2 success:         1
 
2557
UPDATE t1 SET f_int1 = NULL
 
2558
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2559
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2560
        
 
2561
# check null-3 success:         1
 
2562
DELETE FROM t1
 
2563
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2564
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2565
        
 
2566
# check null-4 success:         1
 
2567
DELETE FROM t1
 
2568
WHERE f_int1 = 0 AND f_int2 = 0
 
2569
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2570
AND f_charbig = '#NULL#';
 
2571
SET AUTOCOMMIT= 0;
 
2572
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2573
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2574
FROM t0_template source_tab
 
2575
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2576
        
 
2577
# check transactions-1 success:         1
 
2578
COMMIT WORK;
 
2579
        
 
2580
# check transactions-2 success:         1
 
2581
ROLLBACK WORK;
 
2582
        
 
2583
# check transactions-3 success:         1
 
2584
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2585
COMMIT WORK;
 
2586
ROLLBACK WORK;
 
2587
        
 
2588
# check transactions-4 success:         1
 
2589
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2590
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2591
FROM t0_template source_tab
 
2592
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2593
        
 
2594
# check transactions-5 success:         1
 
2595
ROLLBACK WORK;
 
2596
Warnings:
 
2597
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
2598
        
 
2599
# check transactions-6 success:         1
 
2600
# INFO: Storage engine used for t1 seems to be not transactional.
 
2601
COMMIT;
 
2602
        
 
2603
# check transactions-7 success:         1
 
2604
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2605
COMMIT WORK;
 
2606
SET @@session.sql_mode = 'traditional';
 
2607
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2608
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2609
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2610
'', '', 'was inserted' FROM t0_template
 
2611
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2612
ERROR 22012: Division by 0
 
2613
COMMIT;
 
2614
        
 
2615
# check transactions-8 success:         1
 
2616
# INFO: Storage engine used for t1 seems to be unable to revert
 
2617
#       changes made by the failing statement.
 
2618
SET @@session.sql_mode = '';
 
2619
SET AUTOCOMMIT= 1;
 
2620
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2621
COMMIT WORK;
 
2622
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2623
        
 
2624
# check special-1 success:      1
 
2625
UPDATE t1 SET f_charbig = '';
 
2626
        
 
2627
# check special-2 success:      1
 
2628
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2629
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2630
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2631
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2632
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2633
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2634
'just inserted' FROM t0_template
 
2635
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2636
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2637
BEGIN
 
2638
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2639
f_charbig = 'updated by trigger'
 
2640
      WHERE f_int1 = new.f_int1;
 
2641
END|
 
2642
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2643
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2644
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2645
        
 
2646
# check trigger-1 success:      1
 
2647
DROP TRIGGER trg_1;
 
2648
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2649
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2650
f_charbig = 'just inserted'
 
2651
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2652
DELETE FROM t0_aux
 
2653
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2654
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2655
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2656
'just inserted' FROM t0_template
 
2657
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2658
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2659
BEGIN
 
2660
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2661
f_charbig = 'updated by trigger'
 
2662
      WHERE f_int1 = new.f_int1;
 
2663
END|
 
2664
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2665
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2666
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2667
        
 
2668
# check trigger-2 success:      1
 
2669
DROP TRIGGER trg_1;
 
2670
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2671
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2672
f_charbig = 'just inserted'
 
2673
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2674
DELETE FROM t0_aux
 
2675
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2676
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2677
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2678
'just inserted' FROM t0_template
 
2679
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2680
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2681
BEGIN
 
2682
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2683
f_charbig = 'updated by trigger'
 
2684
      WHERE f_int1 = new.f_int1;
 
2685
END|
 
2686
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2687
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2688
        
 
2689
# check trigger-3 success:      1
 
2690
DROP TRIGGER trg_1;
 
2691
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2692
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2693
f_charbig = 'just inserted'
 
2694
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2695
DELETE FROM t0_aux
 
2696
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2697
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2698
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2699
'just inserted' FROM t0_template
 
2700
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2701
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2702
BEGIN
 
2703
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2704
f_charbig = 'updated by trigger'
 
2705
      WHERE f_int1 = - old.f_int1;
 
2706
END|
 
2707
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2708
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2709
        
 
2710
# check trigger-4 success:      1
 
2711
DROP TRIGGER trg_1;
 
2712
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2713
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2714
f_charbig = 'just inserted'
 
2715
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2716
DELETE FROM t0_aux
 
2717
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2718
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2719
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2720
'just inserted' FROM t0_template
 
2721
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2722
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2723
BEGIN
 
2724
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2725
f_charbig = 'updated by trigger'
 
2726
      WHERE f_int1 = new.f_int1;
 
2727
END|
 
2728
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2729
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2730
        
 
2731
# check trigger-5 success:      1
 
2732
DROP TRIGGER trg_1;
 
2733
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2734
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2735
f_charbig = 'just inserted'
 
2736
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2737
DELETE FROM t0_aux
 
2738
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2739
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2740
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2741
'just inserted' FROM t0_template
 
2742
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2743
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2744
BEGIN
 
2745
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2746
f_charbig = 'updated by trigger'
 
2747
      WHERE f_int1 = - old.f_int1;
 
2748
END|
 
2749
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2750
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2751
        
 
2752
# check trigger-6 success:      1
 
2753
DROP TRIGGER trg_1;
 
2754
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2755
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2756
f_charbig = 'just inserted'
 
2757
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2758
DELETE FROM t0_aux
 
2759
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2760
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2761
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2762
'just inserted' FROM t0_template
 
2763
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2764
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2765
BEGIN
 
2766
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2767
f_charbig = 'updated by trigger'
 
2768
      WHERE f_int1 = - old.f_int1;
 
2769
END|
 
2770
DELETE FROM t0_aux
 
2771
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2772
        
 
2773
# check trigger-7 success:      1
 
2774
DROP TRIGGER trg_1;
 
2775
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2776
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2777
f_charbig = 'just inserted'
 
2778
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2779
DELETE FROM t0_aux
 
2780
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2781
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2782
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2783
'just inserted' FROM t0_template
 
2784
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2785
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2786
BEGIN
 
2787
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2788
f_charbig = 'updated by trigger'
 
2789
      WHERE f_int1 = - old.f_int1;
 
2790
END|
 
2791
DELETE FROM t0_aux
 
2792
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2793
        
 
2794
# check trigger-8 success:      1
 
2795
DROP TRIGGER trg_1;
 
2796
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2797
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2798
f_charbig = 'just inserted'
 
2799
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2800
DELETE FROM t0_aux
 
2801
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2802
DELETE FROM t1
 
2803
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2804
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2805
BEGIN
 
2806
SET new.f_int1 = old.f_int1 + @max_row,
 
2807
new.f_int2 = old.f_int2 - @max_row,
 
2808
new.f_charbig = '####updated per update trigger####';
 
2809
END|
 
2810
UPDATE t1
 
2811
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2812
f_charbig = '####updated per update statement itself####';
 
2813
        
 
2814
# check trigger-9 success:      1
 
2815
DROP TRIGGER trg_2;
 
2816
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2817
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2818
f_charbig = CONCAT('===',f_char1,'===');
 
2819
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2820
BEGIN
 
2821
SET new.f_int1 = new.f_int1 + @max_row,
 
2822
new.f_int2 = new.f_int2 - @max_row,
 
2823
new.f_charbig = '####updated per update trigger####';
 
2824
END|
 
2825
UPDATE t1
 
2826
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2827
f_charbig = '####updated per update statement itself####';
 
2828
        
 
2829
# check trigger-10 success:     1
 
2830
DROP TRIGGER trg_2;
 
2831
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2832
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2833
f_charbig = CONCAT('===',f_char1,'===');
 
2834
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2835
BEGIN
 
2836
SET new.f_int1 = @my_max1 + @counter,
 
2837
new.f_int2 = @my_min2 - @counter,
 
2838
new.f_charbig = '####updated per insert trigger####';
 
2839
SET @counter = @counter + 1;
 
2840
END|
 
2841
SET @counter = 1;
 
2842
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2843
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2844
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2845
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2846
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2847
ORDER BY f_int1;
 
2848
DROP TRIGGER trg_3;
 
2849
        
 
2850
# check trigger-11 success:     1
 
2851
DELETE FROM t1
 
2852
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2853
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2854
AND f_charbig = '####updated per insert trigger####';
 
2855
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2856
BEGIN
 
2857
SET new.f_int1 = @my_max1 + @counter,
 
2858
new.f_int2 = @my_min2 - @counter,
 
2859
new.f_charbig = '####updated per insert trigger####';
 
2860
SET @counter = @counter + 1;
 
2861
END|
 
2862
SET @counter = 1;
 
2863
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2864
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2865
SELECT CAST(f_int1 AS CHAR),
 
2866
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2867
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2868
ORDER BY f_int1;
 
2869
DROP TRIGGER trg_3;
 
2870
        
 
2871
# check trigger-12 success:     1
 
2872
DELETE FROM t1
 
2873
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2874
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2875
AND f_charbig = '####updated per insert trigger####';
 
2876
ANALYZE  TABLE t1;
 
2877
Table   Op      Msg_type        Msg_text
 
2878
test.t1 analyze status  OK
 
2879
CHECK    TABLE t1 EXTENDED;
 
2880
Table   Op      Msg_type        Msg_text
 
2881
test.t1 check   status  OK
 
2882
CHECKSUM TABLE t1 EXTENDED;
 
2883
Table   Checksum
 
2884
test.t1 <some_value>
 
2885
OPTIMIZE TABLE t1;
 
2886
Table   Op      Msg_type        Msg_text
 
2887
test.t1 optimize        status  OK
 
2888
# check layout success:    1
 
2889
REPAIR   TABLE t1 EXTENDED;
 
2890
Table   Op      Msg_type        Msg_text
 
2891
test.t1 repair  status  OK
 
2892
# check layout success:    1
 
2893
TRUNCATE t1;
 
2894
        
 
2895
# check TRUNCATE success:       1
 
2896
# check layout success:    1
 
2897
# End usability test (inc/partition_check.inc)
 
2898
DROP TABLE t1;
 
2899
CREATE TABLE t1 (
 
2900
f_int1 INTEGER,
 
2901
f_int2 INTEGER,
 
2902
f_char1 CHAR(20),
 
2903
f_char2 CHAR(20),
 
2904
f_charbig VARCHAR(1000)
 
2905
 
 
2906
)
 
2907
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
2908
(PARTITION part_1 VALUES IN (0)
 
2909
(SUBPARTITION sp11, SUBPARTITION sp12),
 
2910
PARTITION part_2 VALUES IN (1)
 
2911
(SUBPARTITION sp21, SUBPARTITION sp22),
 
2912
PARTITION part_3 VALUES IN (2)
 
2913
(SUBPARTITION sp31, SUBPARTITION sp32),
 
2914
PARTITION part_4 VALUES IN (NULL)
 
2915
(SUBPARTITION sp41, SUBPARTITION sp42));
 
2916
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2917
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2918
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
2919
ALTER TABLE t1 ANALYZE PARTITION part_1;
 
2920
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2921
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
2922
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
2923
# Start usability test (inc/partition_check.inc)
 
2924
create_command
 
2925
SHOW CREATE TABLE t1;
 
2926
Table   Create Table
 
2927
t1      CREATE TABLE `t1` (
 
2928
  `f_int1` int(11) DEFAULT NULL,
 
2929
  `f_int2` int(11) DEFAULT NULL,
 
2930
  `f_char1` char(20) DEFAULT NULL,
 
2931
  `f_char2` char(20) DEFAULT NULL,
 
2932
  `f_charbig` varchar(1000) DEFAULT NULL
 
2933
) ENGINE=MyISAM 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 = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
2934
 
 
2935
unified filelist
 
2936
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYD
 
2937
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYI
 
2938
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYD
 
2939
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYI
 
2940
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYD
 
2941
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYI
 
2942
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYD
 
2943
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYI
 
2944
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYD
 
2945
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYI
 
2946
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYD
 
2947
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYI
 
2948
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYD
 
2949
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYI
 
2950
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYD
 
2951
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYI
 
2952
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
2953
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
2954
 
 
2955
# check prerequisites-1 success:    1
 
2956
# check COUNT(*) success:    1
 
2957
# check MIN/MAX(f_int1) success:    1
 
2958
# check MIN/MAX(f_int2) success:    1
 
2959
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2960
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2961
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2962
WHERE f_int1 IN (2,3);
 
2963
# check prerequisites-3 success:    1
 
2964
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2965
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
2966
# check read via f_int1 success: 1
 
2967
# check read via f_int2 success: 1
 
2968
        
 
2969
# check multiple-1 success:     1
 
2970
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2971
        
 
2972
# check multiple-2 success:     1
 
2973
INSERT INTO t1 SELECT * FROM t0_template
 
2974
WHERE MOD(f_int1,3) = 0;
 
2975
        
 
2976
# check multiple-3 success:     1
 
2977
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2978
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2979
AND @max_row_div2 + @max_row_div4;
 
2980
        
 
2981
# check multiple-4 success:     1
 
2982
DELETE FROM t1
 
2983
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2984
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2985
        
 
2986
# check multiple-5 success:     1
 
2987
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2988
INSERT INTO t1
 
2989
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2990
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2991
f_charbig = '#SINGLE#';
 
2992
        
 
2993
# check single-1 success:       1
 
2994
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2995
INSERT INTO t1
 
2996
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2997
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2998
f_charbig = '#SINGLE#';
 
2999
        
 
3000
# check single-2 success:       1
 
3001
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3002
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3003
UPDATE t1 SET f_int1 = @cur_value2
 
3004
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3005
        
 
3006
# check single-3 success:       1
 
3007
SET @cur_value1= -1;
 
3008
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3009
UPDATE t1 SET f_int1 = @cur_value1
 
3010
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3011
        
 
3012
# check single-4 success:       1
 
3013
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3014
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3015
        
 
3016
# check single-5 success:       1
 
3017
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3018
        
 
3019
# check single-6 success:       1
 
3020
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3021
        
 
3022
# check single-7 success:       1
 
3023
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
3024
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3025
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3026
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3027
f_charbig = '#NULL#';
 
3028
INSERT INTO t1
 
3029
SET f_int1 = NULL , f_int2 = -@max_row,
 
3030
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3031
f_charbig = '#NULL#';
 
3032
# check null success:    1
 
3033
        
 
3034
# check null-1 success:         1
 
3035
UPDATE t1 SET f_int1 = -@max_row
 
3036
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3037
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3038
        
 
3039
# check null-2 success:         1
 
3040
UPDATE t1 SET f_int1 = NULL
 
3041
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3042
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3043
        
 
3044
# check null-3 success:         1
 
3045
DELETE FROM t1
 
3046
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3047
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3048
        
 
3049
# check null-4 success:         1
 
3050
DELETE FROM t1
 
3051
WHERE f_int1 = 0 AND f_int2 = 0
 
3052
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3053
AND f_charbig = '#NULL#';
 
3054
SET AUTOCOMMIT= 0;
 
3055
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3056
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3057
FROM t0_template source_tab
 
3058
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3059
        
 
3060
# check transactions-1 success:         1
 
3061
COMMIT WORK;
 
3062
        
 
3063
# check transactions-2 success:         1
 
3064
ROLLBACK WORK;
 
3065
        
 
3066
# check transactions-3 success:         1
 
3067
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3068
COMMIT WORK;
 
3069
ROLLBACK WORK;
 
3070
        
 
3071
# check transactions-4 success:         1
 
3072
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3073
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3074
FROM t0_template source_tab
 
3075
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3076
        
 
3077
# check transactions-5 success:         1
 
3078
ROLLBACK WORK;
 
3079
Warnings:
 
3080
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
3081
        
 
3082
# check transactions-6 success:         1
 
3083
# INFO: Storage engine used for t1 seems to be not transactional.
 
3084
COMMIT;
 
3085
        
 
3086
# check transactions-7 success:         1
 
3087
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3088
COMMIT WORK;
 
3089
SET @@session.sql_mode = 'traditional';
 
3090
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3091
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3092
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3093
'', '', 'was inserted' FROM t0_template
 
3094
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3095
ERROR 22012: Division by 0
 
3096
COMMIT;
 
3097
        
 
3098
# check transactions-8 success:         1
 
3099
# INFO: Storage engine used for t1 seems to be unable to revert
 
3100
#       changes made by the failing statement.
 
3101
SET @@session.sql_mode = '';
 
3102
SET AUTOCOMMIT= 1;
 
3103
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3104
COMMIT WORK;
 
3105
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3106
        
 
3107
# check special-1 success:      1
 
3108
UPDATE t1 SET f_charbig = '';
 
3109
        
 
3110
# check special-2 success:      1
 
3111
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3112
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3113
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3114
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3115
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3116
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3117
'just inserted' FROM t0_template
 
3118
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3119
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3120
BEGIN
 
3121
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3122
f_charbig = 'updated by trigger'
 
3123
      WHERE f_int1 = new.f_int1;
 
3124
END|
 
3125
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3126
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3127
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3128
        
 
3129
# check trigger-1 success:      1
 
3130
DROP TRIGGER trg_1;
 
3131
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3132
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3133
f_charbig = 'just inserted'
 
3134
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3135
DELETE FROM t0_aux
 
3136
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3137
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3138
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3139
'just inserted' FROM t0_template
 
3140
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3141
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3142
BEGIN
 
3143
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3144
f_charbig = 'updated by trigger'
 
3145
      WHERE f_int1 = new.f_int1;
 
3146
END|
 
3147
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3148
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3149
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3150
        
 
3151
# check trigger-2 success:      1
 
3152
DROP TRIGGER trg_1;
 
3153
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3154
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3155
f_charbig = 'just inserted'
 
3156
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3157
DELETE FROM t0_aux
 
3158
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3159
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3160
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3161
'just inserted' FROM t0_template
 
3162
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3163
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3164
BEGIN
 
3165
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3166
f_charbig = 'updated by trigger'
 
3167
      WHERE f_int1 = new.f_int1;
 
3168
END|
 
3169
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3170
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3171
        
 
3172
# check trigger-3 success:      1
 
3173
DROP TRIGGER trg_1;
 
3174
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3175
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3176
f_charbig = 'just inserted'
 
3177
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3178
DELETE FROM t0_aux
 
3179
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3180
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3181
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3182
'just inserted' FROM t0_template
 
3183
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3184
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3185
BEGIN
 
3186
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3187
f_charbig = 'updated by trigger'
 
3188
      WHERE f_int1 = - old.f_int1;
 
3189
END|
 
3190
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3191
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3192
        
 
3193
# check trigger-4 success:      1
 
3194
DROP TRIGGER trg_1;
 
3195
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3196
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3197
f_charbig = 'just inserted'
 
3198
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3199
DELETE FROM t0_aux
 
3200
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3201
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3202
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3203
'just inserted' FROM t0_template
 
3204
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3205
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3206
BEGIN
 
3207
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3208
f_charbig = 'updated by trigger'
 
3209
      WHERE f_int1 = new.f_int1;
 
3210
END|
 
3211
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3212
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3213
        
 
3214
# check trigger-5 success:      1
 
3215
DROP TRIGGER trg_1;
 
3216
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3217
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3218
f_charbig = 'just inserted'
 
3219
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3220
DELETE FROM t0_aux
 
3221
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3222
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3223
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3224
'just inserted' FROM t0_template
 
3225
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3226
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3227
BEGIN
 
3228
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3229
f_charbig = 'updated by trigger'
 
3230
      WHERE f_int1 = - old.f_int1;
 
3231
END|
 
3232
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3233
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3234
        
 
3235
# check trigger-6 success:      1
 
3236
DROP TRIGGER trg_1;
 
3237
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3238
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3239
f_charbig = 'just inserted'
 
3240
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3241
DELETE FROM t0_aux
 
3242
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3243
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3244
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3245
'just inserted' FROM t0_template
 
3246
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3247
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3248
BEGIN
 
3249
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3250
f_charbig = 'updated by trigger'
 
3251
      WHERE f_int1 = - old.f_int1;
 
3252
END|
 
3253
DELETE FROM t0_aux
 
3254
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3255
        
 
3256
# check trigger-7 success:      1
 
3257
DROP TRIGGER trg_1;
 
3258
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3259
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3260
f_charbig = 'just inserted'
 
3261
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3262
DELETE FROM t0_aux
 
3263
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3264
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3265
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3266
'just inserted' FROM t0_template
 
3267
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3268
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3269
BEGIN
 
3270
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3271
f_charbig = 'updated by trigger'
 
3272
      WHERE f_int1 = - old.f_int1;
 
3273
END|
 
3274
DELETE FROM t0_aux
 
3275
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3276
        
 
3277
# check trigger-8 success:      1
 
3278
DROP TRIGGER trg_1;
 
3279
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3280
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3281
f_charbig = 'just inserted'
 
3282
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3283
DELETE FROM t0_aux
 
3284
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3285
DELETE FROM t1
 
3286
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3287
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3288
BEGIN
 
3289
SET new.f_int1 = old.f_int1 + @max_row,
 
3290
new.f_int2 = old.f_int2 - @max_row,
 
3291
new.f_charbig = '####updated per update trigger####';
 
3292
END|
 
3293
UPDATE t1
 
3294
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3295
f_charbig = '####updated per update statement itself####';
 
3296
        
 
3297
# check trigger-9 success:      1
 
3298
DROP TRIGGER trg_2;
 
3299
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3300
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3301
f_charbig = CONCAT('===',f_char1,'===');
 
3302
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3303
BEGIN
 
3304
SET new.f_int1 = new.f_int1 + @max_row,
 
3305
new.f_int2 = new.f_int2 - @max_row,
 
3306
new.f_charbig = '####updated per update trigger####';
 
3307
END|
 
3308
UPDATE t1
 
3309
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3310
f_charbig = '####updated per update statement itself####';
 
3311
        
 
3312
# check trigger-10 success:     1
 
3313
DROP TRIGGER trg_2;
 
3314
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3315
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3316
f_charbig = CONCAT('===',f_char1,'===');
 
3317
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3318
BEGIN
 
3319
SET new.f_int1 = @my_max1 + @counter,
 
3320
new.f_int2 = @my_min2 - @counter,
 
3321
new.f_charbig = '####updated per insert trigger####';
 
3322
SET @counter = @counter + 1;
 
3323
END|
 
3324
SET @counter = 1;
 
3325
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3326
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3327
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3328
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3329
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3330
ORDER BY f_int1;
 
3331
DROP TRIGGER trg_3;
 
3332
        
 
3333
# check trigger-11 success:     1
 
3334
DELETE FROM t1
 
3335
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3336
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3337
AND f_charbig = '####updated per insert trigger####';
 
3338
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3339
BEGIN
 
3340
SET new.f_int1 = @my_max1 + @counter,
 
3341
new.f_int2 = @my_min2 - @counter,
 
3342
new.f_charbig = '####updated per insert trigger####';
 
3343
SET @counter = @counter + 1;
 
3344
END|
 
3345
SET @counter = 1;
 
3346
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3347
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3348
SELECT CAST(f_int1 AS CHAR),
 
3349
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3350
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3351
ORDER BY f_int1;
 
3352
DROP TRIGGER trg_3;
 
3353
        
 
3354
# check trigger-12 success:     1
 
3355
DELETE FROM t1
 
3356
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3357
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3358
AND f_charbig = '####updated per insert trigger####';
 
3359
ANALYZE  TABLE t1;
 
3360
Table   Op      Msg_type        Msg_text
 
3361
test.t1 analyze status  OK
 
3362
CHECK    TABLE t1 EXTENDED;
 
3363
Table   Op      Msg_type        Msg_text
 
3364
test.t1 check   status  OK
 
3365
CHECKSUM TABLE t1 EXTENDED;
 
3366
Table   Checksum
 
3367
test.t1 <some_value>
 
3368
OPTIMIZE TABLE t1;
 
3369
Table   Op      Msg_type        Msg_text
 
3370
test.t1 optimize        status  OK
 
3371
# check layout success:    1
 
3372
REPAIR   TABLE t1 EXTENDED;
 
3373
Table   Op      Msg_type        Msg_text
 
3374
test.t1 repair  status  OK
 
3375
# check layout success:    1
 
3376
TRUNCATE t1;
 
3377
        
 
3378
# check TRUNCATE success:       1
 
3379
# check layout success:    1
 
3380
# End usability test (inc/partition_check.inc)
 
3381
DROP TABLE t1;
 
3382
CREATE TABLE t1 (
 
3383
f_int1 INTEGER,
 
3384
f_int2 INTEGER,
 
3385
f_char1 CHAR(20),
 
3386
f_char2 CHAR(20),
 
3387
f_charbig VARCHAR(1000)
 
3388
 
 
3389
)
 
3390
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
3391
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
3392
(PARTITION part_1 VALUES IN (0),
 
3393
 PARTITION part_2 VALUES IN (1),
 
3394
 PARTITION part_3 VALUES IN (NULL));
 
3395
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3396
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3397
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
3398
ALTER TABLE t1 ANALYZE PARTITION part_1;
 
3399
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3400
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3401
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3402
# Start usability test (inc/partition_check.inc)
 
3403
create_command
 
3404
SHOW CREATE TABLE t1;
 
3405
Table   Create Table
 
3406
t1      CREATE TABLE `t1` (
 
3407
  `f_int1` int(11) DEFAULT NULL,
 
3408
  `f_int2` int(11) DEFAULT NULL,
 
3409
  `f_char1` char(20) DEFAULT NULL,
 
3410
  `f_char2` char(20) DEFAULT NULL,
 
3411
  `f_charbig` varchar(1000) DEFAULT NULL
 
3412
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */
 
3413
 
 
3414
unified filelist
 
3415
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
3416
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
3417
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
3418
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
3419
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYD
 
3420
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYI
 
3421
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
3422
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
3423
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
3424
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
3425
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYD
 
3426
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYI
 
3427
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
3428
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
3429
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
3430
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
3431
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYD
 
3432
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYI
 
3433
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
3434
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
3435
 
 
3436
# check prerequisites-1 success:    1
 
3437
# check COUNT(*) success:    1
 
3438
# check MIN/MAX(f_int1) success:    1
 
3439
# check MIN/MAX(f_int2) success:    1
 
3440
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3441
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3442
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3443
WHERE f_int1 IN (2,3);
 
3444
# check prerequisites-3 success:    1
 
3445
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3446
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
3447
# check read via f_int1 success: 1
 
3448
# check read via f_int2 success: 1
 
3449
        
 
3450
# check multiple-1 success:     1
 
3451
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3452
        
 
3453
# check multiple-2 success:     1
 
3454
INSERT INTO t1 SELECT * FROM t0_template
 
3455
WHERE MOD(f_int1,3) = 0;
 
3456
        
 
3457
# check multiple-3 success:     1
 
3458
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3459
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3460
AND @max_row_div2 + @max_row_div4;
 
3461
        
 
3462
# check multiple-4 success:     1
 
3463
DELETE FROM t1
 
3464
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3465
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3466
        
 
3467
# check multiple-5 success:     1
 
3468
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3469
INSERT INTO t1
 
3470
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3471
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3472
f_charbig = '#SINGLE#';
 
3473
        
 
3474
# check single-1 success:       1
 
3475
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3476
INSERT INTO t1
 
3477
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3478
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3479
f_charbig = '#SINGLE#';
 
3480
        
 
3481
# check single-2 success:       1
 
3482
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3483
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3484
UPDATE t1 SET f_int1 = @cur_value2
 
3485
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3486
        
 
3487
# check single-3 success:       1
 
3488
SET @cur_value1= -1;
 
3489
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3490
UPDATE t1 SET f_int1 = @cur_value1
 
3491
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3492
        
 
3493
# check single-4 success:       1
 
3494
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3495
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3496
        
 
3497
# check single-5 success:       1
 
3498
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3499
        
 
3500
# check single-6 success:       1
 
3501
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3502
        
 
3503
# check single-7 success:       1
 
3504
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
3505
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3506
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3507
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3508
f_charbig = '#NULL#';
 
3509
INSERT INTO t1
 
3510
SET f_int1 = NULL , f_int2 = -@max_row,
 
3511
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3512
f_charbig = '#NULL#';
 
3513
# check null success:    1
 
3514
        
 
3515
# check null-1 success:         1
 
3516
UPDATE t1 SET f_int1 = -@max_row
 
3517
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3518
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3519
        
 
3520
# check null-2 success:         1
 
3521
UPDATE t1 SET f_int1 = NULL
 
3522
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3523
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3524
        
 
3525
# check null-3 success:         1
 
3526
DELETE FROM t1
 
3527
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3528
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3529
        
 
3530
# check null-4 success:         1
 
3531
DELETE FROM t1
 
3532
WHERE f_int1 = 0 AND f_int2 = 0
 
3533
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3534
AND f_charbig = '#NULL#';
 
3535
SET AUTOCOMMIT= 0;
 
3536
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3537
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3538
FROM t0_template source_tab
 
3539
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3540
        
 
3541
# check transactions-1 success:         1
 
3542
COMMIT WORK;
 
3543
        
 
3544
# check transactions-2 success:         1
 
3545
ROLLBACK WORK;
 
3546
        
 
3547
# check transactions-3 success:         1
 
3548
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3549
COMMIT WORK;
 
3550
ROLLBACK WORK;
 
3551
        
 
3552
# check transactions-4 success:         1
 
3553
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3554
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3555
FROM t0_template source_tab
 
3556
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3557
        
 
3558
# check transactions-5 success:         1
 
3559
ROLLBACK WORK;
 
3560
Warnings:
 
3561
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
3562
        
 
3563
# check transactions-6 success:         1
 
3564
# INFO: Storage engine used for t1 seems to be not transactional.
 
3565
COMMIT;
 
3566
        
 
3567
# check transactions-7 success:         1
 
3568
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3569
COMMIT WORK;
 
3570
SET @@session.sql_mode = 'traditional';
 
3571
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3572
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3573
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3574
'', '', 'was inserted' FROM t0_template
 
3575
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3576
ERROR 22012: Division by 0
 
3577
COMMIT;
 
3578
        
 
3579
# check transactions-8 success:         1
 
3580
# INFO: Storage engine used for t1 seems to be unable to revert
 
3581
#       changes made by the failing statement.
 
3582
SET @@session.sql_mode = '';
 
3583
SET AUTOCOMMIT= 1;
 
3584
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3585
COMMIT WORK;
 
3586
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3587
        
 
3588
# check special-1 success:      1
 
3589
UPDATE t1 SET f_charbig = '';
 
3590
        
 
3591
# check special-2 success:      1
 
3592
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3593
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3594
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3595
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3596
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3597
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3598
'just inserted' FROM t0_template
 
3599
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3600
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3601
BEGIN
 
3602
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3603
f_charbig = 'updated by trigger'
 
3604
      WHERE f_int1 = new.f_int1;
 
3605
END|
 
3606
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3607
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3608
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3609
        
 
3610
# check trigger-1 success:      1
 
3611
DROP TRIGGER trg_1;
 
3612
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3613
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3614
f_charbig = 'just inserted'
 
3615
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3616
DELETE FROM t0_aux
 
3617
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3618
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3619
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3620
'just inserted' FROM t0_template
 
3621
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3622
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3623
BEGIN
 
3624
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3625
f_charbig = 'updated by trigger'
 
3626
      WHERE f_int1 = new.f_int1;
 
3627
END|
 
3628
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3629
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3630
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3631
        
 
3632
# check trigger-2 success:      1
 
3633
DROP TRIGGER trg_1;
 
3634
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3635
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3636
f_charbig = 'just inserted'
 
3637
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3638
DELETE FROM t0_aux
 
3639
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3640
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3641
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3642
'just inserted' FROM t0_template
 
3643
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3644
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3645
BEGIN
 
3646
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3647
f_charbig = 'updated by trigger'
 
3648
      WHERE f_int1 = new.f_int1;
 
3649
END|
 
3650
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3651
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3652
        
 
3653
# check trigger-3 success:      1
 
3654
DROP TRIGGER trg_1;
 
3655
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3656
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3657
f_charbig = 'just inserted'
 
3658
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3659
DELETE FROM t0_aux
 
3660
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3661
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3662
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3663
'just inserted' FROM t0_template
 
3664
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3665
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3666
BEGIN
 
3667
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3668
f_charbig = 'updated by trigger'
 
3669
      WHERE f_int1 = - old.f_int1;
 
3670
END|
 
3671
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3672
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3673
        
 
3674
# check trigger-4 success:      1
 
3675
DROP TRIGGER trg_1;
 
3676
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3677
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3678
f_charbig = 'just inserted'
 
3679
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3680
DELETE FROM t0_aux
 
3681
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3682
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3683
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3684
'just inserted' FROM t0_template
 
3685
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3686
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3687
BEGIN
 
3688
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3689
f_charbig = 'updated by trigger'
 
3690
      WHERE f_int1 = new.f_int1;
 
3691
END|
 
3692
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3693
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3694
        
 
3695
# check trigger-5 success:      1
 
3696
DROP TRIGGER trg_1;
 
3697
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3698
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3699
f_charbig = 'just inserted'
 
3700
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3701
DELETE FROM t0_aux
 
3702
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3703
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3704
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3705
'just inserted' FROM t0_template
 
3706
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3707
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3708
BEGIN
 
3709
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3710
f_charbig = 'updated by trigger'
 
3711
      WHERE f_int1 = - old.f_int1;
 
3712
END|
 
3713
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3714
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3715
        
 
3716
# check trigger-6 success:      1
 
3717
DROP TRIGGER trg_1;
 
3718
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3719
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3720
f_charbig = 'just inserted'
 
3721
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3722
DELETE FROM t0_aux
 
3723
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3724
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3725
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3726
'just inserted' FROM t0_template
 
3727
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3728
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3729
BEGIN
 
3730
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3731
f_charbig = 'updated by trigger'
 
3732
      WHERE f_int1 = - old.f_int1;
 
3733
END|
 
3734
DELETE FROM t0_aux
 
3735
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3736
        
 
3737
# check trigger-7 success:      1
 
3738
DROP TRIGGER trg_1;
 
3739
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3740
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3741
f_charbig = 'just inserted'
 
3742
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3743
DELETE FROM t0_aux
 
3744
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3745
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3746
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3747
'just inserted' FROM t0_template
 
3748
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3749
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3750
BEGIN
 
3751
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3752
f_charbig = 'updated by trigger'
 
3753
      WHERE f_int1 = - old.f_int1;
 
3754
END|
 
3755
DELETE FROM t0_aux
 
3756
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3757
        
 
3758
# check trigger-8 success:      1
 
3759
DROP TRIGGER trg_1;
 
3760
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3761
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3762
f_charbig = 'just inserted'
 
3763
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3764
DELETE FROM t0_aux
 
3765
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3766
DELETE FROM t1
 
3767
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3768
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3769
BEGIN
 
3770
SET new.f_int1 = old.f_int1 + @max_row,
 
3771
new.f_int2 = old.f_int2 - @max_row,
 
3772
new.f_charbig = '####updated per update trigger####';
 
3773
END|
 
3774
UPDATE t1
 
3775
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3776
f_charbig = '####updated per update statement itself####';
 
3777
        
 
3778
# check trigger-9 success:      1
 
3779
DROP TRIGGER trg_2;
 
3780
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3781
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3782
f_charbig = CONCAT('===',f_char1,'===');
 
3783
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3784
BEGIN
 
3785
SET new.f_int1 = new.f_int1 + @max_row,
 
3786
new.f_int2 = new.f_int2 - @max_row,
 
3787
new.f_charbig = '####updated per update trigger####';
 
3788
END|
 
3789
UPDATE t1
 
3790
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3791
f_charbig = '####updated per update statement itself####';
 
3792
        
 
3793
# check trigger-10 success:     1
 
3794
DROP TRIGGER trg_2;
 
3795
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3796
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3797
f_charbig = CONCAT('===',f_char1,'===');
 
3798
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3799
BEGIN
 
3800
SET new.f_int1 = @my_max1 + @counter,
 
3801
new.f_int2 = @my_min2 - @counter,
 
3802
new.f_charbig = '####updated per insert trigger####';
 
3803
SET @counter = @counter + 1;
 
3804
END|
 
3805
SET @counter = 1;
 
3806
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3807
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3808
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3809
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3810
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3811
ORDER BY f_int1;
 
3812
DROP TRIGGER trg_3;
 
3813
        
 
3814
# check trigger-11 success:     1
 
3815
DELETE FROM t1
 
3816
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3817
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3818
AND f_charbig = '####updated per insert trigger####';
 
3819
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3820
BEGIN
 
3821
SET new.f_int1 = @my_max1 + @counter,
 
3822
new.f_int2 = @my_min2 - @counter,
 
3823
new.f_charbig = '####updated per insert trigger####';
 
3824
SET @counter = @counter + 1;
 
3825
END|
 
3826
SET @counter = 1;
 
3827
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3828
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3829
SELECT CAST(f_int1 AS CHAR),
 
3830
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3831
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3832
ORDER BY f_int1;
 
3833
DROP TRIGGER trg_3;
 
3834
        
 
3835
# check trigger-12 success:     1
 
3836
DELETE FROM t1
 
3837
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3838
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3839
AND f_charbig = '####updated per insert trigger####';
 
3840
ANALYZE  TABLE t1;
 
3841
Table   Op      Msg_type        Msg_text
 
3842
test.t1 analyze status  OK
 
3843
CHECK    TABLE t1 EXTENDED;
 
3844
Table   Op      Msg_type        Msg_text
 
3845
test.t1 check   status  OK
 
3846
CHECKSUM TABLE t1 EXTENDED;
 
3847
Table   Checksum
 
3848
test.t1 <some_value>
 
3849
OPTIMIZE TABLE t1;
 
3850
Table   Op      Msg_type        Msg_text
 
3851
test.t1 optimize        status  OK
 
3852
# check layout success:    1
 
3853
REPAIR   TABLE t1 EXTENDED;
 
3854
Table   Op      Msg_type        Msg_text
 
3855
test.t1 repair  status  OK
 
3856
# check layout success:    1
 
3857
TRUNCATE t1;
 
3858
        
 
3859
# check TRUNCATE success:       1
 
3860
# check layout success:    1
 
3861
# End usability test (inc/partition_check.inc)
 
3862
DROP TABLE t1;
 
3863
#  1.2 ALTER ... ANALYZE PARTITION part_1,part_2;
 
3864
DROP TABLE IF EXISTS t1;
 
3865
CREATE TABLE t1 (
 
3866
f_int1 INTEGER,
 
3867
f_int2 INTEGER,
 
3868
f_char1 CHAR(20),
 
3869
f_char2 CHAR(20),
 
3870
f_charbig VARCHAR(1000)
 
3871
 
 
3872
)
 
3873
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
3874
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3875
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3876
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
3877
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
 
3878
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3879
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
3880
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
3881
# Start usability test (inc/partition_check.inc)
 
3882
create_command
 
3883
SHOW CREATE TABLE t1;
 
3884
Table   Create Table
 
3885
t1      CREATE TABLE `t1` (
 
3886
  `f_int1` int(11) DEFAULT NULL,
 
3887
  `f_int2` int(11) DEFAULT NULL,
 
3888
  `f_char1` char(20) DEFAULT NULL,
 
3889
  `f_char2` char(20) DEFAULT NULL,
 
3890
  `f_charbig` varchar(1000) DEFAULT NULL
 
3891
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */
 
3892
 
 
3893
unified filelist
 
3894
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
3895
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
3896
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
3897
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
3898
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
3899
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
3900
 
 
3901
# check prerequisites-1 success:    1
 
3902
# check COUNT(*) success:    1
 
3903
# check MIN/MAX(f_int1) success:    1
 
3904
# check MIN/MAX(f_int2) success:    1
 
3905
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3906
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3907
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3908
WHERE f_int1 IN (2,3);
 
3909
# check prerequisites-3 success:    1
 
3910
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3911
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
3912
# check read via f_int1 success: 1
 
3913
# check read via f_int2 success: 1
 
3914
        
 
3915
# check multiple-1 success:     1
 
3916
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3917
        
 
3918
# check multiple-2 success:     1
 
3919
INSERT INTO t1 SELECT * FROM t0_template
 
3920
WHERE MOD(f_int1,3) = 0;
 
3921
        
 
3922
# check multiple-3 success:     1
 
3923
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3924
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3925
AND @max_row_div2 + @max_row_div4;
 
3926
        
 
3927
# check multiple-4 success:     1
 
3928
DELETE FROM t1
 
3929
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3930
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3931
        
 
3932
# check multiple-5 success:     1
 
3933
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3934
INSERT INTO t1
 
3935
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3936
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3937
f_charbig = '#SINGLE#';
 
3938
        
 
3939
# check single-1 success:       1
 
3940
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3941
INSERT INTO t1
 
3942
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3943
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3944
f_charbig = '#SINGLE#';
 
3945
        
 
3946
# check single-2 success:       1
 
3947
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3948
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3949
UPDATE t1 SET f_int1 = @cur_value2
 
3950
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3951
        
 
3952
# check single-3 success:       1
 
3953
SET @cur_value1= -1;
 
3954
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3955
UPDATE t1 SET f_int1 = @cur_value1
 
3956
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3957
        
 
3958
# check single-4 success:       1
 
3959
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3960
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3961
        
 
3962
# check single-5 success:       1
 
3963
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3964
        
 
3965
# check single-6 success:       1
 
3966
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3967
        
 
3968
# check single-7 success:       1
 
3969
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
3970
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3971
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3972
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3973
f_charbig = '#NULL#';
 
3974
INSERT INTO t1
 
3975
SET f_int1 = NULL , f_int2 = -@max_row,
 
3976
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3977
f_charbig = '#NULL#';
 
3978
# check null success:    1
 
3979
        
 
3980
# check null-1 success:         1
 
3981
UPDATE t1 SET f_int1 = -@max_row
 
3982
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3983
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3984
        
 
3985
# check null-2 success:         1
 
3986
UPDATE t1 SET f_int1 = NULL
 
3987
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3988
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3989
        
 
3990
# check null-3 success:         1
 
3991
DELETE FROM t1
 
3992
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3993
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3994
        
 
3995
# check null-4 success:         1
 
3996
DELETE FROM t1
 
3997
WHERE f_int1 = 0 AND f_int2 = 0
 
3998
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3999
AND f_charbig = '#NULL#';
 
4000
SET AUTOCOMMIT= 0;
 
4001
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4002
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4003
FROM t0_template source_tab
 
4004
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4005
        
 
4006
# check transactions-1 success:         1
 
4007
COMMIT WORK;
 
4008
        
 
4009
# check transactions-2 success:         1
 
4010
ROLLBACK WORK;
 
4011
        
 
4012
# check transactions-3 success:         1
 
4013
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4014
COMMIT WORK;
 
4015
ROLLBACK WORK;
 
4016
        
 
4017
# check transactions-4 success:         1
 
4018
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4019
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4020
FROM t0_template source_tab
 
4021
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4022
        
 
4023
# check transactions-5 success:         1
 
4024
ROLLBACK WORK;
 
4025
Warnings:
 
4026
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
4027
        
 
4028
# check transactions-6 success:         1
 
4029
# INFO: Storage engine used for t1 seems to be not transactional.
 
4030
COMMIT;
 
4031
        
 
4032
# check transactions-7 success:         1
 
4033
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4034
COMMIT WORK;
 
4035
SET @@session.sql_mode = 'traditional';
 
4036
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4037
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4038
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4039
'', '', 'was inserted' FROM t0_template
 
4040
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4041
ERROR 22012: Division by 0
 
4042
COMMIT;
 
4043
        
 
4044
# check transactions-8 success:         1
 
4045
# INFO: Storage engine used for t1 seems to be unable to revert
 
4046
#       changes made by the failing statement.
 
4047
SET @@session.sql_mode = '';
 
4048
SET AUTOCOMMIT= 1;
 
4049
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4050
COMMIT WORK;
 
4051
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4052
        
 
4053
# check special-1 success:      1
 
4054
UPDATE t1 SET f_charbig = '';
 
4055
        
 
4056
# check special-2 success:      1
 
4057
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4058
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4059
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4060
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4061
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4062
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4063
'just inserted' FROM t0_template
 
4064
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4065
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4066
BEGIN
 
4067
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4068
f_charbig = 'updated by trigger'
 
4069
      WHERE f_int1 = new.f_int1;
 
4070
END|
 
4071
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4072
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4074
        
 
4075
# check trigger-1 success:      1
 
4076
DROP TRIGGER trg_1;
 
4077
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4078
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4079
f_charbig = 'just inserted'
 
4080
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4081
DELETE FROM t0_aux
 
4082
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4083
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4084
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4085
'just inserted' FROM t0_template
 
4086
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4087
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4088
BEGIN
 
4089
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4090
f_charbig = 'updated by trigger'
 
4091
      WHERE f_int1 = new.f_int1;
 
4092
END|
 
4093
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4094
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4095
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4096
        
 
4097
# check trigger-2 success:      1
 
4098
DROP TRIGGER trg_1;
 
4099
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4100
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4101
f_charbig = 'just inserted'
 
4102
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4103
DELETE FROM t0_aux
 
4104
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4105
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4106
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4107
'just inserted' FROM t0_template
 
4108
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4109
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4110
BEGIN
 
4111
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4112
f_charbig = 'updated by trigger'
 
4113
      WHERE f_int1 = new.f_int1;
 
4114
END|
 
4115
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4116
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4117
        
 
4118
# check trigger-3 success:      1
 
4119
DROP TRIGGER trg_1;
 
4120
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4121
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4122
f_charbig = 'just inserted'
 
4123
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4124
DELETE FROM t0_aux
 
4125
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4126
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4127
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4128
'just inserted' FROM t0_template
 
4129
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4130
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4131
BEGIN
 
4132
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4133
f_charbig = 'updated by trigger'
 
4134
      WHERE f_int1 = - old.f_int1;
 
4135
END|
 
4136
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4137
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4138
        
 
4139
# check trigger-4 success:      1
 
4140
DROP TRIGGER trg_1;
 
4141
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4142
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4143
f_charbig = 'just inserted'
 
4144
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4145
DELETE FROM t0_aux
 
4146
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4147
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4148
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4149
'just inserted' FROM t0_template
 
4150
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4151
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4152
BEGIN
 
4153
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4154
f_charbig = 'updated by trigger'
 
4155
      WHERE f_int1 = new.f_int1;
 
4156
END|
 
4157
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4158
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4159
        
 
4160
# check trigger-5 success:      1
 
4161
DROP TRIGGER trg_1;
 
4162
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4163
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4164
f_charbig = 'just inserted'
 
4165
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4166
DELETE FROM t0_aux
 
4167
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4168
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4169
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4170
'just inserted' FROM t0_template
 
4171
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4172
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4173
BEGIN
 
4174
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4175
f_charbig = 'updated by trigger'
 
4176
      WHERE f_int1 = - old.f_int1;
 
4177
END|
 
4178
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4179
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4180
        
 
4181
# check trigger-6 success:      1
 
4182
DROP TRIGGER trg_1;
 
4183
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4184
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4185
f_charbig = 'just inserted'
 
4186
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4187
DELETE FROM t0_aux
 
4188
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4189
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4190
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4191
'just inserted' FROM t0_template
 
4192
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4193
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4194
BEGIN
 
4195
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4196
f_charbig = 'updated by trigger'
 
4197
      WHERE f_int1 = - old.f_int1;
 
4198
END|
 
4199
DELETE FROM t0_aux
 
4200
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4201
        
 
4202
# check trigger-7 success:      1
 
4203
DROP TRIGGER trg_1;
 
4204
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4205
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4206
f_charbig = 'just inserted'
 
4207
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4208
DELETE FROM t0_aux
 
4209
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4210
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4211
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4212
'just inserted' FROM t0_template
 
4213
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4214
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4215
BEGIN
 
4216
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4217
f_charbig = 'updated by trigger'
 
4218
      WHERE f_int1 = - old.f_int1;
 
4219
END|
 
4220
DELETE FROM t0_aux
 
4221
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4222
        
 
4223
# check trigger-8 success:      1
 
4224
DROP TRIGGER trg_1;
 
4225
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4226
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4227
f_charbig = 'just inserted'
 
4228
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4229
DELETE FROM t0_aux
 
4230
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4231
DELETE FROM t1
 
4232
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4233
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4234
BEGIN
 
4235
SET new.f_int1 = old.f_int1 + @max_row,
 
4236
new.f_int2 = old.f_int2 - @max_row,
 
4237
new.f_charbig = '####updated per update trigger####';
 
4238
END|
 
4239
UPDATE t1
 
4240
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4241
f_charbig = '####updated per update statement itself####';
 
4242
        
 
4243
# check trigger-9 success:      1
 
4244
DROP TRIGGER trg_2;
 
4245
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4246
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4247
f_charbig = CONCAT('===',f_char1,'===');
 
4248
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4249
BEGIN
 
4250
SET new.f_int1 = new.f_int1 + @max_row,
 
4251
new.f_int2 = new.f_int2 - @max_row,
 
4252
new.f_charbig = '####updated per update trigger####';
 
4253
END|
 
4254
UPDATE t1
 
4255
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4256
f_charbig = '####updated per update statement itself####';
 
4257
        
 
4258
# check trigger-10 success:     1
 
4259
DROP TRIGGER trg_2;
 
4260
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4261
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4262
f_charbig = CONCAT('===',f_char1,'===');
 
4263
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4264
BEGIN
 
4265
SET new.f_int1 = @my_max1 + @counter,
 
4266
new.f_int2 = @my_min2 - @counter,
 
4267
new.f_charbig = '####updated per insert trigger####';
 
4268
SET @counter = @counter + 1;
 
4269
END|
 
4270
SET @counter = 1;
 
4271
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4272
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4273
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4274
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4275
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4276
ORDER BY f_int1;
 
4277
DROP TRIGGER trg_3;
 
4278
        
 
4279
# check trigger-11 success:     1
 
4280
DELETE FROM t1
 
4281
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4282
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4283
AND f_charbig = '####updated per insert trigger####';
 
4284
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4285
BEGIN
 
4286
SET new.f_int1 = @my_max1 + @counter,
 
4287
new.f_int2 = @my_min2 - @counter,
 
4288
new.f_charbig = '####updated per insert trigger####';
 
4289
SET @counter = @counter + 1;
 
4290
END|
 
4291
SET @counter = 1;
 
4292
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4293
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4294
SELECT CAST(f_int1 AS CHAR),
 
4295
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4296
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4297
ORDER BY f_int1;
 
4298
DROP TRIGGER trg_3;
 
4299
        
 
4300
# check trigger-12 success:     1
 
4301
DELETE FROM t1
 
4302
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4303
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4304
AND f_charbig = '####updated per insert trigger####';
 
4305
ANALYZE  TABLE t1;
 
4306
Table   Op      Msg_type        Msg_text
 
4307
test.t1 analyze status  OK
 
4308
CHECK    TABLE t1 EXTENDED;
 
4309
Table   Op      Msg_type        Msg_text
 
4310
test.t1 check   status  OK
 
4311
CHECKSUM TABLE t1 EXTENDED;
 
4312
Table   Checksum
 
4313
test.t1 <some_value>
 
4314
OPTIMIZE TABLE t1;
 
4315
Table   Op      Msg_type        Msg_text
 
4316
test.t1 optimize        status  OK
 
4317
# check layout success:    1
 
4318
REPAIR   TABLE t1 EXTENDED;
 
4319
Table   Op      Msg_type        Msg_text
 
4320
test.t1 repair  status  OK
 
4321
# check layout success:    1
 
4322
TRUNCATE t1;
 
4323
        
 
4324
# check TRUNCATE success:       1
 
4325
# check layout success:    1
 
4326
# End usability test (inc/partition_check.inc)
 
4327
DROP TABLE t1;
 
4328
CREATE TABLE t1 (
 
4329
f_int1 INTEGER,
 
4330
f_int2 INTEGER,
 
4331
f_char1 CHAR(20),
 
4332
f_char2 CHAR(20),
 
4333
f_charbig VARCHAR(1000)
 
4334
 
 
4335
)
 
4336
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
4337
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4338
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4339
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
4340
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
 
4341
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4342
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4343
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4344
# Start usability test (inc/partition_check.inc)
 
4345
create_command
 
4346
SHOW CREATE TABLE t1;
 
4347
Table   Create Table
 
4348
t1      CREATE TABLE `t1` (
 
4349
  `f_int1` int(11) DEFAULT NULL,
 
4350
  `f_int2` int(11) DEFAULT NULL,
 
4351
  `f_char1` char(20) DEFAULT NULL,
 
4352
  `f_char2` char(20) DEFAULT NULL,
 
4353
  `f_charbig` varchar(1000) DEFAULT NULL
 
4354
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */
 
4355
 
 
4356
unified filelist
 
4357
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
4358
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
4359
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
4360
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
4361
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
4362
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
4363
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
4364
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
4365
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
4366
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
4367
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
4368
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
4369
 
 
4370
# check prerequisites-1 success:    1
 
4371
# check COUNT(*) success:    1
 
4372
# check MIN/MAX(f_int1) success:    1
 
4373
# check MIN/MAX(f_int2) success:    1
 
4374
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4375
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4376
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
4377
WHERE f_int1 IN (2,3);
 
4378
# check prerequisites-3 success:    1
 
4379
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4380
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
4381
# check read via f_int1 success: 1
 
4382
# check read via f_int2 success: 1
 
4383
        
 
4384
# check multiple-1 success:     1
 
4385
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
4386
        
 
4387
# check multiple-2 success:     1
 
4388
INSERT INTO t1 SELECT * FROM t0_template
 
4389
WHERE MOD(f_int1,3) = 0;
 
4390
        
 
4391
# check multiple-3 success:     1
 
4392
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
4393
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
4394
AND @max_row_div2 + @max_row_div4;
 
4395
        
 
4396
# check multiple-4 success:     1
 
4397
DELETE FROM t1
 
4398
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4399
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4400
        
 
4401
# check multiple-5 success:     1
 
4402
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4403
INSERT INTO t1
 
4404
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4405
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4406
f_charbig = '#SINGLE#';
 
4407
        
 
4408
# check single-1 success:       1
 
4409
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4410
INSERT INTO t1
 
4411
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4412
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4413
f_charbig = '#SINGLE#';
 
4414
        
 
4415
# check single-2 success:       1
 
4416
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4417
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4418
UPDATE t1 SET f_int1 = @cur_value2
 
4419
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4420
        
 
4421
# check single-3 success:       1
 
4422
SET @cur_value1= -1;
 
4423
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4424
UPDATE t1 SET f_int1 = @cur_value1
 
4425
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4426
        
 
4427
# check single-4 success:       1
 
4428
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4429
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4430
        
 
4431
# check single-5 success:       1
 
4432
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4433
        
 
4434
# check single-6 success:       1
 
4435
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4436
        
 
4437
# check single-7 success:       1
 
4438
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4439
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4440
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4441
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4442
f_charbig = '#NULL#';
 
4443
INSERT INTO t1
 
4444
SET f_int1 = NULL , f_int2 = -@max_row,
 
4445
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4446
f_charbig = '#NULL#';
 
4447
# check null success:    1
 
4448
        
 
4449
# check null-1 success:         1
 
4450
UPDATE t1 SET f_int1 = -@max_row
 
4451
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4452
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4453
        
 
4454
# check null-2 success:         1
 
4455
UPDATE t1 SET f_int1 = NULL
 
4456
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4457
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4458
        
 
4459
# check null-3 success:         1
 
4460
DELETE FROM t1
 
4461
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4462
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4463
        
 
4464
# check null-4 success:         1
 
4465
DELETE FROM t1
 
4466
WHERE f_int1 = 0 AND f_int2 = 0
 
4467
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4468
AND f_charbig = '#NULL#';
 
4469
SET AUTOCOMMIT= 0;
 
4470
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4471
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4472
FROM t0_template source_tab
 
4473
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4474
        
 
4475
# check transactions-1 success:         1
 
4476
COMMIT WORK;
 
4477
        
 
4478
# check transactions-2 success:         1
 
4479
ROLLBACK WORK;
 
4480
        
 
4481
# check transactions-3 success:         1
 
4482
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4483
COMMIT WORK;
 
4484
ROLLBACK WORK;
 
4485
        
 
4486
# check transactions-4 success:         1
 
4487
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4488
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4489
FROM t0_template source_tab
 
4490
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4491
        
 
4492
# check transactions-5 success:         1
 
4493
ROLLBACK WORK;
 
4494
Warnings:
 
4495
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
4496
        
 
4497
# check transactions-6 success:         1
 
4498
# INFO: Storage engine used for t1 seems to be not transactional.
 
4499
COMMIT;
 
4500
        
 
4501
# check transactions-7 success:         1
 
4502
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4503
COMMIT WORK;
 
4504
SET @@session.sql_mode = 'traditional';
 
4505
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4506
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4507
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4508
'', '', 'was inserted' FROM t0_template
 
4509
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4510
ERROR 22012: Division by 0
 
4511
COMMIT;
 
4512
        
 
4513
# check transactions-8 success:         1
 
4514
# INFO: Storage engine used for t1 seems to be unable to revert
 
4515
#       changes made by the failing statement.
 
4516
SET @@session.sql_mode = '';
 
4517
SET AUTOCOMMIT= 1;
 
4518
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4519
COMMIT WORK;
 
4520
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4521
        
 
4522
# check special-1 success:      1
 
4523
UPDATE t1 SET f_charbig = '';
 
4524
        
 
4525
# check special-2 success:      1
 
4526
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4527
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4528
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4529
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4530
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4531
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4532
'just inserted' FROM t0_template
 
4533
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4534
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4535
BEGIN
 
4536
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4537
f_charbig = 'updated by trigger'
 
4538
      WHERE f_int1 = new.f_int1;
 
4539
END|
 
4540
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4541
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4542
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4543
        
 
4544
# check trigger-1 success:      1
 
4545
DROP TRIGGER trg_1;
 
4546
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4547
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4548
f_charbig = 'just inserted'
 
4549
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4550
DELETE FROM t0_aux
 
4551
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4552
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4553
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4554
'just inserted' FROM t0_template
 
4555
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4556
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4557
BEGIN
 
4558
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4559
f_charbig = 'updated by trigger'
 
4560
      WHERE f_int1 = new.f_int1;
 
4561
END|
 
4562
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4563
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4564
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4565
        
 
4566
# check trigger-2 success:      1
 
4567
DROP TRIGGER trg_1;
 
4568
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4569
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4570
f_charbig = 'just inserted'
 
4571
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4572
DELETE FROM t0_aux
 
4573
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4574
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4575
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4576
'just inserted' FROM t0_template
 
4577
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4578
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4579
BEGIN
 
4580
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4581
f_charbig = 'updated by trigger'
 
4582
      WHERE f_int1 = new.f_int1;
 
4583
END|
 
4584
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4585
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4586
        
 
4587
# check trigger-3 success:      1
 
4588
DROP TRIGGER trg_1;
 
4589
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4590
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4591
f_charbig = 'just inserted'
 
4592
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4593
DELETE FROM t0_aux
 
4594
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4595
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4596
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4597
'just inserted' FROM t0_template
 
4598
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4599
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4600
BEGIN
 
4601
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4602
f_charbig = 'updated by trigger'
 
4603
      WHERE f_int1 = - old.f_int1;
 
4604
END|
 
4605
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4606
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4607
        
 
4608
# check trigger-4 success:      1
 
4609
DROP TRIGGER trg_1;
 
4610
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4611
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4612
f_charbig = 'just inserted'
 
4613
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4614
DELETE FROM t0_aux
 
4615
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4616
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4617
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4618
'just inserted' FROM t0_template
 
4619
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4620
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4621
BEGIN
 
4622
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4623
f_charbig = 'updated by trigger'
 
4624
      WHERE f_int1 = new.f_int1;
 
4625
END|
 
4626
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4627
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4628
        
 
4629
# check trigger-5 success:      1
 
4630
DROP TRIGGER trg_1;
 
4631
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4632
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4633
f_charbig = 'just inserted'
 
4634
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4635
DELETE FROM t0_aux
 
4636
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4637
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4638
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4639
'just inserted' FROM t0_template
 
4640
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4641
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4642
BEGIN
 
4643
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4644
f_charbig = 'updated by trigger'
 
4645
      WHERE f_int1 = - old.f_int1;
 
4646
END|
 
4647
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4648
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4649
        
 
4650
# check trigger-6 success:      1
 
4651
DROP TRIGGER trg_1;
 
4652
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4653
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4654
f_charbig = 'just inserted'
 
4655
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4656
DELETE FROM t0_aux
 
4657
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4658
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4659
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4660
'just inserted' FROM t0_template
 
4661
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4662
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4663
BEGIN
 
4664
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4665
f_charbig = 'updated by trigger'
 
4666
      WHERE f_int1 = - old.f_int1;
 
4667
END|
 
4668
DELETE FROM t0_aux
 
4669
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4670
        
 
4671
# check trigger-7 success:      1
 
4672
DROP TRIGGER trg_1;
 
4673
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4674
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4675
f_charbig = 'just inserted'
 
4676
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4677
DELETE FROM t0_aux
 
4678
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4679
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4680
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4681
'just inserted' FROM t0_template
 
4682
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4683
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4684
BEGIN
 
4685
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4686
f_charbig = 'updated by trigger'
 
4687
      WHERE f_int1 = - old.f_int1;
 
4688
END|
 
4689
DELETE FROM t0_aux
 
4690
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4691
        
 
4692
# check trigger-8 success:      1
 
4693
DROP TRIGGER trg_1;
 
4694
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4695
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4696
f_charbig = 'just inserted'
 
4697
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4698
DELETE FROM t0_aux
 
4699
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4700
DELETE FROM t1
 
4701
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4702
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4703
BEGIN
 
4704
SET new.f_int1 = old.f_int1 + @max_row,
 
4705
new.f_int2 = old.f_int2 - @max_row,
 
4706
new.f_charbig = '####updated per update trigger####';
 
4707
END|
 
4708
UPDATE t1
 
4709
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4710
f_charbig = '####updated per update statement itself####';
 
4711
        
 
4712
# check trigger-9 success:      1
 
4713
DROP TRIGGER trg_2;
 
4714
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4715
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4716
f_charbig = CONCAT('===',f_char1,'===');
 
4717
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4718
BEGIN
 
4719
SET new.f_int1 = new.f_int1 + @max_row,
 
4720
new.f_int2 = new.f_int2 - @max_row,
 
4721
new.f_charbig = '####updated per update trigger####';
 
4722
END|
 
4723
UPDATE t1
 
4724
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4725
f_charbig = '####updated per update statement itself####';
 
4726
        
 
4727
# check trigger-10 success:     1
 
4728
DROP TRIGGER trg_2;
 
4729
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4730
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4731
f_charbig = CONCAT('===',f_char1,'===');
 
4732
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4733
BEGIN
 
4734
SET new.f_int1 = @my_max1 + @counter,
 
4735
new.f_int2 = @my_min2 - @counter,
 
4736
new.f_charbig = '####updated per insert trigger####';
 
4737
SET @counter = @counter + 1;
 
4738
END|
 
4739
SET @counter = 1;
 
4740
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4741
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4742
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4743
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4744
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4745
ORDER BY f_int1;
 
4746
DROP TRIGGER trg_3;
 
4747
        
 
4748
# check trigger-11 success:     1
 
4749
DELETE FROM t1
 
4750
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4751
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4752
AND f_charbig = '####updated per insert trigger####';
 
4753
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4754
BEGIN
 
4755
SET new.f_int1 = @my_max1 + @counter,
 
4756
new.f_int2 = @my_min2 - @counter,
 
4757
new.f_charbig = '####updated per insert trigger####';
 
4758
SET @counter = @counter + 1;
 
4759
END|
 
4760
SET @counter = 1;
 
4761
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4762
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4763
SELECT CAST(f_int1 AS CHAR),
 
4764
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4765
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4766
ORDER BY f_int1;
 
4767
DROP TRIGGER trg_3;
 
4768
        
 
4769
# check trigger-12 success:     1
 
4770
DELETE FROM t1
 
4771
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4772
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4773
AND f_charbig = '####updated per insert trigger####';
 
4774
ANALYZE  TABLE t1;
 
4775
Table   Op      Msg_type        Msg_text
 
4776
test.t1 analyze status  OK
 
4777
CHECK    TABLE t1 EXTENDED;
 
4778
Table   Op      Msg_type        Msg_text
 
4779
test.t1 check   status  OK
 
4780
CHECKSUM TABLE t1 EXTENDED;
 
4781
Table   Checksum
 
4782
test.t1 <some_value>
 
4783
OPTIMIZE TABLE t1;
 
4784
Table   Op      Msg_type        Msg_text
 
4785
test.t1 optimize        status  OK
 
4786
# check layout success:    1
 
4787
REPAIR   TABLE t1 EXTENDED;
 
4788
Table   Op      Msg_type        Msg_text
 
4789
test.t1 repair  status  OK
 
4790
# check layout success:    1
 
4791
TRUNCATE t1;
 
4792
        
 
4793
# check TRUNCATE success:       1
 
4794
# check layout success:    1
 
4795
# End usability test (inc/partition_check.inc)
 
4796
DROP TABLE t1;
 
4797
CREATE TABLE t1 (
 
4798
f_int1 INTEGER,
 
4799
f_int2 INTEGER,
 
4800
f_char1 CHAR(20),
 
4801
f_char2 CHAR(20),
 
4802
f_charbig VARCHAR(1000)
 
4803
 
 
4804
)
 
4805
PARTITION BY LIST(MOD(f_int1,4))
 
4806
(PARTITION part_3 VALUES IN (-3),
 
4807
PARTITION part_2 VALUES IN (-2),
 
4808
PARTITION part_1 VALUES IN (-1),
 
4809
PARTITION part_N VALUES IN (NULL),
 
4810
PARTITION part0 VALUES IN (0),
 
4811
PARTITION part1 VALUES IN (1),
 
4812
PARTITION part2 VALUES IN (2),
 
4813
PARTITION part3 VALUES IN (3));
 
4814
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4815
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4816
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
4817
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
 
4818
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4819
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
4820
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
4821
# Start usability test (inc/partition_check.inc)
 
4822
create_command
 
4823
SHOW CREATE TABLE t1;
 
4824
Table   Create Table
 
4825
t1      CREATE TABLE `t1` (
 
4826
  `f_int1` int(11) DEFAULT NULL,
 
4827
  `f_int2` int(11) DEFAULT NULL,
 
4828
  `f_char1` char(20) DEFAULT NULL,
 
4829
  `f_char2` char(20) DEFAULT NULL,
 
4830
  `f_charbig` varchar(1000) DEFAULT NULL
 
4831
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
4832
 
 
4833
unified filelist
 
4834
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
4835
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
4836
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
4837
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
4838
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
4839
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
4840
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
4841
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
4842
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
4843
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
4844
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
4845
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
4846
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
4847
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
4848
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
4849
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
4850
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
4851
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
4852
 
 
4853
# check prerequisites-1 success:    1
 
4854
# check COUNT(*) success:    1
 
4855
# check MIN/MAX(f_int1) success:    1
 
4856
# check MIN/MAX(f_int2) success:    1
 
4857
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4858
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4859
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
4860
WHERE f_int1 IN (2,3);
 
4861
# check prerequisites-3 success:    1
 
4862
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4863
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
4864
# check read via f_int1 success: 1
 
4865
# check read via f_int2 success: 1
 
4866
        
 
4867
# check multiple-1 success:     1
 
4868
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
4869
        
 
4870
# check multiple-2 success:     1
 
4871
INSERT INTO t1 SELECT * FROM t0_template
 
4872
WHERE MOD(f_int1,3) = 0;
 
4873
        
 
4874
# check multiple-3 success:     1
 
4875
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
4876
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
4877
AND @max_row_div2 + @max_row_div4;
 
4878
        
 
4879
# check multiple-4 success:     1
 
4880
DELETE FROM t1
 
4881
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4882
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4883
        
 
4884
# check multiple-5 success:     1
 
4885
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4886
INSERT INTO t1
 
4887
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4888
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4889
f_charbig = '#SINGLE#';
 
4890
        
 
4891
# check single-1 success:       1
 
4892
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4893
INSERT INTO t1
 
4894
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4895
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4896
f_charbig = '#SINGLE#';
 
4897
        
 
4898
# check single-2 success:       1
 
4899
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4900
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4901
UPDATE t1 SET f_int1 = @cur_value2
 
4902
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4903
        
 
4904
# check single-3 success:       1
 
4905
SET @cur_value1= -1;
 
4906
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4907
UPDATE t1 SET f_int1 = @cur_value1
 
4908
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4909
        
 
4910
# check single-4 success:       1
 
4911
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4912
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4913
        
 
4914
# check single-5 success:       1
 
4915
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4916
        
 
4917
# check single-6 success:       1
 
4918
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4919
        
 
4920
# check single-7 success:       1
 
4921
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4922
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4923
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4924
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4925
f_charbig = '#NULL#';
 
4926
INSERT INTO t1
 
4927
SET f_int1 = NULL , f_int2 = -@max_row,
 
4928
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4929
f_charbig = '#NULL#';
 
4930
# check null success:    1
 
4931
        
 
4932
# check null-1 success:         1
 
4933
UPDATE t1 SET f_int1 = -@max_row
 
4934
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4935
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4936
        
 
4937
# check null-2 success:         1
 
4938
UPDATE t1 SET f_int1 = NULL
 
4939
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4940
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4941
        
 
4942
# check null-3 success:         1
 
4943
DELETE FROM t1
 
4944
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4945
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4946
        
 
4947
# check null-4 success:         1
 
4948
DELETE FROM t1
 
4949
WHERE f_int1 = 0 AND f_int2 = 0
 
4950
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4951
AND f_charbig = '#NULL#';
 
4952
SET AUTOCOMMIT= 0;
 
4953
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4954
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4955
FROM t0_template source_tab
 
4956
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4957
        
 
4958
# check transactions-1 success:         1
 
4959
COMMIT WORK;
 
4960
        
 
4961
# check transactions-2 success:         1
 
4962
ROLLBACK WORK;
 
4963
        
 
4964
# check transactions-3 success:         1
 
4965
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4966
COMMIT WORK;
 
4967
ROLLBACK WORK;
 
4968
        
 
4969
# check transactions-4 success:         1
 
4970
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4971
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4972
FROM t0_template source_tab
 
4973
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4974
        
 
4975
# check transactions-5 success:         1
 
4976
ROLLBACK WORK;
 
4977
Warnings:
 
4978
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
4979
        
 
4980
# check transactions-6 success:         1
 
4981
# INFO: Storage engine used for t1 seems to be not transactional.
 
4982
COMMIT;
 
4983
        
 
4984
# check transactions-7 success:         1
 
4985
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4986
COMMIT WORK;
 
4987
SET @@session.sql_mode = 'traditional';
 
4988
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4989
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4990
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4991
'', '', 'was inserted' FROM t0_template
 
4992
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4993
ERROR 22012: Division by 0
 
4994
COMMIT;
 
4995
        
 
4996
# check transactions-8 success:         1
 
4997
# INFO: Storage engine used for t1 seems to be unable to revert
 
4998
#       changes made by the failing statement.
 
4999
SET @@session.sql_mode = '';
 
5000
SET AUTOCOMMIT= 1;
 
5001
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5002
COMMIT WORK;
 
5003
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5004
        
 
5005
# check special-1 success:      1
 
5006
UPDATE t1 SET f_charbig = '';
 
5007
        
 
5008
# check special-2 success:      1
 
5009
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5010
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5011
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5012
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5013
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5014
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5015
'just inserted' FROM t0_template
 
5016
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5017
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5018
BEGIN
 
5019
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5020
f_charbig = 'updated by trigger'
 
5021
      WHERE f_int1 = new.f_int1;
 
5022
END|
 
5023
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5024
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5025
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5026
        
 
5027
# check trigger-1 success:      1
 
5028
DROP TRIGGER trg_1;
 
5029
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5030
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5031
f_charbig = 'just inserted'
 
5032
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5033
DELETE FROM t0_aux
 
5034
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5035
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5036
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5037
'just inserted' FROM t0_template
 
5038
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5039
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5040
BEGIN
 
5041
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5042
f_charbig = 'updated by trigger'
 
5043
      WHERE f_int1 = new.f_int1;
 
5044
END|
 
5045
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5046
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5047
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5048
        
 
5049
# check trigger-2 success:      1
 
5050
DROP TRIGGER trg_1;
 
5051
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5052
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5053
f_charbig = 'just inserted'
 
5054
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5055
DELETE FROM t0_aux
 
5056
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5057
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5058
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5059
'just inserted' FROM t0_template
 
5060
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5061
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5062
BEGIN
 
5063
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5064
f_charbig = 'updated by trigger'
 
5065
      WHERE f_int1 = new.f_int1;
 
5066
END|
 
5067
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5068
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5069
        
 
5070
# check trigger-3 success:      1
 
5071
DROP TRIGGER trg_1;
 
5072
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5073
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5074
f_charbig = 'just inserted'
 
5075
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5076
DELETE FROM t0_aux
 
5077
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5078
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5079
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5080
'just inserted' FROM t0_template
 
5081
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5082
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5083
BEGIN
 
5084
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5085
f_charbig = 'updated by trigger'
 
5086
      WHERE f_int1 = - old.f_int1;
 
5087
END|
 
5088
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5089
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5090
        
 
5091
# check trigger-4 success:      1
 
5092
DROP TRIGGER trg_1;
 
5093
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5094
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5095
f_charbig = 'just inserted'
 
5096
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5097
DELETE FROM t0_aux
 
5098
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5099
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5100
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5101
'just inserted' FROM t0_template
 
5102
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5103
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5104
BEGIN
 
5105
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5106
f_charbig = 'updated by trigger'
 
5107
      WHERE f_int1 = new.f_int1;
 
5108
END|
 
5109
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5110
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5111
        
 
5112
# check trigger-5 success:      1
 
5113
DROP TRIGGER trg_1;
 
5114
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5115
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5116
f_charbig = 'just inserted'
 
5117
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5118
DELETE FROM t0_aux
 
5119
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5120
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5121
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5122
'just inserted' FROM t0_template
 
5123
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5124
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5125
BEGIN
 
5126
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5127
f_charbig = 'updated by trigger'
 
5128
      WHERE f_int1 = - old.f_int1;
 
5129
END|
 
5130
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5131
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5132
        
 
5133
# check trigger-6 success:      1
 
5134
DROP TRIGGER trg_1;
 
5135
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5136
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5137
f_charbig = 'just inserted'
 
5138
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5139
DELETE FROM t0_aux
 
5140
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5141
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5142
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5143
'just inserted' FROM t0_template
 
5144
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5145
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5146
BEGIN
 
5147
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5148
f_charbig = 'updated by trigger'
 
5149
      WHERE f_int1 = - old.f_int1;
 
5150
END|
 
5151
DELETE FROM t0_aux
 
5152
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5153
        
 
5154
# check trigger-7 success:      1
 
5155
DROP TRIGGER trg_1;
 
5156
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5157
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5158
f_charbig = 'just inserted'
 
5159
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5160
DELETE FROM t0_aux
 
5161
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5162
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5163
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5164
'just inserted' FROM t0_template
 
5165
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5166
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5167
BEGIN
 
5168
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5169
f_charbig = 'updated by trigger'
 
5170
      WHERE f_int1 = - old.f_int1;
 
5171
END|
 
5172
DELETE FROM t0_aux
 
5173
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5174
        
 
5175
# check trigger-8 success:      1
 
5176
DROP TRIGGER trg_1;
 
5177
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5178
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5179
f_charbig = 'just inserted'
 
5180
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5181
DELETE FROM t0_aux
 
5182
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5183
DELETE FROM t1
 
5184
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5185
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5186
BEGIN
 
5187
SET new.f_int1 = old.f_int1 + @max_row,
 
5188
new.f_int2 = old.f_int2 - @max_row,
 
5189
new.f_charbig = '####updated per update trigger####';
 
5190
END|
 
5191
UPDATE t1
 
5192
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5193
f_charbig = '####updated per update statement itself####';
 
5194
        
 
5195
# check trigger-9 success:      1
 
5196
DROP TRIGGER trg_2;
 
5197
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5198
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5199
f_charbig = CONCAT('===',f_char1,'===');
 
5200
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5201
BEGIN
 
5202
SET new.f_int1 = new.f_int1 + @max_row,
 
5203
new.f_int2 = new.f_int2 - @max_row,
 
5204
new.f_charbig = '####updated per update trigger####';
 
5205
END|
 
5206
UPDATE t1
 
5207
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5208
f_charbig = '####updated per update statement itself####';
 
5209
        
 
5210
# check trigger-10 success:     1
 
5211
DROP TRIGGER trg_2;
 
5212
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5213
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5214
f_charbig = CONCAT('===',f_char1,'===');
 
5215
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5216
BEGIN
 
5217
SET new.f_int1 = @my_max1 + @counter,
 
5218
new.f_int2 = @my_min2 - @counter,
 
5219
new.f_charbig = '####updated per insert trigger####';
 
5220
SET @counter = @counter + 1;
 
5221
END|
 
5222
SET @counter = 1;
 
5223
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5224
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5225
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5226
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5227
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5228
ORDER BY f_int1;
 
5229
DROP TRIGGER trg_3;
 
5230
        
 
5231
# check trigger-11 success:     1
 
5232
DELETE FROM t1
 
5233
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5234
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5235
AND f_charbig = '####updated per insert trigger####';
 
5236
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5237
BEGIN
 
5238
SET new.f_int1 = @my_max1 + @counter,
 
5239
new.f_int2 = @my_min2 - @counter,
 
5240
new.f_charbig = '####updated per insert trigger####';
 
5241
SET @counter = @counter + 1;
 
5242
END|
 
5243
SET @counter = 1;
 
5244
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5245
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5246
SELECT CAST(f_int1 AS CHAR),
 
5247
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5248
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5249
ORDER BY f_int1;
 
5250
DROP TRIGGER trg_3;
 
5251
        
 
5252
# check trigger-12 success:     1
 
5253
DELETE FROM t1
 
5254
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5255
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5256
AND f_charbig = '####updated per insert trigger####';
 
5257
ANALYZE  TABLE t1;
 
5258
Table   Op      Msg_type        Msg_text
 
5259
test.t1 analyze status  OK
 
5260
CHECK    TABLE t1 EXTENDED;
 
5261
Table   Op      Msg_type        Msg_text
 
5262
test.t1 check   status  OK
 
5263
CHECKSUM TABLE t1 EXTENDED;
 
5264
Table   Checksum
 
5265
test.t1 <some_value>
 
5266
OPTIMIZE TABLE t1;
 
5267
Table   Op      Msg_type        Msg_text
 
5268
test.t1 optimize        status  OK
 
5269
# check layout success:    1
 
5270
REPAIR   TABLE t1 EXTENDED;
 
5271
Table   Op      Msg_type        Msg_text
 
5272
test.t1 repair  status  OK
 
5273
# check layout success:    1
 
5274
TRUNCATE t1;
 
5275
        
 
5276
# check TRUNCATE success:       1
 
5277
# check layout success:    1
 
5278
# End usability test (inc/partition_check.inc)
 
5279
DROP TABLE t1;
 
5280
CREATE TABLE t1 (
 
5281
f_int1 INTEGER,
 
5282
f_int2 INTEGER,
 
5283
f_char1 CHAR(20),
 
5284
f_char2 CHAR(20),
 
5285
f_charbig VARCHAR(1000)
 
5286
 
 
5287
)
 
5288
PARTITION BY RANGE(f_int1)
 
5289
(PARTITION parta VALUES LESS THAN (0),
 
5290
PARTITION part_1 VALUES LESS THAN (5),
 
5291
PARTITION part_2 VALUES LESS THAN (10),
 
5292
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
5293
PARTITION part_4 VALUES LESS THAN (20),
 
5294
PARTITION part_5 VALUES LESS THAN (2147483646));
 
5295
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5296
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5297
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
5298
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
 
5299
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5300
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5301
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5302
# Start usability test (inc/partition_check.inc)
 
5303
create_command
 
5304
SHOW CREATE TABLE t1;
 
5305
Table   Create Table
 
5306
t1      CREATE TABLE `t1` (
 
5307
  `f_int1` int(11) DEFAULT NULL,
 
5308
  `f_int2` int(11) DEFAULT NULL,
 
5309
  `f_char1` char(20) DEFAULT NULL,
 
5310
  `f_char2` char(20) DEFAULT NULL,
 
5311
  `f_charbig` varchar(1000) DEFAULT NULL
 
5312
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
5313
 
 
5314
unified filelist
 
5315
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
5316
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
5317
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
5318
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
5319
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
5320
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
5321
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
5322
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
5323
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
5324
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
5325
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
5326
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
5327
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
5328
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
5329
 
 
5330
# check prerequisites-1 success:    1
 
5331
# check COUNT(*) success:    1
 
5332
# check MIN/MAX(f_int1) success:    1
 
5333
# check MIN/MAX(f_int2) success:    1
 
5334
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5335
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5336
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5337
WHERE f_int1 IN (2,3);
 
5338
# check prerequisites-3 success:    1
 
5339
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5340
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
5341
# check read via f_int1 success: 1
 
5342
# check read via f_int2 success: 1
 
5343
        
 
5344
# check multiple-1 success:     1
 
5345
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5346
        
 
5347
# check multiple-2 success:     1
 
5348
INSERT INTO t1 SELECT * FROM t0_template
 
5349
WHERE MOD(f_int1,3) = 0;
 
5350
        
 
5351
# check multiple-3 success:     1
 
5352
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5353
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5354
AND @max_row_div2 + @max_row_div4;
 
5355
        
 
5356
# check multiple-4 success:     1
 
5357
DELETE FROM t1
 
5358
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5359
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5360
        
 
5361
# check multiple-5 success:     1
 
5362
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5363
INSERT INTO t1
 
5364
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5365
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5366
f_charbig = '#SINGLE#';
 
5367
        
 
5368
# check single-1 success:       1
 
5369
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5370
INSERT INTO t1
 
5371
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5372
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5373
f_charbig = '#SINGLE#';
 
5374
        
 
5375
# check single-2 success:       1
 
5376
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5377
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5378
UPDATE t1 SET f_int1 = @cur_value2
 
5379
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5380
        
 
5381
# check single-3 success:       1
 
5382
SET @cur_value1= -1;
 
5383
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5384
UPDATE t1 SET f_int1 = @cur_value1
 
5385
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5386
        
 
5387
# check single-4 success:       1
 
5388
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5389
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5390
        
 
5391
# check single-5 success:       1
 
5392
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5393
        
 
5394
# check single-6 success:       1
 
5395
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5396
ERROR HY000: Table has no partition for value 2147483647
 
5397
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5398
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5399
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5400
f_charbig = '#NULL#';
 
5401
INSERT INTO t1
 
5402
SET f_int1 = NULL , f_int2 = -@max_row,
 
5403
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5404
f_charbig = '#NULL#';
 
5405
# check null success:    1
 
5406
        
 
5407
# check null-1 success:         1
 
5408
UPDATE t1 SET f_int1 = -@max_row
 
5409
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5410
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5411
        
 
5412
# check null-2 success:         1
 
5413
UPDATE t1 SET f_int1 = NULL
 
5414
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5415
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5416
        
 
5417
# check null-3 success:         1
 
5418
DELETE FROM t1
 
5419
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5420
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5421
        
 
5422
# check null-4 success:         1
 
5423
DELETE FROM t1
 
5424
WHERE f_int1 = 0 AND f_int2 = 0
 
5425
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5426
AND f_charbig = '#NULL#';
 
5427
SET AUTOCOMMIT= 0;
 
5428
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5429
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5430
FROM t0_template source_tab
 
5431
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5432
        
 
5433
# check transactions-1 success:         1
 
5434
COMMIT WORK;
 
5435
        
 
5436
# check transactions-2 success:         1
 
5437
ROLLBACK WORK;
 
5438
        
 
5439
# check transactions-3 success:         1
 
5440
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5441
COMMIT WORK;
 
5442
ROLLBACK WORK;
 
5443
        
 
5444
# check transactions-4 success:         1
 
5445
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5446
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5447
FROM t0_template source_tab
 
5448
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5449
        
 
5450
# check transactions-5 success:         1
 
5451
ROLLBACK WORK;
 
5452
Warnings:
 
5453
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
5454
        
 
5455
# check transactions-6 success:         1
 
5456
# INFO: Storage engine used for t1 seems to be not transactional.
 
5457
COMMIT;
 
5458
        
 
5459
# check transactions-7 success:         1
 
5460
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5461
COMMIT WORK;
 
5462
SET @@session.sql_mode = 'traditional';
 
5463
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5464
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5465
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5466
'', '', 'was inserted' FROM t0_template
 
5467
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5468
ERROR 22012: Division by 0
 
5469
COMMIT;
 
5470
        
 
5471
# check transactions-8 success:         1
 
5472
# INFO: Storage engine used for t1 seems to be unable to revert
 
5473
#       changes made by the failing statement.
 
5474
SET @@session.sql_mode = '';
 
5475
SET AUTOCOMMIT= 1;
 
5476
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5477
COMMIT WORK;
 
5478
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5479
        
 
5480
# check special-1 success:      1
 
5481
UPDATE t1 SET f_charbig = '';
 
5482
        
 
5483
# check special-2 success:      1
 
5484
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5485
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5486
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5487
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5488
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5489
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5490
'just inserted' FROM t0_template
 
5491
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5492
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5493
BEGIN
 
5494
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5495
f_charbig = 'updated by trigger'
 
5496
      WHERE f_int1 = new.f_int1;
 
5497
END|
 
5498
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5499
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5500
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5501
        
 
5502
# check trigger-1 success:      1
 
5503
DROP TRIGGER trg_1;
 
5504
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5505
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5506
f_charbig = 'just inserted'
 
5507
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5508
DELETE FROM t0_aux
 
5509
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5510
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5511
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5512
'just inserted' FROM t0_template
 
5513
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5514
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5515
BEGIN
 
5516
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5517
f_charbig = 'updated by trigger'
 
5518
      WHERE f_int1 = new.f_int1;
 
5519
END|
 
5520
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5521
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5522
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5523
        
 
5524
# check trigger-2 success:      1
 
5525
DROP TRIGGER trg_1;
 
5526
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5527
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5528
f_charbig = 'just inserted'
 
5529
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5530
DELETE FROM t0_aux
 
5531
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5532
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5533
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5534
'just inserted' FROM t0_template
 
5535
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5536
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5537
BEGIN
 
5538
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5539
f_charbig = 'updated by trigger'
 
5540
      WHERE f_int1 = new.f_int1;
 
5541
END|
 
5542
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5543
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5544
        
 
5545
# check trigger-3 success:      1
 
5546
DROP TRIGGER trg_1;
 
5547
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5548
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5549
f_charbig = 'just inserted'
 
5550
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5551
DELETE FROM t0_aux
 
5552
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5553
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5554
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5555
'just inserted' FROM t0_template
 
5556
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5557
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5558
BEGIN
 
5559
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5560
f_charbig = 'updated by trigger'
 
5561
      WHERE f_int1 = - old.f_int1;
 
5562
END|
 
5563
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5564
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5565
        
 
5566
# check trigger-4 success:      1
 
5567
DROP TRIGGER trg_1;
 
5568
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5569
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5570
f_charbig = 'just inserted'
 
5571
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5572
DELETE FROM t0_aux
 
5573
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5574
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5575
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5576
'just inserted' FROM t0_template
 
5577
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5578
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5579
BEGIN
 
5580
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5581
f_charbig = 'updated by trigger'
 
5582
      WHERE f_int1 = new.f_int1;
 
5583
END|
 
5584
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5585
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5586
        
 
5587
# check trigger-5 success:      1
 
5588
DROP TRIGGER trg_1;
 
5589
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5590
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5591
f_charbig = 'just inserted'
 
5592
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5593
DELETE FROM t0_aux
 
5594
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5595
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5596
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5597
'just inserted' FROM t0_template
 
5598
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5599
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5600
BEGIN
 
5601
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5602
f_charbig = 'updated by trigger'
 
5603
      WHERE f_int1 = - old.f_int1;
 
5604
END|
 
5605
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5606
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5607
        
 
5608
# check trigger-6 success:      1
 
5609
DROP TRIGGER trg_1;
 
5610
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5611
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5612
f_charbig = 'just inserted'
 
5613
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5614
DELETE FROM t0_aux
 
5615
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5616
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5617
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5618
'just inserted' FROM t0_template
 
5619
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5620
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5621
BEGIN
 
5622
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5623
f_charbig = 'updated by trigger'
 
5624
      WHERE f_int1 = - old.f_int1;
 
5625
END|
 
5626
DELETE FROM t0_aux
 
5627
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5628
        
 
5629
# check trigger-7 success:      1
 
5630
DROP TRIGGER trg_1;
 
5631
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5632
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5633
f_charbig = 'just inserted'
 
5634
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5635
DELETE FROM t0_aux
 
5636
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5637
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5638
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5639
'just inserted' FROM t0_template
 
5640
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5641
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5642
BEGIN
 
5643
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5644
f_charbig = 'updated by trigger'
 
5645
      WHERE f_int1 = - old.f_int1;
 
5646
END|
 
5647
DELETE FROM t0_aux
 
5648
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5649
        
 
5650
# check trigger-8 success:      1
 
5651
DROP TRIGGER trg_1;
 
5652
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5653
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5654
f_charbig = 'just inserted'
 
5655
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5656
DELETE FROM t0_aux
 
5657
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5658
DELETE FROM t1
 
5659
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5660
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5661
BEGIN
 
5662
SET new.f_int1 = old.f_int1 + @max_row,
 
5663
new.f_int2 = old.f_int2 - @max_row,
 
5664
new.f_charbig = '####updated per update trigger####';
 
5665
END|
 
5666
UPDATE t1
 
5667
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5668
f_charbig = '####updated per update statement itself####';
 
5669
        
 
5670
# check trigger-9 success:      1
 
5671
DROP TRIGGER trg_2;
 
5672
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5673
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5674
f_charbig = CONCAT('===',f_char1,'===');
 
5675
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5676
BEGIN
 
5677
SET new.f_int1 = new.f_int1 + @max_row,
 
5678
new.f_int2 = new.f_int2 - @max_row,
 
5679
new.f_charbig = '####updated per update trigger####';
 
5680
END|
 
5681
UPDATE t1
 
5682
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5683
f_charbig = '####updated per update statement itself####';
 
5684
        
 
5685
# check trigger-10 success:     1
 
5686
DROP TRIGGER trg_2;
 
5687
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5688
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5689
f_charbig = CONCAT('===',f_char1,'===');
 
5690
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5691
BEGIN
 
5692
SET new.f_int1 = @my_max1 + @counter,
 
5693
new.f_int2 = @my_min2 - @counter,
 
5694
new.f_charbig = '####updated per insert trigger####';
 
5695
SET @counter = @counter + 1;
 
5696
END|
 
5697
SET @counter = 1;
 
5698
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5699
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5700
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5701
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5702
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5703
ORDER BY f_int1;
 
5704
DROP TRIGGER trg_3;
 
5705
        
 
5706
# check trigger-11 success:     1
 
5707
DELETE FROM t1
 
5708
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5709
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5710
AND f_charbig = '####updated per insert trigger####';
 
5711
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5712
BEGIN
 
5713
SET new.f_int1 = @my_max1 + @counter,
 
5714
new.f_int2 = @my_min2 - @counter,
 
5715
new.f_charbig = '####updated per insert trigger####';
 
5716
SET @counter = @counter + 1;
 
5717
END|
 
5718
SET @counter = 1;
 
5719
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5720
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5721
SELECT CAST(f_int1 AS CHAR),
 
5722
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5723
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5724
ORDER BY f_int1;
 
5725
DROP TRIGGER trg_3;
 
5726
        
 
5727
# check trigger-12 success:     1
 
5728
DELETE FROM t1
 
5729
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5730
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5731
AND f_charbig = '####updated per insert trigger####';
 
5732
ANALYZE  TABLE t1;
 
5733
Table   Op      Msg_type        Msg_text
 
5734
test.t1 analyze status  OK
 
5735
CHECK    TABLE t1 EXTENDED;
 
5736
Table   Op      Msg_type        Msg_text
 
5737
test.t1 check   status  OK
 
5738
CHECKSUM TABLE t1 EXTENDED;
 
5739
Table   Checksum
 
5740
test.t1 <some_value>
 
5741
OPTIMIZE TABLE t1;
 
5742
Table   Op      Msg_type        Msg_text
 
5743
test.t1 optimize        status  OK
 
5744
# check layout success:    1
 
5745
REPAIR   TABLE t1 EXTENDED;
 
5746
Table   Op      Msg_type        Msg_text
 
5747
test.t1 repair  status  OK
 
5748
# check layout success:    1
 
5749
TRUNCATE t1;
 
5750
        
 
5751
# check TRUNCATE success:       1
 
5752
# check layout success:    1
 
5753
# End usability test (inc/partition_check.inc)
 
5754
DROP TABLE t1;
 
5755
CREATE TABLE t1 (
 
5756
f_int1 INTEGER,
 
5757
f_int2 INTEGER,
 
5758
f_char1 CHAR(20),
 
5759
f_char2 CHAR(20),
 
5760
f_charbig VARCHAR(1000)
 
5761
 
 
5762
)
 
5763
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
5764
(PARTITION part_1 VALUES LESS THAN (0),
 
5765
PARTITION part_2 VALUES LESS THAN (5),
 
5766
PARTITION part_3 VALUES LESS THAN (10),
 
5767
PARTITION part_4 VALUES LESS THAN (2147483646));
 
5768
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5769
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5770
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
5771
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
 
5772
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5773
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
5774
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
5775
# Start usability test (inc/partition_check.inc)
 
5776
create_command
 
5777
SHOW CREATE TABLE t1;
 
5778
Table   Create Table
 
5779
t1      CREATE TABLE `t1` (
 
5780
  `f_int1` int(11) DEFAULT NULL,
 
5781
  `f_int2` int(11) DEFAULT NULL,
 
5782
  `f_char1` char(20) DEFAULT NULL,
 
5783
  `f_char2` char(20) DEFAULT NULL,
 
5784
  `f_charbig` varchar(1000) DEFAULT NULL
 
5785
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
5786
 
 
5787
unified filelist
 
5788
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
5789
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
5790
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
5791
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
5792
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
5793
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
5794
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
5795
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
5796
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
5797
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
5798
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
5799
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
5800
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYD
 
5801
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYI
 
5802
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYD
 
5803
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYI
 
5804
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
5805
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
5806
 
 
5807
# check prerequisites-1 success:    1
 
5808
# check COUNT(*) success:    1
 
5809
# check MIN/MAX(f_int1) success:    1
 
5810
# check MIN/MAX(f_int2) success:    1
 
5811
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5812
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5813
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5814
WHERE f_int1 IN (2,3);
 
5815
# check prerequisites-3 success:    1
 
5816
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5817
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
5818
# check read via f_int1 success: 1
 
5819
# check read via f_int2 success: 1
 
5820
        
 
5821
# check multiple-1 success:     1
 
5822
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5823
        
 
5824
# check multiple-2 success:     1
 
5825
INSERT INTO t1 SELECT * FROM t0_template
 
5826
WHERE MOD(f_int1,3) = 0;
 
5827
        
 
5828
# check multiple-3 success:     1
 
5829
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5830
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5831
AND @max_row_div2 + @max_row_div4;
 
5832
        
 
5833
# check multiple-4 success:     1
 
5834
DELETE FROM t1
 
5835
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5836
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5837
        
 
5838
# check multiple-5 success:     1
 
5839
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5840
INSERT INTO t1
 
5841
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5842
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5843
f_charbig = '#SINGLE#';
 
5844
        
 
5845
# check single-1 success:       1
 
5846
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5847
INSERT INTO t1
 
5848
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5849
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5850
f_charbig = '#SINGLE#';
 
5851
        
 
5852
# check single-2 success:       1
 
5853
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5854
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5855
UPDATE t1 SET f_int1 = @cur_value2
 
5856
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5857
        
 
5858
# check single-3 success:       1
 
5859
SET @cur_value1= -1;
 
5860
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5861
UPDATE t1 SET f_int1 = @cur_value1
 
5862
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5863
        
 
5864
# check single-4 success:       1
 
5865
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5866
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5867
        
 
5868
# check single-5 success:       1
 
5869
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5870
        
 
5871
# check single-6 success:       1
 
5872
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5873
        
 
5874
# check single-7 success:       1
 
5875
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
5876
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5877
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5878
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5879
f_charbig = '#NULL#';
 
5880
INSERT INTO t1
 
5881
SET f_int1 = NULL , f_int2 = -@max_row,
 
5882
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5883
f_charbig = '#NULL#';
 
5884
# check null success:    1
 
5885
        
 
5886
# check null-1 success:         1
 
5887
UPDATE t1 SET f_int1 = -@max_row
 
5888
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5889
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5890
        
 
5891
# check null-2 success:         1
 
5892
UPDATE t1 SET f_int1 = NULL
 
5893
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5894
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5895
        
 
5896
# check null-3 success:         1
 
5897
DELETE FROM t1
 
5898
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5899
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5900
        
 
5901
# check null-4 success:         1
 
5902
DELETE FROM t1
 
5903
WHERE f_int1 = 0 AND f_int2 = 0
 
5904
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5905
AND f_charbig = '#NULL#';
 
5906
SET AUTOCOMMIT= 0;
 
5907
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5908
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5909
FROM t0_template source_tab
 
5910
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5911
        
 
5912
# check transactions-1 success:         1
 
5913
COMMIT WORK;
 
5914
        
 
5915
# check transactions-2 success:         1
 
5916
ROLLBACK WORK;
 
5917
        
 
5918
# check transactions-3 success:         1
 
5919
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5920
COMMIT WORK;
 
5921
ROLLBACK WORK;
 
5922
        
 
5923
# check transactions-4 success:         1
 
5924
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5925
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5926
FROM t0_template source_tab
 
5927
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5928
        
 
5929
# check transactions-5 success:         1
 
5930
ROLLBACK WORK;
 
5931
Warnings:
 
5932
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
5933
        
 
5934
# check transactions-6 success:         1
 
5935
# INFO: Storage engine used for t1 seems to be not transactional.
 
5936
COMMIT;
 
5937
        
 
5938
# check transactions-7 success:         1
 
5939
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5940
COMMIT WORK;
 
5941
SET @@session.sql_mode = 'traditional';
 
5942
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5943
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5944
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5945
'', '', 'was inserted' FROM t0_template
 
5946
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5947
ERROR 22012: Division by 0
 
5948
COMMIT;
 
5949
        
 
5950
# check transactions-8 success:         1
 
5951
# INFO: Storage engine used for t1 seems to be unable to revert
 
5952
#       changes made by the failing statement.
 
5953
SET @@session.sql_mode = '';
 
5954
SET AUTOCOMMIT= 1;
 
5955
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5956
COMMIT WORK;
 
5957
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5958
        
 
5959
# check special-1 success:      1
 
5960
UPDATE t1 SET f_charbig = '';
 
5961
        
 
5962
# check special-2 success:      1
 
5963
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5964
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5965
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5966
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5967
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5968
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5969
'just inserted' FROM t0_template
 
5970
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5971
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5972
BEGIN
 
5973
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5974
f_charbig = 'updated by trigger'
 
5975
      WHERE f_int1 = new.f_int1;
 
5976
END|
 
5977
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5978
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5979
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5980
        
 
5981
# check trigger-1 success:      1
 
5982
DROP TRIGGER trg_1;
 
5983
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5984
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5985
f_charbig = 'just inserted'
 
5986
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5987
DELETE FROM t0_aux
 
5988
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5989
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5990
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5991
'just inserted' FROM t0_template
 
5992
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5993
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5994
BEGIN
 
5995
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5996
f_charbig = 'updated by trigger'
 
5997
      WHERE f_int1 = new.f_int1;
 
5998
END|
 
5999
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6000
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6001
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6002
        
 
6003
# check trigger-2 success:      1
 
6004
DROP TRIGGER trg_1;
 
6005
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6006
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6007
f_charbig = 'just inserted'
 
6008
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6009
DELETE FROM t0_aux
 
6010
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6011
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6012
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6013
'just inserted' FROM t0_template
 
6014
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6015
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6016
BEGIN
 
6017
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6018
f_charbig = 'updated by trigger'
 
6019
      WHERE f_int1 = new.f_int1;
 
6020
END|
 
6021
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6022
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6023
        
 
6024
# check trigger-3 success:      1
 
6025
DROP TRIGGER trg_1;
 
6026
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6027
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6028
f_charbig = 'just inserted'
 
6029
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6030
DELETE FROM t0_aux
 
6031
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6032
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6033
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6034
'just inserted' FROM t0_template
 
6035
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6036
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6037
BEGIN
 
6038
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6039
f_charbig = 'updated by trigger'
 
6040
      WHERE f_int1 = - old.f_int1;
 
6041
END|
 
6042
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6043
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6044
        
 
6045
# check trigger-4 success:      1
 
6046
DROP TRIGGER trg_1;
 
6047
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6048
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6049
f_charbig = 'just inserted'
 
6050
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6051
DELETE FROM t0_aux
 
6052
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6053
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6054
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6055
'just inserted' FROM t0_template
 
6056
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6057
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6058
BEGIN
 
6059
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6060
f_charbig = 'updated by trigger'
 
6061
      WHERE f_int1 = new.f_int1;
 
6062
END|
 
6063
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6064
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6065
        
 
6066
# check trigger-5 success:      1
 
6067
DROP TRIGGER trg_1;
 
6068
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6069
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6070
f_charbig = 'just inserted'
 
6071
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6072
DELETE FROM t0_aux
 
6073
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6074
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6075
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6076
'just inserted' FROM t0_template
 
6077
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6078
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6079
BEGIN
 
6080
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6081
f_charbig = 'updated by trigger'
 
6082
      WHERE f_int1 = - old.f_int1;
 
6083
END|
 
6084
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6085
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6086
        
 
6087
# check trigger-6 success:      1
 
6088
DROP TRIGGER trg_1;
 
6089
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6090
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6091
f_charbig = 'just inserted'
 
6092
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6093
DELETE FROM t0_aux
 
6094
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6095
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6096
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6097
'just inserted' FROM t0_template
 
6098
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6099
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
6100
BEGIN
 
6101
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6102
f_charbig = 'updated by trigger'
 
6103
      WHERE f_int1 = - old.f_int1;
 
6104
END|
 
6105
DELETE FROM t0_aux
 
6106
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6107
        
 
6108
# check trigger-7 success:      1
 
6109
DROP TRIGGER trg_1;
 
6110
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6111
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6112
f_charbig = 'just inserted'
 
6113
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6114
DELETE FROM t0_aux
 
6115
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6116
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6117
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6118
'just inserted' FROM t0_template
 
6119
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6120
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
6121
BEGIN
 
6122
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6123
f_charbig = 'updated by trigger'
 
6124
      WHERE f_int1 = - old.f_int1;
 
6125
END|
 
6126
DELETE FROM t0_aux
 
6127
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6128
        
 
6129
# check trigger-8 success:      1
 
6130
DROP TRIGGER trg_1;
 
6131
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6132
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6133
f_charbig = 'just inserted'
 
6134
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6135
DELETE FROM t0_aux
 
6136
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6137
DELETE FROM t1
 
6138
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6139
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6140
BEGIN
 
6141
SET new.f_int1 = old.f_int1 + @max_row,
 
6142
new.f_int2 = old.f_int2 - @max_row,
 
6143
new.f_charbig = '####updated per update trigger####';
 
6144
END|
 
6145
UPDATE t1
 
6146
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6147
f_charbig = '####updated per update statement itself####';
 
6148
        
 
6149
# check trigger-9 success:      1
 
6150
DROP TRIGGER trg_2;
 
6151
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6152
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6153
f_charbig = CONCAT('===',f_char1,'===');
 
6154
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6155
BEGIN
 
6156
SET new.f_int1 = new.f_int1 + @max_row,
 
6157
new.f_int2 = new.f_int2 - @max_row,
 
6158
new.f_charbig = '####updated per update trigger####';
 
6159
END|
 
6160
UPDATE t1
 
6161
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6162
f_charbig = '####updated per update statement itself####';
 
6163
        
 
6164
# check trigger-10 success:     1
 
6165
DROP TRIGGER trg_2;
 
6166
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6167
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6168
f_charbig = CONCAT('===',f_char1,'===');
 
6169
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6170
BEGIN
 
6171
SET new.f_int1 = @my_max1 + @counter,
 
6172
new.f_int2 = @my_min2 - @counter,
 
6173
new.f_charbig = '####updated per insert trigger####';
 
6174
SET @counter = @counter + 1;
 
6175
END|
 
6176
SET @counter = 1;
 
6177
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6178
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6179
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6180
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6181
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6182
ORDER BY f_int1;
 
6183
DROP TRIGGER trg_3;
 
6184
        
 
6185
# check trigger-11 success:     1
 
6186
DELETE FROM t1
 
6187
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6188
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6189
AND f_charbig = '####updated per insert trigger####';
 
6190
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6191
BEGIN
 
6192
SET new.f_int1 = @my_max1 + @counter,
 
6193
new.f_int2 = @my_min2 - @counter,
 
6194
new.f_charbig = '####updated per insert trigger####';
 
6195
SET @counter = @counter + 1;
 
6196
END|
 
6197
SET @counter = 1;
 
6198
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6199
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
6200
SELECT CAST(f_int1 AS CHAR),
 
6201
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6202
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6203
ORDER BY f_int1;
 
6204
DROP TRIGGER trg_3;
 
6205
        
 
6206
# check trigger-12 success:     1
 
6207
DELETE FROM t1
 
6208
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6209
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6210
AND f_charbig = '####updated per insert trigger####';
 
6211
ANALYZE  TABLE t1;
 
6212
Table   Op      Msg_type        Msg_text
 
6213
test.t1 analyze status  OK
 
6214
CHECK    TABLE t1 EXTENDED;
 
6215
Table   Op      Msg_type        Msg_text
 
6216
test.t1 check   status  OK
 
6217
CHECKSUM TABLE t1 EXTENDED;
 
6218
Table   Checksum
 
6219
test.t1 <some_value>
 
6220
OPTIMIZE TABLE t1;
 
6221
Table   Op      Msg_type        Msg_text
 
6222
test.t1 optimize        status  OK
 
6223
# check layout success:    1
 
6224
REPAIR   TABLE t1 EXTENDED;
 
6225
Table   Op      Msg_type        Msg_text
 
6226
test.t1 repair  status  OK
 
6227
# check layout success:    1
 
6228
TRUNCATE t1;
 
6229
        
 
6230
# check TRUNCATE success:       1
 
6231
# check layout success:    1
 
6232
# End usability test (inc/partition_check.inc)
 
6233
DROP TABLE t1;
 
6234
CREATE TABLE t1 (
 
6235
f_int1 INTEGER,
 
6236
f_int2 INTEGER,
 
6237
f_char1 CHAR(20),
 
6238
f_char2 CHAR(20),
 
6239
f_charbig VARCHAR(1000)
 
6240
 
 
6241
)
 
6242
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
6243
(PARTITION part_1 VALUES LESS THAN (0)
 
6244
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
6245
PARTITION part_2 VALUES LESS THAN (5)
 
6246
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
6247
PARTITION part_3 VALUES LESS THAN (10)
 
6248
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
6249
PARTITION part_4 VALUES LESS THAN (2147483646)
 
6250
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
6251
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6252
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6253
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
6254
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
 
6255
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6256
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6257
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6258
# Start usability test (inc/partition_check.inc)
 
6259
create_command
 
6260
SHOW CREATE TABLE t1;
 
6261
Table   Create Table
 
6262
t1      CREATE TABLE `t1` (
 
6263
  `f_int1` int(11) DEFAULT NULL,
 
6264
  `f_int2` int(11) DEFAULT NULL,
 
6265
  `f_char1` char(20) DEFAULT NULL,
 
6266
  `f_char2` char(20) DEFAULT NULL,
 
6267
  `f_charbig` varchar(1000) DEFAULT NULL
 
6268
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
6269
 
 
6270
unified filelist
 
6271
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYD
 
6272
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYI
 
6273
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYD
 
6274
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYI
 
6275
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYD
 
6276
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYI
 
6277
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYD
 
6278
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYI
 
6279
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYD
 
6280
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYI
 
6281
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYD
 
6282
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYI
 
6283
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYD
 
6284
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYI
 
6285
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYD
 
6286
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYI
 
6287
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
6288
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
6289
 
 
6290
# check prerequisites-1 success:    1
 
6291
# check COUNT(*) success:    1
 
6292
# check MIN/MAX(f_int1) success:    1
 
6293
# check MIN/MAX(f_int2) success:    1
 
6294
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6295
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6296
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6297
WHERE f_int1 IN (2,3);
 
6298
# check prerequisites-3 success:    1
 
6299
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6300
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
6301
# check read via f_int1 success: 1
 
6302
# check read via f_int2 success: 1
 
6303
        
 
6304
# check multiple-1 success:     1
 
6305
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6306
        
 
6307
# check multiple-2 success:     1
 
6308
INSERT INTO t1 SELECT * FROM t0_template
 
6309
WHERE MOD(f_int1,3) = 0;
 
6310
        
 
6311
# check multiple-3 success:     1
 
6312
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6313
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6314
AND @max_row_div2 + @max_row_div4;
 
6315
        
 
6316
# check multiple-4 success:     1
 
6317
DELETE FROM t1
 
6318
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6319
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6320
        
 
6321
# check multiple-5 success:     1
 
6322
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6323
INSERT INTO t1
 
6324
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6325
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6326
f_charbig = '#SINGLE#';
 
6327
        
 
6328
# check single-1 success:       1
 
6329
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6330
INSERT INTO t1
 
6331
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6332
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6333
f_charbig = '#SINGLE#';
 
6334
        
 
6335
# check single-2 success:       1
 
6336
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6337
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6338
UPDATE t1 SET f_int1 = @cur_value2
 
6339
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6340
        
 
6341
# check single-3 success:       1
 
6342
SET @cur_value1= -1;
 
6343
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6344
UPDATE t1 SET f_int1 = @cur_value1
 
6345
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6346
        
 
6347
# check single-4 success:       1
 
6348
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6349
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6350
        
 
6351
# check single-5 success:       1
 
6352
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6353
        
 
6354
# check single-6 success:       1
 
6355
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6356
ERROR HY000: Table has no partition for value 2147483647
 
6357
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6358
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6359
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6360
f_charbig = '#NULL#';
 
6361
INSERT INTO t1
 
6362
SET f_int1 = NULL , f_int2 = -@max_row,
 
6363
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6364
f_charbig = '#NULL#';
 
6365
# check null success:    1
 
6366
        
 
6367
# check null-1 success:         1
 
6368
UPDATE t1 SET f_int1 = -@max_row
 
6369
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6370
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6371
        
 
6372
# check null-2 success:         1
 
6373
UPDATE t1 SET f_int1 = NULL
 
6374
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6375
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6376
        
 
6377
# check null-3 success:         1
 
6378
DELETE FROM t1
 
6379
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6380
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6381
        
 
6382
# check null-4 success:         1
 
6383
DELETE FROM t1
 
6384
WHERE f_int1 = 0 AND f_int2 = 0
 
6385
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6386
AND f_charbig = '#NULL#';
 
6387
SET AUTOCOMMIT= 0;
 
6388
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6389
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6390
FROM t0_template source_tab
 
6391
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6392
        
 
6393
# check transactions-1 success:         1
 
6394
COMMIT WORK;
 
6395
        
 
6396
# check transactions-2 success:         1
 
6397
ROLLBACK WORK;
 
6398
        
 
6399
# check transactions-3 success:         1
 
6400
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6401
COMMIT WORK;
 
6402
ROLLBACK WORK;
 
6403
        
 
6404
# check transactions-4 success:         1
 
6405
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6406
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6407
FROM t0_template source_tab
 
6408
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6409
        
 
6410
# check transactions-5 success:         1
 
6411
ROLLBACK WORK;
 
6412
Warnings:
 
6413
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
6414
        
 
6415
# check transactions-6 success:         1
 
6416
# INFO: Storage engine used for t1 seems to be not transactional.
 
6417
COMMIT;
 
6418
        
 
6419
# check transactions-7 success:         1
 
6420
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6421
COMMIT WORK;
 
6422
SET @@session.sql_mode = 'traditional';
 
6423
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6424
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6425
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6426
'', '', 'was inserted' FROM t0_template
 
6427
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6428
ERROR 22012: Division by 0
 
6429
COMMIT;
 
6430
        
 
6431
# check transactions-8 success:         1
 
6432
# INFO: Storage engine used for t1 seems to be unable to revert
 
6433
#       changes made by the failing statement.
 
6434
SET @@session.sql_mode = '';
 
6435
SET AUTOCOMMIT= 1;
 
6436
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6437
COMMIT WORK;
 
6438
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6439
        
 
6440
# check special-1 success:      1
 
6441
UPDATE t1 SET f_charbig = '';
 
6442
        
 
6443
# check special-2 success:      1
 
6444
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6445
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6446
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6447
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6448
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6449
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6450
'just inserted' FROM t0_template
 
6451
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6452
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6453
BEGIN
 
6454
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6455
f_charbig = 'updated by trigger'
 
6456
      WHERE f_int1 = new.f_int1;
 
6457
END|
 
6458
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6459
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6460
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6461
        
 
6462
# check trigger-1 success:      1
 
6463
DROP TRIGGER trg_1;
 
6464
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6465
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6466
f_charbig = 'just inserted'
 
6467
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6468
DELETE FROM t0_aux
 
6469
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6470
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6471
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6472
'just inserted' FROM t0_template
 
6473
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6474
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6475
BEGIN
 
6476
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6477
f_charbig = 'updated by trigger'
 
6478
      WHERE f_int1 = new.f_int1;
 
6479
END|
 
6480
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6481
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6482
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6483
        
 
6484
# check trigger-2 success:      1
 
6485
DROP TRIGGER trg_1;
 
6486
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6487
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6488
f_charbig = 'just inserted'
 
6489
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6490
DELETE FROM t0_aux
 
6491
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6492
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6493
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6494
'just inserted' FROM t0_template
 
6495
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6496
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6497
BEGIN
 
6498
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6499
f_charbig = 'updated by trigger'
 
6500
      WHERE f_int1 = new.f_int1;
 
6501
END|
 
6502
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6503
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6504
        
 
6505
# check trigger-3 success:      1
 
6506
DROP TRIGGER trg_1;
 
6507
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6508
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6509
f_charbig = 'just inserted'
 
6510
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6511
DELETE FROM t0_aux
 
6512
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6513
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6514
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6515
'just inserted' FROM t0_template
 
6516
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6517
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6518
BEGIN
 
6519
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6520
f_charbig = 'updated by trigger'
 
6521
      WHERE f_int1 = - old.f_int1;
 
6522
END|
 
6523
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6524
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6525
        
 
6526
# check trigger-4 success:      1
 
6527
DROP TRIGGER trg_1;
 
6528
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6529
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6530
f_charbig = 'just inserted'
 
6531
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6532
DELETE FROM t0_aux
 
6533
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6534
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6535
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6536
'just inserted' FROM t0_template
 
6537
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6538
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6539
BEGIN
 
6540
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6541
f_charbig = 'updated by trigger'
 
6542
      WHERE f_int1 = new.f_int1;
 
6543
END|
 
6544
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6545
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6546
        
 
6547
# check trigger-5 success:      1
 
6548
DROP TRIGGER trg_1;
 
6549
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6550
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6551
f_charbig = 'just inserted'
 
6552
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6553
DELETE FROM t0_aux
 
6554
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6555
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6556
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6557
'just inserted' FROM t0_template
 
6558
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6559
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6560
BEGIN
 
6561
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6562
f_charbig = 'updated by trigger'
 
6563
      WHERE f_int1 = - old.f_int1;
 
6564
END|
 
6565
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6566
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6567
        
 
6568
# check trigger-6 success:      1
 
6569
DROP TRIGGER trg_1;
 
6570
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6571
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6572
f_charbig = 'just inserted'
 
6573
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6574
DELETE FROM t0_aux
 
6575
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6576
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6577
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6578
'just inserted' FROM t0_template
 
6579
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6580
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
6581
BEGIN
 
6582
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6583
f_charbig = 'updated by trigger'
 
6584
      WHERE f_int1 = - old.f_int1;
 
6585
END|
 
6586
DELETE FROM t0_aux
 
6587
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6588
        
 
6589
# check trigger-7 success:      1
 
6590
DROP TRIGGER trg_1;
 
6591
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6592
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6593
f_charbig = 'just inserted'
 
6594
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6595
DELETE FROM t0_aux
 
6596
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6597
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6598
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6599
'just inserted' FROM t0_template
 
6600
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6601
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
6602
BEGIN
 
6603
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6604
f_charbig = 'updated by trigger'
 
6605
      WHERE f_int1 = - old.f_int1;
 
6606
END|
 
6607
DELETE FROM t0_aux
 
6608
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6609
        
 
6610
# check trigger-8 success:      1
 
6611
DROP TRIGGER trg_1;
 
6612
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6613
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6614
f_charbig = 'just inserted'
 
6615
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6616
DELETE FROM t0_aux
 
6617
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6618
DELETE FROM t1
 
6619
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6620
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6621
BEGIN
 
6622
SET new.f_int1 = old.f_int1 + @max_row,
 
6623
new.f_int2 = old.f_int2 - @max_row,
 
6624
new.f_charbig = '####updated per update trigger####';
 
6625
END|
 
6626
UPDATE t1
 
6627
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6628
f_charbig = '####updated per update statement itself####';
 
6629
        
 
6630
# check trigger-9 success:      1
 
6631
DROP TRIGGER trg_2;
 
6632
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6633
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6634
f_charbig = CONCAT('===',f_char1,'===');
 
6635
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6636
BEGIN
 
6637
SET new.f_int1 = new.f_int1 + @max_row,
 
6638
new.f_int2 = new.f_int2 - @max_row,
 
6639
new.f_charbig = '####updated per update trigger####';
 
6640
END|
 
6641
UPDATE t1
 
6642
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6643
f_charbig = '####updated per update statement itself####';
 
6644
        
 
6645
# check trigger-10 success:     1
 
6646
DROP TRIGGER trg_2;
 
6647
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6648
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6649
f_charbig = CONCAT('===',f_char1,'===');
 
6650
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6651
BEGIN
 
6652
SET new.f_int1 = @my_max1 + @counter,
 
6653
new.f_int2 = @my_min2 - @counter,
 
6654
new.f_charbig = '####updated per insert trigger####';
 
6655
SET @counter = @counter + 1;
 
6656
END|
 
6657
SET @counter = 1;
 
6658
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6659
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6660
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6661
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6662
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6663
ORDER BY f_int1;
 
6664
DROP TRIGGER trg_3;
 
6665
        
 
6666
# check trigger-11 success:     1
 
6667
DELETE FROM t1
 
6668
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6669
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6670
AND f_charbig = '####updated per insert trigger####';
 
6671
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6672
BEGIN
 
6673
SET new.f_int1 = @my_max1 + @counter,
 
6674
new.f_int2 = @my_min2 - @counter,
 
6675
new.f_charbig = '####updated per insert trigger####';
 
6676
SET @counter = @counter + 1;
 
6677
END|
 
6678
SET @counter = 1;
 
6679
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6680
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
6681
SELECT CAST(f_int1 AS CHAR),
 
6682
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6683
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6684
ORDER BY f_int1;
 
6685
DROP TRIGGER trg_3;
 
6686
        
 
6687
# check trigger-12 success:     1
 
6688
DELETE FROM t1
 
6689
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6690
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6691
AND f_charbig = '####updated per insert trigger####';
 
6692
ANALYZE  TABLE t1;
 
6693
Table   Op      Msg_type        Msg_text
 
6694
test.t1 analyze status  OK
 
6695
CHECK    TABLE t1 EXTENDED;
 
6696
Table   Op      Msg_type        Msg_text
 
6697
test.t1 check   status  OK
 
6698
CHECKSUM TABLE t1 EXTENDED;
 
6699
Table   Checksum
 
6700
test.t1 <some_value>
 
6701
OPTIMIZE TABLE t1;
 
6702
Table   Op      Msg_type        Msg_text
 
6703
test.t1 optimize        status  OK
 
6704
# check layout success:    1
 
6705
REPAIR   TABLE t1 EXTENDED;
 
6706
Table   Op      Msg_type        Msg_text
 
6707
test.t1 repair  status  OK
 
6708
# check layout success:    1
 
6709
TRUNCATE t1;
 
6710
        
 
6711
# check TRUNCATE success:       1
 
6712
# check layout success:    1
 
6713
# End usability test (inc/partition_check.inc)
 
6714
DROP TABLE t1;
 
6715
CREATE TABLE t1 (
 
6716
f_int1 INTEGER,
 
6717
f_int2 INTEGER,
 
6718
f_char1 CHAR(20),
 
6719
f_char2 CHAR(20),
 
6720
f_charbig VARCHAR(1000)
 
6721
 
 
6722
)
 
6723
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
6724
(PARTITION part_1 VALUES IN (0)
 
6725
(SUBPARTITION sp11, SUBPARTITION sp12),
 
6726
PARTITION part_2 VALUES IN (1)
 
6727
(SUBPARTITION sp21, SUBPARTITION sp22),
 
6728
PARTITION part_3 VALUES IN (2)
 
6729
(SUBPARTITION sp31, SUBPARTITION sp32),
 
6730
PARTITION part_4 VALUES IN (NULL)
 
6731
(SUBPARTITION sp41, SUBPARTITION sp42));
 
6732
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6733
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6734
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
6735
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
 
6736
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6737
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
6738
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
6739
# Start usability test (inc/partition_check.inc)
 
6740
create_command
 
6741
SHOW CREATE TABLE t1;
 
6742
Table   Create Table
 
6743
t1      CREATE TABLE `t1` (
 
6744
  `f_int1` int(11) DEFAULT NULL,
 
6745
  `f_int2` int(11) DEFAULT NULL,
 
6746
  `f_char1` char(20) DEFAULT NULL,
 
6747
  `f_char2` char(20) DEFAULT NULL,
 
6748
  `f_charbig` varchar(1000) DEFAULT NULL
 
6749
) ENGINE=MyISAM 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 = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
6750
 
 
6751
unified filelist
 
6752
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYD
 
6753
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYI
 
6754
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYD
 
6755
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYI
 
6756
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYD
 
6757
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYI
 
6758
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYD
 
6759
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYI
 
6760
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYD
 
6761
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYI
 
6762
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYD
 
6763
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYI
 
6764
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYD
 
6765
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYI
 
6766
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYD
 
6767
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYI
 
6768
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
6769
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
6770
 
 
6771
# check prerequisites-1 success:    1
 
6772
# check COUNT(*) success:    1
 
6773
# check MIN/MAX(f_int1) success:    1
 
6774
# check MIN/MAX(f_int2) success:    1
 
6775
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6776
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6777
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
6778
WHERE f_int1 IN (2,3);
 
6779
# check prerequisites-3 success:    1
 
6780
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
6781
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
6782
# check read via f_int1 success: 1
 
6783
# check read via f_int2 success: 1
 
6784
        
 
6785
# check multiple-1 success:     1
 
6786
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
6787
        
 
6788
# check multiple-2 success:     1
 
6789
INSERT INTO t1 SELECT * FROM t0_template
 
6790
WHERE MOD(f_int1,3) = 0;
 
6791
        
 
6792
# check multiple-3 success:     1
 
6793
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
6794
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
6795
AND @max_row_div2 + @max_row_div4;
 
6796
        
 
6797
# check multiple-4 success:     1
 
6798
DELETE FROM t1
 
6799
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6800
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6801
        
 
6802
# check multiple-5 success:     1
 
6803
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6804
INSERT INTO t1
 
6805
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6806
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6807
f_charbig = '#SINGLE#';
 
6808
        
 
6809
# check single-1 success:       1
 
6810
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6811
INSERT INTO t1
 
6812
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6813
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6814
f_charbig = '#SINGLE#';
 
6815
        
 
6816
# check single-2 success:       1
 
6817
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6818
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6819
UPDATE t1 SET f_int1 = @cur_value2
 
6820
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6821
        
 
6822
# check single-3 success:       1
 
6823
SET @cur_value1= -1;
 
6824
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6825
UPDATE t1 SET f_int1 = @cur_value1
 
6826
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6827
        
 
6828
# check single-4 success:       1
 
6829
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6830
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6831
        
 
6832
# check single-5 success:       1
 
6833
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6834
        
 
6835
# check single-6 success:       1
 
6836
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6837
        
 
6838
# check single-7 success:       1
 
6839
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
6840
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6841
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6842
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6843
f_charbig = '#NULL#';
 
6844
INSERT INTO t1
 
6845
SET f_int1 = NULL , f_int2 = -@max_row,
 
6846
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6847
f_charbig = '#NULL#';
 
6848
# check null success:    1
 
6849
        
 
6850
# check null-1 success:         1
 
6851
UPDATE t1 SET f_int1 = -@max_row
 
6852
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6853
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6854
        
 
6855
# check null-2 success:         1
 
6856
UPDATE t1 SET f_int1 = NULL
 
6857
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6858
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6859
        
 
6860
# check null-3 success:         1
 
6861
DELETE FROM t1
 
6862
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6863
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6864
        
 
6865
# check null-4 success:         1
 
6866
DELETE FROM t1
 
6867
WHERE f_int1 = 0 AND f_int2 = 0
 
6868
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6869
AND f_charbig = '#NULL#';
 
6870
SET AUTOCOMMIT= 0;
 
6871
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6872
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6873
FROM t0_template source_tab
 
6874
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6875
        
 
6876
# check transactions-1 success:         1
 
6877
COMMIT WORK;
 
6878
        
 
6879
# check transactions-2 success:         1
 
6880
ROLLBACK WORK;
 
6881
        
 
6882
# check transactions-3 success:         1
 
6883
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6884
COMMIT WORK;
 
6885
ROLLBACK WORK;
 
6886
        
 
6887
# check transactions-4 success:         1
 
6888
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6889
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6890
FROM t0_template source_tab
 
6891
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6892
        
 
6893
# check transactions-5 success:         1
 
6894
ROLLBACK WORK;
 
6895
Warnings:
 
6896
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
6897
        
 
6898
# check transactions-6 success:         1
 
6899
# INFO: Storage engine used for t1 seems to be not transactional.
 
6900
COMMIT;
 
6901
        
 
6902
# check transactions-7 success:         1
 
6903
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6904
COMMIT WORK;
 
6905
SET @@session.sql_mode = 'traditional';
 
6906
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6907
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6908
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6909
'', '', 'was inserted' FROM t0_template
 
6910
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6911
ERROR 22012: Division by 0
 
6912
COMMIT;
 
6913
        
 
6914
# check transactions-8 success:         1
 
6915
# INFO: Storage engine used for t1 seems to be unable to revert
 
6916
#       changes made by the failing statement.
 
6917
SET @@session.sql_mode = '';
 
6918
SET AUTOCOMMIT= 1;
 
6919
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6920
COMMIT WORK;
 
6921
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6922
        
 
6923
# check special-1 success:      1
 
6924
UPDATE t1 SET f_charbig = '';
 
6925
        
 
6926
# check special-2 success:      1
 
6927
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6928
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6929
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6930
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6931
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6932
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6933
'just inserted' FROM t0_template
 
6934
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6935
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6936
BEGIN
 
6937
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6938
f_charbig = 'updated by trigger'
 
6939
      WHERE f_int1 = new.f_int1;
 
6940
END|
 
6941
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6942
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6943
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6944
        
 
6945
# check trigger-1 success:      1
 
6946
DROP TRIGGER trg_1;
 
6947
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6948
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6949
f_charbig = 'just inserted'
 
6950
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6951
DELETE FROM t0_aux
 
6952
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6953
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6954
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6955
'just inserted' FROM t0_template
 
6956
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6957
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6958
BEGIN
 
6959
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6960
f_charbig = 'updated by trigger'
 
6961
      WHERE f_int1 = new.f_int1;
 
6962
END|
 
6963
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6964
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6965
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6966
        
 
6967
# check trigger-2 success:      1
 
6968
DROP TRIGGER trg_1;
 
6969
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6970
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6971
f_charbig = 'just inserted'
 
6972
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6973
DELETE FROM t0_aux
 
6974
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6975
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6976
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6977
'just inserted' FROM t0_template
 
6978
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6979
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6980
BEGIN
 
6981
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6982
f_charbig = 'updated by trigger'
 
6983
      WHERE f_int1 = new.f_int1;
 
6984
END|
 
6985
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6986
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6987
        
 
6988
# check trigger-3 success:      1
 
6989
DROP TRIGGER trg_1;
 
6990
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6991
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6992
f_charbig = 'just inserted'
 
6993
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6994
DELETE FROM t0_aux
 
6995
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6996
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6997
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6998
'just inserted' FROM t0_template
 
6999
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7000
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7001
BEGIN
 
7002
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7003
f_charbig = 'updated by trigger'
 
7004
      WHERE f_int1 = - old.f_int1;
 
7005
END|
 
7006
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7007
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7008
        
 
7009
# check trigger-4 success:      1
 
7010
DROP TRIGGER trg_1;
 
7011
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7012
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7013
f_charbig = 'just inserted'
 
7014
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7015
DELETE FROM t0_aux
 
7016
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7017
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7018
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7019
'just inserted' FROM t0_template
 
7020
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7021
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7022
BEGIN
 
7023
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7024
f_charbig = 'updated by trigger'
 
7025
      WHERE f_int1 = new.f_int1;
 
7026
END|
 
7027
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7028
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7029
        
 
7030
# check trigger-5 success:      1
 
7031
DROP TRIGGER trg_1;
 
7032
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7033
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7034
f_charbig = 'just inserted'
 
7035
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7036
DELETE FROM t0_aux
 
7037
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7038
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7039
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7040
'just inserted' FROM t0_template
 
7041
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7042
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7043
BEGIN
 
7044
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7045
f_charbig = 'updated by trigger'
 
7046
      WHERE f_int1 = - old.f_int1;
 
7047
END|
 
7048
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7049
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7050
        
 
7051
# check trigger-6 success:      1
 
7052
DROP TRIGGER trg_1;
 
7053
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7054
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7055
f_charbig = 'just inserted'
 
7056
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7057
DELETE FROM t0_aux
 
7058
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7059
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7060
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7061
'just inserted' FROM t0_template
 
7062
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7063
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
7064
BEGIN
 
7065
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7066
f_charbig = 'updated by trigger'
 
7067
      WHERE f_int1 = - old.f_int1;
 
7068
END|
 
7069
DELETE FROM t0_aux
 
7070
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7071
        
 
7072
# check trigger-7 success:      1
 
7073
DROP TRIGGER trg_1;
 
7074
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7075
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7076
f_charbig = 'just inserted'
 
7077
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7078
DELETE FROM t0_aux
 
7079
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7080
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7081
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7082
'just inserted' FROM t0_template
 
7083
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7084
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
7085
BEGIN
 
7086
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7087
f_charbig = 'updated by trigger'
 
7088
      WHERE f_int1 = - old.f_int1;
 
7089
END|
 
7090
DELETE FROM t0_aux
 
7091
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7092
        
 
7093
# check trigger-8 success:      1
 
7094
DROP TRIGGER trg_1;
 
7095
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7096
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7097
f_charbig = 'just inserted'
 
7098
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7099
DELETE FROM t0_aux
 
7100
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7101
DELETE FROM t1
 
7102
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7103
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7104
BEGIN
 
7105
SET new.f_int1 = old.f_int1 + @max_row,
 
7106
new.f_int2 = old.f_int2 - @max_row,
 
7107
new.f_charbig = '####updated per update trigger####';
 
7108
END|
 
7109
UPDATE t1
 
7110
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7111
f_charbig = '####updated per update statement itself####';
 
7112
        
 
7113
# check trigger-9 success:      1
 
7114
DROP TRIGGER trg_2;
 
7115
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7116
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7117
f_charbig = CONCAT('===',f_char1,'===');
 
7118
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7119
BEGIN
 
7120
SET new.f_int1 = new.f_int1 + @max_row,
 
7121
new.f_int2 = new.f_int2 - @max_row,
 
7122
new.f_charbig = '####updated per update trigger####';
 
7123
END|
 
7124
UPDATE t1
 
7125
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7126
f_charbig = '####updated per update statement itself####';
 
7127
        
 
7128
# check trigger-10 success:     1
 
7129
DROP TRIGGER trg_2;
 
7130
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7131
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7132
f_charbig = CONCAT('===',f_char1,'===');
 
7133
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7134
BEGIN
 
7135
SET new.f_int1 = @my_max1 + @counter,
 
7136
new.f_int2 = @my_min2 - @counter,
 
7137
new.f_charbig = '####updated per insert trigger####';
 
7138
SET @counter = @counter + 1;
 
7139
END|
 
7140
SET @counter = 1;
 
7141
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7142
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7143
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7144
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7145
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7146
ORDER BY f_int1;
 
7147
DROP TRIGGER trg_3;
 
7148
        
 
7149
# check trigger-11 success:     1
 
7150
DELETE FROM t1
 
7151
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7152
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7153
AND f_charbig = '####updated per insert trigger####';
 
7154
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7155
BEGIN
 
7156
SET new.f_int1 = @my_max1 + @counter,
 
7157
new.f_int2 = @my_min2 - @counter,
 
7158
new.f_charbig = '####updated per insert trigger####';
 
7159
SET @counter = @counter + 1;
 
7160
END|
 
7161
SET @counter = 1;
 
7162
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7163
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
7164
SELECT CAST(f_int1 AS CHAR),
 
7165
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7166
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7167
ORDER BY f_int1;
 
7168
DROP TRIGGER trg_3;
 
7169
        
 
7170
# check trigger-12 success:     1
 
7171
DELETE FROM t1
 
7172
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7173
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7174
AND f_charbig = '####updated per insert trigger####';
 
7175
ANALYZE  TABLE t1;
 
7176
Table   Op      Msg_type        Msg_text
 
7177
test.t1 analyze status  OK
 
7178
CHECK    TABLE t1 EXTENDED;
 
7179
Table   Op      Msg_type        Msg_text
 
7180
test.t1 check   status  OK
 
7181
CHECKSUM TABLE t1 EXTENDED;
 
7182
Table   Checksum
 
7183
test.t1 <some_value>
 
7184
OPTIMIZE TABLE t1;
 
7185
Table   Op      Msg_type        Msg_text
 
7186
test.t1 optimize        status  OK
 
7187
# check layout success:    1
 
7188
REPAIR   TABLE t1 EXTENDED;
 
7189
Table   Op      Msg_type        Msg_text
 
7190
test.t1 repair  status  OK
 
7191
# check layout success:    1
 
7192
TRUNCATE t1;
 
7193
        
 
7194
# check TRUNCATE success:       1
 
7195
# check layout success:    1
 
7196
# End usability test (inc/partition_check.inc)
 
7197
DROP TABLE t1;
 
7198
CREATE TABLE t1 (
 
7199
f_int1 INTEGER,
 
7200
f_int2 INTEGER,
 
7201
f_char1 CHAR(20),
 
7202
f_char2 CHAR(20),
 
7203
f_charbig VARCHAR(1000)
 
7204
 
 
7205
)
 
7206
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
7207
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
7208
(PARTITION part_1 VALUES IN (0),
 
7209
 PARTITION part_2 VALUES IN (1),
 
7210
 PARTITION part_3 VALUES IN (NULL));
 
7211
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7212
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7213
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7214
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
 
7215
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7216
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7217
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
7218
# Start usability test (inc/partition_check.inc)
 
7219
create_command
 
7220
SHOW CREATE TABLE t1;
 
7221
Table   Create Table
 
7222
t1      CREATE TABLE `t1` (
 
7223
  `f_int1` int(11) DEFAULT NULL,
 
7224
  `f_int2` int(11) DEFAULT NULL,
 
7225
  `f_char1` char(20) DEFAULT NULL,
 
7226
  `f_char2` char(20) DEFAULT NULL,
 
7227
  `f_charbig` varchar(1000) DEFAULT NULL
 
7228
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */
 
7229
 
 
7230
unified filelist
 
7231
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
7232
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
7233
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
7234
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
7235
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYD
 
7236
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYI
 
7237
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
7238
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
7239
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
7240
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
7241
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYD
 
7242
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYI
 
7243
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
7244
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
7245
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
7246
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
7247
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYD
 
7248
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYI
 
7249
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
7250
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
7251
 
 
7252
# check prerequisites-1 success:    1
 
7253
# check COUNT(*) success:    1
 
7254
# check MIN/MAX(f_int1) success:    1
 
7255
# check MIN/MAX(f_int2) success:    1
 
7256
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7257
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7258
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
7259
WHERE f_int1 IN (2,3);
 
7260
# check prerequisites-3 success:    1
 
7261
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
7262
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
7263
# check read via f_int1 success: 1
 
7264
# check read via f_int2 success: 1
 
7265
        
 
7266
# check multiple-1 success:     1
 
7267
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
7268
        
 
7269
# check multiple-2 success:     1
 
7270
INSERT INTO t1 SELECT * FROM t0_template
 
7271
WHERE MOD(f_int1,3) = 0;
 
7272
        
 
7273
# check multiple-3 success:     1
 
7274
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
7275
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
7276
AND @max_row_div2 + @max_row_div4;
 
7277
        
 
7278
# check multiple-4 success:     1
 
7279
DELETE FROM t1
 
7280
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
7281
AND @max_row_div2 + @max_row_div4 + @max_row;
 
7282
        
 
7283
# check multiple-5 success:     1
 
7284
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
7285
INSERT INTO t1
 
7286
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7287
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7288
f_charbig = '#SINGLE#';
 
7289
        
 
7290
# check single-1 success:       1
 
7291
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
7292
INSERT INTO t1
 
7293
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
7294
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
7295
f_charbig = '#SINGLE#';
 
7296
        
 
7297
# check single-2 success:       1
 
7298
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
7299
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
7300
UPDATE t1 SET f_int1 = @cur_value2
 
7301
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
7302
        
 
7303
# check single-3 success:       1
 
7304
SET @cur_value1= -1;
 
7305
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
7306
UPDATE t1 SET f_int1 = @cur_value1
 
7307
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
7308
        
 
7309
# check single-4 success:       1
 
7310
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
7311
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
7312
        
 
7313
# check single-5 success:       1
 
7314
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
7315
        
 
7316
# check single-6 success:       1
 
7317
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
7318
        
 
7319
# check single-7 success:       1
 
7320
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
7321
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
7322
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
7323
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
7324
f_charbig = '#NULL#';
 
7325
INSERT INTO t1
 
7326
SET f_int1 = NULL , f_int2 = -@max_row,
 
7327
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
7328
f_charbig = '#NULL#';
 
7329
# check null success:    1
 
7330
        
 
7331
# check null-1 success:         1
 
7332
UPDATE t1 SET f_int1 = -@max_row
 
7333
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7334
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7335
        
 
7336
# check null-2 success:         1
 
7337
UPDATE t1 SET f_int1 = NULL
 
7338
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7339
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7340
        
 
7341
# check null-3 success:         1
 
7342
DELETE FROM t1
 
7343
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
7344
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
7345
        
 
7346
# check null-4 success:         1
 
7347
DELETE FROM t1
 
7348
WHERE f_int1 = 0 AND f_int2 = 0
 
7349
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
7350
AND f_charbig = '#NULL#';
 
7351
SET AUTOCOMMIT= 0;
 
7352
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7353
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7354
FROM t0_template source_tab
 
7355
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7356
        
 
7357
# check transactions-1 success:         1
 
7358
COMMIT WORK;
 
7359
        
 
7360
# check transactions-2 success:         1
 
7361
ROLLBACK WORK;
 
7362
        
 
7363
# check transactions-3 success:         1
 
7364
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7365
COMMIT WORK;
 
7366
ROLLBACK WORK;
 
7367
        
 
7368
# check transactions-4 success:         1
 
7369
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7370
SELECT f_int1, f_int1, '', '', 'was inserted'
 
7371
FROM t0_template source_tab
 
7372
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7373
        
 
7374
# check transactions-5 success:         1
 
7375
ROLLBACK WORK;
 
7376
Warnings:
 
7377
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
7378
        
 
7379
# check transactions-6 success:         1
 
7380
# INFO: Storage engine used for t1 seems to be not transactional.
 
7381
COMMIT;
 
7382
        
 
7383
# check transactions-7 success:         1
 
7384
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7385
COMMIT WORK;
 
7386
SET @@session.sql_mode = 'traditional';
 
7387
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
7388
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7389
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
7390
'', '', 'was inserted' FROM t0_template
 
7391
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
7392
ERROR 22012: Division by 0
 
7393
COMMIT;
 
7394
        
 
7395
# check transactions-8 success:         1
 
7396
# INFO: Storage engine used for t1 seems to be unable to revert
 
7397
#       changes made by the failing statement.
 
7398
SET @@session.sql_mode = '';
 
7399
SET AUTOCOMMIT= 1;
 
7400
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
7401
COMMIT WORK;
 
7402
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
7403
        
 
7404
# check special-1 success:      1
 
7405
UPDATE t1 SET f_charbig = '';
 
7406
        
 
7407
# check special-2 success:      1
 
7408
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
7409
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7410
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
7411
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7412
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7413
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7414
'just inserted' FROM t0_template
 
7415
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7416
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
7417
BEGIN
 
7418
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7419
f_charbig = 'updated by trigger'
 
7420
      WHERE f_int1 = new.f_int1;
 
7421
END|
 
7422
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7423
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7424
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7425
        
 
7426
# check trigger-1 success:      1
 
7427
DROP TRIGGER trg_1;
 
7428
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7429
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7430
f_charbig = 'just inserted'
 
7431
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7432
DELETE FROM t0_aux
 
7433
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7434
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7435
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7436
'just inserted' FROM t0_template
 
7437
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7438
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
7439
BEGIN
 
7440
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7441
f_charbig = 'updated by trigger'
 
7442
      WHERE f_int1 = new.f_int1;
 
7443
END|
 
7444
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7445
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
7446
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7447
        
 
7448
# check trigger-2 success:      1
 
7449
DROP TRIGGER trg_1;
 
7450
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7451
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7452
f_charbig = 'just inserted'
 
7453
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7454
DELETE FROM t0_aux
 
7455
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7456
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7457
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7458
'just inserted' FROM t0_template
 
7459
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7460
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7461
BEGIN
 
7462
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7463
f_charbig = 'updated by trigger'
 
7464
      WHERE f_int1 = new.f_int1;
 
7465
END|
 
7466
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7467
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7468
        
 
7469
# check trigger-3 success:      1
 
7470
DROP TRIGGER trg_1;
 
7471
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7472
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7473
f_charbig = 'just inserted'
 
7474
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7475
DELETE FROM t0_aux
 
7476
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7477
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7478
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7479
'just inserted' FROM t0_template
 
7480
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7481
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
7482
BEGIN
 
7483
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7484
f_charbig = 'updated by trigger'
 
7485
      WHERE f_int1 = - old.f_int1;
 
7486
END|
 
7487
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7488
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7489
        
 
7490
# check trigger-4 success:      1
 
7491
DROP TRIGGER trg_1;
 
7492
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7493
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7494
f_charbig = 'just inserted'
 
7495
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7496
DELETE FROM t0_aux
 
7497
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7498
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7499
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7500
'just inserted' FROM t0_template
 
7501
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7502
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7503
BEGIN
 
7504
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7505
f_charbig = 'updated by trigger'
 
7506
      WHERE f_int1 = new.f_int1;
 
7507
END|
 
7508
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7509
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7510
        
 
7511
# check trigger-5 success:      1
 
7512
DROP TRIGGER trg_1;
 
7513
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7514
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7515
f_charbig = 'just inserted'
 
7516
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7517
DELETE FROM t0_aux
 
7518
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7519
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7520
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7521
'just inserted' FROM t0_template
 
7522
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7523
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
7524
BEGIN
 
7525
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7526
f_charbig = 'updated by trigger'
 
7527
      WHERE f_int1 = - old.f_int1;
 
7528
END|
 
7529
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
7530
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7531
        
 
7532
# check trigger-6 success:      1
 
7533
DROP TRIGGER trg_1;
 
7534
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7535
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7536
f_charbig = 'just inserted'
 
7537
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7538
DELETE FROM t0_aux
 
7539
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7540
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7541
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7542
'just inserted' FROM t0_template
 
7543
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7544
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
7545
BEGIN
 
7546
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7547
f_charbig = 'updated by trigger'
 
7548
      WHERE f_int1 = - old.f_int1;
 
7549
END|
 
7550
DELETE FROM t0_aux
 
7551
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7552
        
 
7553
# check trigger-7 success:      1
 
7554
DROP TRIGGER trg_1;
 
7555
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7556
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7557
f_charbig = 'just inserted'
 
7558
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7559
DELETE FROM t0_aux
 
7560
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7561
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7562
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
7563
'just inserted' FROM t0_template
 
7564
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7565
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
7566
BEGIN
 
7567
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
7568
f_charbig = 'updated by trigger'
 
7569
      WHERE f_int1 = - old.f_int1;
 
7570
END|
 
7571
DELETE FROM t0_aux
 
7572
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
7573
        
 
7574
# check trigger-8 success:      1
 
7575
DROP TRIGGER trg_1;
 
7576
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7577
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7578
f_charbig = 'just inserted'
 
7579
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
7580
DELETE FROM t0_aux
 
7581
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7582
DELETE FROM t1
 
7583
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
7584
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7585
BEGIN
 
7586
SET new.f_int1 = old.f_int1 + @max_row,
 
7587
new.f_int2 = old.f_int2 - @max_row,
 
7588
new.f_charbig = '####updated per update trigger####';
 
7589
END|
 
7590
UPDATE t1
 
7591
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7592
f_charbig = '####updated per update statement itself####';
 
7593
        
 
7594
# check trigger-9 success:      1
 
7595
DROP TRIGGER trg_2;
 
7596
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7597
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7598
f_charbig = CONCAT('===',f_char1,'===');
 
7599
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
7600
BEGIN
 
7601
SET new.f_int1 = new.f_int1 + @max_row,
 
7602
new.f_int2 = new.f_int2 - @max_row,
 
7603
new.f_charbig = '####updated per update trigger####';
 
7604
END|
 
7605
UPDATE t1
 
7606
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
7607
f_charbig = '####updated per update statement itself####';
 
7608
        
 
7609
# check trigger-10 success:     1
 
7610
DROP TRIGGER trg_2;
 
7611
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
7612
f_int2 = CAST(f_char1 AS SIGNED INT),
 
7613
f_charbig = CONCAT('===',f_char1,'===');
 
7614
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7615
BEGIN
 
7616
SET new.f_int1 = @my_max1 + @counter,
 
7617
new.f_int2 = @my_min2 - @counter,
 
7618
new.f_charbig = '####updated per insert trigger####';
 
7619
SET @counter = @counter + 1;
 
7620
END|
 
7621
SET @counter = 1;
 
7622
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7623
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
7624
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
7625
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7626
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7627
ORDER BY f_int1;
 
7628
DROP TRIGGER trg_3;
 
7629
        
 
7630
# check trigger-11 success:     1
 
7631
DELETE FROM t1
 
7632
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7633
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7634
AND f_charbig = '####updated per insert trigger####';
 
7635
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
7636
BEGIN
 
7637
SET new.f_int1 = @my_max1 + @counter,
 
7638
new.f_int2 = @my_min2 - @counter,
 
7639
new.f_charbig = '####updated per insert trigger####';
 
7640
SET @counter = @counter + 1;
 
7641
END|
 
7642
SET @counter = 1;
 
7643
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
7644
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
7645
SELECT CAST(f_int1 AS CHAR),
 
7646
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
7647
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
7648
ORDER BY f_int1;
 
7649
DROP TRIGGER trg_3;
 
7650
        
 
7651
# check trigger-12 success:     1
 
7652
DELETE FROM t1
 
7653
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
7654
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
7655
AND f_charbig = '####updated per insert trigger####';
 
7656
ANALYZE  TABLE t1;
 
7657
Table   Op      Msg_type        Msg_text
 
7658
test.t1 analyze status  OK
 
7659
CHECK    TABLE t1 EXTENDED;
 
7660
Table   Op      Msg_type        Msg_text
 
7661
test.t1 check   status  OK
 
7662
CHECKSUM TABLE t1 EXTENDED;
 
7663
Table   Checksum
 
7664
test.t1 <some_value>
 
7665
OPTIMIZE TABLE t1;
 
7666
Table   Op      Msg_type        Msg_text
 
7667
test.t1 optimize        status  OK
 
7668
# check layout success:    1
 
7669
REPAIR   TABLE t1 EXTENDED;
 
7670
Table   Op      Msg_type        Msg_text
 
7671
test.t1 repair  status  OK
 
7672
# check layout success:    1
 
7673
TRUNCATE t1;
 
7674
        
 
7675
# check TRUNCATE success:       1
 
7676
# check layout success:    1
 
7677
# End usability test (inc/partition_check.inc)
 
7678
DROP TABLE t1;
 
7679
#  1.3 ALTER ... ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7680
DROP TABLE IF EXISTS t1;
 
7681
CREATE TABLE t1 (
 
7682
f_int1 INTEGER,
 
7683
f_int2 INTEGER,
 
7684
f_char1 CHAR(20),
 
7685
f_char2 CHAR(20),
 
7686
f_charbig VARCHAR(1000)
 
7687
 
 
7688
)
 
7689
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
7690
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7691
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7692
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7693
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7694
ERROR HY000: Error in list of partitions to ANALYZE
 
7695
DROP TABLE t1;
 
7696
CREATE TABLE t1 (
 
7697
f_int1 INTEGER,
 
7698
f_int2 INTEGER,
 
7699
f_char1 CHAR(20),
 
7700
f_char2 CHAR(20),
 
7701
f_charbig VARCHAR(1000)
 
7702
 
 
7703
)
 
7704
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
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 1 AND @max_row_div2 - 1;
 
7708
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7709
ERROR HY000: Error in list of partitions to ANALYZE
 
7710
DROP TABLE t1;
 
7711
CREATE TABLE t1 (
 
7712
f_int1 INTEGER,
 
7713
f_int2 INTEGER,
 
7714
f_char1 CHAR(20),
 
7715
f_char2 CHAR(20),
 
7716
f_charbig VARCHAR(1000)
 
7717
 
 
7718
)
 
7719
PARTITION BY LIST(MOD(f_int1,4))
 
7720
(PARTITION part_3 VALUES IN (-3),
 
7721
PARTITION part_2 VALUES IN (-2),
 
7722
PARTITION part_1 VALUES IN (-1),
 
7723
PARTITION part_N VALUES IN (NULL),
 
7724
PARTITION part0 VALUES IN (0),
 
7725
PARTITION part1 VALUES IN (1),
 
7726
PARTITION part2 VALUES IN (2),
 
7727
PARTITION part3 VALUES IN (3));
 
7728
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7729
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7730
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7731
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7732
ERROR HY000: Error in list of partitions to ANALYZE
 
7733
DROP TABLE t1;
 
7734
CREATE TABLE t1 (
 
7735
f_int1 INTEGER,
 
7736
f_int2 INTEGER,
 
7737
f_char1 CHAR(20),
 
7738
f_char2 CHAR(20),
 
7739
f_charbig VARCHAR(1000)
 
7740
 
 
7741
)
 
7742
PARTITION BY RANGE(f_int1)
 
7743
(PARTITION parta VALUES LESS THAN (0),
 
7744
PARTITION part_1 VALUES LESS THAN (5),
 
7745
PARTITION part_2 VALUES LESS THAN (10),
 
7746
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
7747
PARTITION part_4 VALUES LESS THAN (20),
 
7748
PARTITION part_5 VALUES LESS THAN (2147483646));
 
7749
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7750
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7751
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7752
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7753
ERROR HY000: Error in list of partitions to ANALYZE
 
7754
DROP TABLE t1;
 
7755
CREATE TABLE t1 (
 
7756
f_int1 INTEGER,
 
7757
f_int2 INTEGER,
 
7758
f_char1 CHAR(20),
 
7759
f_char2 CHAR(20),
 
7760
f_charbig VARCHAR(1000)
 
7761
 
 
7762
)
 
7763
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
7764
(PARTITION part_1 VALUES LESS THAN (0),
 
7765
PARTITION part_2 VALUES LESS THAN (5),
 
7766
PARTITION part_3 VALUES LESS THAN (10),
 
7767
PARTITION part_4 VALUES LESS THAN (2147483646));
 
7768
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7769
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7770
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7771
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7772
ERROR HY000: Error in list of partitions to ANALYZE
 
7773
DROP TABLE t1;
 
7774
CREATE TABLE t1 (
 
7775
f_int1 INTEGER,
 
7776
f_int2 INTEGER,
 
7777
f_char1 CHAR(20),
 
7778
f_char2 CHAR(20),
 
7779
f_charbig VARCHAR(1000)
 
7780
 
 
7781
)
 
7782
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
7783
(PARTITION part_1 VALUES LESS THAN (0)
 
7784
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
7785
PARTITION part_2 VALUES LESS THAN (5)
 
7786
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
7787
PARTITION part_3 VALUES LESS THAN (10)
 
7788
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
7789
PARTITION part_4 VALUES LESS THAN (2147483646)
 
7790
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
7791
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7792
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7793
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7794
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7795
ERROR HY000: Error in list of partitions to ANALYZE
 
7796
DROP TABLE t1;
 
7797
CREATE TABLE t1 (
 
7798
f_int1 INTEGER,
 
7799
f_int2 INTEGER,
 
7800
f_char1 CHAR(20),
 
7801
f_char2 CHAR(20),
 
7802
f_charbig VARCHAR(1000)
 
7803
 
 
7804
)
 
7805
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
7806
(PARTITION part_1 VALUES IN (0)
 
7807
(SUBPARTITION sp11, SUBPARTITION sp12),
 
7808
PARTITION part_2 VALUES IN (1)
 
7809
(SUBPARTITION sp21, SUBPARTITION sp22),
 
7810
PARTITION part_3 VALUES IN (2)
 
7811
(SUBPARTITION sp31, SUBPARTITION sp32),
 
7812
PARTITION part_4 VALUES IN (NULL)
 
7813
(SUBPARTITION sp41, SUBPARTITION sp42));
 
7814
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7815
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7816
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7817
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7818
ERROR HY000: Error in list of partitions to ANALYZE
 
7819
DROP TABLE t1;
 
7820
CREATE TABLE t1 (
 
7821
f_int1 INTEGER,
 
7822
f_int2 INTEGER,
 
7823
f_char1 CHAR(20),
 
7824
f_char2 CHAR(20),
 
7825
f_charbig VARCHAR(1000)
 
7826
 
 
7827
)
 
7828
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
7829
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
7830
(PARTITION part_1 VALUES IN (0),
 
7831
 PARTITION part_2 VALUES IN (1),
 
7832
 PARTITION part_3 VALUES IN (NULL));
 
7833
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7834
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7835
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7836
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
7837
ERROR HY000: Error in list of partitions to ANALYZE
 
7838
DROP TABLE t1;
 
7839
#  1.4 ALTER ... ANALYZE PARTITION part_1,part_1,part_1;
 
7840
DROP TABLE IF EXISTS t1;
 
7841
CREATE TABLE t1 (
 
7842
f_int1 INTEGER,
 
7843
f_int2 INTEGER,
 
7844
f_char1 CHAR(20),
 
7845
f_char2 CHAR(20),
 
7846
f_charbig VARCHAR(1000)
 
7847
 
 
7848
)
 
7849
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
7850
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7851
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7852
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7853
ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
 
7854
ERROR HY000: Error in list of partitions to ANALYZE
 
7855
DROP TABLE t1;
 
7856
CREATE TABLE t1 (
 
7857
f_int1 INTEGER,
 
7858
f_int2 INTEGER,
 
7859
f_char1 CHAR(20),
 
7860
f_char2 CHAR(20),
 
7861
f_charbig VARCHAR(1000)
 
7862
 
 
7863
)
 
7864
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
7865
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7866
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7867
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7868
ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
 
7869
ERROR HY000: Error in list of partitions to ANALYZE
 
7870
DROP TABLE t1;
 
7871
CREATE TABLE t1 (
 
7872
f_int1 INTEGER,
 
7873
f_int2 INTEGER,
 
7874
f_char1 CHAR(20),
 
7875
f_char2 CHAR(20),
 
7876
f_charbig VARCHAR(1000)
 
7877
 
 
7878
)
 
7879
PARTITION BY LIST(MOD(f_int1,4))
 
7880
(PARTITION part_3 VALUES IN (-3),
 
7881
PARTITION part_2 VALUES IN (-2),
 
7882
PARTITION part_1 VALUES IN (-1),
 
7883
PARTITION part_N VALUES IN (NULL),
 
7884
PARTITION part0 VALUES IN (0),
 
7885
PARTITION part1 VALUES IN (1),
 
7886
PARTITION part2 VALUES IN (2),
 
7887
PARTITION part3 VALUES IN (3));
 
7888
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7889
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7890
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7891
ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
 
7892
ERROR HY000: Error in list of partitions to ANALYZE
 
7893
DROP TABLE t1;
 
7894
CREATE TABLE t1 (
 
7895
f_int1 INTEGER,
 
7896
f_int2 INTEGER,
 
7897
f_char1 CHAR(20),
 
7898
f_char2 CHAR(20),
 
7899
f_charbig VARCHAR(1000)
 
7900
 
 
7901
)
 
7902
PARTITION BY RANGE(f_int1)
 
7903
(PARTITION parta VALUES LESS THAN (0),
 
7904
PARTITION part_1 VALUES LESS THAN (5),
 
7905
PARTITION part_2 VALUES LESS THAN (10),
 
7906
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
7907
PARTITION part_4 VALUES LESS THAN (20),
 
7908
PARTITION part_5 VALUES LESS THAN (2147483646));
 
7909
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7910
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7911
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7912
ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
 
7913
ERROR HY000: Error in list of partitions to ANALYZE
 
7914
DROP TABLE t1;
 
7915
CREATE TABLE t1 (
 
7916
f_int1 INTEGER,
 
7917
f_int2 INTEGER,
 
7918
f_char1 CHAR(20),
 
7919
f_char2 CHAR(20),
 
7920
f_charbig VARCHAR(1000)
 
7921
 
 
7922
)
 
7923
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
7924
(PARTITION part_1 VALUES LESS THAN (0),
 
7925
PARTITION part_2 VALUES LESS THAN (5),
 
7926
PARTITION part_3 VALUES LESS THAN (10),
 
7927
PARTITION part_4 VALUES LESS THAN (2147483646));
 
7928
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7929
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7930
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7931
ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
 
7932
ERROR HY000: Error in list of partitions to ANALYZE
 
7933
DROP TABLE t1;
 
7934
CREATE TABLE t1 (
 
7935
f_int1 INTEGER,
 
7936
f_int2 INTEGER,
 
7937
f_char1 CHAR(20),
 
7938
f_char2 CHAR(20),
 
7939
f_charbig VARCHAR(1000)
 
7940
 
 
7941
)
 
7942
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
7943
(PARTITION part_1 VALUES LESS THAN (0)
 
7944
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
7945
PARTITION part_2 VALUES LESS THAN (5)
 
7946
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
7947
PARTITION part_3 VALUES LESS THAN (10)
 
7948
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
7949
PARTITION part_4 VALUES LESS THAN (2147483646)
 
7950
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
7951
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7952
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7953
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7954
ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
 
7955
ERROR HY000: Error in list of partitions to ANALYZE
 
7956
DROP TABLE t1;
 
7957
CREATE TABLE t1 (
 
7958
f_int1 INTEGER,
 
7959
f_int2 INTEGER,
 
7960
f_char1 CHAR(20),
 
7961
f_char2 CHAR(20),
 
7962
f_charbig VARCHAR(1000)
 
7963
 
 
7964
)
 
7965
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
7966
(PARTITION part_1 VALUES IN (0)
 
7967
(SUBPARTITION sp11, SUBPARTITION sp12),
 
7968
PARTITION part_2 VALUES IN (1)
 
7969
(SUBPARTITION sp21, SUBPARTITION sp22),
 
7970
PARTITION part_3 VALUES IN (2)
 
7971
(SUBPARTITION sp31, SUBPARTITION sp32),
 
7972
PARTITION part_4 VALUES IN (NULL)
 
7973
(SUBPARTITION sp41, SUBPARTITION sp42));
 
7974
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7975
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7976
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7977
ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
 
7978
ERROR HY000: Error in list of partitions to ANALYZE
 
7979
DROP TABLE t1;
 
7980
CREATE TABLE t1 (
 
7981
f_int1 INTEGER,
 
7982
f_int2 INTEGER,
 
7983
f_char1 CHAR(20),
 
7984
f_char2 CHAR(20),
 
7985
f_charbig VARCHAR(1000)
 
7986
 
 
7987
)
 
7988
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
7989
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
7990
(PARTITION part_1 VALUES IN (0),
 
7991
 PARTITION part_2 VALUES IN (1),
 
7992
 PARTITION part_3 VALUES IN (NULL));
 
7993
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
7994
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
7995
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
7996
ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
 
7997
ERROR HY000: Error in list of partitions to ANALYZE
 
7998
DROP TABLE t1;
 
7999
#------------------------------------------------------------------------
 
8000
#  2   ALTER ... CHECK PARTITION
 
8001
#------------------------------------------------------------------------
 
8002
#  2.1 ALTER ... CHECK PARTITION part_1;
 
8003
DROP TABLE IF EXISTS t1;
 
8004
CREATE TABLE t1 (
 
8005
f_int1 INTEGER,
 
8006
f_int2 INTEGER,
 
8007
f_char1 CHAR(20),
 
8008
f_char2 CHAR(20),
 
8009
f_charbig VARCHAR(1000)
 
8010
 
 
8011
)
 
8012
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
8013
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8014
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8015
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
8016
ALTER TABLE t1 CHECK PARTITION part_1;
 
8017
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8018
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8019
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8020
# Start usability test (inc/partition_check.inc)
 
8021
create_command
 
8022
SHOW CREATE TABLE t1;
 
8023
Table   Create Table
 
8024
t1      CREATE TABLE `t1` (
 
8025
  `f_int1` int(11) DEFAULT NULL,
 
8026
  `f_int2` int(11) DEFAULT NULL,
 
8027
  `f_char1` char(20) DEFAULT NULL,
 
8028
  `f_char2` char(20) DEFAULT NULL,
 
8029
  `f_charbig` varchar(1000) DEFAULT NULL
 
8030
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */
 
8031
 
 
8032
unified filelist
 
8033
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
8034
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
8035
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
8036
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
8037
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
8038
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
8039
 
 
8040
# check prerequisites-1 success:    1
 
8041
# check COUNT(*) success:    1
 
8042
# check MIN/MAX(f_int1) success:    1
 
8043
# check MIN/MAX(f_int2) success:    1
 
8044
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8045
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8046
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8047
WHERE f_int1 IN (2,3);
 
8048
# check prerequisites-3 success:    1
 
8049
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8050
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
8051
# check read via f_int1 success: 1
 
8052
# check read via f_int2 success: 1
 
8053
        
 
8054
# check multiple-1 success:     1
 
8055
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8056
        
 
8057
# check multiple-2 success:     1
 
8058
INSERT INTO t1 SELECT * FROM t0_template
 
8059
WHERE MOD(f_int1,3) = 0;
 
8060
        
 
8061
# check multiple-3 success:     1
 
8062
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8063
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8064
AND @max_row_div2 + @max_row_div4;
 
8065
        
 
8066
# check multiple-4 success:     1
 
8067
DELETE FROM t1
 
8068
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8069
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8070
        
 
8071
# check multiple-5 success:     1
 
8072
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8073
INSERT INTO t1
 
8074
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8075
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8076
f_charbig = '#SINGLE#';
 
8077
        
 
8078
# check single-1 success:       1
 
8079
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8080
INSERT INTO t1
 
8081
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8082
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8083
f_charbig = '#SINGLE#';
 
8084
        
 
8085
# check single-2 success:       1
 
8086
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8087
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8088
UPDATE t1 SET f_int1 = @cur_value2
 
8089
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8090
        
 
8091
# check single-3 success:       1
 
8092
SET @cur_value1= -1;
 
8093
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8094
UPDATE t1 SET f_int1 = @cur_value1
 
8095
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8096
        
 
8097
# check single-4 success:       1
 
8098
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8099
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8100
        
 
8101
# check single-5 success:       1
 
8102
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8103
        
 
8104
# check single-6 success:       1
 
8105
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8106
        
 
8107
# check single-7 success:       1
 
8108
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
8109
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8110
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8111
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8112
f_charbig = '#NULL#';
 
8113
INSERT INTO t1
 
8114
SET f_int1 = NULL , f_int2 = -@max_row,
 
8115
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8116
f_charbig = '#NULL#';
 
8117
# check null success:    1
 
8118
        
 
8119
# check null-1 success:         1
 
8120
UPDATE t1 SET f_int1 = -@max_row
 
8121
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8122
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8123
        
 
8124
# check null-2 success:         1
 
8125
UPDATE t1 SET f_int1 = NULL
 
8126
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8127
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8128
        
 
8129
# check null-3 success:         1
 
8130
DELETE FROM t1
 
8131
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8132
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8133
        
 
8134
# check null-4 success:         1
 
8135
DELETE FROM t1
 
8136
WHERE f_int1 = 0 AND f_int2 = 0
 
8137
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8138
AND f_charbig = '#NULL#';
 
8139
SET AUTOCOMMIT= 0;
 
8140
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8141
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8142
FROM t0_template source_tab
 
8143
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8144
        
 
8145
# check transactions-1 success:         1
 
8146
COMMIT WORK;
 
8147
        
 
8148
# check transactions-2 success:         1
 
8149
ROLLBACK WORK;
 
8150
        
 
8151
# check transactions-3 success:         1
 
8152
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8153
COMMIT WORK;
 
8154
ROLLBACK WORK;
 
8155
        
 
8156
# check transactions-4 success:         1
 
8157
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8158
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8159
FROM t0_template source_tab
 
8160
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8161
        
 
8162
# check transactions-5 success:         1
 
8163
ROLLBACK WORK;
 
8164
Warnings:
 
8165
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
8166
        
 
8167
# check transactions-6 success:         1
 
8168
# INFO: Storage engine used for t1 seems to be not transactional.
 
8169
COMMIT;
 
8170
        
 
8171
# check transactions-7 success:         1
 
8172
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8173
COMMIT WORK;
 
8174
SET @@session.sql_mode = 'traditional';
 
8175
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
8176
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8177
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
8178
'', '', 'was inserted' FROM t0_template
 
8179
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8180
ERROR 22012: Division by 0
 
8181
COMMIT;
 
8182
        
 
8183
# check transactions-8 success:         1
 
8184
# INFO: Storage engine used for t1 seems to be unable to revert
 
8185
#       changes made by the failing statement.
 
8186
SET @@session.sql_mode = '';
 
8187
SET AUTOCOMMIT= 1;
 
8188
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8189
COMMIT WORK;
 
8190
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
8191
        
 
8192
# check special-1 success:      1
 
8193
UPDATE t1 SET f_charbig = '';
 
8194
        
 
8195
# check special-2 success:      1
 
8196
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
8197
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8198
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
8199
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8200
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8201
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8202
'just inserted' FROM t0_template
 
8203
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8204
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
8205
BEGIN
 
8206
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8207
f_charbig = 'updated by trigger'
 
8208
      WHERE f_int1 = new.f_int1;
 
8209
END|
 
8210
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8211
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8212
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8213
        
 
8214
# check trigger-1 success:      1
 
8215
DROP TRIGGER trg_1;
 
8216
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8217
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8218
f_charbig = 'just inserted'
 
8219
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8220
DELETE FROM t0_aux
 
8221
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8222
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8223
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8224
'just inserted' FROM t0_template
 
8225
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8226
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8227
BEGIN
 
8228
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8229
f_charbig = 'updated by trigger'
 
8230
      WHERE f_int1 = new.f_int1;
 
8231
END|
 
8232
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8233
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8234
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8235
        
 
8236
# check trigger-2 success:      1
 
8237
DROP TRIGGER trg_1;
 
8238
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8239
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8240
f_charbig = 'just inserted'
 
8241
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8242
DELETE FROM t0_aux
 
8243
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8244
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8245
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8246
'just inserted' FROM t0_template
 
8247
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8248
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8249
BEGIN
 
8250
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8251
f_charbig = 'updated by trigger'
 
8252
      WHERE f_int1 = new.f_int1;
 
8253
END|
 
8254
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8255
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8256
        
 
8257
# check trigger-3 success:      1
 
8258
DROP TRIGGER trg_1;
 
8259
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8260
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8261
f_charbig = 'just inserted'
 
8262
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8263
DELETE FROM t0_aux
 
8264
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8265
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8266
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8267
'just inserted' FROM t0_template
 
8268
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8269
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8270
BEGIN
 
8271
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8272
f_charbig = 'updated by trigger'
 
8273
      WHERE f_int1 = - old.f_int1;
 
8274
END|
 
8275
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8276
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8277
        
 
8278
# check trigger-4 success:      1
 
8279
DROP TRIGGER trg_1;
 
8280
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8281
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8282
f_charbig = 'just inserted'
 
8283
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8284
DELETE FROM t0_aux
 
8285
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8286
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8287
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8288
'just inserted' FROM t0_template
 
8289
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8290
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8291
BEGIN
 
8292
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8293
f_charbig = 'updated by trigger'
 
8294
      WHERE f_int1 = new.f_int1;
 
8295
END|
 
8296
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8297
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8298
        
 
8299
# check trigger-5 success:      1
 
8300
DROP TRIGGER trg_1;
 
8301
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8302
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8303
f_charbig = 'just inserted'
 
8304
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8305
DELETE FROM t0_aux
 
8306
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8307
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8308
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8309
'just inserted' FROM t0_template
 
8310
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8311
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8312
BEGIN
 
8313
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8314
f_charbig = 'updated by trigger'
 
8315
      WHERE f_int1 = - old.f_int1;
 
8316
END|
 
8317
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8318
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8319
        
 
8320
# check trigger-6 success:      1
 
8321
DROP TRIGGER trg_1;
 
8322
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8323
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8324
f_charbig = 'just inserted'
 
8325
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8326
DELETE FROM t0_aux
 
8327
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8328
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8329
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8330
'just inserted' FROM t0_template
 
8331
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8332
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8333
BEGIN
 
8334
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8335
f_charbig = 'updated by trigger'
 
8336
      WHERE f_int1 = - old.f_int1;
 
8337
END|
 
8338
DELETE FROM t0_aux
 
8339
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8340
        
 
8341
# check trigger-7 success:      1
 
8342
DROP TRIGGER trg_1;
 
8343
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8344
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8345
f_charbig = 'just inserted'
 
8346
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8347
DELETE FROM t0_aux
 
8348
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8349
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8350
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8351
'just inserted' FROM t0_template
 
8352
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8353
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8354
BEGIN
 
8355
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8356
f_charbig = 'updated by trigger'
 
8357
      WHERE f_int1 = - old.f_int1;
 
8358
END|
 
8359
DELETE FROM t0_aux
 
8360
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8361
        
 
8362
# check trigger-8 success:      1
 
8363
DROP TRIGGER trg_1;
 
8364
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8365
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8366
f_charbig = 'just inserted'
 
8367
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8368
DELETE FROM t0_aux
 
8369
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8370
DELETE FROM t1
 
8371
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8372
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8373
BEGIN
 
8374
SET new.f_int1 = old.f_int1 + @max_row,
 
8375
new.f_int2 = old.f_int2 - @max_row,
 
8376
new.f_charbig = '####updated per update trigger####';
 
8377
END|
 
8378
UPDATE t1
 
8379
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8380
f_charbig = '####updated per update statement itself####';
 
8381
        
 
8382
# check trigger-9 success:      1
 
8383
DROP TRIGGER trg_2;
 
8384
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8385
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8386
f_charbig = CONCAT('===',f_char1,'===');
 
8387
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8388
BEGIN
 
8389
SET new.f_int1 = new.f_int1 + @max_row,
 
8390
new.f_int2 = new.f_int2 - @max_row,
 
8391
new.f_charbig = '####updated per update trigger####';
 
8392
END|
 
8393
UPDATE t1
 
8394
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8395
f_charbig = '####updated per update statement itself####';
 
8396
        
 
8397
# check trigger-10 success:     1
 
8398
DROP TRIGGER trg_2;
 
8399
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8400
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8401
f_charbig = CONCAT('===',f_char1,'===');
 
8402
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8403
BEGIN
 
8404
SET new.f_int1 = @my_max1 + @counter,
 
8405
new.f_int2 = @my_min2 - @counter,
 
8406
new.f_charbig = '####updated per insert trigger####';
 
8407
SET @counter = @counter + 1;
 
8408
END|
 
8409
SET @counter = 1;
 
8410
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8411
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8412
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8413
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8414
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8415
ORDER BY f_int1;
 
8416
DROP TRIGGER trg_3;
 
8417
        
 
8418
# check trigger-11 success:     1
 
8419
DELETE FROM t1
 
8420
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8421
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8422
AND f_charbig = '####updated per insert trigger####';
 
8423
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8424
BEGIN
 
8425
SET new.f_int1 = @my_max1 + @counter,
 
8426
new.f_int2 = @my_min2 - @counter,
 
8427
new.f_charbig = '####updated per insert trigger####';
 
8428
SET @counter = @counter + 1;
 
8429
END|
 
8430
SET @counter = 1;
 
8431
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8432
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8433
SELECT CAST(f_int1 AS CHAR),
 
8434
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8435
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8436
ORDER BY f_int1;
 
8437
DROP TRIGGER trg_3;
 
8438
        
 
8439
# check trigger-12 success:     1
 
8440
DELETE FROM t1
 
8441
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8442
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8443
AND f_charbig = '####updated per insert trigger####';
 
8444
ANALYZE  TABLE t1;
 
8445
Table   Op      Msg_type        Msg_text
 
8446
test.t1 analyze status  OK
 
8447
CHECK    TABLE t1 EXTENDED;
 
8448
Table   Op      Msg_type        Msg_text
 
8449
test.t1 check   status  OK
 
8450
CHECKSUM TABLE t1 EXTENDED;
 
8451
Table   Checksum
 
8452
test.t1 <some_value>
 
8453
OPTIMIZE TABLE t1;
 
8454
Table   Op      Msg_type        Msg_text
 
8455
test.t1 optimize        status  OK
 
8456
# check layout success:    1
 
8457
REPAIR   TABLE t1 EXTENDED;
 
8458
Table   Op      Msg_type        Msg_text
 
8459
test.t1 repair  status  OK
 
8460
# check layout success:    1
 
8461
TRUNCATE t1;
 
8462
        
 
8463
# check TRUNCATE success:       1
 
8464
# check layout success:    1
 
8465
# End usability test (inc/partition_check.inc)
 
8466
DROP TABLE t1;
 
8467
CREATE TABLE t1 (
 
8468
f_int1 INTEGER,
 
8469
f_int2 INTEGER,
 
8470
f_char1 CHAR(20),
 
8471
f_char2 CHAR(20),
 
8472
f_charbig VARCHAR(1000)
 
8473
 
 
8474
)
 
8475
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
8476
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8477
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8478
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
8479
ALTER TABLE t1 CHECK PARTITION part_1;
 
8480
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8481
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8482
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8483
# Start usability test (inc/partition_check.inc)
 
8484
create_command
 
8485
SHOW CREATE TABLE t1;
 
8486
Table   Create Table
 
8487
t1      CREATE TABLE `t1` (
 
8488
  `f_int1` int(11) DEFAULT NULL,
 
8489
  `f_int2` int(11) DEFAULT NULL,
 
8490
  `f_char1` char(20) DEFAULT NULL,
 
8491
  `f_char2` char(20) DEFAULT NULL,
 
8492
  `f_charbig` varchar(1000) DEFAULT NULL
 
8493
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */
 
8494
 
 
8495
unified filelist
 
8496
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
8497
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
8498
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
8499
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
8500
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
8501
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
8502
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
8503
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
8504
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
8505
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
8506
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
8507
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
8508
 
 
8509
# check prerequisites-1 success:    1
 
8510
# check COUNT(*) success:    1
 
8511
# check MIN/MAX(f_int1) success:    1
 
8512
# check MIN/MAX(f_int2) success:    1
 
8513
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8514
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8515
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8516
WHERE f_int1 IN (2,3);
 
8517
# check prerequisites-3 success:    1
 
8518
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
8519
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
8520
# check read via f_int1 success: 1
 
8521
# check read via f_int2 success: 1
 
8522
        
 
8523
# check multiple-1 success:     1
 
8524
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
8525
        
 
8526
# check multiple-2 success:     1
 
8527
INSERT INTO t1 SELECT * FROM t0_template
 
8528
WHERE MOD(f_int1,3) = 0;
 
8529
        
 
8530
# check multiple-3 success:     1
 
8531
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
8532
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
8533
AND @max_row_div2 + @max_row_div4;
 
8534
        
 
8535
# check multiple-4 success:     1
 
8536
DELETE FROM t1
 
8537
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
8538
AND @max_row_div2 + @max_row_div4 + @max_row;
 
8539
        
 
8540
# check multiple-5 success:     1
 
8541
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
8542
INSERT INTO t1
 
8543
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8544
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8545
f_charbig = '#SINGLE#';
 
8546
        
 
8547
# check single-1 success:       1
 
8548
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
8549
INSERT INTO t1
 
8550
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
8551
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
8552
f_charbig = '#SINGLE#';
 
8553
        
 
8554
# check single-2 success:       1
 
8555
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
8556
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
8557
UPDATE t1 SET f_int1 = @cur_value2
 
8558
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
8559
        
 
8560
# check single-3 success:       1
 
8561
SET @cur_value1= -1;
 
8562
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
8563
UPDATE t1 SET f_int1 = @cur_value1
 
8564
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
8565
        
 
8566
# check single-4 success:       1
 
8567
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
8568
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
8569
        
 
8570
# check single-5 success:       1
 
8571
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
8572
        
 
8573
# check single-6 success:       1
 
8574
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
8575
        
 
8576
# check single-7 success:       1
 
8577
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
8578
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
8579
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
8580
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
8581
f_charbig = '#NULL#';
 
8582
INSERT INTO t1
 
8583
SET f_int1 = NULL , f_int2 = -@max_row,
 
8584
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
8585
f_charbig = '#NULL#';
 
8586
# check null success:    1
 
8587
        
 
8588
# check null-1 success:         1
 
8589
UPDATE t1 SET f_int1 = -@max_row
 
8590
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8591
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8592
        
 
8593
# check null-2 success:         1
 
8594
UPDATE t1 SET f_int1 = NULL
 
8595
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8596
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8597
        
 
8598
# check null-3 success:         1
 
8599
DELETE FROM t1
 
8600
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
8601
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
8602
        
 
8603
# check null-4 success:         1
 
8604
DELETE FROM t1
 
8605
WHERE f_int1 = 0 AND f_int2 = 0
 
8606
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
8607
AND f_charbig = '#NULL#';
 
8608
SET AUTOCOMMIT= 0;
 
8609
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8610
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8611
FROM t0_template source_tab
 
8612
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8613
        
 
8614
# check transactions-1 success:         1
 
8615
COMMIT WORK;
 
8616
        
 
8617
# check transactions-2 success:         1
 
8618
ROLLBACK WORK;
 
8619
        
 
8620
# check transactions-3 success:         1
 
8621
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8622
COMMIT WORK;
 
8623
ROLLBACK WORK;
 
8624
        
 
8625
# check transactions-4 success:         1
 
8626
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8627
SELECT f_int1, f_int1, '', '', 'was inserted'
 
8628
FROM t0_template source_tab
 
8629
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8630
        
 
8631
# check transactions-5 success:         1
 
8632
ROLLBACK WORK;
 
8633
Warnings:
 
8634
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
8635
        
 
8636
# check transactions-6 success:         1
 
8637
# INFO: Storage engine used for t1 seems to be not transactional.
 
8638
COMMIT;
 
8639
        
 
8640
# check transactions-7 success:         1
 
8641
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8642
COMMIT WORK;
 
8643
SET @@session.sql_mode = 'traditional';
 
8644
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
8645
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8646
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
8647
'', '', 'was inserted' FROM t0_template
 
8648
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
8649
ERROR 22012: Division by 0
 
8650
COMMIT;
 
8651
        
 
8652
# check transactions-8 success:         1
 
8653
# INFO: Storage engine used for t1 seems to be unable to revert
 
8654
#       changes made by the failing statement.
 
8655
SET @@session.sql_mode = '';
 
8656
SET AUTOCOMMIT= 1;
 
8657
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
8658
COMMIT WORK;
 
8659
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
8660
        
 
8661
# check special-1 success:      1
 
8662
UPDATE t1 SET f_charbig = '';
 
8663
        
 
8664
# check special-2 success:      1
 
8665
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
8666
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8667
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
8668
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8669
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8670
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8671
'just inserted' FROM t0_template
 
8672
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8673
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
8674
BEGIN
 
8675
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8676
f_charbig = 'updated by trigger'
 
8677
      WHERE f_int1 = new.f_int1;
 
8678
END|
 
8679
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8680
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8681
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8682
        
 
8683
# check trigger-1 success:      1
 
8684
DROP TRIGGER trg_1;
 
8685
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8686
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8687
f_charbig = 'just inserted'
 
8688
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8689
DELETE FROM t0_aux
 
8690
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8691
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8692
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8693
'just inserted' FROM t0_template
 
8694
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8695
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
8696
BEGIN
 
8697
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8698
f_charbig = 'updated by trigger'
 
8699
      WHERE f_int1 = new.f_int1;
 
8700
END|
 
8701
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8702
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
8703
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8704
        
 
8705
# check trigger-2 success:      1
 
8706
DROP TRIGGER trg_1;
 
8707
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8708
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8709
f_charbig = 'just inserted'
 
8710
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8711
DELETE FROM t0_aux
 
8712
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8713
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8714
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8715
'just inserted' FROM t0_template
 
8716
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8717
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8718
BEGIN
 
8719
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8720
f_charbig = 'updated by trigger'
 
8721
      WHERE f_int1 = new.f_int1;
 
8722
END|
 
8723
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8724
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8725
        
 
8726
# check trigger-3 success:      1
 
8727
DROP TRIGGER trg_1;
 
8728
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8729
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8730
f_charbig = 'just inserted'
 
8731
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8732
DELETE FROM t0_aux
 
8733
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8734
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8735
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8736
'just inserted' FROM t0_template
 
8737
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8738
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
8739
BEGIN
 
8740
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8741
f_charbig = 'updated by trigger'
 
8742
      WHERE f_int1 = - old.f_int1;
 
8743
END|
 
8744
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8745
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8746
        
 
8747
# check trigger-4 success:      1
 
8748
DROP TRIGGER trg_1;
 
8749
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8750
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8751
f_charbig = 'just inserted'
 
8752
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8753
DELETE FROM t0_aux
 
8754
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8755
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8756
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8757
'just inserted' FROM t0_template
 
8758
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8759
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8760
BEGIN
 
8761
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8762
f_charbig = 'updated by trigger'
 
8763
      WHERE f_int1 = new.f_int1;
 
8764
END|
 
8765
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8766
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8767
        
 
8768
# check trigger-5 success:      1
 
8769
DROP TRIGGER trg_1;
 
8770
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8771
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8772
f_charbig = 'just inserted'
 
8773
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8774
DELETE FROM t0_aux
 
8775
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8776
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8777
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8778
'just inserted' FROM t0_template
 
8779
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8780
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
8781
BEGIN
 
8782
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8783
f_charbig = 'updated by trigger'
 
8784
      WHERE f_int1 = - old.f_int1;
 
8785
END|
 
8786
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
8787
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8788
        
 
8789
# check trigger-6 success:      1
 
8790
DROP TRIGGER trg_1;
 
8791
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8792
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8793
f_charbig = 'just inserted'
 
8794
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8795
DELETE FROM t0_aux
 
8796
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8797
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8798
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8799
'just inserted' FROM t0_template
 
8800
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8801
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
8802
BEGIN
 
8803
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8804
f_charbig = 'updated by trigger'
 
8805
      WHERE f_int1 = - old.f_int1;
 
8806
END|
 
8807
DELETE FROM t0_aux
 
8808
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8809
        
 
8810
# check trigger-7 success:      1
 
8811
DROP TRIGGER trg_1;
 
8812
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8813
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8814
f_charbig = 'just inserted'
 
8815
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8816
DELETE FROM t0_aux
 
8817
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8818
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8819
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
8820
'just inserted' FROM t0_template
 
8821
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8822
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
8823
BEGIN
 
8824
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
8825
f_charbig = 'updated by trigger'
 
8826
      WHERE f_int1 = - old.f_int1;
 
8827
END|
 
8828
DELETE FROM t0_aux
 
8829
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
8830
        
 
8831
# check trigger-8 success:      1
 
8832
DROP TRIGGER trg_1;
 
8833
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8834
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8835
f_charbig = 'just inserted'
 
8836
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
8837
DELETE FROM t0_aux
 
8838
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8839
DELETE FROM t1
 
8840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
8841
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8842
BEGIN
 
8843
SET new.f_int1 = old.f_int1 + @max_row,
 
8844
new.f_int2 = old.f_int2 - @max_row,
 
8845
new.f_charbig = '####updated per update trigger####';
 
8846
END|
 
8847
UPDATE t1
 
8848
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8849
f_charbig = '####updated per update statement itself####';
 
8850
        
 
8851
# check trigger-9 success:      1
 
8852
DROP TRIGGER trg_2;
 
8853
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8854
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8855
f_charbig = CONCAT('===',f_char1,'===');
 
8856
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
8857
BEGIN
 
8858
SET new.f_int1 = new.f_int1 + @max_row,
 
8859
new.f_int2 = new.f_int2 - @max_row,
 
8860
new.f_charbig = '####updated per update trigger####';
 
8861
END|
 
8862
UPDATE t1
 
8863
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
8864
f_charbig = '####updated per update statement itself####';
 
8865
        
 
8866
# check trigger-10 success:     1
 
8867
DROP TRIGGER trg_2;
 
8868
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
8869
f_int2 = CAST(f_char1 AS SIGNED INT),
 
8870
f_charbig = CONCAT('===',f_char1,'===');
 
8871
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8872
BEGIN
 
8873
SET new.f_int1 = @my_max1 + @counter,
 
8874
new.f_int2 = @my_min2 - @counter,
 
8875
new.f_charbig = '####updated per insert trigger####';
 
8876
SET @counter = @counter + 1;
 
8877
END|
 
8878
SET @counter = 1;
 
8879
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8880
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8881
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8882
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8883
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8884
ORDER BY f_int1;
 
8885
DROP TRIGGER trg_3;
 
8886
        
 
8887
# check trigger-11 success:     1
 
8888
DELETE FROM t1
 
8889
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8890
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8891
AND f_charbig = '####updated per insert trigger####';
 
8892
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
8893
BEGIN
 
8894
SET new.f_int1 = @my_max1 + @counter,
 
8895
new.f_int2 = @my_min2 - @counter,
 
8896
new.f_charbig = '####updated per insert trigger####';
 
8897
SET @counter = @counter + 1;
 
8898
END|
 
8899
SET @counter = 1;
 
8900
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
8901
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
8902
SELECT CAST(f_int1 AS CHAR),
 
8903
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
8904
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
8905
ORDER BY f_int1;
 
8906
DROP TRIGGER trg_3;
 
8907
        
 
8908
# check trigger-12 success:     1
 
8909
DELETE FROM t1
 
8910
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
8911
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
8912
AND f_charbig = '####updated per insert trigger####';
 
8913
ANALYZE  TABLE t1;
 
8914
Table   Op      Msg_type        Msg_text
 
8915
test.t1 analyze status  OK
 
8916
CHECK    TABLE t1 EXTENDED;
 
8917
Table   Op      Msg_type        Msg_text
 
8918
test.t1 check   status  OK
 
8919
CHECKSUM TABLE t1 EXTENDED;
 
8920
Table   Checksum
 
8921
test.t1 <some_value>
 
8922
OPTIMIZE TABLE t1;
 
8923
Table   Op      Msg_type        Msg_text
 
8924
test.t1 optimize        status  OK
 
8925
# check layout success:    1
 
8926
REPAIR   TABLE t1 EXTENDED;
 
8927
Table   Op      Msg_type        Msg_text
 
8928
test.t1 repair  status  OK
 
8929
# check layout success:    1
 
8930
TRUNCATE t1;
 
8931
        
 
8932
# check TRUNCATE success:       1
 
8933
# check layout success:    1
 
8934
# End usability test (inc/partition_check.inc)
 
8935
DROP TABLE t1;
 
8936
CREATE TABLE t1 (
 
8937
f_int1 INTEGER,
 
8938
f_int2 INTEGER,
 
8939
f_char1 CHAR(20),
 
8940
f_char2 CHAR(20),
 
8941
f_charbig VARCHAR(1000)
 
8942
 
 
8943
)
 
8944
PARTITION BY LIST(MOD(f_int1,4))
 
8945
(PARTITION part_3 VALUES IN (-3),
 
8946
PARTITION part_2 VALUES IN (-2),
 
8947
PARTITION part_1 VALUES IN (-1),
 
8948
PARTITION part_N VALUES IN (NULL),
 
8949
PARTITION part0 VALUES IN (0),
 
8950
PARTITION part1 VALUES IN (1),
 
8951
PARTITION part2 VALUES IN (2),
 
8952
PARTITION part3 VALUES IN (3));
 
8953
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8954
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8955
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
8956
ALTER TABLE t1 CHECK PARTITION part_1;
 
8957
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
8958
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
8959
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
8960
# Start usability test (inc/partition_check.inc)
 
8961
create_command
 
8962
SHOW CREATE TABLE t1;
 
8963
Table   Create Table
 
8964
t1      CREATE TABLE `t1` (
 
8965
  `f_int1` int(11) DEFAULT NULL,
 
8966
  `f_int2` int(11) DEFAULT NULL,
 
8967
  `f_char1` char(20) DEFAULT NULL,
 
8968
  `f_char2` char(20) DEFAULT NULL,
 
8969
  `f_charbig` varchar(1000) DEFAULT NULL
 
8970
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
8971
 
 
8972
unified filelist
 
8973
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
8974
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
8975
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
8976
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
8977
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
8978
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
8979
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
8980
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
8981
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
8982
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
8983
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
8984
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
8985
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
8986
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
8987
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
8988
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
8989
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
8990
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
8991
 
 
8992
# check prerequisites-1 success:    1
 
8993
# check COUNT(*) success:    1
 
8994
# check MIN/MAX(f_int1) success:    1
 
8995
# check MIN/MAX(f_int2) success:    1
 
8996
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
8997
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
8998
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
8999
WHERE f_int1 IN (2,3);
 
9000
# check prerequisites-3 success:    1
 
9001
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9002
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
9003
# check read via f_int1 success: 1
 
9004
# check read via f_int2 success: 1
 
9005
        
 
9006
# check multiple-1 success:     1
 
9007
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9008
        
 
9009
# check multiple-2 success:     1
 
9010
INSERT INTO t1 SELECT * FROM t0_template
 
9011
WHERE MOD(f_int1,3) = 0;
 
9012
        
 
9013
# check multiple-3 success:     1
 
9014
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9015
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9016
AND @max_row_div2 + @max_row_div4;
 
9017
        
 
9018
# check multiple-4 success:     1
 
9019
DELETE FROM t1
 
9020
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9021
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9022
        
 
9023
# check multiple-5 success:     1
 
9024
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9025
INSERT INTO t1
 
9026
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9027
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9028
f_charbig = '#SINGLE#';
 
9029
        
 
9030
# check single-1 success:       1
 
9031
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9032
INSERT INTO t1
 
9033
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9034
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9035
f_charbig = '#SINGLE#';
 
9036
        
 
9037
# check single-2 success:       1
 
9038
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9039
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9040
UPDATE t1 SET f_int1 = @cur_value2
 
9041
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9042
        
 
9043
# check single-3 success:       1
 
9044
SET @cur_value1= -1;
 
9045
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
9046
UPDATE t1 SET f_int1 = @cur_value1
 
9047
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
9048
        
 
9049
# check single-4 success:       1
 
9050
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
9051
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
9052
        
 
9053
# check single-5 success:       1
 
9054
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
9055
        
 
9056
# check single-6 success:       1
 
9057
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
9058
        
 
9059
# check single-7 success:       1
 
9060
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
9061
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
9062
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
9063
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
9064
f_charbig = '#NULL#';
 
9065
INSERT INTO t1
 
9066
SET f_int1 = NULL , f_int2 = -@max_row,
 
9067
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
9068
f_charbig = '#NULL#';
 
9069
# check null success:    1
 
9070
        
 
9071
# check null-1 success:         1
 
9072
UPDATE t1 SET f_int1 = -@max_row
 
9073
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9074
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9075
        
 
9076
# check null-2 success:         1
 
9077
UPDATE t1 SET f_int1 = NULL
 
9078
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9079
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9080
        
 
9081
# check null-3 success:         1
 
9082
DELETE FROM t1
 
9083
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9084
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9085
        
 
9086
# check null-4 success:         1
 
9087
DELETE FROM t1
 
9088
WHERE f_int1 = 0 AND f_int2 = 0
 
9089
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
9090
AND f_charbig = '#NULL#';
 
9091
SET AUTOCOMMIT= 0;
 
9092
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9093
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9094
FROM t0_template source_tab
 
9095
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9096
        
 
9097
# check transactions-1 success:         1
 
9098
COMMIT WORK;
 
9099
        
 
9100
# check transactions-2 success:         1
 
9101
ROLLBACK WORK;
 
9102
        
 
9103
# check transactions-3 success:         1
 
9104
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9105
COMMIT WORK;
 
9106
ROLLBACK WORK;
 
9107
        
 
9108
# check transactions-4 success:         1
 
9109
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9110
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9111
FROM t0_template source_tab
 
9112
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9113
        
 
9114
# check transactions-5 success:         1
 
9115
ROLLBACK WORK;
 
9116
Warnings:
 
9117
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
9118
        
 
9119
# check transactions-6 success:         1
 
9120
# INFO: Storage engine used for t1 seems to be not transactional.
 
9121
COMMIT;
 
9122
        
 
9123
# check transactions-7 success:         1
 
9124
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9125
COMMIT WORK;
 
9126
SET @@session.sql_mode = 'traditional';
 
9127
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
9128
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9129
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
9130
'', '', 'was inserted' FROM t0_template
 
9131
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9132
ERROR 22012: Division by 0
 
9133
COMMIT;
 
9134
        
 
9135
# check transactions-8 success:         1
 
9136
# INFO: Storage engine used for t1 seems to be unable to revert
 
9137
#       changes made by the failing statement.
 
9138
SET @@session.sql_mode = '';
 
9139
SET AUTOCOMMIT= 1;
 
9140
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9141
COMMIT WORK;
 
9142
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
9143
        
 
9144
# check special-1 success:      1
 
9145
UPDATE t1 SET f_charbig = '';
 
9146
        
 
9147
# check special-2 success:      1
 
9148
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
9149
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9150
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
9151
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9152
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9153
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9154
'just inserted' FROM t0_template
 
9155
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9156
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
9157
BEGIN
 
9158
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9159
f_charbig = 'updated by trigger'
 
9160
      WHERE f_int1 = new.f_int1;
 
9161
END|
 
9162
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9163
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9164
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9165
        
 
9166
# check trigger-1 success:      1
 
9167
DROP TRIGGER trg_1;
 
9168
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9169
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9170
f_charbig = 'just inserted'
 
9171
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9172
DELETE FROM t0_aux
 
9173
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9174
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9175
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9176
'just inserted' FROM t0_template
 
9177
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9178
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
9179
BEGIN
 
9180
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9181
f_charbig = 'updated by trigger'
 
9182
      WHERE f_int1 = new.f_int1;
 
9183
END|
 
9184
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9185
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9186
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9187
        
 
9188
# check trigger-2 success:      1
 
9189
DROP TRIGGER trg_1;
 
9190
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9191
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9192
f_charbig = 'just inserted'
 
9193
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9194
DELETE FROM t0_aux
 
9195
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9196
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9197
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9198
'just inserted' FROM t0_template
 
9199
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9200
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9201
BEGIN
 
9202
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9203
f_charbig = 'updated by trigger'
 
9204
      WHERE f_int1 = new.f_int1;
 
9205
END|
 
9206
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9207
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9208
        
 
9209
# check trigger-3 success:      1
 
9210
DROP TRIGGER trg_1;
 
9211
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9212
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9213
f_charbig = 'just inserted'
 
9214
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9215
DELETE FROM t0_aux
 
9216
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9217
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9218
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9219
'just inserted' FROM t0_template
 
9220
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9221
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9222
BEGIN
 
9223
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9224
f_charbig = 'updated by trigger'
 
9225
      WHERE f_int1 = - old.f_int1;
 
9226
END|
 
9227
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9228
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9229
        
 
9230
# check trigger-4 success:      1
 
9231
DROP TRIGGER trg_1;
 
9232
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9233
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9234
f_charbig = 'just inserted'
 
9235
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9236
DELETE FROM t0_aux
 
9237
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9238
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9239
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9240
'just inserted' FROM t0_template
 
9241
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9242
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9243
BEGIN
 
9244
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9245
f_charbig = 'updated by trigger'
 
9246
      WHERE f_int1 = new.f_int1;
 
9247
END|
 
9248
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9249
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9250
        
 
9251
# check trigger-5 success:      1
 
9252
DROP TRIGGER trg_1;
 
9253
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9254
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9255
f_charbig = 'just inserted'
 
9256
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9257
DELETE FROM t0_aux
 
9258
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9259
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9260
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9261
'just inserted' FROM t0_template
 
9262
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9263
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9264
BEGIN
 
9265
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9266
f_charbig = 'updated by trigger'
 
9267
      WHERE f_int1 = - old.f_int1;
 
9268
END|
 
9269
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9270
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9271
        
 
9272
# check trigger-6 success:      1
 
9273
DROP TRIGGER trg_1;
 
9274
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9275
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9276
f_charbig = 'just inserted'
 
9277
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9278
DELETE FROM t0_aux
 
9279
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9280
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9281
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9282
'just inserted' FROM t0_template
 
9283
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9284
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
9285
BEGIN
 
9286
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9287
f_charbig = 'updated by trigger'
 
9288
      WHERE f_int1 = - old.f_int1;
 
9289
END|
 
9290
DELETE FROM t0_aux
 
9291
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9292
        
 
9293
# check trigger-7 success:      1
 
9294
DROP TRIGGER trg_1;
 
9295
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9296
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9297
f_charbig = 'just inserted'
 
9298
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9299
DELETE FROM t0_aux
 
9300
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9301
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9302
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9303
'just inserted' FROM t0_template
 
9304
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9305
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
9306
BEGIN
 
9307
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9308
f_charbig = 'updated by trigger'
 
9309
      WHERE f_int1 = - old.f_int1;
 
9310
END|
 
9311
DELETE FROM t0_aux
 
9312
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9313
        
 
9314
# check trigger-8 success:      1
 
9315
DROP TRIGGER trg_1;
 
9316
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9317
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9318
f_charbig = 'just inserted'
 
9319
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9320
DELETE FROM t0_aux
 
9321
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9322
DELETE FROM t1
 
9323
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9324
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9325
BEGIN
 
9326
SET new.f_int1 = old.f_int1 + @max_row,
 
9327
new.f_int2 = old.f_int2 - @max_row,
 
9328
new.f_charbig = '####updated per update trigger####';
 
9329
END|
 
9330
UPDATE t1
 
9331
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9332
f_charbig = '####updated per update statement itself####';
 
9333
        
 
9334
# check trigger-9 success:      1
 
9335
DROP TRIGGER trg_2;
 
9336
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9337
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9338
f_charbig = CONCAT('===',f_char1,'===');
 
9339
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9340
BEGIN
 
9341
SET new.f_int1 = new.f_int1 + @max_row,
 
9342
new.f_int2 = new.f_int2 - @max_row,
 
9343
new.f_charbig = '####updated per update trigger####';
 
9344
END|
 
9345
UPDATE t1
 
9346
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9347
f_charbig = '####updated per update statement itself####';
 
9348
        
 
9349
# check trigger-10 success:     1
 
9350
DROP TRIGGER trg_2;
 
9351
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9352
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9353
f_charbig = CONCAT('===',f_char1,'===');
 
9354
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9355
BEGIN
 
9356
SET new.f_int1 = @my_max1 + @counter,
 
9357
new.f_int2 = @my_min2 - @counter,
 
9358
new.f_charbig = '####updated per insert trigger####';
 
9359
SET @counter = @counter + 1;
 
9360
END|
 
9361
SET @counter = 1;
 
9362
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9363
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9364
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9365
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9366
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9367
ORDER BY f_int1;
 
9368
DROP TRIGGER trg_3;
 
9369
        
 
9370
# check trigger-11 success:     1
 
9371
DELETE FROM t1
 
9372
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9373
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9374
AND f_charbig = '####updated per insert trigger####';
 
9375
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9376
BEGIN
 
9377
SET new.f_int1 = @my_max1 + @counter,
 
9378
new.f_int2 = @my_min2 - @counter,
 
9379
new.f_charbig = '####updated per insert trigger####';
 
9380
SET @counter = @counter + 1;
 
9381
END|
 
9382
SET @counter = 1;
 
9383
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9384
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
9385
SELECT CAST(f_int1 AS CHAR),
 
9386
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9387
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9388
ORDER BY f_int1;
 
9389
DROP TRIGGER trg_3;
 
9390
        
 
9391
# check trigger-12 success:     1
 
9392
DELETE FROM t1
 
9393
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9394
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9395
AND f_charbig = '####updated per insert trigger####';
 
9396
ANALYZE  TABLE t1;
 
9397
Table   Op      Msg_type        Msg_text
 
9398
test.t1 analyze status  OK
 
9399
CHECK    TABLE t1 EXTENDED;
 
9400
Table   Op      Msg_type        Msg_text
 
9401
test.t1 check   status  OK
 
9402
CHECKSUM TABLE t1 EXTENDED;
 
9403
Table   Checksum
 
9404
test.t1 <some_value>
 
9405
OPTIMIZE TABLE t1;
 
9406
Table   Op      Msg_type        Msg_text
 
9407
test.t1 optimize        status  OK
 
9408
# check layout success:    1
 
9409
REPAIR   TABLE t1 EXTENDED;
 
9410
Table   Op      Msg_type        Msg_text
 
9411
test.t1 repair  status  OK
 
9412
# check layout success:    1
 
9413
TRUNCATE t1;
 
9414
        
 
9415
# check TRUNCATE success:       1
 
9416
# check layout success:    1
 
9417
# End usability test (inc/partition_check.inc)
 
9418
DROP TABLE t1;
 
9419
CREATE TABLE t1 (
 
9420
f_int1 INTEGER,
 
9421
f_int2 INTEGER,
 
9422
f_char1 CHAR(20),
 
9423
f_char2 CHAR(20),
 
9424
f_charbig VARCHAR(1000)
 
9425
 
 
9426
)
 
9427
PARTITION BY RANGE(f_int1)
 
9428
(PARTITION parta VALUES LESS THAN (0),
 
9429
PARTITION part_1 VALUES LESS THAN (5),
 
9430
PARTITION part_2 VALUES LESS THAN (10),
 
9431
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
9432
PARTITION part_4 VALUES LESS THAN (20),
 
9433
PARTITION part_5 VALUES LESS THAN (2147483646));
 
9434
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9435
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9436
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
9437
ALTER TABLE t1 CHECK PARTITION part_1;
 
9438
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9439
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9440
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9441
# Start usability test (inc/partition_check.inc)
 
9442
create_command
 
9443
SHOW CREATE TABLE t1;
 
9444
Table   Create Table
 
9445
t1      CREATE TABLE `t1` (
 
9446
  `f_int1` int(11) DEFAULT NULL,
 
9447
  `f_int2` int(11) DEFAULT NULL,
 
9448
  `f_char1` char(20) DEFAULT NULL,
 
9449
  `f_char2` char(20) DEFAULT NULL,
 
9450
  `f_charbig` varchar(1000) DEFAULT NULL
 
9451
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
9452
 
 
9453
unified filelist
 
9454
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
9455
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
9456
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
9457
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
9458
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
9459
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
9460
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
9461
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
9462
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
9463
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
9464
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
9465
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
9466
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
9467
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
9468
 
 
9469
# check prerequisites-1 success:    1
 
9470
# check COUNT(*) success:    1
 
9471
# check MIN/MAX(f_int1) success:    1
 
9472
# check MIN/MAX(f_int2) success:    1
 
9473
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9474
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9475
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
9476
WHERE f_int1 IN (2,3);
 
9477
# check prerequisites-3 success:    1
 
9478
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9479
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
9480
# check read via f_int1 success: 1
 
9481
# check read via f_int2 success: 1
 
9482
        
 
9483
# check multiple-1 success:     1
 
9484
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9485
        
 
9486
# check multiple-2 success:     1
 
9487
INSERT INTO t1 SELECT * FROM t0_template
 
9488
WHERE MOD(f_int1,3) = 0;
 
9489
        
 
9490
# check multiple-3 success:     1
 
9491
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9492
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9493
AND @max_row_div2 + @max_row_div4;
 
9494
        
 
9495
# check multiple-4 success:     1
 
9496
DELETE FROM t1
 
9497
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9498
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9499
        
 
9500
# check multiple-5 success:     1
 
9501
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9502
INSERT INTO t1
 
9503
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9504
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9505
f_charbig = '#SINGLE#';
 
9506
        
 
9507
# check single-1 success:       1
 
9508
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9509
INSERT INTO t1
 
9510
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9511
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9512
f_charbig = '#SINGLE#';
 
9513
        
 
9514
# check single-2 success:       1
 
9515
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9516
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9517
UPDATE t1 SET f_int1 = @cur_value2
 
9518
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9519
        
 
9520
# check single-3 success:       1
 
9521
SET @cur_value1= -1;
 
9522
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
9523
UPDATE t1 SET f_int1 = @cur_value1
 
9524
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
9525
        
 
9526
# check single-4 success:       1
 
9527
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
9528
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
9529
        
 
9530
# check single-5 success:       1
 
9531
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
9532
        
 
9533
# check single-6 success:       1
 
9534
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
9535
ERROR HY000: Table has no partition for value 2147483647
 
9536
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
9537
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
9538
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
9539
f_charbig = '#NULL#';
 
9540
INSERT INTO t1
 
9541
SET f_int1 = NULL , f_int2 = -@max_row,
 
9542
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
9543
f_charbig = '#NULL#';
 
9544
# check null success:    1
 
9545
        
 
9546
# check null-1 success:         1
 
9547
UPDATE t1 SET f_int1 = -@max_row
 
9548
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9549
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9550
        
 
9551
# check null-2 success:         1
 
9552
UPDATE t1 SET f_int1 = NULL
 
9553
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9554
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9555
        
 
9556
# check null-3 success:         1
 
9557
DELETE FROM t1
 
9558
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
9559
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
9560
        
 
9561
# check null-4 success:         1
 
9562
DELETE FROM t1
 
9563
WHERE f_int1 = 0 AND f_int2 = 0
 
9564
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
9565
AND f_charbig = '#NULL#';
 
9566
SET AUTOCOMMIT= 0;
 
9567
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9568
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9569
FROM t0_template source_tab
 
9570
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9571
        
 
9572
# check transactions-1 success:         1
 
9573
COMMIT WORK;
 
9574
        
 
9575
# check transactions-2 success:         1
 
9576
ROLLBACK WORK;
 
9577
        
 
9578
# check transactions-3 success:         1
 
9579
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9580
COMMIT WORK;
 
9581
ROLLBACK WORK;
 
9582
        
 
9583
# check transactions-4 success:         1
 
9584
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9585
SELECT f_int1, f_int1, '', '', 'was inserted'
 
9586
FROM t0_template source_tab
 
9587
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9588
        
 
9589
# check transactions-5 success:         1
 
9590
ROLLBACK WORK;
 
9591
Warnings:
 
9592
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
9593
        
 
9594
# check transactions-6 success:         1
 
9595
# INFO: Storage engine used for t1 seems to be not transactional.
 
9596
COMMIT;
 
9597
        
 
9598
# check transactions-7 success:         1
 
9599
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9600
COMMIT WORK;
 
9601
SET @@session.sql_mode = 'traditional';
 
9602
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
9603
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9604
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
9605
'', '', 'was inserted' FROM t0_template
 
9606
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
9607
ERROR 22012: Division by 0
 
9608
COMMIT;
 
9609
        
 
9610
# check transactions-8 success:         1
 
9611
# INFO: Storage engine used for t1 seems to be unable to revert
 
9612
#       changes made by the failing statement.
 
9613
SET @@session.sql_mode = '';
 
9614
SET AUTOCOMMIT= 1;
 
9615
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
9616
COMMIT WORK;
 
9617
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
9618
        
 
9619
# check special-1 success:      1
 
9620
UPDATE t1 SET f_charbig = '';
 
9621
        
 
9622
# check special-2 success:      1
 
9623
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
9624
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9625
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
9626
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9627
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9628
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9629
'just inserted' FROM t0_template
 
9630
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9631
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
9632
BEGIN
 
9633
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9634
f_charbig = 'updated by trigger'
 
9635
      WHERE f_int1 = new.f_int1;
 
9636
END|
 
9637
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9638
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9639
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9640
        
 
9641
# check trigger-1 success:      1
 
9642
DROP TRIGGER trg_1;
 
9643
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9644
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9645
f_charbig = 'just inserted'
 
9646
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9647
DELETE FROM t0_aux
 
9648
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9649
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9650
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9651
'just inserted' FROM t0_template
 
9652
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9653
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
9654
BEGIN
 
9655
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9656
f_charbig = 'updated by trigger'
 
9657
      WHERE f_int1 = new.f_int1;
 
9658
END|
 
9659
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9660
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
9661
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9662
        
 
9663
# check trigger-2 success:      1
 
9664
DROP TRIGGER trg_1;
 
9665
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9666
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9667
f_charbig = 'just inserted'
 
9668
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9669
DELETE FROM t0_aux
 
9670
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9671
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9672
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9673
'just inserted' FROM t0_template
 
9674
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9675
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9676
BEGIN
 
9677
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9678
f_charbig = 'updated by trigger'
 
9679
      WHERE f_int1 = new.f_int1;
 
9680
END|
 
9681
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9682
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9683
        
 
9684
# check trigger-3 success:      1
 
9685
DROP TRIGGER trg_1;
 
9686
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9687
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9688
f_charbig = 'just inserted'
 
9689
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9690
DELETE FROM t0_aux
 
9691
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9692
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9693
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9694
'just inserted' FROM t0_template
 
9695
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9696
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
9697
BEGIN
 
9698
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9699
f_charbig = 'updated by trigger'
 
9700
      WHERE f_int1 = - old.f_int1;
 
9701
END|
 
9702
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9703
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9704
        
 
9705
# check trigger-4 success:      1
 
9706
DROP TRIGGER trg_1;
 
9707
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9708
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9709
f_charbig = 'just inserted'
 
9710
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9711
DELETE FROM t0_aux
 
9712
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9713
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9714
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9715
'just inserted' FROM t0_template
 
9716
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9717
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9718
BEGIN
 
9719
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9720
f_charbig = 'updated by trigger'
 
9721
      WHERE f_int1 = new.f_int1;
 
9722
END|
 
9723
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9724
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9725
        
 
9726
# check trigger-5 success:      1
 
9727
DROP TRIGGER trg_1;
 
9728
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9729
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9730
f_charbig = 'just inserted'
 
9731
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9732
DELETE FROM t0_aux
 
9733
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9734
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9735
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9736
'just inserted' FROM t0_template
 
9737
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9738
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
9739
BEGIN
 
9740
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9741
f_charbig = 'updated by trigger'
 
9742
      WHERE f_int1 = - old.f_int1;
 
9743
END|
 
9744
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
9745
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9746
        
 
9747
# check trigger-6 success:      1
 
9748
DROP TRIGGER trg_1;
 
9749
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9750
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9751
f_charbig = 'just inserted'
 
9752
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9753
DELETE FROM t0_aux
 
9754
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9755
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9756
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9757
'just inserted' FROM t0_template
 
9758
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9759
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
9760
BEGIN
 
9761
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9762
f_charbig = 'updated by trigger'
 
9763
      WHERE f_int1 = - old.f_int1;
 
9764
END|
 
9765
DELETE FROM t0_aux
 
9766
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9767
        
 
9768
# check trigger-7 success:      1
 
9769
DROP TRIGGER trg_1;
 
9770
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9771
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9772
f_charbig = 'just inserted'
 
9773
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9774
DELETE FROM t0_aux
 
9775
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9776
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9777
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
9778
'just inserted' FROM t0_template
 
9779
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9780
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
9781
BEGIN
 
9782
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
9783
f_charbig = 'updated by trigger'
 
9784
      WHERE f_int1 = - old.f_int1;
 
9785
END|
 
9786
DELETE FROM t0_aux
 
9787
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
9788
        
 
9789
# check trigger-8 success:      1
 
9790
DROP TRIGGER trg_1;
 
9791
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9792
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9793
f_charbig = 'just inserted'
 
9794
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
9795
DELETE FROM t0_aux
 
9796
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9797
DELETE FROM t1
 
9798
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
9799
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9800
BEGIN
 
9801
SET new.f_int1 = old.f_int1 + @max_row,
 
9802
new.f_int2 = old.f_int2 - @max_row,
 
9803
new.f_charbig = '####updated per update trigger####';
 
9804
END|
 
9805
UPDATE t1
 
9806
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9807
f_charbig = '####updated per update statement itself####';
 
9808
        
 
9809
# check trigger-9 success:      1
 
9810
DROP TRIGGER trg_2;
 
9811
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9812
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9813
f_charbig = CONCAT('===',f_char1,'===');
 
9814
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
9815
BEGIN
 
9816
SET new.f_int1 = new.f_int1 + @max_row,
 
9817
new.f_int2 = new.f_int2 - @max_row,
 
9818
new.f_charbig = '####updated per update trigger####';
 
9819
END|
 
9820
UPDATE t1
 
9821
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
9822
f_charbig = '####updated per update statement itself####';
 
9823
        
 
9824
# check trigger-10 success:     1
 
9825
DROP TRIGGER trg_2;
 
9826
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
9827
f_int2 = CAST(f_char1 AS SIGNED INT),
 
9828
f_charbig = CONCAT('===',f_char1,'===');
 
9829
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9830
BEGIN
 
9831
SET new.f_int1 = @my_max1 + @counter,
 
9832
new.f_int2 = @my_min2 - @counter,
 
9833
new.f_charbig = '####updated per insert trigger####';
 
9834
SET @counter = @counter + 1;
 
9835
END|
 
9836
SET @counter = 1;
 
9837
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9838
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9839
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9840
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9841
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9842
ORDER BY f_int1;
 
9843
DROP TRIGGER trg_3;
 
9844
        
 
9845
# check trigger-11 success:     1
 
9846
DELETE FROM t1
 
9847
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9848
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9849
AND f_charbig = '####updated per insert trigger####';
 
9850
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
9851
BEGIN
 
9852
SET new.f_int1 = @my_max1 + @counter,
 
9853
new.f_int2 = @my_min2 - @counter,
 
9854
new.f_charbig = '####updated per insert trigger####';
 
9855
SET @counter = @counter + 1;
 
9856
END|
 
9857
SET @counter = 1;
 
9858
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
9859
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
9860
SELECT CAST(f_int1 AS CHAR),
 
9861
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
9862
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
9863
ORDER BY f_int1;
 
9864
DROP TRIGGER trg_3;
 
9865
        
 
9866
# check trigger-12 success:     1
 
9867
DELETE FROM t1
 
9868
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
9869
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
9870
AND f_charbig = '####updated per insert trigger####';
 
9871
ANALYZE  TABLE t1;
 
9872
Table   Op      Msg_type        Msg_text
 
9873
test.t1 analyze status  OK
 
9874
CHECK    TABLE t1 EXTENDED;
 
9875
Table   Op      Msg_type        Msg_text
 
9876
test.t1 check   status  OK
 
9877
CHECKSUM TABLE t1 EXTENDED;
 
9878
Table   Checksum
 
9879
test.t1 <some_value>
 
9880
OPTIMIZE TABLE t1;
 
9881
Table   Op      Msg_type        Msg_text
 
9882
test.t1 optimize        status  OK
 
9883
# check layout success:    1
 
9884
REPAIR   TABLE t1 EXTENDED;
 
9885
Table   Op      Msg_type        Msg_text
 
9886
test.t1 repair  status  OK
 
9887
# check layout success:    1
 
9888
TRUNCATE t1;
 
9889
        
 
9890
# check TRUNCATE success:       1
 
9891
# check layout success:    1
 
9892
# End usability test (inc/partition_check.inc)
 
9893
DROP TABLE t1;
 
9894
CREATE TABLE t1 (
 
9895
f_int1 INTEGER,
 
9896
f_int2 INTEGER,
 
9897
f_char1 CHAR(20),
 
9898
f_char2 CHAR(20),
 
9899
f_charbig VARCHAR(1000)
 
9900
 
 
9901
)
 
9902
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
9903
(PARTITION part_1 VALUES LESS THAN (0),
 
9904
PARTITION part_2 VALUES LESS THAN (5),
 
9905
PARTITION part_3 VALUES LESS THAN (10),
 
9906
PARTITION part_4 VALUES LESS THAN (2147483646));
 
9907
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9908
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9909
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
9910
ALTER TABLE t1 CHECK PARTITION part_1;
 
9911
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
9912
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
9913
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
9914
# Start usability test (inc/partition_check.inc)
 
9915
create_command
 
9916
SHOW CREATE TABLE t1;
 
9917
Table   Create Table
 
9918
t1      CREATE TABLE `t1` (
 
9919
  `f_int1` int(11) DEFAULT NULL,
 
9920
  `f_int2` int(11) DEFAULT NULL,
 
9921
  `f_char1` char(20) DEFAULT NULL,
 
9922
  `f_char2` char(20) DEFAULT NULL,
 
9923
  `f_charbig` varchar(1000) DEFAULT NULL
 
9924
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
9925
 
 
9926
unified filelist
 
9927
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
9928
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
9929
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
9930
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
9931
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
9932
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
9933
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
9934
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
9935
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
9936
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
9937
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
9938
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
9939
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYD
 
9940
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYI
 
9941
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYD
 
9942
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYI
 
9943
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
9944
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
9945
 
 
9946
# check prerequisites-1 success:    1
 
9947
# check COUNT(*) success:    1
 
9948
# check MIN/MAX(f_int1) success:    1
 
9949
# check MIN/MAX(f_int2) success:    1
 
9950
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
9951
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
9952
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
9953
WHERE f_int1 IN (2,3);
 
9954
# check prerequisites-3 success:    1
 
9955
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
9956
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
9957
# check read via f_int1 success: 1
 
9958
# check read via f_int2 success: 1
 
9959
        
 
9960
# check multiple-1 success:     1
 
9961
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
9962
        
 
9963
# check multiple-2 success:     1
 
9964
INSERT INTO t1 SELECT * FROM t0_template
 
9965
WHERE MOD(f_int1,3) = 0;
 
9966
        
 
9967
# check multiple-3 success:     1
 
9968
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
9969
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
9970
AND @max_row_div2 + @max_row_div4;
 
9971
        
 
9972
# check multiple-4 success:     1
 
9973
DELETE FROM t1
 
9974
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
9975
AND @max_row_div2 + @max_row_div4 + @max_row;
 
9976
        
 
9977
# check multiple-5 success:     1
 
9978
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
9979
INSERT INTO t1
 
9980
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9981
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9982
f_charbig = '#SINGLE#';
 
9983
        
 
9984
# check single-1 success:       1
 
9985
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
9986
INSERT INTO t1
 
9987
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
9988
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
9989
f_charbig = '#SINGLE#';
 
9990
        
 
9991
# check single-2 success:       1
 
9992
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
9993
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
9994
UPDATE t1 SET f_int1 = @cur_value2
 
9995
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
9996
        
 
9997
# check single-3 success:       1
 
9998
SET @cur_value1= -1;
 
9999
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10000
UPDATE t1 SET f_int1 = @cur_value1
 
10001
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10002
        
 
10003
# check single-4 success:       1
 
10004
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10005
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10006
        
 
10007
# check single-5 success:       1
 
10008
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10009
        
 
10010
# check single-6 success:       1
 
10011
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10012
        
 
10013
# check single-7 success:       1
 
10014
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
10015
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10016
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10017
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10018
f_charbig = '#NULL#';
 
10019
INSERT INTO t1
 
10020
SET f_int1 = NULL , f_int2 = -@max_row,
 
10021
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
10022
f_charbig = '#NULL#';
 
10023
# check null success:    1
 
10024
        
 
10025
# check null-1 success:         1
 
10026
UPDATE t1 SET f_int1 = -@max_row
 
10027
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10028
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10029
        
 
10030
# check null-2 success:         1
 
10031
UPDATE t1 SET f_int1 = NULL
 
10032
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10033
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10034
        
 
10035
# check null-3 success:         1
 
10036
DELETE FROM t1
 
10037
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10038
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10039
        
 
10040
# check null-4 success:         1
 
10041
DELETE FROM t1
 
10042
WHERE f_int1 = 0 AND f_int2 = 0
 
10043
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
10044
AND f_charbig = '#NULL#';
 
10045
SET AUTOCOMMIT= 0;
 
10046
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10047
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10048
FROM t0_template source_tab
 
10049
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10050
        
 
10051
# check transactions-1 success:         1
 
10052
COMMIT WORK;
 
10053
        
 
10054
# check transactions-2 success:         1
 
10055
ROLLBACK WORK;
 
10056
        
 
10057
# check transactions-3 success:         1
 
10058
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10059
COMMIT WORK;
 
10060
ROLLBACK WORK;
 
10061
        
 
10062
# check transactions-4 success:         1
 
10063
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10064
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10065
FROM t0_template source_tab
 
10066
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10067
        
 
10068
# check transactions-5 success:         1
 
10069
ROLLBACK WORK;
 
10070
Warnings:
 
10071
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
10072
        
 
10073
# check transactions-6 success:         1
 
10074
# INFO: Storage engine used for t1 seems to be not transactional.
 
10075
COMMIT;
 
10076
        
 
10077
# check transactions-7 success:         1
 
10078
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10079
COMMIT WORK;
 
10080
SET @@session.sql_mode = 'traditional';
 
10081
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
10082
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10083
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
10084
'', '', 'was inserted' FROM t0_template
 
10085
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10086
ERROR 22012: Division by 0
 
10087
COMMIT;
 
10088
        
 
10089
# check transactions-8 success:         1
 
10090
# INFO: Storage engine used for t1 seems to be unable to revert
 
10091
#       changes made by the failing statement.
 
10092
SET @@session.sql_mode = '';
 
10093
SET AUTOCOMMIT= 1;
 
10094
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10095
COMMIT WORK;
 
10096
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
10097
        
 
10098
# check special-1 success:      1
 
10099
UPDATE t1 SET f_charbig = '';
 
10100
        
 
10101
# check special-2 success:      1
 
10102
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
10103
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10104
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
10105
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10106
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10107
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10108
'just inserted' FROM t0_template
 
10109
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10110
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
10111
BEGIN
 
10112
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10113
f_charbig = 'updated by trigger'
 
10114
      WHERE f_int1 = new.f_int1;
 
10115
END|
 
10116
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10117
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10118
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10119
        
 
10120
# check trigger-1 success:      1
 
10121
DROP TRIGGER trg_1;
 
10122
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10123
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10124
f_charbig = 'just inserted'
 
10125
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10126
DELETE FROM t0_aux
 
10127
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10128
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10129
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10130
'just inserted' FROM t0_template
 
10131
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10132
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
10133
BEGIN
 
10134
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10135
f_charbig = 'updated by trigger'
 
10136
      WHERE f_int1 = new.f_int1;
 
10137
END|
 
10138
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10139
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10140
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10141
        
 
10142
# check trigger-2 success:      1
 
10143
DROP TRIGGER trg_1;
 
10144
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10145
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10146
f_charbig = 'just inserted'
 
10147
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10148
DELETE FROM t0_aux
 
10149
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10150
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10151
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10152
'just inserted' FROM t0_template
 
10153
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10154
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10155
BEGIN
 
10156
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10157
f_charbig = 'updated by trigger'
 
10158
      WHERE f_int1 = new.f_int1;
 
10159
END|
 
10160
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10161
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10162
        
 
10163
# check trigger-3 success:      1
 
10164
DROP TRIGGER trg_1;
 
10165
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10166
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10167
f_charbig = 'just inserted'
 
10168
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10169
DELETE FROM t0_aux
 
10170
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10171
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10172
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10173
'just inserted' FROM t0_template
 
10174
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10175
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10176
BEGIN
 
10177
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10178
f_charbig = 'updated by trigger'
 
10179
      WHERE f_int1 = - old.f_int1;
 
10180
END|
 
10181
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10182
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10183
        
 
10184
# check trigger-4 success:      1
 
10185
DROP TRIGGER trg_1;
 
10186
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10187
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10188
f_charbig = 'just inserted'
 
10189
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10190
DELETE FROM t0_aux
 
10191
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10192
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10193
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10194
'just inserted' FROM t0_template
 
10195
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10196
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10197
BEGIN
 
10198
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10199
f_charbig = 'updated by trigger'
 
10200
      WHERE f_int1 = new.f_int1;
 
10201
END|
 
10202
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10203
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10204
        
 
10205
# check trigger-5 success:      1
 
10206
DROP TRIGGER trg_1;
 
10207
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10208
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10209
f_charbig = 'just inserted'
 
10210
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10211
DELETE FROM t0_aux
 
10212
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10213
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10214
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10215
'just inserted' FROM t0_template
 
10216
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10217
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10218
BEGIN
 
10219
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10220
f_charbig = 'updated by trigger'
 
10221
      WHERE f_int1 = - old.f_int1;
 
10222
END|
 
10223
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10224
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10225
        
 
10226
# check trigger-6 success:      1
 
10227
DROP TRIGGER trg_1;
 
10228
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10229
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10230
f_charbig = 'just inserted'
 
10231
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10232
DELETE FROM t0_aux
 
10233
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10234
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10235
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10236
'just inserted' FROM t0_template
 
10237
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10238
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
10239
BEGIN
 
10240
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10241
f_charbig = 'updated by trigger'
 
10242
      WHERE f_int1 = - old.f_int1;
 
10243
END|
 
10244
DELETE FROM t0_aux
 
10245
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10246
        
 
10247
# check trigger-7 success:      1
 
10248
DROP TRIGGER trg_1;
 
10249
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10250
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10251
f_charbig = 'just inserted'
 
10252
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10253
DELETE FROM t0_aux
 
10254
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10255
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10256
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10257
'just inserted' FROM t0_template
 
10258
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10259
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
10260
BEGIN
 
10261
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10262
f_charbig = 'updated by trigger'
 
10263
      WHERE f_int1 = - old.f_int1;
 
10264
END|
 
10265
DELETE FROM t0_aux
 
10266
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10267
        
 
10268
# check trigger-8 success:      1
 
10269
DROP TRIGGER trg_1;
 
10270
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10271
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10272
f_charbig = 'just inserted'
 
10273
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10274
DELETE FROM t0_aux
 
10275
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10276
DELETE FROM t1
 
10277
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10278
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10279
BEGIN
 
10280
SET new.f_int1 = old.f_int1 + @max_row,
 
10281
new.f_int2 = old.f_int2 - @max_row,
 
10282
new.f_charbig = '####updated per update trigger####';
 
10283
END|
 
10284
UPDATE t1
 
10285
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10286
f_charbig = '####updated per update statement itself####';
 
10287
        
 
10288
# check trigger-9 success:      1
 
10289
DROP TRIGGER trg_2;
 
10290
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10291
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10292
f_charbig = CONCAT('===',f_char1,'===');
 
10293
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10294
BEGIN
 
10295
SET new.f_int1 = new.f_int1 + @max_row,
 
10296
new.f_int2 = new.f_int2 - @max_row,
 
10297
new.f_charbig = '####updated per update trigger####';
 
10298
END|
 
10299
UPDATE t1
 
10300
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10301
f_charbig = '####updated per update statement itself####';
 
10302
        
 
10303
# check trigger-10 success:     1
 
10304
DROP TRIGGER trg_2;
 
10305
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10306
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10307
f_charbig = CONCAT('===',f_char1,'===');
 
10308
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10309
BEGIN
 
10310
SET new.f_int1 = @my_max1 + @counter,
 
10311
new.f_int2 = @my_min2 - @counter,
 
10312
new.f_charbig = '####updated per insert trigger####';
 
10313
SET @counter = @counter + 1;
 
10314
END|
 
10315
SET @counter = 1;
 
10316
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10317
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10318
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10319
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10320
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10321
ORDER BY f_int1;
 
10322
DROP TRIGGER trg_3;
 
10323
        
 
10324
# check trigger-11 success:     1
 
10325
DELETE FROM t1
 
10326
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10327
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10328
AND f_charbig = '####updated per insert trigger####';
 
10329
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10330
BEGIN
 
10331
SET new.f_int1 = @my_max1 + @counter,
 
10332
new.f_int2 = @my_min2 - @counter,
 
10333
new.f_charbig = '####updated per insert trigger####';
 
10334
SET @counter = @counter + 1;
 
10335
END|
 
10336
SET @counter = 1;
 
10337
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10338
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10339
SELECT CAST(f_int1 AS CHAR),
 
10340
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10341
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10342
ORDER BY f_int1;
 
10343
DROP TRIGGER trg_3;
 
10344
        
 
10345
# check trigger-12 success:     1
 
10346
DELETE FROM t1
 
10347
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10348
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10349
AND f_charbig = '####updated per insert trigger####';
 
10350
ANALYZE  TABLE t1;
 
10351
Table   Op      Msg_type        Msg_text
 
10352
test.t1 analyze status  OK
 
10353
CHECK    TABLE t1 EXTENDED;
 
10354
Table   Op      Msg_type        Msg_text
 
10355
test.t1 check   status  OK
 
10356
CHECKSUM TABLE t1 EXTENDED;
 
10357
Table   Checksum
 
10358
test.t1 <some_value>
 
10359
OPTIMIZE TABLE t1;
 
10360
Table   Op      Msg_type        Msg_text
 
10361
test.t1 optimize        status  OK
 
10362
# check layout success:    1
 
10363
REPAIR   TABLE t1 EXTENDED;
 
10364
Table   Op      Msg_type        Msg_text
 
10365
test.t1 repair  status  OK
 
10366
# check layout success:    1
 
10367
TRUNCATE t1;
 
10368
        
 
10369
# check TRUNCATE success:       1
 
10370
# check layout success:    1
 
10371
# End usability test (inc/partition_check.inc)
 
10372
DROP TABLE t1;
 
10373
CREATE TABLE t1 (
 
10374
f_int1 INTEGER,
 
10375
f_int2 INTEGER,
 
10376
f_char1 CHAR(20),
 
10377
f_char2 CHAR(20),
 
10378
f_charbig VARCHAR(1000)
 
10379
 
 
10380
)
 
10381
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
10382
(PARTITION part_1 VALUES LESS THAN (0)
 
10383
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
10384
PARTITION part_2 VALUES LESS THAN (5)
 
10385
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
10386
PARTITION part_3 VALUES LESS THAN (10)
 
10387
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
10388
PARTITION part_4 VALUES LESS THAN (2147483646)
 
10389
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
10390
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10391
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10392
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
10393
ALTER TABLE t1 CHECK PARTITION part_1;
 
10394
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10395
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10396
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10397
# Start usability test (inc/partition_check.inc)
 
10398
create_command
 
10399
SHOW CREATE TABLE t1;
 
10400
Table   Create Table
 
10401
t1      CREATE TABLE `t1` (
 
10402
  `f_int1` int(11) DEFAULT NULL,
 
10403
  `f_int2` int(11) DEFAULT NULL,
 
10404
  `f_char1` char(20) DEFAULT NULL,
 
10405
  `f_char2` char(20) DEFAULT NULL,
 
10406
  `f_charbig` varchar(1000) DEFAULT NULL
 
10407
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
10408
 
 
10409
unified filelist
 
10410
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYD
 
10411
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYI
 
10412
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYD
 
10413
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYI
 
10414
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYD
 
10415
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYI
 
10416
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYD
 
10417
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYI
 
10418
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYD
 
10419
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYI
 
10420
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYD
 
10421
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYI
 
10422
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYD
 
10423
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYI
 
10424
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYD
 
10425
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYI
 
10426
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
10427
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
10428
 
 
10429
# check prerequisites-1 success:    1
 
10430
# check COUNT(*) success:    1
 
10431
# check MIN/MAX(f_int1) success:    1
 
10432
# check MIN/MAX(f_int2) success:    1
 
10433
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10434
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10435
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10436
WHERE f_int1 IN (2,3);
 
10437
# check prerequisites-3 success:    1
 
10438
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10439
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
10440
# check read via f_int1 success: 1
 
10441
# check read via f_int2 success: 1
 
10442
        
 
10443
# check multiple-1 success:     1
 
10444
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
10445
        
 
10446
# check multiple-2 success:     1
 
10447
INSERT INTO t1 SELECT * FROM t0_template
 
10448
WHERE MOD(f_int1,3) = 0;
 
10449
        
 
10450
# check multiple-3 success:     1
 
10451
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
10452
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
10453
AND @max_row_div2 + @max_row_div4;
 
10454
        
 
10455
# check multiple-4 success:     1
 
10456
DELETE FROM t1
 
10457
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
10458
AND @max_row_div2 + @max_row_div4 + @max_row;
 
10459
        
 
10460
# check multiple-5 success:     1
 
10461
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
10462
INSERT INTO t1
 
10463
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10464
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10465
f_charbig = '#SINGLE#';
 
10466
        
 
10467
# check single-1 success:       1
 
10468
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
10469
INSERT INTO t1
 
10470
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10471
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10472
f_charbig = '#SINGLE#';
 
10473
        
 
10474
# check single-2 success:       1
 
10475
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
10476
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
10477
UPDATE t1 SET f_int1 = @cur_value2
 
10478
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
10479
        
 
10480
# check single-3 success:       1
 
10481
SET @cur_value1= -1;
 
10482
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10483
UPDATE t1 SET f_int1 = @cur_value1
 
10484
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10485
        
 
10486
# check single-4 success:       1
 
10487
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10488
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10489
        
 
10490
# check single-5 success:       1
 
10491
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10492
        
 
10493
# check single-6 success:       1
 
10494
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10495
ERROR HY000: Table has no partition for value 2147483647
 
10496
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10497
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10498
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10499
f_charbig = '#NULL#';
 
10500
INSERT INTO t1
 
10501
SET f_int1 = NULL , f_int2 = -@max_row,
 
10502
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
10503
f_charbig = '#NULL#';
 
10504
# check null success:    1
 
10505
        
 
10506
# check null-1 success:         1
 
10507
UPDATE t1 SET f_int1 = -@max_row
 
10508
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10509
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10510
        
 
10511
# check null-2 success:         1
 
10512
UPDATE t1 SET f_int1 = NULL
 
10513
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10514
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10515
        
 
10516
# check null-3 success:         1
 
10517
DELETE FROM t1
 
10518
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10519
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10520
        
 
10521
# check null-4 success:         1
 
10522
DELETE FROM t1
 
10523
WHERE f_int1 = 0 AND f_int2 = 0
 
10524
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
10525
AND f_charbig = '#NULL#';
 
10526
SET AUTOCOMMIT= 0;
 
10527
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10528
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10529
FROM t0_template source_tab
 
10530
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10531
        
 
10532
# check transactions-1 success:         1
 
10533
COMMIT WORK;
 
10534
        
 
10535
# check transactions-2 success:         1
 
10536
ROLLBACK WORK;
 
10537
        
 
10538
# check transactions-3 success:         1
 
10539
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10540
COMMIT WORK;
 
10541
ROLLBACK WORK;
 
10542
        
 
10543
# check transactions-4 success:         1
 
10544
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10545
SELECT f_int1, f_int1, '', '', 'was inserted'
 
10546
FROM t0_template source_tab
 
10547
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10548
        
 
10549
# check transactions-5 success:         1
 
10550
ROLLBACK WORK;
 
10551
Warnings:
 
10552
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
10553
        
 
10554
# check transactions-6 success:         1
 
10555
# INFO: Storage engine used for t1 seems to be not transactional.
 
10556
COMMIT;
 
10557
        
 
10558
# check transactions-7 success:         1
 
10559
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10560
COMMIT WORK;
 
10561
SET @@session.sql_mode = 'traditional';
 
10562
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
10563
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10564
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
10565
'', '', 'was inserted' FROM t0_template
 
10566
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
10567
ERROR 22012: Division by 0
 
10568
COMMIT;
 
10569
        
 
10570
# check transactions-8 success:         1
 
10571
# INFO: Storage engine used for t1 seems to be unable to revert
 
10572
#       changes made by the failing statement.
 
10573
SET @@session.sql_mode = '';
 
10574
SET AUTOCOMMIT= 1;
 
10575
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
10576
COMMIT WORK;
 
10577
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
10578
        
 
10579
# check special-1 success:      1
 
10580
UPDATE t1 SET f_charbig = '';
 
10581
        
 
10582
# check special-2 success:      1
 
10583
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
10584
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10585
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
10586
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10587
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10588
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10589
'just inserted' FROM t0_template
 
10590
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10591
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
10592
BEGIN
 
10593
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10594
f_charbig = 'updated by trigger'
 
10595
      WHERE f_int1 = new.f_int1;
 
10596
END|
 
10597
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10598
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10599
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10600
        
 
10601
# check trigger-1 success:      1
 
10602
DROP TRIGGER trg_1;
 
10603
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10604
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10605
f_charbig = 'just inserted'
 
10606
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10607
DELETE FROM t0_aux
 
10608
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10609
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10610
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10611
'just inserted' FROM t0_template
 
10612
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10613
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
10614
BEGIN
 
10615
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10616
f_charbig = 'updated by trigger'
 
10617
      WHERE f_int1 = new.f_int1;
 
10618
END|
 
10619
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10620
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
10621
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10622
        
 
10623
# check trigger-2 success:      1
 
10624
DROP TRIGGER trg_1;
 
10625
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10626
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10627
f_charbig = 'just inserted'
 
10628
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10629
DELETE FROM t0_aux
 
10630
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10631
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10632
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10633
'just inserted' FROM t0_template
 
10634
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10635
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10636
BEGIN
 
10637
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10638
f_charbig = 'updated by trigger'
 
10639
      WHERE f_int1 = new.f_int1;
 
10640
END|
 
10641
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10642
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10643
        
 
10644
# check trigger-3 success:      1
 
10645
DROP TRIGGER trg_1;
 
10646
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10647
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10648
f_charbig = 'just inserted'
 
10649
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10650
DELETE FROM t0_aux
 
10651
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10652
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10653
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10654
'just inserted' FROM t0_template
 
10655
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10656
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
10657
BEGIN
 
10658
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10659
f_charbig = 'updated by trigger'
 
10660
      WHERE f_int1 = - old.f_int1;
 
10661
END|
 
10662
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10663
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10664
        
 
10665
# check trigger-4 success:      1
 
10666
DROP TRIGGER trg_1;
 
10667
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10668
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10669
f_charbig = 'just inserted'
 
10670
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10671
DELETE FROM t0_aux
 
10672
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10673
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10674
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10675
'just inserted' FROM t0_template
 
10676
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10677
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10678
BEGIN
 
10679
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10680
f_charbig = 'updated by trigger'
 
10681
      WHERE f_int1 = new.f_int1;
 
10682
END|
 
10683
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10684
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10685
        
 
10686
# check trigger-5 success:      1
 
10687
DROP TRIGGER trg_1;
 
10688
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10689
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10690
f_charbig = 'just inserted'
 
10691
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10692
DELETE FROM t0_aux
 
10693
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10694
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10695
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10696
'just inserted' FROM t0_template
 
10697
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10698
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
10699
BEGIN
 
10700
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10701
f_charbig = 'updated by trigger'
 
10702
      WHERE f_int1 = - old.f_int1;
 
10703
END|
 
10704
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
10705
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10706
        
 
10707
# check trigger-6 success:      1
 
10708
DROP TRIGGER trg_1;
 
10709
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10710
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10711
f_charbig = 'just inserted'
 
10712
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10713
DELETE FROM t0_aux
 
10714
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10715
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10716
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10717
'just inserted' FROM t0_template
 
10718
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10719
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
10720
BEGIN
 
10721
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10722
f_charbig = 'updated by trigger'
 
10723
      WHERE f_int1 = - old.f_int1;
 
10724
END|
 
10725
DELETE FROM t0_aux
 
10726
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10727
        
 
10728
# check trigger-7 success:      1
 
10729
DROP TRIGGER trg_1;
 
10730
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10731
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10732
f_charbig = 'just inserted'
 
10733
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10734
DELETE FROM t0_aux
 
10735
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10736
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10737
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
10738
'just inserted' FROM t0_template
 
10739
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10740
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
10741
BEGIN
 
10742
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
10743
f_charbig = 'updated by trigger'
 
10744
      WHERE f_int1 = - old.f_int1;
 
10745
END|
 
10746
DELETE FROM t0_aux
 
10747
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
10748
        
 
10749
# check trigger-8 success:      1
 
10750
DROP TRIGGER trg_1;
 
10751
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10752
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10753
f_charbig = 'just inserted'
 
10754
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
10755
DELETE FROM t0_aux
 
10756
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10757
DELETE FROM t1
 
10758
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
10759
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10760
BEGIN
 
10761
SET new.f_int1 = old.f_int1 + @max_row,
 
10762
new.f_int2 = old.f_int2 - @max_row,
 
10763
new.f_charbig = '####updated per update trigger####';
 
10764
END|
 
10765
UPDATE t1
 
10766
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10767
f_charbig = '####updated per update statement itself####';
 
10768
        
 
10769
# check trigger-9 success:      1
 
10770
DROP TRIGGER trg_2;
 
10771
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10772
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10773
f_charbig = CONCAT('===',f_char1,'===');
 
10774
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
10775
BEGIN
 
10776
SET new.f_int1 = new.f_int1 + @max_row,
 
10777
new.f_int2 = new.f_int2 - @max_row,
 
10778
new.f_charbig = '####updated per update trigger####';
 
10779
END|
 
10780
UPDATE t1
 
10781
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
10782
f_charbig = '####updated per update statement itself####';
 
10783
        
 
10784
# check trigger-10 success:     1
 
10785
DROP TRIGGER trg_2;
 
10786
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
10787
f_int2 = CAST(f_char1 AS SIGNED INT),
 
10788
f_charbig = CONCAT('===',f_char1,'===');
 
10789
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10790
BEGIN
 
10791
SET new.f_int1 = @my_max1 + @counter,
 
10792
new.f_int2 = @my_min2 - @counter,
 
10793
new.f_charbig = '####updated per insert trigger####';
 
10794
SET @counter = @counter + 1;
 
10795
END|
 
10796
SET @counter = 1;
 
10797
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10798
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10799
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10800
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10801
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10802
ORDER BY f_int1;
 
10803
DROP TRIGGER trg_3;
 
10804
        
 
10805
# check trigger-11 success:     1
 
10806
DELETE FROM t1
 
10807
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10808
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10809
AND f_charbig = '####updated per insert trigger####';
 
10810
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
10811
BEGIN
 
10812
SET new.f_int1 = @my_max1 + @counter,
 
10813
new.f_int2 = @my_min2 - @counter,
 
10814
new.f_charbig = '####updated per insert trigger####';
 
10815
SET @counter = @counter + 1;
 
10816
END|
 
10817
SET @counter = 1;
 
10818
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
10819
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
10820
SELECT CAST(f_int1 AS CHAR),
 
10821
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
10822
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
10823
ORDER BY f_int1;
 
10824
DROP TRIGGER trg_3;
 
10825
        
 
10826
# check trigger-12 success:     1
 
10827
DELETE FROM t1
 
10828
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
10829
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
10830
AND f_charbig = '####updated per insert trigger####';
 
10831
ANALYZE  TABLE t1;
 
10832
Table   Op      Msg_type        Msg_text
 
10833
test.t1 analyze status  OK
 
10834
CHECK    TABLE t1 EXTENDED;
 
10835
Table   Op      Msg_type        Msg_text
 
10836
test.t1 check   status  OK
 
10837
CHECKSUM TABLE t1 EXTENDED;
 
10838
Table   Checksum
 
10839
test.t1 <some_value>
 
10840
OPTIMIZE TABLE t1;
 
10841
Table   Op      Msg_type        Msg_text
 
10842
test.t1 optimize        status  OK
 
10843
# check layout success:    1
 
10844
REPAIR   TABLE t1 EXTENDED;
 
10845
Table   Op      Msg_type        Msg_text
 
10846
test.t1 repair  status  OK
 
10847
# check layout success:    1
 
10848
TRUNCATE t1;
 
10849
        
 
10850
# check TRUNCATE success:       1
 
10851
# check layout success:    1
 
10852
# End usability test (inc/partition_check.inc)
 
10853
DROP TABLE t1;
 
10854
CREATE TABLE t1 (
 
10855
f_int1 INTEGER,
 
10856
f_int2 INTEGER,
 
10857
f_char1 CHAR(20),
 
10858
f_char2 CHAR(20),
 
10859
f_charbig VARCHAR(1000)
 
10860
 
 
10861
)
 
10862
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
10863
(PARTITION part_1 VALUES IN (0)
 
10864
(SUBPARTITION sp11, SUBPARTITION sp12),
 
10865
PARTITION part_2 VALUES IN (1)
 
10866
(SUBPARTITION sp21, SUBPARTITION sp22),
 
10867
PARTITION part_3 VALUES IN (2)
 
10868
(SUBPARTITION sp31, SUBPARTITION sp32),
 
10869
PARTITION part_4 VALUES IN (NULL)
 
10870
(SUBPARTITION sp41, SUBPARTITION sp42));
 
10871
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10872
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10873
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
10874
ALTER TABLE t1 CHECK PARTITION part_1;
 
10875
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
10876
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
10877
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
10878
# Start usability test (inc/partition_check.inc)
 
10879
create_command
 
10880
SHOW CREATE TABLE t1;
 
10881
Table   Create Table
 
10882
t1      CREATE TABLE `t1` (
 
10883
  `f_int1` int(11) DEFAULT NULL,
 
10884
  `f_int2` int(11) DEFAULT NULL,
 
10885
  `f_char1` char(20) DEFAULT NULL,
 
10886
  `f_char2` char(20) DEFAULT NULL,
 
10887
  `f_charbig` varchar(1000) DEFAULT NULL
 
10888
) ENGINE=MyISAM 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 = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
10889
 
 
10890
unified filelist
 
10891
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYD
 
10892
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYI
 
10893
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYD
 
10894
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYI
 
10895
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYD
 
10896
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYI
 
10897
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYD
 
10898
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYI
 
10899
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYD
 
10900
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYI
 
10901
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYD
 
10902
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYI
 
10903
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYD
 
10904
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYI
 
10905
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYD
 
10906
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYI
 
10907
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
10908
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
10909
 
 
10910
# check prerequisites-1 success:    1
 
10911
# check COUNT(*) success:    1
 
10912
# check MIN/MAX(f_int1) success:    1
 
10913
# check MIN/MAX(f_int2) success:    1
 
10914
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
10915
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
10916
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
10917
WHERE f_int1 IN (2,3);
 
10918
# check prerequisites-3 success:    1
 
10919
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
10920
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
10921
# check read via f_int1 success: 1
 
10922
# check read via f_int2 success: 1
 
10923
        
 
10924
# check multiple-1 success:     1
 
10925
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
10926
        
 
10927
# check multiple-2 success:     1
 
10928
INSERT INTO t1 SELECT * FROM t0_template
 
10929
WHERE MOD(f_int1,3) = 0;
 
10930
        
 
10931
# check multiple-3 success:     1
 
10932
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
10933
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
10934
AND @max_row_div2 + @max_row_div4;
 
10935
        
 
10936
# check multiple-4 success:     1
 
10937
DELETE FROM t1
 
10938
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
10939
AND @max_row_div2 + @max_row_div4 + @max_row;
 
10940
        
 
10941
# check multiple-5 success:     1
 
10942
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
10943
INSERT INTO t1
 
10944
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10945
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10946
f_charbig = '#SINGLE#';
 
10947
        
 
10948
# check single-1 success:       1
 
10949
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
10950
INSERT INTO t1
 
10951
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
10952
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
10953
f_charbig = '#SINGLE#';
 
10954
        
 
10955
# check single-2 success:       1
 
10956
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
10957
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
10958
UPDATE t1 SET f_int1 = @cur_value2
 
10959
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
10960
        
 
10961
# check single-3 success:       1
 
10962
SET @cur_value1= -1;
 
10963
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
10964
UPDATE t1 SET f_int1 = @cur_value1
 
10965
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
10966
        
 
10967
# check single-4 success:       1
 
10968
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
10969
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
10970
        
 
10971
# check single-5 success:       1
 
10972
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
10973
        
 
10974
# check single-6 success:       1
 
10975
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
10976
        
 
10977
# check single-7 success:       1
 
10978
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
10979
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
10980
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
10981
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
10982
f_charbig = '#NULL#';
 
10983
INSERT INTO t1
 
10984
SET f_int1 = NULL , f_int2 = -@max_row,
 
10985
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
10986
f_charbig = '#NULL#';
 
10987
# check null success:    1
 
10988
        
 
10989
# check null-1 success:         1
 
10990
UPDATE t1 SET f_int1 = -@max_row
 
10991
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10992
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10993
        
 
10994
# check null-2 success:         1
 
10995
UPDATE t1 SET f_int1 = NULL
 
10996
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
10997
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
10998
        
 
10999
# check null-3 success:         1
 
11000
DELETE FROM t1
 
11001
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11002
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11003
        
 
11004
# check null-4 success:         1
 
11005
DELETE FROM t1
 
11006
WHERE f_int1 = 0 AND f_int2 = 0
 
11007
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11008
AND f_charbig = '#NULL#';
 
11009
SET AUTOCOMMIT= 0;
 
11010
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11011
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11012
FROM t0_template source_tab
 
11013
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11014
        
 
11015
# check transactions-1 success:         1
 
11016
COMMIT WORK;
 
11017
        
 
11018
# check transactions-2 success:         1
 
11019
ROLLBACK WORK;
 
11020
        
 
11021
# check transactions-3 success:         1
 
11022
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11023
COMMIT WORK;
 
11024
ROLLBACK WORK;
 
11025
        
 
11026
# check transactions-4 success:         1
 
11027
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11028
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11029
FROM t0_template source_tab
 
11030
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11031
        
 
11032
# check transactions-5 success:         1
 
11033
ROLLBACK WORK;
 
11034
Warnings:
 
11035
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
11036
        
 
11037
# check transactions-6 success:         1
 
11038
# INFO: Storage engine used for t1 seems to be not transactional.
 
11039
COMMIT;
 
11040
        
 
11041
# check transactions-7 success:         1
 
11042
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11043
COMMIT WORK;
 
11044
SET @@session.sql_mode = 'traditional';
 
11045
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11046
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11047
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11048
'', '', 'was inserted' FROM t0_template
 
11049
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11050
ERROR 22012: Division by 0
 
11051
COMMIT;
 
11052
        
 
11053
# check transactions-8 success:         1
 
11054
# INFO: Storage engine used for t1 seems to be unable to revert
 
11055
#       changes made by the failing statement.
 
11056
SET @@session.sql_mode = '';
 
11057
SET AUTOCOMMIT= 1;
 
11058
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11059
COMMIT WORK;
 
11060
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11061
        
 
11062
# check special-1 success:      1
 
11063
UPDATE t1 SET f_charbig = '';
 
11064
        
 
11065
# check special-2 success:      1
 
11066
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11067
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11068
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11069
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11070
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11071
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11072
'just inserted' FROM t0_template
 
11073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11074
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11075
BEGIN
 
11076
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11077
f_charbig = 'updated by trigger'
 
11078
      WHERE f_int1 = new.f_int1;
 
11079
END|
 
11080
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11081
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11082
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11083
        
 
11084
# check trigger-1 success:      1
 
11085
DROP TRIGGER trg_1;
 
11086
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11087
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11088
f_charbig = 'just inserted'
 
11089
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11090
DELETE FROM t0_aux
 
11091
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11092
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11093
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11094
'just inserted' FROM t0_template
 
11095
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11096
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
11097
BEGIN
 
11098
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11099
f_charbig = 'updated by trigger'
 
11100
      WHERE f_int1 = new.f_int1;
 
11101
END|
 
11102
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11103
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11104
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11105
        
 
11106
# check trigger-2 success:      1
 
11107
DROP TRIGGER trg_1;
 
11108
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11109
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11110
f_charbig = 'just inserted'
 
11111
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11112
DELETE FROM t0_aux
 
11113
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11114
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11115
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11116
'just inserted' FROM t0_template
 
11117
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11118
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11119
BEGIN
 
11120
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11121
f_charbig = 'updated by trigger'
 
11122
      WHERE f_int1 = new.f_int1;
 
11123
END|
 
11124
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11125
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11126
        
 
11127
# check trigger-3 success:      1
 
11128
DROP TRIGGER trg_1;
 
11129
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11130
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11131
f_charbig = 'just inserted'
 
11132
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11133
DELETE FROM t0_aux
 
11134
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11135
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11136
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11137
'just inserted' FROM t0_template
 
11138
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11139
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11140
BEGIN
 
11141
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11142
f_charbig = 'updated by trigger'
 
11143
      WHERE f_int1 = - old.f_int1;
 
11144
END|
 
11145
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11146
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11147
        
 
11148
# check trigger-4 success:      1
 
11149
DROP TRIGGER trg_1;
 
11150
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11151
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11152
f_charbig = 'just inserted'
 
11153
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11154
DELETE FROM t0_aux
 
11155
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11156
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11157
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11158
'just inserted' FROM t0_template
 
11159
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11160
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11161
BEGIN
 
11162
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11163
f_charbig = 'updated by trigger'
 
11164
      WHERE f_int1 = new.f_int1;
 
11165
END|
 
11166
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11167
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11168
        
 
11169
# check trigger-5 success:      1
 
11170
DROP TRIGGER trg_1;
 
11171
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11172
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11173
f_charbig = 'just inserted'
 
11174
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11175
DELETE FROM t0_aux
 
11176
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11177
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11178
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11179
'just inserted' FROM t0_template
 
11180
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11181
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11182
BEGIN
 
11183
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11184
f_charbig = 'updated by trigger'
 
11185
      WHERE f_int1 = - old.f_int1;
 
11186
END|
 
11187
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11188
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11189
        
 
11190
# check trigger-6 success:      1
 
11191
DROP TRIGGER trg_1;
 
11192
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11193
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11194
f_charbig = 'just inserted'
 
11195
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11196
DELETE FROM t0_aux
 
11197
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11198
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11199
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11200
'just inserted' FROM t0_template
 
11201
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11202
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
11203
BEGIN
 
11204
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11205
f_charbig = 'updated by trigger'
 
11206
      WHERE f_int1 = - old.f_int1;
 
11207
END|
 
11208
DELETE FROM t0_aux
 
11209
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11210
        
 
11211
# check trigger-7 success:      1
 
11212
DROP TRIGGER trg_1;
 
11213
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11214
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11215
f_charbig = 'just inserted'
 
11216
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11217
DELETE FROM t0_aux
 
11218
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11219
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11220
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11221
'just inserted' FROM t0_template
 
11222
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11223
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
11224
BEGIN
 
11225
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11226
f_charbig = 'updated by trigger'
 
11227
      WHERE f_int1 = - old.f_int1;
 
11228
END|
 
11229
DELETE FROM t0_aux
 
11230
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11231
        
 
11232
# check trigger-8 success:      1
 
11233
DROP TRIGGER trg_1;
 
11234
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11235
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11236
f_charbig = 'just inserted'
 
11237
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11238
DELETE FROM t0_aux
 
11239
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11240
DELETE FROM t1
 
11241
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11242
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11243
BEGIN
 
11244
SET new.f_int1 = old.f_int1 + @max_row,
 
11245
new.f_int2 = old.f_int2 - @max_row,
 
11246
new.f_charbig = '####updated per update trigger####';
 
11247
END|
 
11248
UPDATE t1
 
11249
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11250
f_charbig = '####updated per update statement itself####';
 
11251
        
 
11252
# check trigger-9 success:      1
 
11253
DROP TRIGGER trg_2;
 
11254
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11255
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11256
f_charbig = CONCAT('===',f_char1,'===');
 
11257
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11258
BEGIN
 
11259
SET new.f_int1 = new.f_int1 + @max_row,
 
11260
new.f_int2 = new.f_int2 - @max_row,
 
11261
new.f_charbig = '####updated per update trigger####';
 
11262
END|
 
11263
UPDATE t1
 
11264
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11265
f_charbig = '####updated per update statement itself####';
 
11266
        
 
11267
# check trigger-10 success:     1
 
11268
DROP TRIGGER trg_2;
 
11269
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11270
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11271
f_charbig = CONCAT('===',f_char1,'===');
 
11272
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11273
BEGIN
 
11274
SET new.f_int1 = @my_max1 + @counter,
 
11275
new.f_int2 = @my_min2 - @counter,
 
11276
new.f_charbig = '####updated per insert trigger####';
 
11277
SET @counter = @counter + 1;
 
11278
END|
 
11279
SET @counter = 1;
 
11280
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11281
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11282
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11283
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11284
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11285
ORDER BY f_int1;
 
11286
DROP TRIGGER trg_3;
 
11287
        
 
11288
# check trigger-11 success:     1
 
11289
DELETE FROM t1
 
11290
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11291
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11292
AND f_charbig = '####updated per insert trigger####';
 
11293
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11294
BEGIN
 
11295
SET new.f_int1 = @my_max1 + @counter,
 
11296
new.f_int2 = @my_min2 - @counter,
 
11297
new.f_charbig = '####updated per insert trigger####';
 
11298
SET @counter = @counter + 1;
 
11299
END|
 
11300
SET @counter = 1;
 
11301
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11302
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
11303
SELECT CAST(f_int1 AS CHAR),
 
11304
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11305
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11306
ORDER BY f_int1;
 
11307
DROP TRIGGER trg_3;
 
11308
        
 
11309
# check trigger-12 success:     1
 
11310
DELETE FROM t1
 
11311
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11312
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11313
AND f_charbig = '####updated per insert trigger####';
 
11314
ANALYZE  TABLE t1;
 
11315
Table   Op      Msg_type        Msg_text
 
11316
test.t1 analyze status  OK
 
11317
CHECK    TABLE t1 EXTENDED;
 
11318
Table   Op      Msg_type        Msg_text
 
11319
test.t1 check   status  OK
 
11320
CHECKSUM TABLE t1 EXTENDED;
 
11321
Table   Checksum
 
11322
test.t1 <some_value>
 
11323
OPTIMIZE TABLE t1;
 
11324
Table   Op      Msg_type        Msg_text
 
11325
test.t1 optimize        status  OK
 
11326
# check layout success:    1
 
11327
REPAIR   TABLE t1 EXTENDED;
 
11328
Table   Op      Msg_type        Msg_text
 
11329
test.t1 repair  status  OK
 
11330
# check layout success:    1
 
11331
TRUNCATE t1;
 
11332
        
 
11333
# check TRUNCATE success:       1
 
11334
# check layout success:    1
 
11335
# End usability test (inc/partition_check.inc)
 
11336
DROP TABLE t1;
 
11337
CREATE TABLE t1 (
 
11338
f_int1 INTEGER,
 
11339
f_int2 INTEGER,
 
11340
f_char1 CHAR(20),
 
11341
f_char2 CHAR(20),
 
11342
f_charbig VARCHAR(1000)
 
11343
 
 
11344
)
 
11345
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
11346
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
11347
(PARTITION part_1 VALUES IN (0),
 
11348
 PARTITION part_2 VALUES IN (1),
 
11349
 PARTITION part_3 VALUES IN (NULL));
 
11350
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11351
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11352
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
11353
ALTER TABLE t1 CHECK PARTITION part_1;
 
11354
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11355
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11356
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11357
# Start usability test (inc/partition_check.inc)
 
11358
create_command
 
11359
SHOW CREATE TABLE t1;
 
11360
Table   Create Table
 
11361
t1      CREATE TABLE `t1` (
 
11362
  `f_int1` int(11) DEFAULT NULL,
 
11363
  `f_int2` int(11) DEFAULT NULL,
 
11364
  `f_char1` char(20) DEFAULT NULL,
 
11365
  `f_char2` char(20) DEFAULT NULL,
 
11366
  `f_charbig` varchar(1000) DEFAULT NULL
 
11367
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */
 
11368
 
 
11369
unified filelist
 
11370
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
11371
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
11372
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
11373
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
11374
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYD
 
11375
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYI
 
11376
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
11377
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
11378
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
11379
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
11380
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYD
 
11381
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYI
 
11382
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
11383
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
11384
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
11385
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
11386
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYD
 
11387
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYI
 
11388
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
11389
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
11390
 
 
11391
# check prerequisites-1 success:    1
 
11392
# check COUNT(*) success:    1
 
11393
# check MIN/MAX(f_int1) success:    1
 
11394
# check MIN/MAX(f_int2) success:    1
 
11395
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11396
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11397
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
11398
WHERE f_int1 IN (2,3);
 
11399
# check prerequisites-3 success:    1
 
11400
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11401
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
11402
# check read via f_int1 success: 1
 
11403
# check read via f_int2 success: 1
 
11404
        
 
11405
# check multiple-1 success:     1
 
11406
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11407
        
 
11408
# check multiple-2 success:     1
 
11409
INSERT INTO t1 SELECT * FROM t0_template
 
11410
WHERE MOD(f_int1,3) = 0;
 
11411
        
 
11412
# check multiple-3 success:     1
 
11413
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11414
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11415
AND @max_row_div2 + @max_row_div4;
 
11416
        
 
11417
# check multiple-4 success:     1
 
11418
DELETE FROM t1
 
11419
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11420
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11421
        
 
11422
# check multiple-5 success:     1
 
11423
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11424
INSERT INTO t1
 
11425
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11426
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11427
f_charbig = '#SINGLE#';
 
11428
        
 
11429
# check single-1 success:       1
 
11430
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11431
INSERT INTO t1
 
11432
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11433
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11434
f_charbig = '#SINGLE#';
 
11435
        
 
11436
# check single-2 success:       1
 
11437
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11438
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11439
UPDATE t1 SET f_int1 = @cur_value2
 
11440
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11441
        
 
11442
# check single-3 success:       1
 
11443
SET @cur_value1= -1;
 
11444
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11445
UPDATE t1 SET f_int1 = @cur_value1
 
11446
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11447
        
 
11448
# check single-4 success:       1
 
11449
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11450
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11451
        
 
11452
# check single-5 success:       1
 
11453
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11454
        
 
11455
# check single-6 success:       1
 
11456
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11457
        
 
11458
# check single-7 success:       1
 
11459
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
11460
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11461
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11462
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11463
f_charbig = '#NULL#';
 
11464
INSERT INTO t1
 
11465
SET f_int1 = NULL , f_int2 = -@max_row,
 
11466
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11467
f_charbig = '#NULL#';
 
11468
# check null success:    1
 
11469
        
 
11470
# check null-1 success:         1
 
11471
UPDATE t1 SET f_int1 = -@max_row
 
11472
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11473
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11474
        
 
11475
# check null-2 success:         1
 
11476
UPDATE t1 SET f_int1 = NULL
 
11477
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11478
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11479
        
 
11480
# check null-3 success:         1
 
11481
DELETE FROM t1
 
11482
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11483
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11484
        
 
11485
# check null-4 success:         1
 
11486
DELETE FROM t1
 
11487
WHERE f_int1 = 0 AND f_int2 = 0
 
11488
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11489
AND f_charbig = '#NULL#';
 
11490
SET AUTOCOMMIT= 0;
 
11491
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11492
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11493
FROM t0_template source_tab
 
11494
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11495
        
 
11496
# check transactions-1 success:         1
 
11497
COMMIT WORK;
 
11498
        
 
11499
# check transactions-2 success:         1
 
11500
ROLLBACK WORK;
 
11501
        
 
11502
# check transactions-3 success:         1
 
11503
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11504
COMMIT WORK;
 
11505
ROLLBACK WORK;
 
11506
        
 
11507
# check transactions-4 success:         1
 
11508
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11509
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11510
FROM t0_template source_tab
 
11511
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11512
        
 
11513
# check transactions-5 success:         1
 
11514
ROLLBACK WORK;
 
11515
Warnings:
 
11516
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
11517
        
 
11518
# check transactions-6 success:         1
 
11519
# INFO: Storage engine used for t1 seems to be not transactional.
 
11520
COMMIT;
 
11521
        
 
11522
# check transactions-7 success:         1
 
11523
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11524
COMMIT WORK;
 
11525
SET @@session.sql_mode = 'traditional';
 
11526
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11527
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11528
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11529
'', '', 'was inserted' FROM t0_template
 
11530
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11531
ERROR 22012: Division by 0
 
11532
COMMIT;
 
11533
        
 
11534
# check transactions-8 success:         1
 
11535
# INFO: Storage engine used for t1 seems to be unable to revert
 
11536
#       changes made by the failing statement.
 
11537
SET @@session.sql_mode = '';
 
11538
SET AUTOCOMMIT= 1;
 
11539
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11540
COMMIT WORK;
 
11541
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
11542
        
 
11543
# check special-1 success:      1
 
11544
UPDATE t1 SET f_charbig = '';
 
11545
        
 
11546
# check special-2 success:      1
 
11547
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
11548
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11549
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
11550
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11551
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11552
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11553
'just inserted' FROM t0_template
 
11554
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11555
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
11556
BEGIN
 
11557
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11558
f_charbig = 'updated by trigger'
 
11559
      WHERE f_int1 = new.f_int1;
 
11560
END|
 
11561
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11562
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11563
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11564
        
 
11565
# check trigger-1 success:      1
 
11566
DROP TRIGGER trg_1;
 
11567
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11568
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11569
f_charbig = 'just inserted'
 
11570
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11571
DELETE FROM t0_aux
 
11572
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11573
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11574
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11575
'just inserted' FROM t0_template
 
11576
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11577
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
11578
BEGIN
 
11579
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11580
f_charbig = 'updated by trigger'
 
11581
      WHERE f_int1 = new.f_int1;
 
11582
END|
 
11583
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11584
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
11585
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11586
        
 
11587
# check trigger-2 success:      1
 
11588
DROP TRIGGER trg_1;
 
11589
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11590
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11591
f_charbig = 'just inserted'
 
11592
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11593
DELETE FROM t0_aux
 
11594
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11595
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11596
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11597
'just inserted' FROM t0_template
 
11598
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11599
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11600
BEGIN
 
11601
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11602
f_charbig = 'updated by trigger'
 
11603
      WHERE f_int1 = new.f_int1;
 
11604
END|
 
11605
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11606
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11607
        
 
11608
# check trigger-3 success:      1
 
11609
DROP TRIGGER trg_1;
 
11610
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11611
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11612
f_charbig = 'just inserted'
 
11613
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11614
DELETE FROM t0_aux
 
11615
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11616
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11617
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11618
'just inserted' FROM t0_template
 
11619
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11620
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
11621
BEGIN
 
11622
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11623
f_charbig = 'updated by trigger'
 
11624
      WHERE f_int1 = - old.f_int1;
 
11625
END|
 
11626
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11627
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11628
        
 
11629
# check trigger-4 success:      1
 
11630
DROP TRIGGER trg_1;
 
11631
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11632
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11633
f_charbig = 'just inserted'
 
11634
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11635
DELETE FROM t0_aux
 
11636
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11637
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11638
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11639
'just inserted' FROM t0_template
 
11640
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11641
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11642
BEGIN
 
11643
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11644
f_charbig = 'updated by trigger'
 
11645
      WHERE f_int1 = new.f_int1;
 
11646
END|
 
11647
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11648
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11649
        
 
11650
# check trigger-5 success:      1
 
11651
DROP TRIGGER trg_1;
 
11652
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11653
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11654
f_charbig = 'just inserted'
 
11655
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11656
DELETE FROM t0_aux
 
11657
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11658
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11659
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11660
'just inserted' FROM t0_template
 
11661
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11662
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
11663
BEGIN
 
11664
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11665
f_charbig = 'updated by trigger'
 
11666
      WHERE f_int1 = - old.f_int1;
 
11667
END|
 
11668
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
11669
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11670
        
 
11671
# check trigger-6 success:      1
 
11672
DROP TRIGGER trg_1;
 
11673
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11674
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11675
f_charbig = 'just inserted'
 
11676
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11677
DELETE FROM t0_aux
 
11678
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11679
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11680
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11681
'just inserted' FROM t0_template
 
11682
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11683
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
11684
BEGIN
 
11685
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11686
f_charbig = 'updated by trigger'
 
11687
      WHERE f_int1 = - old.f_int1;
 
11688
END|
 
11689
DELETE FROM t0_aux
 
11690
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11691
        
 
11692
# check trigger-7 success:      1
 
11693
DROP TRIGGER trg_1;
 
11694
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11695
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11696
f_charbig = 'just inserted'
 
11697
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11698
DELETE FROM t0_aux
 
11699
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11700
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11701
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
11702
'just inserted' FROM t0_template
 
11703
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11704
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
11705
BEGIN
 
11706
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
11707
f_charbig = 'updated by trigger'
 
11708
      WHERE f_int1 = - old.f_int1;
 
11709
END|
 
11710
DELETE FROM t0_aux
 
11711
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
11712
        
 
11713
# check trigger-8 success:      1
 
11714
DROP TRIGGER trg_1;
 
11715
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11716
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11717
f_charbig = 'just inserted'
 
11718
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
11719
DELETE FROM t0_aux
 
11720
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11721
DELETE FROM t1
 
11722
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
11723
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11724
BEGIN
 
11725
SET new.f_int1 = old.f_int1 + @max_row,
 
11726
new.f_int2 = old.f_int2 - @max_row,
 
11727
new.f_charbig = '####updated per update trigger####';
 
11728
END|
 
11729
UPDATE t1
 
11730
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11731
f_charbig = '####updated per update statement itself####';
 
11732
        
 
11733
# check trigger-9 success:      1
 
11734
DROP TRIGGER trg_2;
 
11735
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11736
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11737
f_charbig = CONCAT('===',f_char1,'===');
 
11738
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
11739
BEGIN
 
11740
SET new.f_int1 = new.f_int1 + @max_row,
 
11741
new.f_int2 = new.f_int2 - @max_row,
 
11742
new.f_charbig = '####updated per update trigger####';
 
11743
END|
 
11744
UPDATE t1
 
11745
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
11746
f_charbig = '####updated per update statement itself####';
 
11747
        
 
11748
# check trigger-10 success:     1
 
11749
DROP TRIGGER trg_2;
 
11750
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
11751
f_int2 = CAST(f_char1 AS SIGNED INT),
 
11752
f_charbig = CONCAT('===',f_char1,'===');
 
11753
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11754
BEGIN
 
11755
SET new.f_int1 = @my_max1 + @counter,
 
11756
new.f_int2 = @my_min2 - @counter,
 
11757
new.f_charbig = '####updated per insert trigger####';
 
11758
SET @counter = @counter + 1;
 
11759
END|
 
11760
SET @counter = 1;
 
11761
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11762
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11763
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11764
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11765
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11766
ORDER BY f_int1;
 
11767
DROP TRIGGER trg_3;
 
11768
        
 
11769
# check trigger-11 success:     1
 
11770
DELETE FROM t1
 
11771
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11772
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11773
AND f_charbig = '####updated per insert trigger####';
 
11774
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
11775
BEGIN
 
11776
SET new.f_int1 = @my_max1 + @counter,
 
11777
new.f_int2 = @my_min2 - @counter,
 
11778
new.f_charbig = '####updated per insert trigger####';
 
11779
SET @counter = @counter + 1;
 
11780
END|
 
11781
SET @counter = 1;
 
11782
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
11783
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
11784
SELECT CAST(f_int1 AS CHAR),
 
11785
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
11786
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
11787
ORDER BY f_int1;
 
11788
DROP TRIGGER trg_3;
 
11789
        
 
11790
# check trigger-12 success:     1
 
11791
DELETE FROM t1
 
11792
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
11793
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
11794
AND f_charbig = '####updated per insert trigger####';
 
11795
ANALYZE  TABLE t1;
 
11796
Table   Op      Msg_type        Msg_text
 
11797
test.t1 analyze status  OK
 
11798
CHECK    TABLE t1 EXTENDED;
 
11799
Table   Op      Msg_type        Msg_text
 
11800
test.t1 check   status  OK
 
11801
CHECKSUM TABLE t1 EXTENDED;
 
11802
Table   Checksum
 
11803
test.t1 <some_value>
 
11804
OPTIMIZE TABLE t1;
 
11805
Table   Op      Msg_type        Msg_text
 
11806
test.t1 optimize        status  OK
 
11807
# check layout success:    1
 
11808
REPAIR   TABLE t1 EXTENDED;
 
11809
Table   Op      Msg_type        Msg_text
 
11810
test.t1 repair  status  OK
 
11811
# check layout success:    1
 
11812
TRUNCATE t1;
 
11813
        
 
11814
# check TRUNCATE success:       1
 
11815
# check layout success:    1
 
11816
# End usability test (inc/partition_check.inc)
 
11817
DROP TABLE t1;
 
11818
#  2.2 ALTER ... CHECK PARTITION part_1,part_2;
 
11819
DROP TABLE IF EXISTS t1;
 
11820
CREATE TABLE t1 (
 
11821
f_int1 INTEGER,
 
11822
f_int2 INTEGER,
 
11823
f_char1 CHAR(20),
 
11824
f_char2 CHAR(20),
 
11825
f_charbig VARCHAR(1000)
 
11826
 
 
11827
)
 
11828
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
11829
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11830
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11831
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
11832
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
 
11833
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
11834
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
11835
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
11836
# Start usability test (inc/partition_check.inc)
 
11837
create_command
 
11838
SHOW CREATE TABLE t1;
 
11839
Table   Create Table
 
11840
t1      CREATE TABLE `t1` (
 
11841
  `f_int1` int(11) DEFAULT NULL,
 
11842
  `f_int2` int(11) DEFAULT NULL,
 
11843
  `f_char1` char(20) DEFAULT NULL,
 
11844
  `f_char2` char(20) DEFAULT NULL,
 
11845
  `f_charbig` varchar(1000) DEFAULT NULL
 
11846
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */
 
11847
 
 
11848
unified filelist
 
11849
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
11850
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
11851
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
11852
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
11853
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
11854
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
11855
 
 
11856
# check prerequisites-1 success:    1
 
11857
# check COUNT(*) success:    1
 
11858
# check MIN/MAX(f_int1) success:    1
 
11859
# check MIN/MAX(f_int2) success:    1
 
11860
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11861
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
11862
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
11863
WHERE f_int1 IN (2,3);
 
11864
# check prerequisites-3 success:    1
 
11865
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
11866
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
11867
# check read via f_int1 success: 1
 
11868
# check read via f_int2 success: 1
 
11869
        
 
11870
# check multiple-1 success:     1
 
11871
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
11872
        
 
11873
# check multiple-2 success:     1
 
11874
INSERT INTO t1 SELECT * FROM t0_template
 
11875
WHERE MOD(f_int1,3) = 0;
 
11876
        
 
11877
# check multiple-3 success:     1
 
11878
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
11879
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
11880
AND @max_row_div2 + @max_row_div4;
 
11881
        
 
11882
# check multiple-4 success:     1
 
11883
DELETE FROM t1
 
11884
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
11885
AND @max_row_div2 + @max_row_div4 + @max_row;
 
11886
        
 
11887
# check multiple-5 success:     1
 
11888
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
11889
INSERT INTO t1
 
11890
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11891
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11892
f_charbig = '#SINGLE#';
 
11893
        
 
11894
# check single-1 success:       1
 
11895
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
11896
INSERT INTO t1
 
11897
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
11898
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
11899
f_charbig = '#SINGLE#';
 
11900
        
 
11901
# check single-2 success:       1
 
11902
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
11903
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
11904
UPDATE t1 SET f_int1 = @cur_value2
 
11905
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
11906
        
 
11907
# check single-3 success:       1
 
11908
SET @cur_value1= -1;
 
11909
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
11910
UPDATE t1 SET f_int1 = @cur_value1
 
11911
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
11912
        
 
11913
# check single-4 success:       1
 
11914
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
11915
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
11916
        
 
11917
# check single-5 success:       1
 
11918
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
11919
        
 
11920
# check single-6 success:       1
 
11921
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
11922
        
 
11923
# check single-7 success:       1
 
11924
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
11925
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
11926
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
11927
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
11928
f_charbig = '#NULL#';
 
11929
INSERT INTO t1
 
11930
SET f_int1 = NULL , f_int2 = -@max_row,
 
11931
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
11932
f_charbig = '#NULL#';
 
11933
# check null success:    1
 
11934
        
 
11935
# check null-1 success:         1
 
11936
UPDATE t1 SET f_int1 = -@max_row
 
11937
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11938
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11939
        
 
11940
# check null-2 success:         1
 
11941
UPDATE t1 SET f_int1 = NULL
 
11942
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11943
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11944
        
 
11945
# check null-3 success:         1
 
11946
DELETE FROM t1
 
11947
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
11948
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
11949
        
 
11950
# check null-4 success:         1
 
11951
DELETE FROM t1
 
11952
WHERE f_int1 = 0 AND f_int2 = 0
 
11953
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
11954
AND f_charbig = '#NULL#';
 
11955
SET AUTOCOMMIT= 0;
 
11956
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11957
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11958
FROM t0_template source_tab
 
11959
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11960
        
 
11961
# check transactions-1 success:         1
 
11962
COMMIT WORK;
 
11963
        
 
11964
# check transactions-2 success:         1
 
11965
ROLLBACK WORK;
 
11966
        
 
11967
# check transactions-3 success:         1
 
11968
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11969
COMMIT WORK;
 
11970
ROLLBACK WORK;
 
11971
        
 
11972
# check transactions-4 success:         1
 
11973
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11974
SELECT f_int1, f_int1, '', '', 'was inserted'
 
11975
FROM t0_template source_tab
 
11976
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11977
        
 
11978
# check transactions-5 success:         1
 
11979
ROLLBACK WORK;
 
11980
Warnings:
 
11981
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
11982
        
 
11983
# check transactions-6 success:         1
 
11984
# INFO: Storage engine used for t1 seems to be not transactional.
 
11985
COMMIT;
 
11986
        
 
11987
# check transactions-7 success:         1
 
11988
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
11989
COMMIT WORK;
 
11990
SET @@session.sql_mode = 'traditional';
 
11991
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
11992
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
11993
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
11994
'', '', 'was inserted' FROM t0_template
 
11995
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
11996
ERROR 22012: Division by 0
 
11997
COMMIT;
 
11998
        
 
11999
# check transactions-8 success:         1
 
12000
# INFO: Storage engine used for t1 seems to be unable to revert
 
12001
#       changes made by the failing statement.
 
12002
SET @@session.sql_mode = '';
 
12003
SET AUTOCOMMIT= 1;
 
12004
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12005
COMMIT WORK;
 
12006
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12007
        
 
12008
# check special-1 success:      1
 
12009
UPDATE t1 SET f_charbig = '';
 
12010
        
 
12011
# check special-2 success:      1
 
12012
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12013
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12014
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12015
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12016
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12017
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12018
'just inserted' FROM t0_template
 
12019
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12020
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12021
BEGIN
 
12022
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12023
f_charbig = 'updated by trigger'
 
12024
      WHERE f_int1 = new.f_int1;
 
12025
END|
 
12026
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12027
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12028
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12029
        
 
12030
# check trigger-1 success:      1
 
12031
DROP TRIGGER trg_1;
 
12032
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12033
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12034
f_charbig = 'just inserted'
 
12035
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12036
DELETE FROM t0_aux
 
12037
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12038
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12039
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12040
'just inserted' FROM t0_template
 
12041
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12042
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12043
BEGIN
 
12044
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12045
f_charbig = 'updated by trigger'
 
12046
      WHERE f_int1 = new.f_int1;
 
12047
END|
 
12048
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12049
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12050
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12051
        
 
12052
# check trigger-2 success:      1
 
12053
DROP TRIGGER trg_1;
 
12054
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12055
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12056
f_charbig = 'just inserted'
 
12057
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12058
DELETE FROM t0_aux
 
12059
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12060
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12061
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12062
'just inserted' FROM t0_template
 
12063
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12064
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12065
BEGIN
 
12066
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12067
f_charbig = 'updated by trigger'
 
12068
      WHERE f_int1 = new.f_int1;
 
12069
END|
 
12070
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12071
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12072
        
 
12073
# check trigger-3 success:      1
 
12074
DROP TRIGGER trg_1;
 
12075
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12076
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12077
f_charbig = 'just inserted'
 
12078
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12079
DELETE FROM t0_aux
 
12080
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12081
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12082
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12083
'just inserted' FROM t0_template
 
12084
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12085
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12086
BEGIN
 
12087
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12088
f_charbig = 'updated by trigger'
 
12089
      WHERE f_int1 = - old.f_int1;
 
12090
END|
 
12091
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12092
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12093
        
 
12094
# check trigger-4 success:      1
 
12095
DROP TRIGGER trg_1;
 
12096
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12097
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12098
f_charbig = 'just inserted'
 
12099
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12100
DELETE FROM t0_aux
 
12101
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12102
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12103
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12104
'just inserted' FROM t0_template
 
12105
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12106
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12107
BEGIN
 
12108
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12109
f_charbig = 'updated by trigger'
 
12110
      WHERE f_int1 = new.f_int1;
 
12111
END|
 
12112
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12113
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12114
        
 
12115
# check trigger-5 success:      1
 
12116
DROP TRIGGER trg_1;
 
12117
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12118
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12119
f_charbig = 'just inserted'
 
12120
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12121
DELETE FROM t0_aux
 
12122
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12123
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12124
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12125
'just inserted' FROM t0_template
 
12126
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12127
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12128
BEGIN
 
12129
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12130
f_charbig = 'updated by trigger'
 
12131
      WHERE f_int1 = - old.f_int1;
 
12132
END|
 
12133
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12134
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12135
        
 
12136
# check trigger-6 success:      1
 
12137
DROP TRIGGER trg_1;
 
12138
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12139
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12140
f_charbig = 'just inserted'
 
12141
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12142
DELETE FROM t0_aux
 
12143
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12144
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12145
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12146
'just inserted' FROM t0_template
 
12147
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12148
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12149
BEGIN
 
12150
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12151
f_charbig = 'updated by trigger'
 
12152
      WHERE f_int1 = - old.f_int1;
 
12153
END|
 
12154
DELETE FROM t0_aux
 
12155
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12156
        
 
12157
# check trigger-7 success:      1
 
12158
DROP TRIGGER trg_1;
 
12159
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12160
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12161
f_charbig = 'just inserted'
 
12162
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12163
DELETE FROM t0_aux
 
12164
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12165
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12166
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12167
'just inserted' FROM t0_template
 
12168
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12169
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12170
BEGIN
 
12171
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12172
f_charbig = 'updated by trigger'
 
12173
      WHERE f_int1 = - old.f_int1;
 
12174
END|
 
12175
DELETE FROM t0_aux
 
12176
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12177
        
 
12178
# check trigger-8 success:      1
 
12179
DROP TRIGGER trg_1;
 
12180
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12181
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12182
f_charbig = 'just inserted'
 
12183
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12184
DELETE FROM t0_aux
 
12185
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12186
DELETE FROM t1
 
12187
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12188
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12189
BEGIN
 
12190
SET new.f_int1 = old.f_int1 + @max_row,
 
12191
new.f_int2 = old.f_int2 - @max_row,
 
12192
new.f_charbig = '####updated per update trigger####';
 
12193
END|
 
12194
UPDATE t1
 
12195
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12196
f_charbig = '####updated per update statement itself####';
 
12197
        
 
12198
# check trigger-9 success:      1
 
12199
DROP TRIGGER trg_2;
 
12200
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12201
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12202
f_charbig = CONCAT('===',f_char1,'===');
 
12203
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12204
BEGIN
 
12205
SET new.f_int1 = new.f_int1 + @max_row,
 
12206
new.f_int2 = new.f_int2 - @max_row,
 
12207
new.f_charbig = '####updated per update trigger####';
 
12208
END|
 
12209
UPDATE t1
 
12210
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12211
f_charbig = '####updated per update statement itself####';
 
12212
        
 
12213
# check trigger-10 success:     1
 
12214
DROP TRIGGER trg_2;
 
12215
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12216
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12217
f_charbig = CONCAT('===',f_char1,'===');
 
12218
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12219
BEGIN
 
12220
SET new.f_int1 = @my_max1 + @counter,
 
12221
new.f_int2 = @my_min2 - @counter,
 
12222
new.f_charbig = '####updated per insert trigger####';
 
12223
SET @counter = @counter + 1;
 
12224
END|
 
12225
SET @counter = 1;
 
12226
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12227
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12228
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12229
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12230
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12231
ORDER BY f_int1;
 
12232
DROP TRIGGER trg_3;
 
12233
        
 
12234
# check trigger-11 success:     1
 
12235
DELETE FROM t1
 
12236
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12237
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12238
AND f_charbig = '####updated per insert trigger####';
 
12239
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12240
BEGIN
 
12241
SET new.f_int1 = @my_max1 + @counter,
 
12242
new.f_int2 = @my_min2 - @counter,
 
12243
new.f_charbig = '####updated per insert trigger####';
 
12244
SET @counter = @counter + 1;
 
12245
END|
 
12246
SET @counter = 1;
 
12247
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12248
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
12249
SELECT CAST(f_int1 AS CHAR),
 
12250
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12251
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12252
ORDER BY f_int1;
 
12253
DROP TRIGGER trg_3;
 
12254
        
 
12255
# check trigger-12 success:     1
 
12256
DELETE FROM t1
 
12257
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12258
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12259
AND f_charbig = '####updated per insert trigger####';
 
12260
ANALYZE  TABLE t1;
 
12261
Table   Op      Msg_type        Msg_text
 
12262
test.t1 analyze status  OK
 
12263
CHECK    TABLE t1 EXTENDED;
 
12264
Table   Op      Msg_type        Msg_text
 
12265
test.t1 check   status  OK
 
12266
CHECKSUM TABLE t1 EXTENDED;
 
12267
Table   Checksum
 
12268
test.t1 <some_value>
 
12269
OPTIMIZE TABLE t1;
 
12270
Table   Op      Msg_type        Msg_text
 
12271
test.t1 optimize        status  OK
 
12272
# check layout success:    1
 
12273
REPAIR   TABLE t1 EXTENDED;
 
12274
Table   Op      Msg_type        Msg_text
 
12275
test.t1 repair  status  OK
 
12276
# check layout success:    1
 
12277
TRUNCATE t1;
 
12278
        
 
12279
# check TRUNCATE success:       1
 
12280
# check layout success:    1
 
12281
# End usability test (inc/partition_check.inc)
 
12282
DROP TABLE t1;
 
12283
CREATE TABLE t1 (
 
12284
f_int1 INTEGER,
 
12285
f_int2 INTEGER,
 
12286
f_char1 CHAR(20),
 
12287
f_char2 CHAR(20),
 
12288
f_charbig VARCHAR(1000)
 
12289
 
 
12290
)
 
12291
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
12292
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12293
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12294
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
12295
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
 
12296
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12297
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12298
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12299
# Start usability test (inc/partition_check.inc)
 
12300
create_command
 
12301
SHOW CREATE TABLE t1;
 
12302
Table   Create Table
 
12303
t1      CREATE TABLE `t1` (
 
12304
  `f_int1` int(11) DEFAULT NULL,
 
12305
  `f_int2` int(11) DEFAULT NULL,
 
12306
  `f_char1` char(20) DEFAULT NULL,
 
12307
  `f_char2` char(20) DEFAULT NULL,
 
12308
  `f_charbig` varchar(1000) DEFAULT NULL
 
12309
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */
 
12310
 
 
12311
unified filelist
 
12312
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
12313
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
12314
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
12315
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
12316
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
12317
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
12318
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
12319
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
12320
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
12321
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
12322
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
12323
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
12324
 
 
12325
# check prerequisites-1 success:    1
 
12326
# check COUNT(*) success:    1
 
12327
# check MIN/MAX(f_int1) success:    1
 
12328
# check MIN/MAX(f_int2) success:    1
 
12329
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12330
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12331
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
12332
WHERE f_int1 IN (2,3);
 
12333
# check prerequisites-3 success:    1
 
12334
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12335
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
12336
# check read via f_int1 success: 1
 
12337
# check read via f_int2 success: 1
 
12338
        
 
12339
# check multiple-1 success:     1
 
12340
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
12341
        
 
12342
# check multiple-2 success:     1
 
12343
INSERT INTO t1 SELECT * FROM t0_template
 
12344
WHERE MOD(f_int1,3) = 0;
 
12345
        
 
12346
# check multiple-3 success:     1
 
12347
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
12348
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
12349
AND @max_row_div2 + @max_row_div4;
 
12350
        
 
12351
# check multiple-4 success:     1
 
12352
DELETE FROM t1
 
12353
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
12354
AND @max_row_div2 + @max_row_div4 + @max_row;
 
12355
        
 
12356
# check multiple-5 success:     1
 
12357
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
12358
INSERT INTO t1
 
12359
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12360
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12361
f_charbig = '#SINGLE#';
 
12362
        
 
12363
# check single-1 success:       1
 
12364
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
12365
INSERT INTO t1
 
12366
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12367
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12368
f_charbig = '#SINGLE#';
 
12369
        
 
12370
# check single-2 success:       1
 
12371
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
12372
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
12373
UPDATE t1 SET f_int1 = @cur_value2
 
12374
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
12375
        
 
12376
# check single-3 success:       1
 
12377
SET @cur_value1= -1;
 
12378
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
12379
UPDATE t1 SET f_int1 = @cur_value1
 
12380
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
12381
        
 
12382
# check single-4 success:       1
 
12383
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
12384
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
12385
        
 
12386
# check single-5 success:       1
 
12387
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
12388
        
 
12389
# check single-6 success:       1
 
12390
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
12391
        
 
12392
# check single-7 success:       1
 
12393
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
12394
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
12395
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
12396
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
12397
f_charbig = '#NULL#';
 
12398
INSERT INTO t1
 
12399
SET f_int1 = NULL , f_int2 = -@max_row,
 
12400
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
12401
f_charbig = '#NULL#';
 
12402
# check null success:    1
 
12403
        
 
12404
# check null-1 success:         1
 
12405
UPDATE t1 SET f_int1 = -@max_row
 
12406
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12407
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12408
        
 
12409
# check null-2 success:         1
 
12410
UPDATE t1 SET f_int1 = NULL
 
12411
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12412
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12413
        
 
12414
# check null-3 success:         1
 
12415
DELETE FROM t1
 
12416
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12417
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12418
        
 
12419
# check null-4 success:         1
 
12420
DELETE FROM t1
 
12421
WHERE f_int1 = 0 AND f_int2 = 0
 
12422
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
12423
AND f_charbig = '#NULL#';
 
12424
SET AUTOCOMMIT= 0;
 
12425
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12426
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12427
FROM t0_template source_tab
 
12428
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12429
        
 
12430
# check transactions-1 success:         1
 
12431
COMMIT WORK;
 
12432
        
 
12433
# check transactions-2 success:         1
 
12434
ROLLBACK WORK;
 
12435
        
 
12436
# check transactions-3 success:         1
 
12437
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12438
COMMIT WORK;
 
12439
ROLLBACK WORK;
 
12440
        
 
12441
# check transactions-4 success:         1
 
12442
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12443
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12444
FROM t0_template source_tab
 
12445
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12446
        
 
12447
# check transactions-5 success:         1
 
12448
ROLLBACK WORK;
 
12449
Warnings:
 
12450
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
12451
        
 
12452
# check transactions-6 success:         1
 
12453
# INFO: Storage engine used for t1 seems to be not transactional.
 
12454
COMMIT;
 
12455
        
 
12456
# check transactions-7 success:         1
 
12457
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12458
COMMIT WORK;
 
12459
SET @@session.sql_mode = 'traditional';
 
12460
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12461
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12462
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12463
'', '', 'was inserted' FROM t0_template
 
12464
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12465
ERROR 22012: Division by 0
 
12466
COMMIT;
 
12467
        
 
12468
# check transactions-8 success:         1
 
12469
# INFO: Storage engine used for t1 seems to be unable to revert
 
12470
#       changes made by the failing statement.
 
12471
SET @@session.sql_mode = '';
 
12472
SET AUTOCOMMIT= 1;
 
12473
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12474
COMMIT WORK;
 
12475
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12476
        
 
12477
# check special-1 success:      1
 
12478
UPDATE t1 SET f_charbig = '';
 
12479
        
 
12480
# check special-2 success:      1
 
12481
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12482
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12483
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12484
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12485
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12486
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12487
'just inserted' FROM t0_template
 
12488
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12489
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12490
BEGIN
 
12491
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12492
f_charbig = 'updated by trigger'
 
12493
      WHERE f_int1 = new.f_int1;
 
12494
END|
 
12495
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12496
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12497
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12498
        
 
12499
# check trigger-1 success:      1
 
12500
DROP TRIGGER trg_1;
 
12501
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12502
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12503
f_charbig = 'just inserted'
 
12504
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12505
DELETE FROM t0_aux
 
12506
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12507
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12508
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12509
'just inserted' FROM t0_template
 
12510
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12511
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12512
BEGIN
 
12513
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12514
f_charbig = 'updated by trigger'
 
12515
      WHERE f_int1 = new.f_int1;
 
12516
END|
 
12517
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12518
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12519
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12520
        
 
12521
# check trigger-2 success:      1
 
12522
DROP TRIGGER trg_1;
 
12523
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12524
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12525
f_charbig = 'just inserted'
 
12526
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12527
DELETE FROM t0_aux
 
12528
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12529
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12530
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12531
'just inserted' FROM t0_template
 
12532
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12533
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12534
BEGIN
 
12535
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12536
f_charbig = 'updated by trigger'
 
12537
      WHERE f_int1 = new.f_int1;
 
12538
END|
 
12539
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12540
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12541
        
 
12542
# check trigger-3 success:      1
 
12543
DROP TRIGGER trg_1;
 
12544
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12545
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12546
f_charbig = 'just inserted'
 
12547
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12548
DELETE FROM t0_aux
 
12549
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12550
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12551
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12552
'just inserted' FROM t0_template
 
12553
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12554
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
12555
BEGIN
 
12556
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12557
f_charbig = 'updated by trigger'
 
12558
      WHERE f_int1 = - old.f_int1;
 
12559
END|
 
12560
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12561
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12562
        
 
12563
# check trigger-4 success:      1
 
12564
DROP TRIGGER trg_1;
 
12565
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12566
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12567
f_charbig = 'just inserted'
 
12568
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12569
DELETE FROM t0_aux
 
12570
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12571
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12572
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12573
'just inserted' FROM t0_template
 
12574
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12575
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12576
BEGIN
 
12577
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12578
f_charbig = 'updated by trigger'
 
12579
      WHERE f_int1 = new.f_int1;
 
12580
END|
 
12581
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12582
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12583
        
 
12584
# check trigger-5 success:      1
 
12585
DROP TRIGGER trg_1;
 
12586
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12587
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12588
f_charbig = 'just inserted'
 
12589
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12590
DELETE FROM t0_aux
 
12591
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12592
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12593
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12594
'just inserted' FROM t0_template
 
12595
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12596
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
12597
BEGIN
 
12598
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12599
f_charbig = 'updated by trigger'
 
12600
      WHERE f_int1 = - old.f_int1;
 
12601
END|
 
12602
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
12603
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12604
        
 
12605
# check trigger-6 success:      1
 
12606
DROP TRIGGER trg_1;
 
12607
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12608
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12609
f_charbig = 'just inserted'
 
12610
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12611
DELETE FROM t0_aux
 
12612
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12613
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12614
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12615
'just inserted' FROM t0_template
 
12616
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12617
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
12618
BEGIN
 
12619
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12620
f_charbig = 'updated by trigger'
 
12621
      WHERE f_int1 = - old.f_int1;
 
12622
END|
 
12623
DELETE FROM t0_aux
 
12624
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12625
        
 
12626
# check trigger-7 success:      1
 
12627
DROP TRIGGER trg_1;
 
12628
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12629
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12630
f_charbig = 'just inserted'
 
12631
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12632
DELETE FROM t0_aux
 
12633
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12634
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12635
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12636
'just inserted' FROM t0_template
 
12637
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12638
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
12639
BEGIN
 
12640
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12641
f_charbig = 'updated by trigger'
 
12642
      WHERE f_int1 = - old.f_int1;
 
12643
END|
 
12644
DELETE FROM t0_aux
 
12645
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
12646
        
 
12647
# check trigger-8 success:      1
 
12648
DROP TRIGGER trg_1;
 
12649
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12650
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12651
f_charbig = 'just inserted'
 
12652
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12653
DELETE FROM t0_aux
 
12654
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12655
DELETE FROM t1
 
12656
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12657
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12658
BEGIN
 
12659
SET new.f_int1 = old.f_int1 + @max_row,
 
12660
new.f_int2 = old.f_int2 - @max_row,
 
12661
new.f_charbig = '####updated per update trigger####';
 
12662
END|
 
12663
UPDATE t1
 
12664
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12665
f_charbig = '####updated per update statement itself####';
 
12666
        
 
12667
# check trigger-9 success:      1
 
12668
DROP TRIGGER trg_2;
 
12669
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12670
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12671
f_charbig = CONCAT('===',f_char1,'===');
 
12672
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
12673
BEGIN
 
12674
SET new.f_int1 = new.f_int1 + @max_row,
 
12675
new.f_int2 = new.f_int2 - @max_row,
 
12676
new.f_charbig = '####updated per update trigger####';
 
12677
END|
 
12678
UPDATE t1
 
12679
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
12680
f_charbig = '####updated per update statement itself####';
 
12681
        
 
12682
# check trigger-10 success:     1
 
12683
DROP TRIGGER trg_2;
 
12684
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12685
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12686
f_charbig = CONCAT('===',f_char1,'===');
 
12687
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12688
BEGIN
 
12689
SET new.f_int1 = @my_max1 + @counter,
 
12690
new.f_int2 = @my_min2 - @counter,
 
12691
new.f_charbig = '####updated per insert trigger####';
 
12692
SET @counter = @counter + 1;
 
12693
END|
 
12694
SET @counter = 1;
 
12695
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12696
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12697
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12698
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12699
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12700
ORDER BY f_int1;
 
12701
DROP TRIGGER trg_3;
 
12702
        
 
12703
# check trigger-11 success:     1
 
12704
DELETE FROM t1
 
12705
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12706
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12707
AND f_charbig = '####updated per insert trigger####';
 
12708
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
12709
BEGIN
 
12710
SET new.f_int1 = @my_max1 + @counter,
 
12711
new.f_int2 = @my_min2 - @counter,
 
12712
new.f_charbig = '####updated per insert trigger####';
 
12713
SET @counter = @counter + 1;
 
12714
END|
 
12715
SET @counter = 1;
 
12716
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
12717
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
12718
SELECT CAST(f_int1 AS CHAR),
 
12719
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
12720
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
12721
ORDER BY f_int1;
 
12722
DROP TRIGGER trg_3;
 
12723
        
 
12724
# check trigger-12 success:     1
 
12725
DELETE FROM t1
 
12726
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
12727
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
12728
AND f_charbig = '####updated per insert trigger####';
 
12729
ANALYZE  TABLE t1;
 
12730
Table   Op      Msg_type        Msg_text
 
12731
test.t1 analyze status  OK
 
12732
CHECK    TABLE t1 EXTENDED;
 
12733
Table   Op      Msg_type        Msg_text
 
12734
test.t1 check   status  OK
 
12735
CHECKSUM TABLE t1 EXTENDED;
 
12736
Table   Checksum
 
12737
test.t1 <some_value>
 
12738
OPTIMIZE TABLE t1;
 
12739
Table   Op      Msg_type        Msg_text
 
12740
test.t1 optimize        status  OK
 
12741
# check layout success:    1
 
12742
REPAIR   TABLE t1 EXTENDED;
 
12743
Table   Op      Msg_type        Msg_text
 
12744
test.t1 repair  status  OK
 
12745
# check layout success:    1
 
12746
TRUNCATE t1;
 
12747
        
 
12748
# check TRUNCATE success:       1
 
12749
# check layout success:    1
 
12750
# End usability test (inc/partition_check.inc)
 
12751
DROP TABLE t1;
 
12752
CREATE TABLE t1 (
 
12753
f_int1 INTEGER,
 
12754
f_int2 INTEGER,
 
12755
f_char1 CHAR(20),
 
12756
f_char2 CHAR(20),
 
12757
f_charbig VARCHAR(1000)
 
12758
 
 
12759
)
 
12760
PARTITION BY LIST(MOD(f_int1,4))
 
12761
(PARTITION part_3 VALUES IN (-3),
 
12762
PARTITION part_2 VALUES IN (-2),
 
12763
PARTITION part_1 VALUES IN (-1),
 
12764
PARTITION part_N VALUES IN (NULL),
 
12765
PARTITION part0 VALUES IN (0),
 
12766
PARTITION part1 VALUES IN (1),
 
12767
PARTITION part2 VALUES IN (2),
 
12768
PARTITION part3 VALUES IN (3));
 
12769
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12770
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12771
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
12772
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
 
12773
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12774
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
12775
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
12776
# Start usability test (inc/partition_check.inc)
 
12777
create_command
 
12778
SHOW CREATE TABLE t1;
 
12779
Table   Create Table
 
12780
t1      CREATE TABLE `t1` (
 
12781
  `f_int1` int(11) DEFAULT NULL,
 
12782
  `f_int2` int(11) DEFAULT NULL,
 
12783
  `f_char1` char(20) DEFAULT NULL,
 
12784
  `f_char2` char(20) DEFAULT NULL,
 
12785
  `f_charbig` varchar(1000) DEFAULT NULL
 
12786
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
12787
 
 
12788
unified filelist
 
12789
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
12790
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
12791
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
12792
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
12793
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
12794
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
12795
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
12796
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
12797
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
12798
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
12799
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
12800
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
12801
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
12802
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
12803
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
12804
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
12805
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
12806
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
12807
 
 
12808
# check prerequisites-1 success:    1
 
12809
# check COUNT(*) success:    1
 
12810
# check MIN/MAX(f_int1) success:    1
 
12811
# check MIN/MAX(f_int2) success:    1
 
12812
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12813
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
12814
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
12815
WHERE f_int1 IN (2,3);
 
12816
# check prerequisites-3 success:    1
 
12817
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
12818
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
12819
# check read via f_int1 success: 1
 
12820
# check read via f_int2 success: 1
 
12821
        
 
12822
# check multiple-1 success:     1
 
12823
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
12824
        
 
12825
# check multiple-2 success:     1
 
12826
INSERT INTO t1 SELECT * FROM t0_template
 
12827
WHERE MOD(f_int1,3) = 0;
 
12828
        
 
12829
# check multiple-3 success:     1
 
12830
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
12831
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
12832
AND @max_row_div2 + @max_row_div4;
 
12833
        
 
12834
# check multiple-4 success:     1
 
12835
DELETE FROM t1
 
12836
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
12837
AND @max_row_div2 + @max_row_div4 + @max_row;
 
12838
        
 
12839
# check multiple-5 success:     1
 
12840
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
12841
INSERT INTO t1
 
12842
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12843
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12844
f_charbig = '#SINGLE#';
 
12845
        
 
12846
# check single-1 success:       1
 
12847
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
12848
INSERT INTO t1
 
12849
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
12850
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
12851
f_charbig = '#SINGLE#';
 
12852
        
 
12853
# check single-2 success:       1
 
12854
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
12855
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
12856
UPDATE t1 SET f_int1 = @cur_value2
 
12857
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
12858
        
 
12859
# check single-3 success:       1
 
12860
SET @cur_value1= -1;
 
12861
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
12862
UPDATE t1 SET f_int1 = @cur_value1
 
12863
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
12864
        
 
12865
# check single-4 success:       1
 
12866
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
12867
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
12868
        
 
12869
# check single-5 success:       1
 
12870
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
12871
        
 
12872
# check single-6 success:       1
 
12873
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
12874
        
 
12875
# check single-7 success:       1
 
12876
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
12877
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
12878
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
12879
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
12880
f_charbig = '#NULL#';
 
12881
INSERT INTO t1
 
12882
SET f_int1 = NULL , f_int2 = -@max_row,
 
12883
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
12884
f_charbig = '#NULL#';
 
12885
# check null success:    1
 
12886
        
 
12887
# check null-1 success:         1
 
12888
UPDATE t1 SET f_int1 = -@max_row
 
12889
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12890
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12891
        
 
12892
# check null-2 success:         1
 
12893
UPDATE t1 SET f_int1 = NULL
 
12894
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12895
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12896
        
 
12897
# check null-3 success:         1
 
12898
DELETE FROM t1
 
12899
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
12900
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
12901
        
 
12902
# check null-4 success:         1
 
12903
DELETE FROM t1
 
12904
WHERE f_int1 = 0 AND f_int2 = 0
 
12905
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
12906
AND f_charbig = '#NULL#';
 
12907
SET AUTOCOMMIT= 0;
 
12908
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12909
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12910
FROM t0_template source_tab
 
12911
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12912
        
 
12913
# check transactions-1 success:         1
 
12914
COMMIT WORK;
 
12915
        
 
12916
# check transactions-2 success:         1
 
12917
ROLLBACK WORK;
 
12918
        
 
12919
# check transactions-3 success:         1
 
12920
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12921
COMMIT WORK;
 
12922
ROLLBACK WORK;
 
12923
        
 
12924
# check transactions-4 success:         1
 
12925
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12926
SELECT f_int1, f_int1, '', '', 'was inserted'
 
12927
FROM t0_template source_tab
 
12928
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12929
        
 
12930
# check transactions-5 success:         1
 
12931
ROLLBACK WORK;
 
12932
Warnings:
 
12933
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
12934
        
 
12935
# check transactions-6 success:         1
 
12936
# INFO: Storage engine used for t1 seems to be not transactional.
 
12937
COMMIT;
 
12938
        
 
12939
# check transactions-7 success:         1
 
12940
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12941
COMMIT WORK;
 
12942
SET @@session.sql_mode = 'traditional';
 
12943
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
12944
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
12945
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
12946
'', '', 'was inserted' FROM t0_template
 
12947
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
12948
ERROR 22012: Division by 0
 
12949
COMMIT;
 
12950
        
 
12951
# check transactions-8 success:         1
 
12952
# INFO: Storage engine used for t1 seems to be unable to revert
 
12953
#       changes made by the failing statement.
 
12954
SET @@session.sql_mode = '';
 
12955
SET AUTOCOMMIT= 1;
 
12956
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
12957
COMMIT WORK;
 
12958
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
12959
        
 
12960
# check special-1 success:      1
 
12961
UPDATE t1 SET f_charbig = '';
 
12962
        
 
12963
# check special-2 success:      1
 
12964
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
12965
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12966
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
12967
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12968
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12969
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12970
'just inserted' FROM t0_template
 
12971
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12972
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
12973
BEGIN
 
12974
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12975
f_charbig = 'updated by trigger'
 
12976
      WHERE f_int1 = new.f_int1;
 
12977
END|
 
12978
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12979
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
12980
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12981
        
 
12982
# check trigger-1 success:      1
 
12983
DROP TRIGGER trg_1;
 
12984
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
12985
f_int2 = CAST(f_char1 AS SIGNED INT),
 
12986
f_charbig = 'just inserted'
 
12987
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
12988
DELETE FROM t0_aux
 
12989
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12990
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
12991
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
12992
'just inserted' FROM t0_template
 
12993
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
12994
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
12995
BEGIN
 
12996
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
12997
f_charbig = 'updated by trigger'
 
12998
      WHERE f_int1 = new.f_int1;
 
12999
END|
 
13000
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13001
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13002
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13003
        
 
13004
# check trigger-2 success:      1
 
13005
DROP TRIGGER trg_1;
 
13006
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13007
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13008
f_charbig = 'just inserted'
 
13009
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13010
DELETE FROM t0_aux
 
13011
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13012
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13013
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13014
'just inserted' FROM t0_template
 
13015
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13016
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13017
BEGIN
 
13018
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13019
f_charbig = 'updated by trigger'
 
13020
      WHERE f_int1 = new.f_int1;
 
13021
END|
 
13022
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13023
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13024
        
 
13025
# check trigger-3 success:      1
 
13026
DROP TRIGGER trg_1;
 
13027
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13028
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13029
f_charbig = 'just inserted'
 
13030
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13031
DELETE FROM t0_aux
 
13032
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13033
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13034
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13035
'just inserted' FROM t0_template
 
13036
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13037
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13038
BEGIN
 
13039
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13040
f_charbig = 'updated by trigger'
 
13041
      WHERE f_int1 = - old.f_int1;
 
13042
END|
 
13043
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13044
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13045
        
 
13046
# check trigger-4 success:      1
 
13047
DROP TRIGGER trg_1;
 
13048
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13049
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13050
f_charbig = 'just inserted'
 
13051
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13052
DELETE FROM t0_aux
 
13053
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13054
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13055
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13056
'just inserted' FROM t0_template
 
13057
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13058
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13059
BEGIN
 
13060
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13061
f_charbig = 'updated by trigger'
 
13062
      WHERE f_int1 = new.f_int1;
 
13063
END|
 
13064
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13065
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13066
        
 
13067
# check trigger-5 success:      1
 
13068
DROP TRIGGER trg_1;
 
13069
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13070
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13071
f_charbig = 'just inserted'
 
13072
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13073
DELETE FROM t0_aux
 
13074
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13075
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13076
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13077
'just inserted' FROM t0_template
 
13078
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13079
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13080
BEGIN
 
13081
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13082
f_charbig = 'updated by trigger'
 
13083
      WHERE f_int1 = - old.f_int1;
 
13084
END|
 
13085
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13086
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13087
        
 
13088
# check trigger-6 success:      1
 
13089
DROP TRIGGER trg_1;
 
13090
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13091
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13092
f_charbig = 'just inserted'
 
13093
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13094
DELETE FROM t0_aux
 
13095
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13096
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13097
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13098
'just inserted' FROM t0_template
 
13099
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13100
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13101
BEGIN
 
13102
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13103
f_charbig = 'updated by trigger'
 
13104
      WHERE f_int1 = - old.f_int1;
 
13105
END|
 
13106
DELETE FROM t0_aux
 
13107
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13108
        
 
13109
# check trigger-7 success:      1
 
13110
DROP TRIGGER trg_1;
 
13111
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13112
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13113
f_charbig = 'just inserted'
 
13114
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13115
DELETE FROM t0_aux
 
13116
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13117
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13118
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13119
'just inserted' FROM t0_template
 
13120
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13121
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13122
BEGIN
 
13123
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13124
f_charbig = 'updated by trigger'
 
13125
      WHERE f_int1 = - old.f_int1;
 
13126
END|
 
13127
DELETE FROM t0_aux
 
13128
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13129
        
 
13130
# check trigger-8 success:      1
 
13131
DROP TRIGGER trg_1;
 
13132
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13133
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13134
f_charbig = 'just inserted'
 
13135
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13136
DELETE FROM t0_aux
 
13137
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13138
DELETE FROM t1
 
13139
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13140
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13141
BEGIN
 
13142
SET new.f_int1 = old.f_int1 + @max_row,
 
13143
new.f_int2 = old.f_int2 - @max_row,
 
13144
new.f_charbig = '####updated per update trigger####';
 
13145
END|
 
13146
UPDATE t1
 
13147
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13148
f_charbig = '####updated per update statement itself####';
 
13149
        
 
13150
# check trigger-9 success:      1
 
13151
DROP TRIGGER trg_2;
 
13152
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13153
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13154
f_charbig = CONCAT('===',f_char1,'===');
 
13155
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13156
BEGIN
 
13157
SET new.f_int1 = new.f_int1 + @max_row,
 
13158
new.f_int2 = new.f_int2 - @max_row,
 
13159
new.f_charbig = '####updated per update trigger####';
 
13160
END|
 
13161
UPDATE t1
 
13162
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13163
f_charbig = '####updated per update statement itself####';
 
13164
        
 
13165
# check trigger-10 success:     1
 
13166
DROP TRIGGER trg_2;
 
13167
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13168
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13169
f_charbig = CONCAT('===',f_char1,'===');
 
13170
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13171
BEGIN
 
13172
SET new.f_int1 = @my_max1 + @counter,
 
13173
new.f_int2 = @my_min2 - @counter,
 
13174
new.f_charbig = '####updated per insert trigger####';
 
13175
SET @counter = @counter + 1;
 
13176
END|
 
13177
SET @counter = 1;
 
13178
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13179
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13180
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13181
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13182
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13183
ORDER BY f_int1;
 
13184
DROP TRIGGER trg_3;
 
13185
        
 
13186
# check trigger-11 success:     1
 
13187
DELETE FROM t1
 
13188
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13189
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13190
AND f_charbig = '####updated per insert trigger####';
 
13191
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13192
BEGIN
 
13193
SET new.f_int1 = @my_max1 + @counter,
 
13194
new.f_int2 = @my_min2 - @counter,
 
13195
new.f_charbig = '####updated per insert trigger####';
 
13196
SET @counter = @counter + 1;
 
13197
END|
 
13198
SET @counter = 1;
 
13199
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13200
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
13201
SELECT CAST(f_int1 AS CHAR),
 
13202
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13203
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13204
ORDER BY f_int1;
 
13205
DROP TRIGGER trg_3;
 
13206
        
 
13207
# check trigger-12 success:     1
 
13208
DELETE FROM t1
 
13209
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13210
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13211
AND f_charbig = '####updated per insert trigger####';
 
13212
ANALYZE  TABLE t1;
 
13213
Table   Op      Msg_type        Msg_text
 
13214
test.t1 analyze status  OK
 
13215
CHECK    TABLE t1 EXTENDED;
 
13216
Table   Op      Msg_type        Msg_text
 
13217
test.t1 check   status  OK
 
13218
CHECKSUM TABLE t1 EXTENDED;
 
13219
Table   Checksum
 
13220
test.t1 <some_value>
 
13221
OPTIMIZE TABLE t1;
 
13222
Table   Op      Msg_type        Msg_text
 
13223
test.t1 optimize        status  OK
 
13224
# check layout success:    1
 
13225
REPAIR   TABLE t1 EXTENDED;
 
13226
Table   Op      Msg_type        Msg_text
 
13227
test.t1 repair  status  OK
 
13228
# check layout success:    1
 
13229
TRUNCATE t1;
 
13230
        
 
13231
# check TRUNCATE success:       1
 
13232
# check layout success:    1
 
13233
# End usability test (inc/partition_check.inc)
 
13234
DROP TABLE t1;
 
13235
CREATE TABLE t1 (
 
13236
f_int1 INTEGER,
 
13237
f_int2 INTEGER,
 
13238
f_char1 CHAR(20),
 
13239
f_char2 CHAR(20),
 
13240
f_charbig VARCHAR(1000)
 
13241
 
 
13242
)
 
13243
PARTITION BY RANGE(f_int1)
 
13244
(PARTITION parta VALUES LESS THAN (0),
 
13245
PARTITION part_1 VALUES LESS THAN (5),
 
13246
PARTITION part_2 VALUES LESS THAN (10),
 
13247
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
13248
PARTITION part_4 VALUES LESS THAN (20),
 
13249
PARTITION part_5 VALUES LESS THAN (2147483646));
 
13250
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13251
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13252
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
13253
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
 
13254
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13255
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13256
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13257
# Start usability test (inc/partition_check.inc)
 
13258
create_command
 
13259
SHOW CREATE TABLE t1;
 
13260
Table   Create Table
 
13261
t1      CREATE TABLE `t1` (
 
13262
  `f_int1` int(11) DEFAULT NULL,
 
13263
  `f_int2` int(11) DEFAULT NULL,
 
13264
  `f_char1` char(20) DEFAULT NULL,
 
13265
  `f_char2` char(20) DEFAULT NULL,
 
13266
  `f_charbig` varchar(1000) DEFAULT NULL
 
13267
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
13268
 
 
13269
unified filelist
 
13270
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
13271
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
13272
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
13273
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
13274
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
13275
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
13276
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
13277
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
13278
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
13279
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
13280
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
13281
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
13282
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
13283
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
13284
 
 
13285
# check prerequisites-1 success:    1
 
13286
# check COUNT(*) success:    1
 
13287
# check MIN/MAX(f_int1) success:    1
 
13288
# check MIN/MAX(f_int2) success:    1
 
13289
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13290
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13291
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
13292
WHERE f_int1 IN (2,3);
 
13293
# check prerequisites-3 success:    1
 
13294
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13295
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
13296
# check read via f_int1 success: 1
 
13297
# check read via f_int2 success: 1
 
13298
        
 
13299
# check multiple-1 success:     1
 
13300
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
13301
        
 
13302
# check multiple-2 success:     1
 
13303
INSERT INTO t1 SELECT * FROM t0_template
 
13304
WHERE MOD(f_int1,3) = 0;
 
13305
        
 
13306
# check multiple-3 success:     1
 
13307
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
13308
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
13309
AND @max_row_div2 + @max_row_div4;
 
13310
        
 
13311
# check multiple-4 success:     1
 
13312
DELETE FROM t1
 
13313
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
13314
AND @max_row_div2 + @max_row_div4 + @max_row;
 
13315
        
 
13316
# check multiple-5 success:     1
 
13317
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
13318
INSERT INTO t1
 
13319
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13320
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13321
f_charbig = '#SINGLE#';
 
13322
        
 
13323
# check single-1 success:       1
 
13324
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
13325
INSERT INTO t1
 
13326
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13327
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13328
f_charbig = '#SINGLE#';
 
13329
        
 
13330
# check single-2 success:       1
 
13331
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
13332
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
13333
UPDATE t1 SET f_int1 = @cur_value2
 
13334
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
13335
        
 
13336
# check single-3 success:       1
 
13337
SET @cur_value1= -1;
 
13338
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
13339
UPDATE t1 SET f_int1 = @cur_value1
 
13340
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
13341
        
 
13342
# check single-4 success:       1
 
13343
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
13344
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
13345
        
 
13346
# check single-5 success:       1
 
13347
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
13348
        
 
13349
# check single-6 success:       1
 
13350
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
13351
ERROR HY000: Table has no partition for value 2147483647
 
13352
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
13353
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
13354
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
13355
f_charbig = '#NULL#';
 
13356
INSERT INTO t1
 
13357
SET f_int1 = NULL , f_int2 = -@max_row,
 
13358
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
13359
f_charbig = '#NULL#';
 
13360
# check null success:    1
 
13361
        
 
13362
# check null-1 success:         1
 
13363
UPDATE t1 SET f_int1 = -@max_row
 
13364
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13365
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13366
        
 
13367
# check null-2 success:         1
 
13368
UPDATE t1 SET f_int1 = NULL
 
13369
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13370
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13371
        
 
13372
# check null-3 success:         1
 
13373
DELETE FROM t1
 
13374
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13375
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13376
        
 
13377
# check null-4 success:         1
 
13378
DELETE FROM t1
 
13379
WHERE f_int1 = 0 AND f_int2 = 0
 
13380
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
13381
AND f_charbig = '#NULL#';
 
13382
SET AUTOCOMMIT= 0;
 
13383
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13384
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13385
FROM t0_template source_tab
 
13386
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13387
        
 
13388
# check transactions-1 success:         1
 
13389
COMMIT WORK;
 
13390
        
 
13391
# check transactions-2 success:         1
 
13392
ROLLBACK WORK;
 
13393
        
 
13394
# check transactions-3 success:         1
 
13395
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13396
COMMIT WORK;
 
13397
ROLLBACK WORK;
 
13398
        
 
13399
# check transactions-4 success:         1
 
13400
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13401
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13402
FROM t0_template source_tab
 
13403
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13404
        
 
13405
# check transactions-5 success:         1
 
13406
ROLLBACK WORK;
 
13407
Warnings:
 
13408
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
13409
        
 
13410
# check transactions-6 success:         1
 
13411
# INFO: Storage engine used for t1 seems to be not transactional.
 
13412
COMMIT;
 
13413
        
 
13414
# check transactions-7 success:         1
 
13415
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13416
COMMIT WORK;
 
13417
SET @@session.sql_mode = 'traditional';
 
13418
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
13419
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13420
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
13421
'', '', 'was inserted' FROM t0_template
 
13422
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13423
ERROR 22012: Division by 0
 
13424
COMMIT;
 
13425
        
 
13426
# check transactions-8 success:         1
 
13427
# INFO: Storage engine used for t1 seems to be unable to revert
 
13428
#       changes made by the failing statement.
 
13429
SET @@session.sql_mode = '';
 
13430
SET AUTOCOMMIT= 1;
 
13431
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13432
COMMIT WORK;
 
13433
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
13434
        
 
13435
# check special-1 success:      1
 
13436
UPDATE t1 SET f_charbig = '';
 
13437
        
 
13438
# check special-2 success:      1
 
13439
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
13440
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13441
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
13442
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13443
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13444
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13445
'just inserted' FROM t0_template
 
13446
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13447
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
13448
BEGIN
 
13449
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13450
f_charbig = 'updated by trigger'
 
13451
      WHERE f_int1 = new.f_int1;
 
13452
END|
 
13453
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13454
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13455
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13456
        
 
13457
# check trigger-1 success:      1
 
13458
DROP TRIGGER trg_1;
 
13459
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13460
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13461
f_charbig = 'just inserted'
 
13462
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13463
DELETE FROM t0_aux
 
13464
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13465
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13466
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13467
'just inserted' FROM t0_template
 
13468
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13469
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
13470
BEGIN
 
13471
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13472
f_charbig = 'updated by trigger'
 
13473
      WHERE f_int1 = new.f_int1;
 
13474
END|
 
13475
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13476
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13477
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13478
        
 
13479
# check trigger-2 success:      1
 
13480
DROP TRIGGER trg_1;
 
13481
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13482
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13483
f_charbig = 'just inserted'
 
13484
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13485
DELETE FROM t0_aux
 
13486
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13487
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13488
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13489
'just inserted' FROM t0_template
 
13490
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13491
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13492
BEGIN
 
13493
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13494
f_charbig = 'updated by trigger'
 
13495
      WHERE f_int1 = new.f_int1;
 
13496
END|
 
13497
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13498
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13499
        
 
13500
# check trigger-3 success:      1
 
13501
DROP TRIGGER trg_1;
 
13502
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13503
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13504
f_charbig = 'just inserted'
 
13505
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13506
DELETE FROM t0_aux
 
13507
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13508
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13509
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13510
'just inserted' FROM t0_template
 
13511
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13512
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13513
BEGIN
 
13514
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13515
f_charbig = 'updated by trigger'
 
13516
      WHERE f_int1 = - old.f_int1;
 
13517
END|
 
13518
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13519
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13520
        
 
13521
# check trigger-4 success:      1
 
13522
DROP TRIGGER trg_1;
 
13523
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13524
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13525
f_charbig = 'just inserted'
 
13526
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13527
DELETE FROM t0_aux
 
13528
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13529
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13530
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13531
'just inserted' FROM t0_template
 
13532
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13533
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13534
BEGIN
 
13535
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13536
f_charbig = 'updated by trigger'
 
13537
      WHERE f_int1 = new.f_int1;
 
13538
END|
 
13539
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13540
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13541
        
 
13542
# check trigger-5 success:      1
 
13543
DROP TRIGGER trg_1;
 
13544
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13545
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13546
f_charbig = 'just inserted'
 
13547
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13548
DELETE FROM t0_aux
 
13549
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13550
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13551
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13552
'just inserted' FROM t0_template
 
13553
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13554
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
13555
BEGIN
 
13556
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13557
f_charbig = 'updated by trigger'
 
13558
      WHERE f_int1 = - old.f_int1;
 
13559
END|
 
13560
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13561
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13562
        
 
13563
# check trigger-6 success:      1
 
13564
DROP TRIGGER trg_1;
 
13565
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13566
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13567
f_charbig = 'just inserted'
 
13568
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13569
DELETE FROM t0_aux
 
13570
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13571
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13572
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13573
'just inserted' FROM t0_template
 
13574
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13575
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
13576
BEGIN
 
13577
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13578
f_charbig = 'updated by trigger'
 
13579
      WHERE f_int1 = - old.f_int1;
 
13580
END|
 
13581
DELETE FROM t0_aux
 
13582
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13583
        
 
13584
# check trigger-7 success:      1
 
13585
DROP TRIGGER trg_1;
 
13586
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13587
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13588
f_charbig = 'just inserted'
 
13589
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13590
DELETE FROM t0_aux
 
13591
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13592
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13593
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13594
'just inserted' FROM t0_template
 
13595
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13596
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
13597
BEGIN
 
13598
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13599
f_charbig = 'updated by trigger'
 
13600
      WHERE f_int1 = - old.f_int1;
 
13601
END|
 
13602
DELETE FROM t0_aux
 
13603
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13604
        
 
13605
# check trigger-8 success:      1
 
13606
DROP TRIGGER trg_1;
 
13607
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13608
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13609
f_charbig = 'just inserted'
 
13610
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13611
DELETE FROM t0_aux
 
13612
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13613
DELETE FROM t1
 
13614
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13615
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13616
BEGIN
 
13617
SET new.f_int1 = old.f_int1 + @max_row,
 
13618
new.f_int2 = old.f_int2 - @max_row,
 
13619
new.f_charbig = '####updated per update trigger####';
 
13620
END|
 
13621
UPDATE t1
 
13622
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13623
f_charbig = '####updated per update statement itself####';
 
13624
        
 
13625
# check trigger-9 success:      1
 
13626
DROP TRIGGER trg_2;
 
13627
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13628
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13629
f_charbig = CONCAT('===',f_char1,'===');
 
13630
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
13631
BEGIN
 
13632
SET new.f_int1 = new.f_int1 + @max_row,
 
13633
new.f_int2 = new.f_int2 - @max_row,
 
13634
new.f_charbig = '####updated per update trigger####';
 
13635
END|
 
13636
UPDATE t1
 
13637
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
13638
f_charbig = '####updated per update statement itself####';
 
13639
        
 
13640
# check trigger-10 success:     1
 
13641
DROP TRIGGER trg_2;
 
13642
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13643
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13644
f_charbig = CONCAT('===',f_char1,'===');
 
13645
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13646
BEGIN
 
13647
SET new.f_int1 = @my_max1 + @counter,
 
13648
new.f_int2 = @my_min2 - @counter,
 
13649
new.f_charbig = '####updated per insert trigger####';
 
13650
SET @counter = @counter + 1;
 
13651
END|
 
13652
SET @counter = 1;
 
13653
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13654
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13655
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13656
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13657
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13658
ORDER BY f_int1;
 
13659
DROP TRIGGER trg_3;
 
13660
        
 
13661
# check trigger-11 success:     1
 
13662
DELETE FROM t1
 
13663
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13664
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13665
AND f_charbig = '####updated per insert trigger####';
 
13666
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
13667
BEGIN
 
13668
SET new.f_int1 = @my_max1 + @counter,
 
13669
new.f_int2 = @my_min2 - @counter,
 
13670
new.f_charbig = '####updated per insert trigger####';
 
13671
SET @counter = @counter + 1;
 
13672
END|
 
13673
SET @counter = 1;
 
13674
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
13675
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
13676
SELECT CAST(f_int1 AS CHAR),
 
13677
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
13678
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
13679
ORDER BY f_int1;
 
13680
DROP TRIGGER trg_3;
 
13681
        
 
13682
# check trigger-12 success:     1
 
13683
DELETE FROM t1
 
13684
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
13685
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
13686
AND f_charbig = '####updated per insert trigger####';
 
13687
ANALYZE  TABLE t1;
 
13688
Table   Op      Msg_type        Msg_text
 
13689
test.t1 analyze status  OK
 
13690
CHECK    TABLE t1 EXTENDED;
 
13691
Table   Op      Msg_type        Msg_text
 
13692
test.t1 check   status  OK
 
13693
CHECKSUM TABLE t1 EXTENDED;
 
13694
Table   Checksum
 
13695
test.t1 <some_value>
 
13696
OPTIMIZE TABLE t1;
 
13697
Table   Op      Msg_type        Msg_text
 
13698
test.t1 optimize        status  OK
 
13699
# check layout success:    1
 
13700
REPAIR   TABLE t1 EXTENDED;
 
13701
Table   Op      Msg_type        Msg_text
 
13702
test.t1 repair  status  OK
 
13703
# check layout success:    1
 
13704
TRUNCATE t1;
 
13705
        
 
13706
# check TRUNCATE success:       1
 
13707
# check layout success:    1
 
13708
# End usability test (inc/partition_check.inc)
 
13709
DROP TABLE t1;
 
13710
CREATE TABLE t1 (
 
13711
f_int1 INTEGER,
 
13712
f_int2 INTEGER,
 
13713
f_char1 CHAR(20),
 
13714
f_char2 CHAR(20),
 
13715
f_charbig VARCHAR(1000)
 
13716
 
 
13717
)
 
13718
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
13719
(PARTITION part_1 VALUES LESS THAN (0),
 
13720
PARTITION part_2 VALUES LESS THAN (5),
 
13721
PARTITION part_3 VALUES LESS THAN (10),
 
13722
PARTITION part_4 VALUES LESS THAN (2147483646));
 
13723
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13724
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13725
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
13726
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
 
13727
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13728
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
13729
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
13730
# Start usability test (inc/partition_check.inc)
 
13731
create_command
 
13732
SHOW CREATE TABLE t1;
 
13733
Table   Create Table
 
13734
t1      CREATE TABLE `t1` (
 
13735
  `f_int1` int(11) DEFAULT NULL,
 
13736
  `f_int2` int(11) DEFAULT NULL,
 
13737
  `f_char1` char(20) DEFAULT NULL,
 
13738
  `f_char2` char(20) DEFAULT NULL,
 
13739
  `f_charbig` varchar(1000) DEFAULT NULL
 
13740
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
13741
 
 
13742
unified filelist
 
13743
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
13744
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
13745
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
13746
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
13747
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
13748
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
13749
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
13750
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
13751
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
13752
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
13753
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
13754
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
13755
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYD
 
13756
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYI
 
13757
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYD
 
13758
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYI
 
13759
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
13760
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
13761
 
 
13762
# check prerequisites-1 success:    1
 
13763
# check COUNT(*) success:    1
 
13764
# check MIN/MAX(f_int1) success:    1
 
13765
# check MIN/MAX(f_int2) success:    1
 
13766
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13767
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
13768
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
13769
WHERE f_int1 IN (2,3);
 
13770
# check prerequisites-3 success:    1
 
13771
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
13772
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
13773
# check read via f_int1 success: 1
 
13774
# check read via f_int2 success: 1
 
13775
        
 
13776
# check multiple-1 success:     1
 
13777
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
13778
        
 
13779
# check multiple-2 success:     1
 
13780
INSERT INTO t1 SELECT * FROM t0_template
 
13781
WHERE MOD(f_int1,3) = 0;
 
13782
        
 
13783
# check multiple-3 success:     1
 
13784
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
13785
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
13786
AND @max_row_div2 + @max_row_div4;
 
13787
        
 
13788
# check multiple-4 success:     1
 
13789
DELETE FROM t1
 
13790
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
13791
AND @max_row_div2 + @max_row_div4 + @max_row;
 
13792
        
 
13793
# check multiple-5 success:     1
 
13794
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
13795
INSERT INTO t1
 
13796
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13797
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13798
f_charbig = '#SINGLE#';
 
13799
        
 
13800
# check single-1 success:       1
 
13801
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
13802
INSERT INTO t1
 
13803
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
13804
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
13805
f_charbig = '#SINGLE#';
 
13806
        
 
13807
# check single-2 success:       1
 
13808
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
13809
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
13810
UPDATE t1 SET f_int1 = @cur_value2
 
13811
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
13812
        
 
13813
# check single-3 success:       1
 
13814
SET @cur_value1= -1;
 
13815
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
13816
UPDATE t1 SET f_int1 = @cur_value1
 
13817
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
13818
        
 
13819
# check single-4 success:       1
 
13820
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
13821
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
13822
        
 
13823
# check single-5 success:       1
 
13824
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
13825
        
 
13826
# check single-6 success:       1
 
13827
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
13828
        
 
13829
# check single-7 success:       1
 
13830
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
13831
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
13832
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
13833
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
13834
f_charbig = '#NULL#';
 
13835
INSERT INTO t1
 
13836
SET f_int1 = NULL , f_int2 = -@max_row,
 
13837
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
13838
f_charbig = '#NULL#';
 
13839
# check null success:    1
 
13840
        
 
13841
# check null-1 success:         1
 
13842
UPDATE t1 SET f_int1 = -@max_row
 
13843
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13844
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13845
        
 
13846
# check null-2 success:         1
 
13847
UPDATE t1 SET f_int1 = NULL
 
13848
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13849
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13850
        
 
13851
# check null-3 success:         1
 
13852
DELETE FROM t1
 
13853
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
13854
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
13855
        
 
13856
# check null-4 success:         1
 
13857
DELETE FROM t1
 
13858
WHERE f_int1 = 0 AND f_int2 = 0
 
13859
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
13860
AND f_charbig = '#NULL#';
 
13861
SET AUTOCOMMIT= 0;
 
13862
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13863
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13864
FROM t0_template source_tab
 
13865
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13866
        
 
13867
# check transactions-1 success:         1
 
13868
COMMIT WORK;
 
13869
        
 
13870
# check transactions-2 success:         1
 
13871
ROLLBACK WORK;
 
13872
        
 
13873
# check transactions-3 success:         1
 
13874
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13875
COMMIT WORK;
 
13876
ROLLBACK WORK;
 
13877
        
 
13878
# check transactions-4 success:         1
 
13879
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13880
SELECT f_int1, f_int1, '', '', 'was inserted'
 
13881
FROM t0_template source_tab
 
13882
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13883
        
 
13884
# check transactions-5 success:         1
 
13885
ROLLBACK WORK;
 
13886
Warnings:
 
13887
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
13888
        
 
13889
# check transactions-6 success:         1
 
13890
# INFO: Storage engine used for t1 seems to be not transactional.
 
13891
COMMIT;
 
13892
        
 
13893
# check transactions-7 success:         1
 
13894
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13895
COMMIT WORK;
 
13896
SET @@session.sql_mode = 'traditional';
 
13897
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
13898
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
13899
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
13900
'', '', 'was inserted' FROM t0_template
 
13901
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
13902
ERROR 22012: Division by 0
 
13903
COMMIT;
 
13904
        
 
13905
# check transactions-8 success:         1
 
13906
# INFO: Storage engine used for t1 seems to be unable to revert
 
13907
#       changes made by the failing statement.
 
13908
SET @@session.sql_mode = '';
 
13909
SET AUTOCOMMIT= 1;
 
13910
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
13911
COMMIT WORK;
 
13912
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
13913
        
 
13914
# check special-1 success:      1
 
13915
UPDATE t1 SET f_charbig = '';
 
13916
        
 
13917
# check special-2 success:      1
 
13918
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
13919
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13920
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
13921
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13922
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13923
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13924
'just inserted' FROM t0_template
 
13925
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13926
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
13927
BEGIN
 
13928
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13929
f_charbig = 'updated by trigger'
 
13930
      WHERE f_int1 = new.f_int1;
 
13931
END|
 
13932
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13933
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13934
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13935
        
 
13936
# check trigger-1 success:      1
 
13937
DROP TRIGGER trg_1;
 
13938
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13939
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13940
f_charbig = 'just inserted'
 
13941
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13942
DELETE FROM t0_aux
 
13943
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13944
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13945
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13946
'just inserted' FROM t0_template
 
13947
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13948
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
13949
BEGIN
 
13950
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13951
f_charbig = 'updated by trigger'
 
13952
      WHERE f_int1 = new.f_int1;
 
13953
END|
 
13954
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13955
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
13956
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13957
        
 
13958
# check trigger-2 success:      1
 
13959
DROP TRIGGER trg_1;
 
13960
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13961
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13962
f_charbig = 'just inserted'
 
13963
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13964
DELETE FROM t0_aux
 
13965
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13966
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13967
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13968
'just inserted' FROM t0_template
 
13969
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13970
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13971
BEGIN
 
13972
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13973
f_charbig = 'updated by trigger'
 
13974
      WHERE f_int1 = new.f_int1;
 
13975
END|
 
13976
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13977
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13978
        
 
13979
# check trigger-3 success:      1
 
13980
DROP TRIGGER trg_1;
 
13981
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
13982
f_int2 = CAST(f_char1 AS SIGNED INT),
 
13983
f_charbig = 'just inserted'
 
13984
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
13985
DELETE FROM t0_aux
 
13986
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13987
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
13988
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
13989
'just inserted' FROM t0_template
 
13990
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
13991
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
13992
BEGIN
 
13993
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
13994
f_charbig = 'updated by trigger'
 
13995
      WHERE f_int1 = - old.f_int1;
 
13996
END|
 
13997
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
13998
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
13999
        
 
14000
# check trigger-4 success:      1
 
14001
DROP TRIGGER trg_1;
 
14002
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14003
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14004
f_charbig = 'just inserted'
 
14005
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14006
DELETE FROM t0_aux
 
14007
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14008
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14009
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14010
'just inserted' FROM t0_template
 
14011
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14012
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14013
BEGIN
 
14014
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14015
f_charbig = 'updated by trigger'
 
14016
      WHERE f_int1 = new.f_int1;
 
14017
END|
 
14018
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14019
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14020
        
 
14021
# check trigger-5 success:      1
 
14022
DROP TRIGGER trg_1;
 
14023
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14024
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14025
f_charbig = 'just inserted'
 
14026
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14027
DELETE FROM t0_aux
 
14028
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14029
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14030
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14031
'just inserted' FROM t0_template
 
14032
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14033
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14034
BEGIN
 
14035
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14036
f_charbig = 'updated by trigger'
 
14037
      WHERE f_int1 = - old.f_int1;
 
14038
END|
 
14039
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14040
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14041
        
 
14042
# check trigger-6 success:      1
 
14043
DROP TRIGGER trg_1;
 
14044
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14045
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14046
f_charbig = 'just inserted'
 
14047
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14048
DELETE FROM t0_aux
 
14049
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14050
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14051
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14052
'just inserted' FROM t0_template
 
14053
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14054
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
14055
BEGIN
 
14056
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14057
f_charbig = 'updated by trigger'
 
14058
      WHERE f_int1 = - old.f_int1;
 
14059
END|
 
14060
DELETE FROM t0_aux
 
14061
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14062
        
 
14063
# check trigger-7 success:      1
 
14064
DROP TRIGGER trg_1;
 
14065
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14066
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14067
f_charbig = 'just inserted'
 
14068
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14069
DELETE FROM t0_aux
 
14070
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14071
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14072
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14073
'just inserted' FROM t0_template
 
14074
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14075
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
14076
BEGIN
 
14077
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14078
f_charbig = 'updated by trigger'
 
14079
      WHERE f_int1 = - old.f_int1;
 
14080
END|
 
14081
DELETE FROM t0_aux
 
14082
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14083
        
 
14084
# check trigger-8 success:      1
 
14085
DROP TRIGGER trg_1;
 
14086
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14087
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14088
f_charbig = 'just inserted'
 
14089
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14090
DELETE FROM t0_aux
 
14091
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14092
DELETE FROM t1
 
14093
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14094
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14095
BEGIN
 
14096
SET new.f_int1 = old.f_int1 + @max_row,
 
14097
new.f_int2 = old.f_int2 - @max_row,
 
14098
new.f_charbig = '####updated per update trigger####';
 
14099
END|
 
14100
UPDATE t1
 
14101
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14102
f_charbig = '####updated per update statement itself####';
 
14103
        
 
14104
# check trigger-9 success:      1
 
14105
DROP TRIGGER trg_2;
 
14106
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14107
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14108
f_charbig = CONCAT('===',f_char1,'===');
 
14109
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14110
BEGIN
 
14111
SET new.f_int1 = new.f_int1 + @max_row,
 
14112
new.f_int2 = new.f_int2 - @max_row,
 
14113
new.f_charbig = '####updated per update trigger####';
 
14114
END|
 
14115
UPDATE t1
 
14116
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14117
f_charbig = '####updated per update statement itself####';
 
14118
        
 
14119
# check trigger-10 success:     1
 
14120
DROP TRIGGER trg_2;
 
14121
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14122
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14123
f_charbig = CONCAT('===',f_char1,'===');
 
14124
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14125
BEGIN
 
14126
SET new.f_int1 = @my_max1 + @counter,
 
14127
new.f_int2 = @my_min2 - @counter,
 
14128
new.f_charbig = '####updated per insert trigger####';
 
14129
SET @counter = @counter + 1;
 
14130
END|
 
14131
SET @counter = 1;
 
14132
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14133
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14134
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14135
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14136
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14137
ORDER BY f_int1;
 
14138
DROP TRIGGER trg_3;
 
14139
        
 
14140
# check trigger-11 success:     1
 
14141
DELETE FROM t1
 
14142
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14143
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14144
AND f_charbig = '####updated per insert trigger####';
 
14145
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14146
BEGIN
 
14147
SET new.f_int1 = @my_max1 + @counter,
 
14148
new.f_int2 = @my_min2 - @counter,
 
14149
new.f_charbig = '####updated per insert trigger####';
 
14150
SET @counter = @counter + 1;
 
14151
END|
 
14152
SET @counter = 1;
 
14153
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14154
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14155
SELECT CAST(f_int1 AS CHAR),
 
14156
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14157
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14158
ORDER BY f_int1;
 
14159
DROP TRIGGER trg_3;
 
14160
        
 
14161
# check trigger-12 success:     1
 
14162
DELETE FROM t1
 
14163
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14164
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14165
AND f_charbig = '####updated per insert trigger####';
 
14166
ANALYZE  TABLE t1;
 
14167
Table   Op      Msg_type        Msg_text
 
14168
test.t1 analyze status  OK
 
14169
CHECK    TABLE t1 EXTENDED;
 
14170
Table   Op      Msg_type        Msg_text
 
14171
test.t1 check   status  OK
 
14172
CHECKSUM TABLE t1 EXTENDED;
 
14173
Table   Checksum
 
14174
test.t1 <some_value>
 
14175
OPTIMIZE TABLE t1;
 
14176
Table   Op      Msg_type        Msg_text
 
14177
test.t1 optimize        status  OK
 
14178
# check layout success:    1
 
14179
REPAIR   TABLE t1 EXTENDED;
 
14180
Table   Op      Msg_type        Msg_text
 
14181
test.t1 repair  status  OK
 
14182
# check layout success:    1
 
14183
TRUNCATE t1;
 
14184
        
 
14185
# check TRUNCATE success:       1
 
14186
# check layout success:    1
 
14187
# End usability test (inc/partition_check.inc)
 
14188
DROP TABLE t1;
 
14189
CREATE TABLE t1 (
 
14190
f_int1 INTEGER,
 
14191
f_int2 INTEGER,
 
14192
f_char1 CHAR(20),
 
14193
f_char2 CHAR(20),
 
14194
f_charbig VARCHAR(1000)
 
14195
 
 
14196
)
 
14197
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
14198
(PARTITION part_1 VALUES LESS THAN (0)
 
14199
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
14200
PARTITION part_2 VALUES LESS THAN (5)
 
14201
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
14202
PARTITION part_3 VALUES LESS THAN (10)
 
14203
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
14204
PARTITION part_4 VALUES LESS THAN (2147483646)
 
14205
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
14206
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14207
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14208
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
14209
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
 
14210
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14211
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14212
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14213
# Start usability test (inc/partition_check.inc)
 
14214
create_command
 
14215
SHOW CREATE TABLE t1;
 
14216
Table   Create Table
 
14217
t1      CREATE TABLE `t1` (
 
14218
  `f_int1` int(11) DEFAULT NULL,
 
14219
  `f_int2` int(11) DEFAULT NULL,
 
14220
  `f_char1` char(20) DEFAULT NULL,
 
14221
  `f_char2` char(20) DEFAULT NULL,
 
14222
  `f_charbig` varchar(1000) DEFAULT NULL
 
14223
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
14224
 
 
14225
unified filelist
 
14226
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYD
 
14227
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYI
 
14228
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYD
 
14229
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYI
 
14230
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYD
 
14231
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYI
 
14232
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYD
 
14233
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYI
 
14234
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYD
 
14235
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYI
 
14236
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYD
 
14237
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYI
 
14238
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYD
 
14239
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYI
 
14240
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYD
 
14241
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYI
 
14242
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
14243
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
14244
 
 
14245
# check prerequisites-1 success:    1
 
14246
# check COUNT(*) success:    1
 
14247
# check MIN/MAX(f_int1) success:    1
 
14248
# check MIN/MAX(f_int2) success:    1
 
14249
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14250
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14251
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
14252
WHERE f_int1 IN (2,3);
 
14253
# check prerequisites-3 success:    1
 
14254
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14255
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
14256
# check read via f_int1 success: 1
 
14257
# check read via f_int2 success: 1
 
14258
        
 
14259
# check multiple-1 success:     1
 
14260
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
14261
        
 
14262
# check multiple-2 success:     1
 
14263
INSERT INTO t1 SELECT * FROM t0_template
 
14264
WHERE MOD(f_int1,3) = 0;
 
14265
        
 
14266
# check multiple-3 success:     1
 
14267
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
14268
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
14269
AND @max_row_div2 + @max_row_div4;
 
14270
        
 
14271
# check multiple-4 success:     1
 
14272
DELETE FROM t1
 
14273
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
14274
AND @max_row_div2 + @max_row_div4 + @max_row;
 
14275
        
 
14276
# check multiple-5 success:     1
 
14277
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
14278
INSERT INTO t1
 
14279
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14280
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14281
f_charbig = '#SINGLE#';
 
14282
        
 
14283
# check single-1 success:       1
 
14284
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
14285
INSERT INTO t1
 
14286
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14287
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14288
f_charbig = '#SINGLE#';
 
14289
        
 
14290
# check single-2 success:       1
 
14291
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
14292
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
14293
UPDATE t1 SET f_int1 = @cur_value2
 
14294
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
14295
        
 
14296
# check single-3 success:       1
 
14297
SET @cur_value1= -1;
 
14298
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
14299
UPDATE t1 SET f_int1 = @cur_value1
 
14300
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
14301
        
 
14302
# check single-4 success:       1
 
14303
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
14304
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
14305
        
 
14306
# check single-5 success:       1
 
14307
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
14308
        
 
14309
# check single-6 success:       1
 
14310
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
14311
ERROR HY000: Table has no partition for value 2147483647
 
14312
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
14313
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
14314
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
14315
f_charbig = '#NULL#';
 
14316
INSERT INTO t1
 
14317
SET f_int1 = NULL , f_int2 = -@max_row,
 
14318
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
14319
f_charbig = '#NULL#';
 
14320
# check null success:    1
 
14321
        
 
14322
# check null-1 success:         1
 
14323
UPDATE t1 SET f_int1 = -@max_row
 
14324
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14325
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14326
        
 
14327
# check null-2 success:         1
 
14328
UPDATE t1 SET f_int1 = NULL
 
14329
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14330
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14331
        
 
14332
# check null-3 success:         1
 
14333
DELETE FROM t1
 
14334
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14335
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14336
        
 
14337
# check null-4 success:         1
 
14338
DELETE FROM t1
 
14339
WHERE f_int1 = 0 AND f_int2 = 0
 
14340
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
14341
AND f_charbig = '#NULL#';
 
14342
SET AUTOCOMMIT= 0;
 
14343
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14344
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14345
FROM t0_template source_tab
 
14346
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14347
        
 
14348
# check transactions-1 success:         1
 
14349
COMMIT WORK;
 
14350
        
 
14351
# check transactions-2 success:         1
 
14352
ROLLBACK WORK;
 
14353
        
 
14354
# check transactions-3 success:         1
 
14355
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14356
COMMIT WORK;
 
14357
ROLLBACK WORK;
 
14358
        
 
14359
# check transactions-4 success:         1
 
14360
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14361
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14362
FROM t0_template source_tab
 
14363
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14364
        
 
14365
# check transactions-5 success:         1
 
14366
ROLLBACK WORK;
 
14367
Warnings:
 
14368
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
14369
        
 
14370
# check transactions-6 success:         1
 
14371
# INFO: Storage engine used for t1 seems to be not transactional.
 
14372
COMMIT;
 
14373
        
 
14374
# check transactions-7 success:         1
 
14375
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14376
COMMIT WORK;
 
14377
SET @@session.sql_mode = 'traditional';
 
14378
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
14379
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14380
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
14381
'', '', 'was inserted' FROM t0_template
 
14382
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14383
ERROR 22012: Division by 0
 
14384
COMMIT;
 
14385
        
 
14386
# check transactions-8 success:         1
 
14387
# INFO: Storage engine used for t1 seems to be unable to revert
 
14388
#       changes made by the failing statement.
 
14389
SET @@session.sql_mode = '';
 
14390
SET AUTOCOMMIT= 1;
 
14391
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14392
COMMIT WORK;
 
14393
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
14394
        
 
14395
# check special-1 success:      1
 
14396
UPDATE t1 SET f_charbig = '';
 
14397
        
 
14398
# check special-2 success:      1
 
14399
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
14400
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14401
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
14402
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14403
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14404
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14405
'just inserted' FROM t0_template
 
14406
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14407
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
14408
BEGIN
 
14409
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14410
f_charbig = 'updated by trigger'
 
14411
      WHERE f_int1 = new.f_int1;
 
14412
END|
 
14413
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14414
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14415
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14416
        
 
14417
# check trigger-1 success:      1
 
14418
DROP TRIGGER trg_1;
 
14419
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14420
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14421
f_charbig = 'just inserted'
 
14422
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14423
DELETE FROM t0_aux
 
14424
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14425
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14426
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14427
'just inserted' FROM t0_template
 
14428
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14429
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
14430
BEGIN
 
14431
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14432
f_charbig = 'updated by trigger'
 
14433
      WHERE f_int1 = new.f_int1;
 
14434
END|
 
14435
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14436
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14437
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14438
        
 
14439
# check trigger-2 success:      1
 
14440
DROP TRIGGER trg_1;
 
14441
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14442
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14443
f_charbig = 'just inserted'
 
14444
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14445
DELETE FROM t0_aux
 
14446
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14447
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14448
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14449
'just inserted' FROM t0_template
 
14450
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14451
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14452
BEGIN
 
14453
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14454
f_charbig = 'updated by trigger'
 
14455
      WHERE f_int1 = new.f_int1;
 
14456
END|
 
14457
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14458
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14459
        
 
14460
# check trigger-3 success:      1
 
14461
DROP TRIGGER trg_1;
 
14462
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14463
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14464
f_charbig = 'just inserted'
 
14465
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14466
DELETE FROM t0_aux
 
14467
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14468
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14469
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14470
'just inserted' FROM t0_template
 
14471
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14472
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14473
BEGIN
 
14474
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14475
f_charbig = 'updated by trigger'
 
14476
      WHERE f_int1 = - old.f_int1;
 
14477
END|
 
14478
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14479
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14480
        
 
14481
# check trigger-4 success:      1
 
14482
DROP TRIGGER trg_1;
 
14483
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14484
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14485
f_charbig = 'just inserted'
 
14486
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14487
DELETE FROM t0_aux
 
14488
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14489
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14490
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14491
'just inserted' FROM t0_template
 
14492
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14493
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14494
BEGIN
 
14495
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14496
f_charbig = 'updated by trigger'
 
14497
      WHERE f_int1 = new.f_int1;
 
14498
END|
 
14499
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14500
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14501
        
 
14502
# check trigger-5 success:      1
 
14503
DROP TRIGGER trg_1;
 
14504
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14505
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14506
f_charbig = 'just inserted'
 
14507
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14508
DELETE FROM t0_aux
 
14509
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14510
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14511
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14512
'just inserted' FROM t0_template
 
14513
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14514
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14515
BEGIN
 
14516
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14517
f_charbig = 'updated by trigger'
 
14518
      WHERE f_int1 = - old.f_int1;
 
14519
END|
 
14520
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14521
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14522
        
 
14523
# check trigger-6 success:      1
 
14524
DROP TRIGGER trg_1;
 
14525
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14526
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14527
f_charbig = 'just inserted'
 
14528
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14529
DELETE FROM t0_aux
 
14530
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14531
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14532
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14533
'just inserted' FROM t0_template
 
14534
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14535
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
14536
BEGIN
 
14537
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14538
f_charbig = 'updated by trigger'
 
14539
      WHERE f_int1 = - old.f_int1;
 
14540
END|
 
14541
DELETE FROM t0_aux
 
14542
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14543
        
 
14544
# check trigger-7 success:      1
 
14545
DROP TRIGGER trg_1;
 
14546
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14547
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14548
f_charbig = 'just inserted'
 
14549
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14550
DELETE FROM t0_aux
 
14551
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14552
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14553
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14554
'just inserted' FROM t0_template
 
14555
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14556
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
14557
BEGIN
 
14558
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14559
f_charbig = 'updated by trigger'
 
14560
      WHERE f_int1 = - old.f_int1;
 
14561
END|
 
14562
DELETE FROM t0_aux
 
14563
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14564
        
 
14565
# check trigger-8 success:      1
 
14566
DROP TRIGGER trg_1;
 
14567
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14568
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14569
f_charbig = 'just inserted'
 
14570
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14571
DELETE FROM t0_aux
 
14572
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14573
DELETE FROM t1
 
14574
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14575
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14576
BEGIN
 
14577
SET new.f_int1 = old.f_int1 + @max_row,
 
14578
new.f_int2 = old.f_int2 - @max_row,
 
14579
new.f_charbig = '####updated per update trigger####';
 
14580
END|
 
14581
UPDATE t1
 
14582
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14583
f_charbig = '####updated per update statement itself####';
 
14584
        
 
14585
# check trigger-9 success:      1
 
14586
DROP TRIGGER trg_2;
 
14587
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14588
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14589
f_charbig = CONCAT('===',f_char1,'===');
 
14590
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
14591
BEGIN
 
14592
SET new.f_int1 = new.f_int1 + @max_row,
 
14593
new.f_int2 = new.f_int2 - @max_row,
 
14594
new.f_charbig = '####updated per update trigger####';
 
14595
END|
 
14596
UPDATE t1
 
14597
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
14598
f_charbig = '####updated per update statement itself####';
 
14599
        
 
14600
# check trigger-10 success:     1
 
14601
DROP TRIGGER trg_2;
 
14602
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14603
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14604
f_charbig = CONCAT('===',f_char1,'===');
 
14605
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14606
BEGIN
 
14607
SET new.f_int1 = @my_max1 + @counter,
 
14608
new.f_int2 = @my_min2 - @counter,
 
14609
new.f_charbig = '####updated per insert trigger####';
 
14610
SET @counter = @counter + 1;
 
14611
END|
 
14612
SET @counter = 1;
 
14613
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14614
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14615
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14616
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14617
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14618
ORDER BY f_int1;
 
14619
DROP TRIGGER trg_3;
 
14620
        
 
14621
# check trigger-11 success:     1
 
14622
DELETE FROM t1
 
14623
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14624
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14625
AND f_charbig = '####updated per insert trigger####';
 
14626
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
14627
BEGIN
 
14628
SET new.f_int1 = @my_max1 + @counter,
 
14629
new.f_int2 = @my_min2 - @counter,
 
14630
new.f_charbig = '####updated per insert trigger####';
 
14631
SET @counter = @counter + 1;
 
14632
END|
 
14633
SET @counter = 1;
 
14634
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
14635
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
14636
SELECT CAST(f_int1 AS CHAR),
 
14637
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
14638
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
14639
ORDER BY f_int1;
 
14640
DROP TRIGGER trg_3;
 
14641
        
 
14642
# check trigger-12 success:     1
 
14643
DELETE FROM t1
 
14644
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
14645
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
14646
AND f_charbig = '####updated per insert trigger####';
 
14647
ANALYZE  TABLE t1;
 
14648
Table   Op      Msg_type        Msg_text
 
14649
test.t1 analyze status  OK
 
14650
CHECK    TABLE t1 EXTENDED;
 
14651
Table   Op      Msg_type        Msg_text
 
14652
test.t1 check   status  OK
 
14653
CHECKSUM TABLE t1 EXTENDED;
 
14654
Table   Checksum
 
14655
test.t1 <some_value>
 
14656
OPTIMIZE TABLE t1;
 
14657
Table   Op      Msg_type        Msg_text
 
14658
test.t1 optimize        status  OK
 
14659
# check layout success:    1
 
14660
REPAIR   TABLE t1 EXTENDED;
 
14661
Table   Op      Msg_type        Msg_text
 
14662
test.t1 repair  status  OK
 
14663
# check layout success:    1
 
14664
TRUNCATE t1;
 
14665
        
 
14666
# check TRUNCATE success:       1
 
14667
# check layout success:    1
 
14668
# End usability test (inc/partition_check.inc)
 
14669
DROP TABLE t1;
 
14670
CREATE TABLE t1 (
 
14671
f_int1 INTEGER,
 
14672
f_int2 INTEGER,
 
14673
f_char1 CHAR(20),
 
14674
f_char2 CHAR(20),
 
14675
f_charbig VARCHAR(1000)
 
14676
 
 
14677
)
 
14678
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
14679
(PARTITION part_1 VALUES IN (0)
 
14680
(SUBPARTITION sp11, SUBPARTITION sp12),
 
14681
PARTITION part_2 VALUES IN (1)
 
14682
(SUBPARTITION sp21, SUBPARTITION sp22),
 
14683
PARTITION part_3 VALUES IN (2)
 
14684
(SUBPARTITION sp31, SUBPARTITION sp32),
 
14685
PARTITION part_4 VALUES IN (NULL)
 
14686
(SUBPARTITION sp41, SUBPARTITION sp42));
 
14687
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14688
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14689
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
14690
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
 
14691
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14692
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
14693
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
14694
# Start usability test (inc/partition_check.inc)
 
14695
create_command
 
14696
SHOW CREATE TABLE t1;
 
14697
Table   Create Table
 
14698
t1      CREATE TABLE `t1` (
 
14699
  `f_int1` int(11) DEFAULT NULL,
 
14700
  `f_int2` int(11) DEFAULT NULL,
 
14701
  `f_char1` char(20) DEFAULT NULL,
 
14702
  `f_char2` char(20) DEFAULT NULL,
 
14703
  `f_charbig` varchar(1000) DEFAULT NULL
 
14704
) ENGINE=MyISAM 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 = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
14705
 
 
14706
unified filelist
 
14707
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYD
 
14708
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYI
 
14709
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYD
 
14710
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYI
 
14711
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYD
 
14712
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYI
 
14713
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYD
 
14714
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYI
 
14715
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYD
 
14716
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYI
 
14717
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYD
 
14718
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYI
 
14719
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYD
 
14720
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYI
 
14721
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYD
 
14722
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYI
 
14723
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
14724
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
14725
 
 
14726
# check prerequisites-1 success:    1
 
14727
# check COUNT(*) success:    1
 
14728
# check MIN/MAX(f_int1) success:    1
 
14729
# check MIN/MAX(f_int2) success:    1
 
14730
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14731
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
14732
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
14733
WHERE f_int1 IN (2,3);
 
14734
# check prerequisites-3 success:    1
 
14735
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
14736
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
14737
# check read via f_int1 success: 1
 
14738
# check read via f_int2 success: 1
 
14739
        
 
14740
# check multiple-1 success:     1
 
14741
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
14742
        
 
14743
# check multiple-2 success:     1
 
14744
INSERT INTO t1 SELECT * FROM t0_template
 
14745
WHERE MOD(f_int1,3) = 0;
 
14746
        
 
14747
# check multiple-3 success:     1
 
14748
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
14749
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
14750
AND @max_row_div2 + @max_row_div4;
 
14751
        
 
14752
# check multiple-4 success:     1
 
14753
DELETE FROM t1
 
14754
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
14755
AND @max_row_div2 + @max_row_div4 + @max_row;
 
14756
        
 
14757
# check multiple-5 success:     1
 
14758
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
14759
INSERT INTO t1
 
14760
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14761
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14762
f_charbig = '#SINGLE#';
 
14763
        
 
14764
# check single-1 success:       1
 
14765
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
14766
INSERT INTO t1
 
14767
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
14768
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
14769
f_charbig = '#SINGLE#';
 
14770
        
 
14771
# check single-2 success:       1
 
14772
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
14773
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
14774
UPDATE t1 SET f_int1 = @cur_value2
 
14775
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
14776
        
 
14777
# check single-3 success:       1
 
14778
SET @cur_value1= -1;
 
14779
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
14780
UPDATE t1 SET f_int1 = @cur_value1
 
14781
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
14782
        
 
14783
# check single-4 success:       1
 
14784
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
14785
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
14786
        
 
14787
# check single-5 success:       1
 
14788
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
14789
        
 
14790
# check single-6 success:       1
 
14791
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
14792
        
 
14793
# check single-7 success:       1
 
14794
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
14795
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
14796
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
14797
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
14798
f_charbig = '#NULL#';
 
14799
INSERT INTO t1
 
14800
SET f_int1 = NULL , f_int2 = -@max_row,
 
14801
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
14802
f_charbig = '#NULL#';
 
14803
# check null success:    1
 
14804
        
 
14805
# check null-1 success:         1
 
14806
UPDATE t1 SET f_int1 = -@max_row
 
14807
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14808
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14809
        
 
14810
# check null-2 success:         1
 
14811
UPDATE t1 SET f_int1 = NULL
 
14812
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14813
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14814
        
 
14815
# check null-3 success:         1
 
14816
DELETE FROM t1
 
14817
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
14818
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
14819
        
 
14820
# check null-4 success:         1
 
14821
DELETE FROM t1
 
14822
WHERE f_int1 = 0 AND f_int2 = 0
 
14823
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
14824
AND f_charbig = '#NULL#';
 
14825
SET AUTOCOMMIT= 0;
 
14826
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14827
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14828
FROM t0_template source_tab
 
14829
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14830
        
 
14831
# check transactions-1 success:         1
 
14832
COMMIT WORK;
 
14833
        
 
14834
# check transactions-2 success:         1
 
14835
ROLLBACK WORK;
 
14836
        
 
14837
# check transactions-3 success:         1
 
14838
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14839
COMMIT WORK;
 
14840
ROLLBACK WORK;
 
14841
        
 
14842
# check transactions-4 success:         1
 
14843
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14844
SELECT f_int1, f_int1, '', '', 'was inserted'
 
14845
FROM t0_template source_tab
 
14846
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14847
        
 
14848
# check transactions-5 success:         1
 
14849
ROLLBACK WORK;
 
14850
Warnings:
 
14851
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
14852
        
 
14853
# check transactions-6 success:         1
 
14854
# INFO: Storage engine used for t1 seems to be not transactional.
 
14855
COMMIT;
 
14856
        
 
14857
# check transactions-7 success:         1
 
14858
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14859
COMMIT WORK;
 
14860
SET @@session.sql_mode = 'traditional';
 
14861
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
14862
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
14863
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
14864
'', '', 'was inserted' FROM t0_template
 
14865
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
14866
ERROR 22012: Division by 0
 
14867
COMMIT;
 
14868
        
 
14869
# check transactions-8 success:         1
 
14870
# INFO: Storage engine used for t1 seems to be unable to revert
 
14871
#       changes made by the failing statement.
 
14872
SET @@session.sql_mode = '';
 
14873
SET AUTOCOMMIT= 1;
 
14874
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
14875
COMMIT WORK;
 
14876
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
14877
        
 
14878
# check special-1 success:      1
 
14879
UPDATE t1 SET f_charbig = '';
 
14880
        
 
14881
# check special-2 success:      1
 
14882
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
14883
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14884
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
14885
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14886
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14887
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14888
'just inserted' FROM t0_template
 
14889
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14890
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
14891
BEGIN
 
14892
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14893
f_charbig = 'updated by trigger'
 
14894
      WHERE f_int1 = new.f_int1;
 
14895
END|
 
14896
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14897
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14898
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14899
        
 
14900
# check trigger-1 success:      1
 
14901
DROP TRIGGER trg_1;
 
14902
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14903
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14904
f_charbig = 'just inserted'
 
14905
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14906
DELETE FROM t0_aux
 
14907
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14908
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14909
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14910
'just inserted' FROM t0_template
 
14911
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14912
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
14913
BEGIN
 
14914
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14915
f_charbig = 'updated by trigger'
 
14916
      WHERE f_int1 = new.f_int1;
 
14917
END|
 
14918
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14919
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
14920
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14921
        
 
14922
# check trigger-2 success:      1
 
14923
DROP TRIGGER trg_1;
 
14924
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14925
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14926
f_charbig = 'just inserted'
 
14927
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14928
DELETE FROM t0_aux
 
14929
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14930
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14931
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14932
'just inserted' FROM t0_template
 
14933
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14934
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14935
BEGIN
 
14936
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14937
f_charbig = 'updated by trigger'
 
14938
      WHERE f_int1 = new.f_int1;
 
14939
END|
 
14940
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14941
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14942
        
 
14943
# check trigger-3 success:      1
 
14944
DROP TRIGGER trg_1;
 
14945
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14946
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14947
f_charbig = 'just inserted'
 
14948
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14949
DELETE FROM t0_aux
 
14950
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14951
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14952
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14953
'just inserted' FROM t0_template
 
14954
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14955
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
14956
BEGIN
 
14957
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14958
f_charbig = 'updated by trigger'
 
14959
      WHERE f_int1 = - old.f_int1;
 
14960
END|
 
14961
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14962
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14963
        
 
14964
# check trigger-4 success:      1
 
14965
DROP TRIGGER trg_1;
 
14966
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14967
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14968
f_charbig = 'just inserted'
 
14969
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14970
DELETE FROM t0_aux
 
14971
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14972
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14973
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14974
'just inserted' FROM t0_template
 
14975
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14976
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14977
BEGIN
 
14978
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
14979
f_charbig = 'updated by trigger'
 
14980
      WHERE f_int1 = new.f_int1;
 
14981
END|
 
14982
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
14983
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
14984
        
 
14985
# check trigger-5 success:      1
 
14986
DROP TRIGGER trg_1;
 
14987
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
14988
f_int2 = CAST(f_char1 AS SIGNED INT),
 
14989
f_charbig = 'just inserted'
 
14990
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
14991
DELETE FROM t0_aux
 
14992
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14993
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
14994
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
14995
'just inserted' FROM t0_template
 
14996
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
14997
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
14998
BEGIN
 
14999
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15000
f_charbig = 'updated by trigger'
 
15001
      WHERE f_int1 = - old.f_int1;
 
15002
END|
 
15003
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15004
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15005
        
 
15006
# check trigger-6 success:      1
 
15007
DROP TRIGGER trg_1;
 
15008
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15009
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15010
f_charbig = 'just inserted'
 
15011
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15012
DELETE FROM t0_aux
 
15013
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15014
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15015
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15016
'just inserted' FROM t0_template
 
15017
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15018
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
15019
BEGIN
 
15020
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15021
f_charbig = 'updated by trigger'
 
15022
      WHERE f_int1 = - old.f_int1;
 
15023
END|
 
15024
DELETE FROM t0_aux
 
15025
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15026
        
 
15027
# check trigger-7 success:      1
 
15028
DROP TRIGGER trg_1;
 
15029
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15030
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15031
f_charbig = 'just inserted'
 
15032
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15033
DELETE FROM t0_aux
 
15034
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15035
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15036
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15037
'just inserted' FROM t0_template
 
15038
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15039
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
15040
BEGIN
 
15041
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15042
f_charbig = 'updated by trigger'
 
15043
      WHERE f_int1 = - old.f_int1;
 
15044
END|
 
15045
DELETE FROM t0_aux
 
15046
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15047
        
 
15048
# check trigger-8 success:      1
 
15049
DROP TRIGGER trg_1;
 
15050
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15051
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15052
f_charbig = 'just inserted'
 
15053
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15054
DELETE FROM t0_aux
 
15055
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15056
DELETE FROM t1
 
15057
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15058
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15059
BEGIN
 
15060
SET new.f_int1 = old.f_int1 + @max_row,
 
15061
new.f_int2 = old.f_int2 - @max_row,
 
15062
new.f_charbig = '####updated per update trigger####';
 
15063
END|
 
15064
UPDATE t1
 
15065
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15066
f_charbig = '####updated per update statement itself####';
 
15067
        
 
15068
# check trigger-9 success:      1
 
15069
DROP TRIGGER trg_2;
 
15070
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15071
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15072
f_charbig = CONCAT('===',f_char1,'===');
 
15073
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15074
BEGIN
 
15075
SET new.f_int1 = new.f_int1 + @max_row,
 
15076
new.f_int2 = new.f_int2 - @max_row,
 
15077
new.f_charbig = '####updated per update trigger####';
 
15078
END|
 
15079
UPDATE t1
 
15080
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15081
f_charbig = '####updated per update statement itself####';
 
15082
        
 
15083
# check trigger-10 success:     1
 
15084
DROP TRIGGER trg_2;
 
15085
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15086
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15087
f_charbig = CONCAT('===',f_char1,'===');
 
15088
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15089
BEGIN
 
15090
SET new.f_int1 = @my_max1 + @counter,
 
15091
new.f_int2 = @my_min2 - @counter,
 
15092
new.f_charbig = '####updated per insert trigger####';
 
15093
SET @counter = @counter + 1;
 
15094
END|
 
15095
SET @counter = 1;
 
15096
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15097
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15098
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15099
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15100
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15101
ORDER BY f_int1;
 
15102
DROP TRIGGER trg_3;
 
15103
        
 
15104
# check trigger-11 success:     1
 
15105
DELETE FROM t1
 
15106
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15107
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15108
AND f_charbig = '####updated per insert trigger####';
 
15109
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15110
BEGIN
 
15111
SET new.f_int1 = @my_max1 + @counter,
 
15112
new.f_int2 = @my_min2 - @counter,
 
15113
new.f_charbig = '####updated per insert trigger####';
 
15114
SET @counter = @counter + 1;
 
15115
END|
 
15116
SET @counter = 1;
 
15117
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15118
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
15119
SELECT CAST(f_int1 AS CHAR),
 
15120
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15121
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15122
ORDER BY f_int1;
 
15123
DROP TRIGGER trg_3;
 
15124
        
 
15125
# check trigger-12 success:     1
 
15126
DELETE FROM t1
 
15127
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15128
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15129
AND f_charbig = '####updated per insert trigger####';
 
15130
ANALYZE  TABLE t1;
 
15131
Table   Op      Msg_type        Msg_text
 
15132
test.t1 analyze status  OK
 
15133
CHECK    TABLE t1 EXTENDED;
 
15134
Table   Op      Msg_type        Msg_text
 
15135
test.t1 check   status  OK
 
15136
CHECKSUM TABLE t1 EXTENDED;
 
15137
Table   Checksum
 
15138
test.t1 <some_value>
 
15139
OPTIMIZE TABLE t1;
 
15140
Table   Op      Msg_type        Msg_text
 
15141
test.t1 optimize        status  OK
 
15142
# check layout success:    1
 
15143
REPAIR   TABLE t1 EXTENDED;
 
15144
Table   Op      Msg_type        Msg_text
 
15145
test.t1 repair  status  OK
 
15146
# check layout success:    1
 
15147
TRUNCATE t1;
 
15148
        
 
15149
# check TRUNCATE success:       1
 
15150
# check layout success:    1
 
15151
# End usability test (inc/partition_check.inc)
 
15152
DROP TABLE t1;
 
15153
CREATE TABLE t1 (
 
15154
f_int1 INTEGER,
 
15155
f_int2 INTEGER,
 
15156
f_char1 CHAR(20),
 
15157
f_char2 CHAR(20),
 
15158
f_charbig VARCHAR(1000)
 
15159
 
 
15160
)
 
15161
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
15162
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
15163
(PARTITION part_1 VALUES IN (0),
 
15164
 PARTITION part_2 VALUES IN (1),
 
15165
 PARTITION part_3 VALUES IN (NULL));
 
15166
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15167
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15168
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15169
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
 
15170
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15171
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15172
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15173
# Start usability test (inc/partition_check.inc)
 
15174
create_command
 
15175
SHOW CREATE TABLE t1;
 
15176
Table   Create Table
 
15177
t1      CREATE TABLE `t1` (
 
15178
  `f_int1` int(11) DEFAULT NULL,
 
15179
  `f_int2` int(11) DEFAULT NULL,
 
15180
  `f_char1` char(20) DEFAULT NULL,
 
15181
  `f_char2` char(20) DEFAULT NULL,
 
15182
  `f_charbig` varchar(1000) DEFAULT NULL
 
15183
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */
 
15184
 
 
15185
unified filelist
 
15186
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
15187
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
15188
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
15189
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
15190
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYD
 
15191
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYI
 
15192
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
15193
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
15194
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
15195
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
15196
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYD
 
15197
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYI
 
15198
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
15199
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
15200
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
15201
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
15202
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYD
 
15203
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYI
 
15204
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
15205
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
15206
 
 
15207
# check prerequisites-1 success:    1
 
15208
# check COUNT(*) success:    1
 
15209
# check MIN/MAX(f_int1) success:    1
 
15210
# check MIN/MAX(f_int2) success:    1
 
15211
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15212
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15213
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
15214
WHERE f_int1 IN (2,3);
 
15215
# check prerequisites-3 success:    1
 
15216
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
15217
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
15218
# check read via f_int1 success: 1
 
15219
# check read via f_int2 success: 1
 
15220
        
 
15221
# check multiple-1 success:     1
 
15222
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
15223
        
 
15224
# check multiple-2 success:     1
 
15225
INSERT INTO t1 SELECT * FROM t0_template
 
15226
WHERE MOD(f_int1,3) = 0;
 
15227
        
 
15228
# check multiple-3 success:     1
 
15229
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
15230
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
15231
AND @max_row_div2 + @max_row_div4;
 
15232
        
 
15233
# check multiple-4 success:     1
 
15234
DELETE FROM t1
 
15235
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
15236
AND @max_row_div2 + @max_row_div4 + @max_row;
 
15237
        
 
15238
# check multiple-5 success:     1
 
15239
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
15240
INSERT INTO t1
 
15241
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15242
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15243
f_charbig = '#SINGLE#';
 
15244
        
 
15245
# check single-1 success:       1
 
15246
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
15247
INSERT INTO t1
 
15248
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
15249
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
15250
f_charbig = '#SINGLE#';
 
15251
        
 
15252
# check single-2 success:       1
 
15253
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
15254
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
15255
UPDATE t1 SET f_int1 = @cur_value2
 
15256
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
15257
        
 
15258
# check single-3 success:       1
 
15259
SET @cur_value1= -1;
 
15260
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
15261
UPDATE t1 SET f_int1 = @cur_value1
 
15262
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
15263
        
 
15264
# check single-4 success:       1
 
15265
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
15266
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
15267
        
 
15268
# check single-5 success:       1
 
15269
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
15270
        
 
15271
# check single-6 success:       1
 
15272
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
15273
        
 
15274
# check single-7 success:       1
 
15275
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
15276
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
15277
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
15278
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
15279
f_charbig = '#NULL#';
 
15280
INSERT INTO t1
 
15281
SET f_int1 = NULL , f_int2 = -@max_row,
 
15282
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
15283
f_charbig = '#NULL#';
 
15284
# check null success:    1
 
15285
        
 
15286
# check null-1 success:         1
 
15287
UPDATE t1 SET f_int1 = -@max_row
 
15288
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15289
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15290
        
 
15291
# check null-2 success:         1
 
15292
UPDATE t1 SET f_int1 = NULL
 
15293
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15294
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15295
        
 
15296
# check null-3 success:         1
 
15297
DELETE FROM t1
 
15298
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
15299
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
15300
        
 
15301
# check null-4 success:         1
 
15302
DELETE FROM t1
 
15303
WHERE f_int1 = 0 AND f_int2 = 0
 
15304
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
15305
AND f_charbig = '#NULL#';
 
15306
SET AUTOCOMMIT= 0;
 
15307
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15308
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15309
FROM t0_template source_tab
 
15310
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15311
        
 
15312
# check transactions-1 success:         1
 
15313
COMMIT WORK;
 
15314
        
 
15315
# check transactions-2 success:         1
 
15316
ROLLBACK WORK;
 
15317
        
 
15318
# check transactions-3 success:         1
 
15319
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15320
COMMIT WORK;
 
15321
ROLLBACK WORK;
 
15322
        
 
15323
# check transactions-4 success:         1
 
15324
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15325
SELECT f_int1, f_int1, '', '', 'was inserted'
 
15326
FROM t0_template source_tab
 
15327
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15328
        
 
15329
# check transactions-5 success:         1
 
15330
ROLLBACK WORK;
 
15331
Warnings:
 
15332
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
15333
        
 
15334
# check transactions-6 success:         1
 
15335
# INFO: Storage engine used for t1 seems to be not transactional.
 
15336
COMMIT;
 
15337
        
 
15338
# check transactions-7 success:         1
 
15339
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15340
COMMIT WORK;
 
15341
SET @@session.sql_mode = 'traditional';
 
15342
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
15343
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15344
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
15345
'', '', 'was inserted' FROM t0_template
 
15346
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
15347
ERROR 22012: Division by 0
 
15348
COMMIT;
 
15349
        
 
15350
# check transactions-8 success:         1
 
15351
# INFO: Storage engine used for t1 seems to be unable to revert
 
15352
#       changes made by the failing statement.
 
15353
SET @@session.sql_mode = '';
 
15354
SET AUTOCOMMIT= 1;
 
15355
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
15356
COMMIT WORK;
 
15357
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
15358
        
 
15359
# check special-1 success:      1
 
15360
UPDATE t1 SET f_charbig = '';
 
15361
        
 
15362
# check special-2 success:      1
 
15363
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
15364
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15365
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
15366
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15367
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15368
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15369
'just inserted' FROM t0_template
 
15370
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15371
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
15372
BEGIN
 
15373
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15374
f_charbig = 'updated by trigger'
 
15375
      WHERE f_int1 = new.f_int1;
 
15376
END|
 
15377
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15378
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15379
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15380
        
 
15381
# check trigger-1 success:      1
 
15382
DROP TRIGGER trg_1;
 
15383
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15384
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15385
f_charbig = 'just inserted'
 
15386
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15387
DELETE FROM t0_aux
 
15388
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15389
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15390
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15391
'just inserted' FROM t0_template
 
15392
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15393
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
15394
BEGIN
 
15395
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15396
f_charbig = 'updated by trigger'
 
15397
      WHERE f_int1 = new.f_int1;
 
15398
END|
 
15399
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15400
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
15401
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15402
        
 
15403
# check trigger-2 success:      1
 
15404
DROP TRIGGER trg_1;
 
15405
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15406
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15407
f_charbig = 'just inserted'
 
15408
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15409
DELETE FROM t0_aux
 
15410
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15411
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15412
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15413
'just inserted' FROM t0_template
 
15414
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15415
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15416
BEGIN
 
15417
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15418
f_charbig = 'updated by trigger'
 
15419
      WHERE f_int1 = new.f_int1;
 
15420
END|
 
15421
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15422
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15423
        
 
15424
# check trigger-3 success:      1
 
15425
DROP TRIGGER trg_1;
 
15426
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15427
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15428
f_charbig = 'just inserted'
 
15429
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15430
DELETE FROM t0_aux
 
15431
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15432
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15433
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15434
'just inserted' FROM t0_template
 
15435
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15436
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
15437
BEGIN
 
15438
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15439
f_charbig = 'updated by trigger'
 
15440
      WHERE f_int1 = - old.f_int1;
 
15441
END|
 
15442
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15443
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15444
        
 
15445
# check trigger-4 success:      1
 
15446
DROP TRIGGER trg_1;
 
15447
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15448
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15449
f_charbig = 'just inserted'
 
15450
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15451
DELETE FROM t0_aux
 
15452
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15453
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15454
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15455
'just inserted' FROM t0_template
 
15456
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15457
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15458
BEGIN
 
15459
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15460
f_charbig = 'updated by trigger'
 
15461
      WHERE f_int1 = new.f_int1;
 
15462
END|
 
15463
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15464
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15465
        
 
15466
# check trigger-5 success:      1
 
15467
DROP TRIGGER trg_1;
 
15468
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15469
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15470
f_charbig = 'just inserted'
 
15471
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15472
DELETE FROM t0_aux
 
15473
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15474
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15475
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15476
'just inserted' FROM t0_template
 
15477
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15478
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
15479
BEGIN
 
15480
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15481
f_charbig = 'updated by trigger'
 
15482
      WHERE f_int1 = - old.f_int1;
 
15483
END|
 
15484
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
15485
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15486
        
 
15487
# check trigger-6 success:      1
 
15488
DROP TRIGGER trg_1;
 
15489
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15490
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15491
f_charbig = 'just inserted'
 
15492
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15493
DELETE FROM t0_aux
 
15494
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15495
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15496
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15497
'just inserted' FROM t0_template
 
15498
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15499
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
15500
BEGIN
 
15501
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15502
f_charbig = 'updated by trigger'
 
15503
      WHERE f_int1 = - old.f_int1;
 
15504
END|
 
15505
DELETE FROM t0_aux
 
15506
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15507
        
 
15508
# check trigger-7 success:      1
 
15509
DROP TRIGGER trg_1;
 
15510
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15511
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15512
f_charbig = 'just inserted'
 
15513
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15514
DELETE FROM t0_aux
 
15515
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15516
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15517
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
15518
'just inserted' FROM t0_template
 
15519
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15520
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
15521
BEGIN
 
15522
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
15523
f_charbig = 'updated by trigger'
 
15524
      WHERE f_int1 = - old.f_int1;
 
15525
END|
 
15526
DELETE FROM t0_aux
 
15527
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
15528
        
 
15529
# check trigger-8 success:      1
 
15530
DROP TRIGGER trg_1;
 
15531
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15532
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15533
f_charbig = 'just inserted'
 
15534
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
15535
DELETE FROM t0_aux
 
15536
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15537
DELETE FROM t1
 
15538
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
15539
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15540
BEGIN
 
15541
SET new.f_int1 = old.f_int1 + @max_row,
 
15542
new.f_int2 = old.f_int2 - @max_row,
 
15543
new.f_charbig = '####updated per update trigger####';
 
15544
END|
 
15545
UPDATE t1
 
15546
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15547
f_charbig = '####updated per update statement itself####';
 
15548
        
 
15549
# check trigger-9 success:      1
 
15550
DROP TRIGGER trg_2;
 
15551
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15552
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15553
f_charbig = CONCAT('===',f_char1,'===');
 
15554
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
15555
BEGIN
 
15556
SET new.f_int1 = new.f_int1 + @max_row,
 
15557
new.f_int2 = new.f_int2 - @max_row,
 
15558
new.f_charbig = '####updated per update trigger####';
 
15559
END|
 
15560
UPDATE t1
 
15561
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
15562
f_charbig = '####updated per update statement itself####';
 
15563
        
 
15564
# check trigger-10 success:     1
 
15565
DROP TRIGGER trg_2;
 
15566
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
15567
f_int2 = CAST(f_char1 AS SIGNED INT),
 
15568
f_charbig = CONCAT('===',f_char1,'===');
 
15569
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15570
BEGIN
 
15571
SET new.f_int1 = @my_max1 + @counter,
 
15572
new.f_int2 = @my_min2 - @counter,
 
15573
new.f_charbig = '####updated per insert trigger####';
 
15574
SET @counter = @counter + 1;
 
15575
END|
 
15576
SET @counter = 1;
 
15577
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15578
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
15579
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
15580
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15582
ORDER BY f_int1;
 
15583
DROP TRIGGER trg_3;
 
15584
        
 
15585
# check trigger-11 success:     1
 
15586
DELETE FROM t1
 
15587
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15588
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15589
AND f_charbig = '####updated per insert trigger####';
 
15590
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
15591
BEGIN
 
15592
SET new.f_int1 = @my_max1 + @counter,
 
15593
new.f_int2 = @my_min2 - @counter,
 
15594
new.f_charbig = '####updated per insert trigger####';
 
15595
SET @counter = @counter + 1;
 
15596
END|
 
15597
SET @counter = 1;
 
15598
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
15599
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
15600
SELECT CAST(f_int1 AS CHAR),
 
15601
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
15602
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
15603
ORDER BY f_int1;
 
15604
DROP TRIGGER trg_3;
 
15605
        
 
15606
# check trigger-12 success:     1
 
15607
DELETE FROM t1
 
15608
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
15609
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
15610
AND f_charbig = '####updated per insert trigger####';
 
15611
ANALYZE  TABLE t1;
 
15612
Table   Op      Msg_type        Msg_text
 
15613
test.t1 analyze status  OK
 
15614
CHECK    TABLE t1 EXTENDED;
 
15615
Table   Op      Msg_type        Msg_text
 
15616
test.t1 check   status  OK
 
15617
CHECKSUM TABLE t1 EXTENDED;
 
15618
Table   Checksum
 
15619
test.t1 <some_value>
 
15620
OPTIMIZE TABLE t1;
 
15621
Table   Op      Msg_type        Msg_text
 
15622
test.t1 optimize        status  OK
 
15623
# check layout success:    1
 
15624
REPAIR   TABLE t1 EXTENDED;
 
15625
Table   Op      Msg_type        Msg_text
 
15626
test.t1 repair  status  OK
 
15627
# check layout success:    1
 
15628
TRUNCATE t1;
 
15629
        
 
15630
# check TRUNCATE success:       1
 
15631
# check layout success:    1
 
15632
# End usability test (inc/partition_check.inc)
 
15633
DROP TABLE t1;
 
15634
#  2.3 ALTER ... CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15635
DROP TABLE IF EXISTS t1;
 
15636
CREATE TABLE t1 (
 
15637
f_int1 INTEGER,
 
15638
f_int2 INTEGER,
 
15639
f_char1 CHAR(20),
 
15640
f_char2 CHAR(20),
 
15641
f_charbig VARCHAR(1000)
 
15642
 
 
15643
)
 
15644
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
15645
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15646
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15647
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15648
ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15649
ERROR HY000: Error in list of partitions to CHECK
 
15650
DROP TABLE t1;
 
15651
CREATE TABLE t1 (
 
15652
f_int1 INTEGER,
 
15653
f_int2 INTEGER,
 
15654
f_char1 CHAR(20),
 
15655
f_char2 CHAR(20),
 
15656
f_charbig VARCHAR(1000)
 
15657
 
 
15658
)
 
15659
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
15660
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15661
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15662
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15663
ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15664
ERROR HY000: Error in list of partitions to CHECK
 
15665
DROP TABLE t1;
 
15666
CREATE TABLE t1 (
 
15667
f_int1 INTEGER,
 
15668
f_int2 INTEGER,
 
15669
f_char1 CHAR(20),
 
15670
f_char2 CHAR(20),
 
15671
f_charbig VARCHAR(1000)
 
15672
 
 
15673
)
 
15674
PARTITION BY LIST(MOD(f_int1,4))
 
15675
(PARTITION part_3 VALUES IN (-3),
 
15676
PARTITION part_2 VALUES IN (-2),
 
15677
PARTITION part_1 VALUES IN (-1),
 
15678
PARTITION part_N VALUES IN (NULL),
 
15679
PARTITION part0 VALUES IN (0),
 
15680
PARTITION part1 VALUES IN (1),
 
15681
PARTITION part2 VALUES IN (2),
 
15682
PARTITION part3 VALUES IN (3));
 
15683
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15684
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15685
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15686
ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15687
ERROR HY000: Error in list of partitions to CHECK
 
15688
DROP TABLE t1;
 
15689
CREATE TABLE t1 (
 
15690
f_int1 INTEGER,
 
15691
f_int2 INTEGER,
 
15692
f_char1 CHAR(20),
 
15693
f_char2 CHAR(20),
 
15694
f_charbig VARCHAR(1000)
 
15695
 
 
15696
)
 
15697
PARTITION BY RANGE(f_int1)
 
15698
(PARTITION parta VALUES LESS THAN (0),
 
15699
PARTITION part_1 VALUES LESS THAN (5),
 
15700
PARTITION part_2 VALUES LESS THAN (10),
 
15701
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
15702
PARTITION part_4 VALUES LESS THAN (20),
 
15703
PARTITION part_5 VALUES LESS THAN (2147483646));
 
15704
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15705
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15706
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15707
ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15708
ERROR HY000: Error in list of partitions to CHECK
 
15709
DROP TABLE t1;
 
15710
CREATE TABLE t1 (
 
15711
f_int1 INTEGER,
 
15712
f_int2 INTEGER,
 
15713
f_char1 CHAR(20),
 
15714
f_char2 CHAR(20),
 
15715
f_charbig VARCHAR(1000)
 
15716
 
 
15717
)
 
15718
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
15719
(PARTITION part_1 VALUES LESS THAN (0),
 
15720
PARTITION part_2 VALUES LESS THAN (5),
 
15721
PARTITION part_3 VALUES LESS THAN (10),
 
15722
PARTITION part_4 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 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15727
ERROR HY000: Error in list of partitions to CHECK
 
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) SUBPARTITION BY KEY(f_int1)
 
15738
(PARTITION part_1 VALUES LESS THAN (0)
 
15739
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
15740
PARTITION part_2 VALUES LESS THAN (5)
 
15741
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
15742
PARTITION part_3 VALUES LESS THAN (10)
 
15743
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
15744
PARTITION part_4 VALUES LESS THAN (2147483646)
 
15745
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
15746
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15747
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15748
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15749
ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15750
ERROR HY000: Error in list of partitions to CHECK
 
15751
DROP TABLE t1;
 
15752
CREATE TABLE t1 (
 
15753
f_int1 INTEGER,
 
15754
f_int2 INTEGER,
 
15755
f_char1 CHAR(20),
 
15756
f_char2 CHAR(20),
 
15757
f_charbig VARCHAR(1000)
 
15758
 
 
15759
)
 
15760
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
15761
(PARTITION part_1 VALUES IN (0)
 
15762
(SUBPARTITION sp11, SUBPARTITION sp12),
 
15763
PARTITION part_2 VALUES IN (1)
 
15764
(SUBPARTITION sp21, SUBPARTITION sp22),
 
15765
PARTITION part_3 VALUES IN (2)
 
15766
(SUBPARTITION sp31, SUBPARTITION sp32),
 
15767
PARTITION part_4 VALUES IN (NULL)
 
15768
(SUBPARTITION sp41, SUBPARTITION sp42));
 
15769
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15770
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15771
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15772
ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15773
ERROR HY000: Error in list of partitions to CHECK
 
15774
DROP TABLE t1;
 
15775
CREATE TABLE t1 (
 
15776
f_int1 INTEGER,
 
15777
f_int2 INTEGER,
 
15778
f_char1 CHAR(20),
 
15779
f_char2 CHAR(20),
 
15780
f_charbig VARCHAR(1000)
 
15781
 
 
15782
)
 
15783
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
15784
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
15785
(PARTITION part_1 VALUES IN (0),
 
15786
 PARTITION part_2 VALUES IN (1),
 
15787
 PARTITION part_3 VALUES IN (NULL));
 
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 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
 
15792
ERROR HY000: Error in list of partitions to CHECK
 
15793
DROP TABLE t1;
 
15794
#  2.4 ALTER ... CHECK PARTITION part_1,part_1,part_1;
 
15795
DROP TABLE IF EXISTS t1;
 
15796
CREATE TABLE t1 (
 
15797
f_int1 INTEGER,
 
15798
f_int2 INTEGER,
 
15799
f_char1 CHAR(20),
 
15800
f_char2 CHAR(20),
 
15801
f_charbig VARCHAR(1000)
 
15802
 
 
15803
)
 
15804
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
15805
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15806
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15807
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15808
ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
 
15809
ERROR HY000: Error in list of partitions to CHECK
 
15810
DROP TABLE t1;
 
15811
CREATE TABLE t1 (
 
15812
f_int1 INTEGER,
 
15813
f_int2 INTEGER,
 
15814
f_char1 CHAR(20),
 
15815
f_char2 CHAR(20),
 
15816
f_charbig VARCHAR(1000)
 
15817
 
 
15818
)
 
15819
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
15820
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15821
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15822
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15823
ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
 
15824
ERROR HY000: Error in list of partitions to CHECK
 
15825
DROP TABLE t1;
 
15826
CREATE TABLE t1 (
 
15827
f_int1 INTEGER,
 
15828
f_int2 INTEGER,
 
15829
f_char1 CHAR(20),
 
15830
f_char2 CHAR(20),
 
15831
f_charbig VARCHAR(1000)
 
15832
 
 
15833
)
 
15834
PARTITION BY LIST(MOD(f_int1,4))
 
15835
(PARTITION part_3 VALUES IN (-3),
 
15836
PARTITION part_2 VALUES IN (-2),
 
15837
PARTITION part_1 VALUES IN (-1),
 
15838
PARTITION part_N VALUES IN (NULL),
 
15839
PARTITION part0 VALUES IN (0),
 
15840
PARTITION part1 VALUES IN (1),
 
15841
PARTITION part2 VALUES IN (2),
 
15842
PARTITION part3 VALUES IN (3));
 
15843
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15844
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15845
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15846
ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
 
15847
ERROR HY000: Error in list of partitions to CHECK
 
15848
DROP TABLE t1;
 
15849
CREATE TABLE t1 (
 
15850
f_int1 INTEGER,
 
15851
f_int2 INTEGER,
 
15852
f_char1 CHAR(20),
 
15853
f_char2 CHAR(20),
 
15854
f_charbig VARCHAR(1000)
 
15855
 
 
15856
)
 
15857
PARTITION BY RANGE(f_int1)
 
15858
(PARTITION parta VALUES LESS THAN (0),
 
15859
PARTITION part_1 VALUES LESS THAN (5),
 
15860
PARTITION part_2 VALUES LESS THAN (10),
 
15861
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
15862
PARTITION part_4 VALUES LESS THAN (20),
 
15863
PARTITION part_5 VALUES LESS THAN (2147483646));
 
15864
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15865
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15866
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15867
ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
 
15868
ERROR HY000: Error in list of partitions to CHECK
 
15869
DROP TABLE t1;
 
15870
CREATE TABLE t1 (
 
15871
f_int1 INTEGER,
 
15872
f_int2 INTEGER,
 
15873
f_char1 CHAR(20),
 
15874
f_char2 CHAR(20),
 
15875
f_charbig VARCHAR(1000)
 
15876
 
 
15877
)
 
15878
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
15879
(PARTITION part_1 VALUES LESS THAN (0),
 
15880
PARTITION part_2 VALUES LESS THAN (5),
 
15881
PARTITION part_3 VALUES LESS THAN (10),
 
15882
PARTITION part_4 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 CHECK PARTITION part_1,part_1,part_1;
 
15887
ERROR HY000: Error in list of partitions to CHECK
 
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) SUBPARTITION BY KEY(f_int1)
 
15898
(PARTITION part_1 VALUES LESS THAN (0)
 
15899
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
15900
PARTITION part_2 VALUES LESS THAN (5)
 
15901
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
15902
PARTITION part_3 VALUES LESS THAN (10)
 
15903
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
15904
PARTITION part_4 VALUES LESS THAN (2147483646)
 
15905
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
15906
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15907
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15908
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15909
ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
 
15910
ERROR HY000: Error in list of partitions to CHECK
 
15911
DROP TABLE t1;
 
15912
CREATE TABLE t1 (
 
15913
f_int1 INTEGER,
 
15914
f_int2 INTEGER,
 
15915
f_char1 CHAR(20),
 
15916
f_char2 CHAR(20),
 
15917
f_charbig VARCHAR(1000)
 
15918
 
 
15919
)
 
15920
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
15921
(PARTITION part_1 VALUES IN (0)
 
15922
(SUBPARTITION sp11, SUBPARTITION sp12),
 
15923
PARTITION part_2 VALUES IN (1)
 
15924
(SUBPARTITION sp21, SUBPARTITION sp22),
 
15925
PARTITION part_3 VALUES IN (2)
 
15926
(SUBPARTITION sp31, SUBPARTITION sp32),
 
15927
PARTITION part_4 VALUES IN (NULL)
 
15928
(SUBPARTITION sp41, SUBPARTITION sp42));
 
15929
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15930
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15931
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15932
ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
 
15933
ERROR HY000: Error in list of partitions to CHECK
 
15934
DROP TABLE t1;
 
15935
CREATE TABLE t1 (
 
15936
f_int1 INTEGER,
 
15937
f_int2 INTEGER,
 
15938
f_char1 CHAR(20),
 
15939
f_char2 CHAR(20),
 
15940
f_charbig VARCHAR(1000)
 
15941
 
 
15942
)
 
15943
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
15944
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
15945
(PARTITION part_1 VALUES IN (0),
 
15946
 PARTITION part_2 VALUES IN (1),
 
15947
 PARTITION part_3 VALUES IN (NULL));
 
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 CHECK PARTITION part_1,part_1,part_1;
 
15952
ERROR HY000: Error in list of partitions to CHECK
 
15953
DROP TABLE t1;
 
15954
#------------------------------------------------------------------------
 
15955
#  3   ALTER ... OPTIMIZE PARTITION
 
15956
#------------------------------------------------------------------------
 
15957
#  3.1 ALTER ... OPTIMIZE PARTITION part_1;
 
15958
DROP TABLE IF EXISTS t1;
 
15959
CREATE TABLE t1 (
 
15960
f_int1 INTEGER,
 
15961
f_int2 INTEGER,
 
15962
f_char1 CHAR(20),
 
15963
f_char2 CHAR(20),
 
15964
f_charbig VARCHAR(1000)
 
15965
 
 
15966
)
 
15967
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
15968
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15969
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15970
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
15971
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
 
15972
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
15973
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
15974
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
15975
# Start usability test (inc/partition_check.inc)
 
15976
create_command
 
15977
SHOW CREATE TABLE t1;
 
15978
Table   Create Table
 
15979
t1      CREATE TABLE `t1` (
 
15980
  `f_int1` int(11) DEFAULT NULL,
 
15981
  `f_int2` int(11) DEFAULT NULL,
 
15982
  `f_char1` char(20) DEFAULT NULL,
 
15983
  `f_char2` char(20) DEFAULT NULL,
 
15984
  `f_charbig` varchar(1000) DEFAULT NULL
 
15985
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */
 
15986
 
 
15987
unified filelist
 
15988
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
15989
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
15990
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
15991
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
15992
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
15993
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
15994
 
 
15995
# check prerequisites-1 success:    1
 
15996
# check COUNT(*) success:    1
 
15997
# check MIN/MAX(f_int1) success:    1
 
15998
# check MIN/MAX(f_int2) success:    1
 
15999
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16000
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16001
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
16002
WHERE f_int1 IN (2,3);
 
16003
# check prerequisites-3 success:    1
 
16004
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16005
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
16006
# check read via f_int1 success: 1
 
16007
# check read via f_int2 success: 1
 
16008
        
 
16009
# check multiple-1 success:     1
 
16010
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
16011
        
 
16012
# check multiple-2 success:     1
 
16013
INSERT INTO t1 SELECT * FROM t0_template
 
16014
WHERE MOD(f_int1,3) = 0;
 
16015
        
 
16016
# check multiple-3 success:     1
 
16017
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
16018
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
16019
AND @max_row_div2 + @max_row_div4;
 
16020
        
 
16021
# check multiple-4 success:     1
 
16022
DELETE FROM t1
 
16023
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
16024
AND @max_row_div2 + @max_row_div4 + @max_row;
 
16025
        
 
16026
# check multiple-5 success:     1
 
16027
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
16028
INSERT INTO t1
 
16029
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16030
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16031
f_charbig = '#SINGLE#';
 
16032
        
 
16033
# check single-1 success:       1
 
16034
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
16035
INSERT INTO t1
 
16036
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16037
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16038
f_charbig = '#SINGLE#';
 
16039
        
 
16040
# check single-2 success:       1
 
16041
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
16042
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
16043
UPDATE t1 SET f_int1 = @cur_value2
 
16044
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
16045
        
 
16046
# check single-3 success:       1
 
16047
SET @cur_value1= -1;
 
16048
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
16049
UPDATE t1 SET f_int1 = @cur_value1
 
16050
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
16051
        
 
16052
# check single-4 success:       1
 
16053
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
16054
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
16055
        
 
16056
# check single-5 success:       1
 
16057
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
16058
        
 
16059
# check single-6 success:       1
 
16060
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
16061
        
 
16062
# check single-7 success:       1
 
16063
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
16064
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
16065
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
16066
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
16067
f_charbig = '#NULL#';
 
16068
INSERT INTO t1
 
16069
SET f_int1 = NULL , f_int2 = -@max_row,
 
16070
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
16071
f_charbig = '#NULL#';
 
16072
# check null success:    1
 
16073
        
 
16074
# check null-1 success:         1
 
16075
UPDATE t1 SET f_int1 = -@max_row
 
16076
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16077
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16078
        
 
16079
# check null-2 success:         1
 
16080
UPDATE t1 SET f_int1 = NULL
 
16081
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16082
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16083
        
 
16084
# check null-3 success:         1
 
16085
DELETE FROM t1
 
16086
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16087
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16088
        
 
16089
# check null-4 success:         1
 
16090
DELETE FROM t1
 
16091
WHERE f_int1 = 0 AND f_int2 = 0
 
16092
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
16093
AND f_charbig = '#NULL#';
 
16094
SET AUTOCOMMIT= 0;
 
16095
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16096
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16097
FROM t0_template source_tab
 
16098
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16099
        
 
16100
# check transactions-1 success:         1
 
16101
COMMIT WORK;
 
16102
        
 
16103
# check transactions-2 success:         1
 
16104
ROLLBACK WORK;
 
16105
        
 
16106
# check transactions-3 success:         1
 
16107
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16108
COMMIT WORK;
 
16109
ROLLBACK WORK;
 
16110
        
 
16111
# check transactions-4 success:         1
 
16112
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16113
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16114
FROM t0_template source_tab
 
16115
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16116
        
 
16117
# check transactions-5 success:         1
 
16118
ROLLBACK WORK;
 
16119
Warnings:
 
16120
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
16121
        
 
16122
# check transactions-6 success:         1
 
16123
# INFO: Storage engine used for t1 seems to be not transactional.
 
16124
COMMIT;
 
16125
        
 
16126
# check transactions-7 success:         1
 
16127
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16128
COMMIT WORK;
 
16129
SET @@session.sql_mode = 'traditional';
 
16130
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
16131
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16132
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
16133
'', '', 'was inserted' FROM t0_template
 
16134
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16135
ERROR 22012: Division by 0
 
16136
COMMIT;
 
16137
        
 
16138
# check transactions-8 success:         1
 
16139
# INFO: Storage engine used for t1 seems to be unable to revert
 
16140
#       changes made by the failing statement.
 
16141
SET @@session.sql_mode = '';
 
16142
SET AUTOCOMMIT= 1;
 
16143
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16144
COMMIT WORK;
 
16145
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
16146
        
 
16147
# check special-1 success:      1
 
16148
UPDATE t1 SET f_charbig = '';
 
16149
        
 
16150
# check special-2 success:      1
 
16151
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
16152
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16153
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
16154
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16155
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16156
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16157
'just inserted' FROM t0_template
 
16158
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16159
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
16160
BEGIN
 
16161
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16162
f_charbig = 'updated by trigger'
 
16163
      WHERE f_int1 = new.f_int1;
 
16164
END|
 
16165
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16166
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16167
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16168
        
 
16169
# check trigger-1 success:      1
 
16170
DROP TRIGGER trg_1;
 
16171
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16172
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16173
f_charbig = 'just inserted'
 
16174
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16175
DELETE FROM t0_aux
 
16176
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16177
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16178
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16179
'just inserted' FROM t0_template
 
16180
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16181
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
16182
BEGIN
 
16183
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16184
f_charbig = 'updated by trigger'
 
16185
      WHERE f_int1 = new.f_int1;
 
16186
END|
 
16187
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16188
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16189
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16190
        
 
16191
# check trigger-2 success:      1
 
16192
DROP TRIGGER trg_1;
 
16193
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16194
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16195
f_charbig = 'just inserted'
 
16196
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16197
DELETE FROM t0_aux
 
16198
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16199
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16200
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16201
'just inserted' FROM t0_template
 
16202
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16203
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16204
BEGIN
 
16205
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16206
f_charbig = 'updated by trigger'
 
16207
      WHERE f_int1 = new.f_int1;
 
16208
END|
 
16209
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16210
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16211
        
 
16212
# check trigger-3 success:      1
 
16213
DROP TRIGGER trg_1;
 
16214
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16215
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16216
f_charbig = 'just inserted'
 
16217
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16218
DELETE FROM t0_aux
 
16219
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16220
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16221
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16222
'just inserted' FROM t0_template
 
16223
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16224
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16225
BEGIN
 
16226
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16227
f_charbig = 'updated by trigger'
 
16228
      WHERE f_int1 = - old.f_int1;
 
16229
END|
 
16230
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16231
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16232
        
 
16233
# check trigger-4 success:      1
 
16234
DROP TRIGGER trg_1;
 
16235
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16236
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16237
f_charbig = 'just inserted'
 
16238
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16239
DELETE FROM t0_aux
 
16240
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16241
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16242
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16243
'just inserted' FROM t0_template
 
16244
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16245
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16246
BEGIN
 
16247
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16248
f_charbig = 'updated by trigger'
 
16249
      WHERE f_int1 = new.f_int1;
 
16250
END|
 
16251
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16252
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16253
        
 
16254
# check trigger-5 success:      1
 
16255
DROP TRIGGER trg_1;
 
16256
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16257
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16258
f_charbig = 'just inserted'
 
16259
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16260
DELETE FROM t0_aux
 
16261
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16262
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16263
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16264
'just inserted' FROM t0_template
 
16265
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16266
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16267
BEGIN
 
16268
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16269
f_charbig = 'updated by trigger'
 
16270
      WHERE f_int1 = - old.f_int1;
 
16271
END|
 
16272
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16273
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16274
        
 
16275
# check trigger-6 success:      1
 
16276
DROP TRIGGER trg_1;
 
16277
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16278
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16279
f_charbig = 'just inserted'
 
16280
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16281
DELETE FROM t0_aux
 
16282
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16283
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16284
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16285
'just inserted' FROM t0_template
 
16286
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16287
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
16288
BEGIN
 
16289
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16290
f_charbig = 'updated by trigger'
 
16291
      WHERE f_int1 = - old.f_int1;
 
16292
END|
 
16293
DELETE FROM t0_aux
 
16294
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16295
        
 
16296
# check trigger-7 success:      1
 
16297
DROP TRIGGER trg_1;
 
16298
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16299
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16300
f_charbig = 'just inserted'
 
16301
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16302
DELETE FROM t0_aux
 
16303
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16304
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16305
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16306
'just inserted' FROM t0_template
 
16307
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16308
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
16309
BEGIN
 
16310
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16311
f_charbig = 'updated by trigger'
 
16312
      WHERE f_int1 = - old.f_int1;
 
16313
END|
 
16314
DELETE FROM t0_aux
 
16315
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16316
        
 
16317
# check trigger-8 success:      1
 
16318
DROP TRIGGER trg_1;
 
16319
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16320
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16321
f_charbig = 'just inserted'
 
16322
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16323
DELETE FROM t0_aux
 
16324
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16325
DELETE FROM t1
 
16326
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16327
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16328
BEGIN
 
16329
SET new.f_int1 = old.f_int1 + @max_row,
 
16330
new.f_int2 = old.f_int2 - @max_row,
 
16331
new.f_charbig = '####updated per update trigger####';
 
16332
END|
 
16333
UPDATE t1
 
16334
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16335
f_charbig = '####updated per update statement itself####';
 
16336
        
 
16337
# check trigger-9 success:      1
 
16338
DROP TRIGGER trg_2;
 
16339
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16340
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16341
f_charbig = CONCAT('===',f_char1,'===');
 
16342
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16343
BEGIN
 
16344
SET new.f_int1 = new.f_int1 + @max_row,
 
16345
new.f_int2 = new.f_int2 - @max_row,
 
16346
new.f_charbig = '####updated per update trigger####';
 
16347
END|
 
16348
UPDATE t1
 
16349
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16350
f_charbig = '####updated per update statement itself####';
 
16351
        
 
16352
# check trigger-10 success:     1
 
16353
DROP TRIGGER trg_2;
 
16354
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16355
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16356
f_charbig = CONCAT('===',f_char1,'===');
 
16357
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16358
BEGIN
 
16359
SET new.f_int1 = @my_max1 + @counter,
 
16360
new.f_int2 = @my_min2 - @counter,
 
16361
new.f_charbig = '####updated per insert trigger####';
 
16362
SET @counter = @counter + 1;
 
16363
END|
 
16364
SET @counter = 1;
 
16365
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16366
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16367
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16368
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16369
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16370
ORDER BY f_int1;
 
16371
DROP TRIGGER trg_3;
 
16372
        
 
16373
# check trigger-11 success:     1
 
16374
DELETE FROM t1
 
16375
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16376
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16377
AND f_charbig = '####updated per insert trigger####';
 
16378
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16379
BEGIN
 
16380
SET new.f_int1 = @my_max1 + @counter,
 
16381
new.f_int2 = @my_min2 - @counter,
 
16382
new.f_charbig = '####updated per insert trigger####';
 
16383
SET @counter = @counter + 1;
 
16384
END|
 
16385
SET @counter = 1;
 
16386
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16387
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
16388
SELECT CAST(f_int1 AS CHAR),
 
16389
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16390
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16391
ORDER BY f_int1;
 
16392
DROP TRIGGER trg_3;
 
16393
        
 
16394
# check trigger-12 success:     1
 
16395
DELETE FROM t1
 
16396
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16397
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16398
AND f_charbig = '####updated per insert trigger####';
 
16399
ANALYZE  TABLE t1;
 
16400
Table   Op      Msg_type        Msg_text
 
16401
test.t1 analyze status  OK
 
16402
CHECK    TABLE t1 EXTENDED;
 
16403
Table   Op      Msg_type        Msg_text
 
16404
test.t1 check   status  OK
 
16405
CHECKSUM TABLE t1 EXTENDED;
 
16406
Table   Checksum
 
16407
test.t1 <some_value>
 
16408
OPTIMIZE TABLE t1;
 
16409
Table   Op      Msg_type        Msg_text
 
16410
test.t1 optimize        status  OK
 
16411
# check layout success:    1
 
16412
REPAIR   TABLE t1 EXTENDED;
 
16413
Table   Op      Msg_type        Msg_text
 
16414
test.t1 repair  status  OK
 
16415
# check layout success:    1
 
16416
TRUNCATE t1;
 
16417
        
 
16418
# check TRUNCATE success:       1
 
16419
# check layout success:    1
 
16420
# End usability test (inc/partition_check.inc)
 
16421
DROP TABLE t1;
 
16422
CREATE TABLE t1 (
 
16423
f_int1 INTEGER,
 
16424
f_int2 INTEGER,
 
16425
f_char1 CHAR(20),
 
16426
f_char2 CHAR(20),
 
16427
f_charbig VARCHAR(1000)
 
16428
 
 
16429
)
 
16430
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
16431
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16432
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16433
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
16434
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
 
16435
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16436
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16437
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16438
# Start usability test (inc/partition_check.inc)
 
16439
create_command
 
16440
SHOW CREATE TABLE t1;
 
16441
Table   Create Table
 
16442
t1      CREATE TABLE `t1` (
 
16443
  `f_int1` int(11) DEFAULT NULL,
 
16444
  `f_int2` int(11) DEFAULT NULL,
 
16445
  `f_char1` char(20) DEFAULT NULL,
 
16446
  `f_char2` char(20) DEFAULT NULL,
 
16447
  `f_charbig` varchar(1000) DEFAULT NULL
 
16448
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */
 
16449
 
 
16450
unified filelist
 
16451
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
16452
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
16453
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
16454
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
16455
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
16456
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
16457
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
16458
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
16459
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
16460
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
16461
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
16462
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
16463
 
 
16464
# check prerequisites-1 success:    1
 
16465
# check COUNT(*) success:    1
 
16466
# check MIN/MAX(f_int1) success:    1
 
16467
# check MIN/MAX(f_int2) success:    1
 
16468
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16469
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16470
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
16471
WHERE f_int1 IN (2,3);
 
16472
# check prerequisites-3 success:    1
 
16473
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16474
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
16475
# check read via f_int1 success: 1
 
16476
# check read via f_int2 success: 1
 
16477
        
 
16478
# check multiple-1 success:     1
 
16479
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
16480
        
 
16481
# check multiple-2 success:     1
 
16482
INSERT INTO t1 SELECT * FROM t0_template
 
16483
WHERE MOD(f_int1,3) = 0;
 
16484
        
 
16485
# check multiple-3 success:     1
 
16486
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
16487
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
16488
AND @max_row_div2 + @max_row_div4;
 
16489
        
 
16490
# check multiple-4 success:     1
 
16491
DELETE FROM t1
 
16492
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
16493
AND @max_row_div2 + @max_row_div4 + @max_row;
 
16494
        
 
16495
# check multiple-5 success:     1
 
16496
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
16497
INSERT INTO t1
 
16498
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16499
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16500
f_charbig = '#SINGLE#';
 
16501
        
 
16502
# check single-1 success:       1
 
16503
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
16504
INSERT INTO t1
 
16505
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16506
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16507
f_charbig = '#SINGLE#';
 
16508
        
 
16509
# check single-2 success:       1
 
16510
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
16511
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
16512
UPDATE t1 SET f_int1 = @cur_value2
 
16513
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
16514
        
 
16515
# check single-3 success:       1
 
16516
SET @cur_value1= -1;
 
16517
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
16518
UPDATE t1 SET f_int1 = @cur_value1
 
16519
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
16520
        
 
16521
# check single-4 success:       1
 
16522
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
16523
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
16524
        
 
16525
# check single-5 success:       1
 
16526
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
16527
        
 
16528
# check single-6 success:       1
 
16529
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
16530
        
 
16531
# check single-7 success:       1
 
16532
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
16533
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
16534
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
16535
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
16536
f_charbig = '#NULL#';
 
16537
INSERT INTO t1
 
16538
SET f_int1 = NULL , f_int2 = -@max_row,
 
16539
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
16540
f_charbig = '#NULL#';
 
16541
# check null success:    1
 
16542
        
 
16543
# check null-1 success:         1
 
16544
UPDATE t1 SET f_int1 = -@max_row
 
16545
WHERE f_int1 IS NULL 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-2 success:         1
 
16549
UPDATE t1 SET f_int1 = NULL
 
16550
WHERE f_int1 = -@max_row 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-3 success:         1
 
16554
DELETE FROM t1
 
16555
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
16556
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
16557
        
 
16558
# check null-4 success:         1
 
16559
DELETE FROM t1
 
16560
WHERE f_int1 = 0 AND f_int2 = 0
 
16561
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
16562
AND f_charbig = '#NULL#';
 
16563
SET AUTOCOMMIT= 0;
 
16564
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16565
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16566
FROM t0_template source_tab
 
16567
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16568
        
 
16569
# check transactions-1 success:         1
 
16570
COMMIT WORK;
 
16571
        
 
16572
# check transactions-2 success:         1
 
16573
ROLLBACK WORK;
 
16574
        
 
16575
# check transactions-3 success:         1
 
16576
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16577
COMMIT WORK;
 
16578
ROLLBACK WORK;
 
16579
        
 
16580
# check transactions-4 success:         1
 
16581
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16582
SELECT f_int1, f_int1, '', '', 'was inserted'
 
16583
FROM t0_template source_tab
 
16584
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16585
        
 
16586
# check transactions-5 success:         1
 
16587
ROLLBACK WORK;
 
16588
Warnings:
 
16589
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
16590
        
 
16591
# check transactions-6 success:         1
 
16592
# INFO: Storage engine used for t1 seems to be not transactional.
 
16593
COMMIT;
 
16594
        
 
16595
# check transactions-7 success:         1
 
16596
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16597
COMMIT WORK;
 
16598
SET @@session.sql_mode = 'traditional';
 
16599
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
16600
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16601
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
16602
'', '', 'was inserted' FROM t0_template
 
16603
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
16604
ERROR 22012: Division by 0
 
16605
COMMIT;
 
16606
        
 
16607
# check transactions-8 success:         1
 
16608
# INFO: Storage engine used for t1 seems to be unable to revert
 
16609
#       changes made by the failing statement.
 
16610
SET @@session.sql_mode = '';
 
16611
SET AUTOCOMMIT= 1;
 
16612
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
16613
COMMIT WORK;
 
16614
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
16615
        
 
16616
# check special-1 success:      1
 
16617
UPDATE t1 SET f_charbig = '';
 
16618
        
 
16619
# check special-2 success:      1
 
16620
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
16621
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16622
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
16623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16624
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16625
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16626
'just inserted' FROM t0_template
 
16627
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16628
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
16629
BEGIN
 
16630
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16631
f_charbig = 'updated by trigger'
 
16632
      WHERE f_int1 = new.f_int1;
 
16633
END|
 
16634
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16635
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16636
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16637
        
 
16638
# check trigger-1 success:      1
 
16639
DROP TRIGGER trg_1;
 
16640
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16641
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16642
f_charbig = 'just inserted'
 
16643
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16644
DELETE FROM t0_aux
 
16645
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16646
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16647
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16648
'just inserted' FROM t0_template
 
16649
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16650
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
16651
BEGIN
 
16652
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16653
f_charbig = 'updated by trigger'
 
16654
      WHERE f_int1 = new.f_int1;
 
16655
END|
 
16656
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16657
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
16658
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16659
        
 
16660
# check trigger-2 success:      1
 
16661
DROP TRIGGER trg_1;
 
16662
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16663
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16664
f_charbig = 'just inserted'
 
16665
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16666
DELETE FROM t0_aux
 
16667
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16668
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16669
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16670
'just inserted' FROM t0_template
 
16671
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16672
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16673
BEGIN
 
16674
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16675
f_charbig = 'updated by trigger'
 
16676
      WHERE f_int1 = new.f_int1;
 
16677
END|
 
16678
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16679
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16680
        
 
16681
# check trigger-3 success:      1
 
16682
DROP TRIGGER trg_1;
 
16683
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16684
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16685
f_charbig = 'just inserted'
 
16686
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16687
DELETE FROM t0_aux
 
16688
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16689
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16690
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16691
'just inserted' FROM t0_template
 
16692
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16693
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
16694
BEGIN
 
16695
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16696
f_charbig = 'updated by trigger'
 
16697
      WHERE f_int1 = - old.f_int1;
 
16698
END|
 
16699
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16700
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16701
        
 
16702
# check trigger-4 success:      1
 
16703
DROP TRIGGER trg_1;
 
16704
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16705
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16706
f_charbig = 'just inserted'
 
16707
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16708
DELETE FROM t0_aux
 
16709
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16710
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16711
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16712
'just inserted' FROM t0_template
 
16713
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16714
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16715
BEGIN
 
16716
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16717
f_charbig = 'updated by trigger'
 
16718
      WHERE f_int1 = new.f_int1;
 
16719
END|
 
16720
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16721
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16722
        
 
16723
# check trigger-5 success:      1
 
16724
DROP TRIGGER trg_1;
 
16725
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16726
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16727
f_charbig = 'just inserted'
 
16728
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16729
DELETE FROM t0_aux
 
16730
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16731
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16732
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16733
'just inserted' FROM t0_template
 
16734
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16735
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
16736
BEGIN
 
16737
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16738
f_charbig = 'updated by trigger'
 
16739
      WHERE f_int1 = - old.f_int1;
 
16740
END|
 
16741
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
16742
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16743
        
 
16744
# check trigger-6 success:      1
 
16745
DROP TRIGGER trg_1;
 
16746
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16747
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16748
f_charbig = 'just inserted'
 
16749
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16750
DELETE FROM t0_aux
 
16751
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16752
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16753
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16754
'just inserted' FROM t0_template
 
16755
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16756
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
16757
BEGIN
 
16758
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16759
f_charbig = 'updated by trigger'
 
16760
      WHERE f_int1 = - old.f_int1;
 
16761
END|
 
16762
DELETE FROM t0_aux
 
16763
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16764
        
 
16765
# check trigger-7 success:      1
 
16766
DROP TRIGGER trg_1;
 
16767
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16768
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16769
f_charbig = 'just inserted'
 
16770
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16771
DELETE FROM t0_aux
 
16772
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16773
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16774
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
16775
'just inserted' FROM t0_template
 
16776
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16777
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
16778
BEGIN
 
16779
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
16780
f_charbig = 'updated by trigger'
 
16781
      WHERE f_int1 = - old.f_int1;
 
16782
END|
 
16783
DELETE FROM t0_aux
 
16784
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
16785
        
 
16786
# check trigger-8 success:      1
 
16787
DROP TRIGGER trg_1;
 
16788
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16789
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16790
f_charbig = 'just inserted'
 
16791
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
16792
DELETE FROM t0_aux
 
16793
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16794
DELETE FROM t1
 
16795
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
16796
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16797
BEGIN
 
16798
SET new.f_int1 = old.f_int1 + @max_row,
 
16799
new.f_int2 = old.f_int2 - @max_row,
 
16800
new.f_charbig = '####updated per update trigger####';
 
16801
END|
 
16802
UPDATE t1
 
16803
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16804
f_charbig = '####updated per update statement itself####';
 
16805
        
 
16806
# check trigger-9 success:      1
 
16807
DROP TRIGGER trg_2;
 
16808
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16809
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16810
f_charbig = CONCAT('===',f_char1,'===');
 
16811
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
16812
BEGIN
 
16813
SET new.f_int1 = new.f_int1 + @max_row,
 
16814
new.f_int2 = new.f_int2 - @max_row,
 
16815
new.f_charbig = '####updated per update trigger####';
 
16816
END|
 
16817
UPDATE t1
 
16818
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
16819
f_charbig = '####updated per update statement itself####';
 
16820
        
 
16821
# check trigger-10 success:     1
 
16822
DROP TRIGGER trg_2;
 
16823
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
16824
f_int2 = CAST(f_char1 AS SIGNED INT),
 
16825
f_charbig = CONCAT('===',f_char1,'===');
 
16826
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16827
BEGIN
 
16828
SET new.f_int1 = @my_max1 + @counter,
 
16829
new.f_int2 = @my_min2 - @counter,
 
16830
new.f_charbig = '####updated per insert trigger####';
 
16831
SET @counter = @counter + 1;
 
16832
END|
 
16833
SET @counter = 1;
 
16834
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16835
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16836
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16837
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16838
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16839
ORDER BY f_int1;
 
16840
DROP TRIGGER trg_3;
 
16841
        
 
16842
# check trigger-11 success:     1
 
16843
DELETE FROM t1
 
16844
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16845
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16846
AND f_charbig = '####updated per insert trigger####';
 
16847
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
16848
BEGIN
 
16849
SET new.f_int1 = @my_max1 + @counter,
 
16850
new.f_int2 = @my_min2 - @counter,
 
16851
new.f_charbig = '####updated per insert trigger####';
 
16852
SET @counter = @counter + 1;
 
16853
END|
 
16854
SET @counter = 1;
 
16855
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
16856
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
16857
SELECT CAST(f_int1 AS CHAR),
 
16858
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
16859
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
16860
ORDER BY f_int1;
 
16861
DROP TRIGGER trg_3;
 
16862
        
 
16863
# check trigger-12 success:     1
 
16864
DELETE FROM t1
 
16865
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
16866
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
16867
AND f_charbig = '####updated per insert trigger####';
 
16868
ANALYZE  TABLE t1;
 
16869
Table   Op      Msg_type        Msg_text
 
16870
test.t1 analyze status  OK
 
16871
CHECK    TABLE t1 EXTENDED;
 
16872
Table   Op      Msg_type        Msg_text
 
16873
test.t1 check   status  OK
 
16874
CHECKSUM TABLE t1 EXTENDED;
 
16875
Table   Checksum
 
16876
test.t1 <some_value>
 
16877
OPTIMIZE TABLE t1;
 
16878
Table   Op      Msg_type        Msg_text
 
16879
test.t1 optimize        status  OK
 
16880
# check layout success:    1
 
16881
REPAIR   TABLE t1 EXTENDED;
 
16882
Table   Op      Msg_type        Msg_text
 
16883
test.t1 repair  status  OK
 
16884
# check layout success:    1
 
16885
TRUNCATE t1;
 
16886
        
 
16887
# check TRUNCATE success:       1
 
16888
# check layout success:    1
 
16889
# End usability test (inc/partition_check.inc)
 
16890
DROP TABLE t1;
 
16891
CREATE TABLE t1 (
 
16892
f_int1 INTEGER,
 
16893
f_int2 INTEGER,
 
16894
f_char1 CHAR(20),
 
16895
f_char2 CHAR(20),
 
16896
f_charbig VARCHAR(1000)
 
16897
 
 
16898
)
 
16899
PARTITION BY LIST(MOD(f_int1,4))
 
16900
(PARTITION part_3 VALUES IN (-3),
 
16901
PARTITION part_2 VALUES IN (-2),
 
16902
PARTITION part_1 VALUES IN (-1),
 
16903
PARTITION part_N VALUES IN (NULL),
 
16904
PARTITION part0 VALUES IN (0),
 
16905
PARTITION part1 VALUES IN (1),
 
16906
PARTITION part2 VALUES IN (2),
 
16907
PARTITION part3 VALUES IN (3));
 
16908
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16909
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16910
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
16911
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
 
16912
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
16913
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
16914
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
16915
# Start usability test (inc/partition_check.inc)
 
16916
create_command
 
16917
SHOW CREATE TABLE t1;
 
16918
Table   Create Table
 
16919
t1      CREATE TABLE `t1` (
 
16920
  `f_int1` int(11) DEFAULT NULL,
 
16921
  `f_int2` int(11) DEFAULT NULL,
 
16922
  `f_char1` char(20) DEFAULT NULL,
 
16923
  `f_char2` char(20) DEFAULT NULL,
 
16924
  `f_charbig` varchar(1000) DEFAULT NULL
 
16925
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
16926
 
 
16927
unified filelist
 
16928
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
16929
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
16930
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
16931
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
16932
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
16933
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
16934
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
16935
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
16936
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
16937
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
16938
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
16939
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
16940
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
16941
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
16942
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
16943
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
16944
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
16945
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
16946
 
 
16947
# check prerequisites-1 success:    1
 
16948
# check COUNT(*) success:    1
 
16949
# check MIN/MAX(f_int1) success:    1
 
16950
# check MIN/MAX(f_int2) success:    1
 
16951
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
16952
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
16953
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
16954
WHERE f_int1 IN (2,3);
 
16955
# check prerequisites-3 success:    1
 
16956
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
16957
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
16958
# check read via f_int1 success: 1
 
16959
# check read via f_int2 success: 1
 
16960
        
 
16961
# check multiple-1 success:     1
 
16962
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
16963
        
 
16964
# check multiple-2 success:     1
 
16965
INSERT INTO t1 SELECT * FROM t0_template
 
16966
WHERE MOD(f_int1,3) = 0;
 
16967
        
 
16968
# check multiple-3 success:     1
 
16969
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
16970
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
16971
AND @max_row_div2 + @max_row_div4;
 
16972
        
 
16973
# check multiple-4 success:     1
 
16974
DELETE FROM t1
 
16975
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
16976
AND @max_row_div2 + @max_row_div4 + @max_row;
 
16977
        
 
16978
# check multiple-5 success:     1
 
16979
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
16980
INSERT INTO t1
 
16981
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16982
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16983
f_charbig = '#SINGLE#';
 
16984
        
 
16985
# check single-1 success:       1
 
16986
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
16987
INSERT INTO t1
 
16988
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
16989
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
16990
f_charbig = '#SINGLE#';
 
16991
        
 
16992
# check single-2 success:       1
 
16993
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
16994
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
16995
UPDATE t1 SET f_int1 = @cur_value2
 
16996
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
16997
        
 
16998
# check single-3 success:       1
 
16999
SET @cur_value1= -1;
 
17000
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
17001
UPDATE t1 SET f_int1 = @cur_value1
 
17002
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
17003
        
 
17004
# check single-4 success:       1
 
17005
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
17006
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
17007
        
 
17008
# check single-5 success:       1
 
17009
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
17010
        
 
17011
# check single-6 success:       1
 
17012
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
17013
        
 
17014
# check single-7 success:       1
 
17015
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
17016
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
17017
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
17018
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
17019
f_charbig = '#NULL#';
 
17020
INSERT INTO t1
 
17021
SET f_int1 = NULL , f_int2 = -@max_row,
 
17022
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
17023
f_charbig = '#NULL#';
 
17024
# check null success:    1
 
17025
        
 
17026
# check null-1 success:         1
 
17027
UPDATE t1 SET f_int1 = -@max_row
 
17028
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17029
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17030
        
 
17031
# check null-2 success:         1
 
17032
UPDATE t1 SET f_int1 = NULL
 
17033
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17034
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17035
        
 
17036
# check null-3 success:         1
 
17037
DELETE FROM t1
 
17038
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17039
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17040
        
 
17041
# check null-4 success:         1
 
17042
DELETE FROM t1
 
17043
WHERE f_int1 = 0 AND f_int2 = 0
 
17044
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
17045
AND f_charbig = '#NULL#';
 
17046
SET AUTOCOMMIT= 0;
 
17047
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17048
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17049
FROM t0_template source_tab
 
17050
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17051
        
 
17052
# check transactions-1 success:         1
 
17053
COMMIT WORK;
 
17054
        
 
17055
# check transactions-2 success:         1
 
17056
ROLLBACK WORK;
 
17057
        
 
17058
# check transactions-3 success:         1
 
17059
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17060
COMMIT WORK;
 
17061
ROLLBACK WORK;
 
17062
        
 
17063
# check transactions-4 success:         1
 
17064
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17065
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17066
FROM t0_template source_tab
 
17067
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17068
        
 
17069
# check transactions-5 success:         1
 
17070
ROLLBACK WORK;
 
17071
Warnings:
 
17072
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
17073
        
 
17074
# check transactions-6 success:         1
 
17075
# INFO: Storage engine used for t1 seems to be not transactional.
 
17076
COMMIT;
 
17077
        
 
17078
# check transactions-7 success:         1
 
17079
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17080
COMMIT WORK;
 
17081
SET @@session.sql_mode = 'traditional';
 
17082
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
17083
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17084
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
17085
'', '', 'was inserted' FROM t0_template
 
17086
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17087
ERROR 22012: Division by 0
 
17088
COMMIT;
 
17089
        
 
17090
# check transactions-8 success:         1
 
17091
# INFO: Storage engine used for t1 seems to be unable to revert
 
17092
#       changes made by the failing statement.
 
17093
SET @@session.sql_mode = '';
 
17094
SET AUTOCOMMIT= 1;
 
17095
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17096
COMMIT WORK;
 
17097
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
17098
        
 
17099
# check special-1 success:      1
 
17100
UPDATE t1 SET f_charbig = '';
 
17101
        
 
17102
# check special-2 success:      1
 
17103
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
17104
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17105
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
17106
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17107
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17108
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17109
'just inserted' FROM t0_template
 
17110
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17111
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
17112
BEGIN
 
17113
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17114
f_charbig = 'updated by trigger'
 
17115
      WHERE f_int1 = new.f_int1;
 
17116
END|
 
17117
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17118
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17119
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17120
        
 
17121
# check trigger-1 success:      1
 
17122
DROP TRIGGER trg_1;
 
17123
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17124
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17125
f_charbig = 'just inserted'
 
17126
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17127
DELETE FROM t0_aux
 
17128
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17129
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17130
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17131
'just inserted' FROM t0_template
 
17132
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17133
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
17134
BEGIN
 
17135
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17136
f_charbig = 'updated by trigger'
 
17137
      WHERE f_int1 = new.f_int1;
 
17138
END|
 
17139
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17140
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17141
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17142
        
 
17143
# check trigger-2 success:      1
 
17144
DROP TRIGGER trg_1;
 
17145
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17146
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17147
f_charbig = 'just inserted'
 
17148
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17149
DELETE FROM t0_aux
 
17150
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17151
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17152
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17153
'just inserted' FROM t0_template
 
17154
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17155
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17156
BEGIN
 
17157
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17158
f_charbig = 'updated by trigger'
 
17159
      WHERE f_int1 = new.f_int1;
 
17160
END|
 
17161
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17162
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17163
        
 
17164
# check trigger-3 success:      1
 
17165
DROP TRIGGER trg_1;
 
17166
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17167
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17168
f_charbig = 'just inserted'
 
17169
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17170
DELETE FROM t0_aux
 
17171
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17172
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17173
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17174
'just inserted' FROM t0_template
 
17175
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17176
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17177
BEGIN
 
17178
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17179
f_charbig = 'updated by trigger'
 
17180
      WHERE f_int1 = - old.f_int1;
 
17181
END|
 
17182
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17183
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17184
        
 
17185
# check trigger-4 success:      1
 
17186
DROP TRIGGER trg_1;
 
17187
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17188
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17189
f_charbig = 'just inserted'
 
17190
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17191
DELETE FROM t0_aux
 
17192
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17193
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17194
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17195
'just inserted' FROM t0_template
 
17196
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17197
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17198
BEGIN
 
17199
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17200
f_charbig = 'updated by trigger'
 
17201
      WHERE f_int1 = new.f_int1;
 
17202
END|
 
17203
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17204
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17205
        
 
17206
# check trigger-5 success:      1
 
17207
DROP TRIGGER trg_1;
 
17208
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17209
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17210
f_charbig = 'just inserted'
 
17211
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17212
DELETE FROM t0_aux
 
17213
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17214
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17215
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17216
'just inserted' FROM t0_template
 
17217
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17218
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17219
BEGIN
 
17220
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17221
f_charbig = 'updated by trigger'
 
17222
      WHERE f_int1 = - old.f_int1;
 
17223
END|
 
17224
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17225
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17226
        
 
17227
# check trigger-6 success:      1
 
17228
DROP TRIGGER trg_1;
 
17229
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17230
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17231
f_charbig = 'just inserted'
 
17232
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17233
DELETE FROM t0_aux
 
17234
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17235
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17236
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17237
'just inserted' FROM t0_template
 
17238
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17239
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
17240
BEGIN
 
17241
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17242
f_charbig = 'updated by trigger'
 
17243
      WHERE f_int1 = - old.f_int1;
 
17244
END|
 
17245
DELETE FROM t0_aux
 
17246
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17247
        
 
17248
# check trigger-7 success:      1
 
17249
DROP TRIGGER trg_1;
 
17250
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17251
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17252
f_charbig = 'just inserted'
 
17253
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17254
DELETE FROM t0_aux
 
17255
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17256
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17257
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17258
'just inserted' FROM t0_template
 
17259
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17260
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
17261
BEGIN
 
17262
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17263
f_charbig = 'updated by trigger'
 
17264
      WHERE f_int1 = - old.f_int1;
 
17265
END|
 
17266
DELETE FROM t0_aux
 
17267
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17268
        
 
17269
# check trigger-8 success:      1
 
17270
DROP TRIGGER trg_1;
 
17271
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17272
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17273
f_charbig = 'just inserted'
 
17274
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17275
DELETE FROM t0_aux
 
17276
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17277
DELETE FROM t1
 
17278
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17279
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17280
BEGIN
 
17281
SET new.f_int1 = old.f_int1 + @max_row,
 
17282
new.f_int2 = old.f_int2 - @max_row,
 
17283
new.f_charbig = '####updated per update trigger####';
 
17284
END|
 
17285
UPDATE t1
 
17286
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17287
f_charbig = '####updated per update statement itself####';
 
17288
        
 
17289
# check trigger-9 success:      1
 
17290
DROP TRIGGER trg_2;
 
17291
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17292
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17293
f_charbig = CONCAT('===',f_char1,'===');
 
17294
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17295
BEGIN
 
17296
SET new.f_int1 = new.f_int1 + @max_row,
 
17297
new.f_int2 = new.f_int2 - @max_row,
 
17298
new.f_charbig = '####updated per update trigger####';
 
17299
END|
 
17300
UPDATE t1
 
17301
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17302
f_charbig = '####updated per update statement itself####';
 
17303
        
 
17304
# check trigger-10 success:     1
 
17305
DROP TRIGGER trg_2;
 
17306
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17307
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17308
f_charbig = CONCAT('===',f_char1,'===');
 
17309
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17310
BEGIN
 
17311
SET new.f_int1 = @my_max1 + @counter,
 
17312
new.f_int2 = @my_min2 - @counter,
 
17313
new.f_charbig = '####updated per insert trigger####';
 
17314
SET @counter = @counter + 1;
 
17315
END|
 
17316
SET @counter = 1;
 
17317
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17318
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17319
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17320
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17321
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17322
ORDER BY f_int1;
 
17323
DROP TRIGGER trg_3;
 
17324
        
 
17325
# check trigger-11 success:     1
 
17326
DELETE FROM t1
 
17327
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17328
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17329
AND f_charbig = '####updated per insert trigger####';
 
17330
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17331
BEGIN
 
17332
SET new.f_int1 = @my_max1 + @counter,
 
17333
new.f_int2 = @my_min2 - @counter,
 
17334
new.f_charbig = '####updated per insert trigger####';
 
17335
SET @counter = @counter + 1;
 
17336
END|
 
17337
SET @counter = 1;
 
17338
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17339
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
17340
SELECT CAST(f_int1 AS CHAR),
 
17341
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17342
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17343
ORDER BY f_int1;
 
17344
DROP TRIGGER trg_3;
 
17345
        
 
17346
# check trigger-12 success:     1
 
17347
DELETE FROM t1
 
17348
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17349
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17350
AND f_charbig = '####updated per insert trigger####';
 
17351
ANALYZE  TABLE t1;
 
17352
Table   Op      Msg_type        Msg_text
 
17353
test.t1 analyze status  OK
 
17354
CHECK    TABLE t1 EXTENDED;
 
17355
Table   Op      Msg_type        Msg_text
 
17356
test.t1 check   status  OK
 
17357
CHECKSUM TABLE t1 EXTENDED;
 
17358
Table   Checksum
 
17359
test.t1 <some_value>
 
17360
OPTIMIZE TABLE t1;
 
17361
Table   Op      Msg_type        Msg_text
 
17362
test.t1 optimize        status  OK
 
17363
# check layout success:    1
 
17364
REPAIR   TABLE t1 EXTENDED;
 
17365
Table   Op      Msg_type        Msg_text
 
17366
test.t1 repair  status  OK
 
17367
# check layout success:    1
 
17368
TRUNCATE t1;
 
17369
        
 
17370
# check TRUNCATE success:       1
 
17371
# check layout success:    1
 
17372
# End usability test (inc/partition_check.inc)
 
17373
DROP TABLE t1;
 
17374
CREATE TABLE t1 (
 
17375
f_int1 INTEGER,
 
17376
f_int2 INTEGER,
 
17377
f_char1 CHAR(20),
 
17378
f_char2 CHAR(20),
 
17379
f_charbig VARCHAR(1000)
 
17380
 
 
17381
)
 
17382
PARTITION BY RANGE(f_int1)
 
17383
(PARTITION parta VALUES LESS THAN (0),
 
17384
PARTITION part_1 VALUES LESS THAN (5),
 
17385
PARTITION part_2 VALUES LESS THAN (10),
 
17386
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
17387
PARTITION part_4 VALUES LESS THAN (20),
 
17388
PARTITION part_5 VALUES LESS THAN (2147483646));
 
17389
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17390
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17391
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
17392
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
 
17393
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17394
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17395
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17396
# Start usability test (inc/partition_check.inc)
 
17397
create_command
 
17398
SHOW CREATE TABLE t1;
 
17399
Table   Create Table
 
17400
t1      CREATE TABLE `t1` (
 
17401
  `f_int1` int(11) DEFAULT NULL,
 
17402
  `f_int2` int(11) DEFAULT NULL,
 
17403
  `f_char1` char(20) DEFAULT NULL,
 
17404
  `f_char2` char(20) DEFAULT NULL,
 
17405
  `f_charbig` varchar(1000) DEFAULT NULL
 
17406
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
17407
 
 
17408
unified filelist
 
17409
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
17410
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
17411
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
17412
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
17413
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
17414
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
17415
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
17416
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
17417
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
17418
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
17419
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
17420
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
17421
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
17422
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
17423
 
 
17424
# check prerequisites-1 success:    1
 
17425
# check COUNT(*) success:    1
 
17426
# check MIN/MAX(f_int1) success:    1
 
17427
# check MIN/MAX(f_int2) success:    1
 
17428
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17429
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17430
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
17431
WHERE f_int1 IN (2,3);
 
17432
# check prerequisites-3 success:    1
 
17433
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
17434
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
17435
# check read via f_int1 success: 1
 
17436
# check read via f_int2 success: 1
 
17437
        
 
17438
# check multiple-1 success:     1
 
17439
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
17440
        
 
17441
# check multiple-2 success:     1
 
17442
INSERT INTO t1 SELECT * FROM t0_template
 
17443
WHERE MOD(f_int1,3) = 0;
 
17444
        
 
17445
# check multiple-3 success:     1
 
17446
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
17447
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
17448
AND @max_row_div2 + @max_row_div4;
 
17449
        
 
17450
# check multiple-4 success:     1
 
17451
DELETE FROM t1
 
17452
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
17453
AND @max_row_div2 + @max_row_div4 + @max_row;
 
17454
        
 
17455
# check multiple-5 success:     1
 
17456
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
17457
INSERT INTO t1
 
17458
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17459
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17460
f_charbig = '#SINGLE#';
 
17461
        
 
17462
# check single-1 success:       1
 
17463
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
17464
INSERT INTO t1
 
17465
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17466
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17467
f_charbig = '#SINGLE#';
 
17468
        
 
17469
# check single-2 success:       1
 
17470
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
17471
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
17472
UPDATE t1 SET f_int1 = @cur_value2
 
17473
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
17474
        
 
17475
# check single-3 success:       1
 
17476
SET @cur_value1= -1;
 
17477
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
17478
UPDATE t1 SET f_int1 = @cur_value1
 
17479
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
17480
        
 
17481
# check single-4 success:       1
 
17482
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
17483
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
17484
        
 
17485
# check single-5 success:       1
 
17486
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
17487
        
 
17488
# check single-6 success:       1
 
17489
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
17490
ERROR HY000: Table has no partition for value 2147483647
 
17491
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
17492
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
17493
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
17494
f_charbig = '#NULL#';
 
17495
INSERT INTO t1
 
17496
SET f_int1 = NULL , f_int2 = -@max_row,
 
17497
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
17498
f_charbig = '#NULL#';
 
17499
# check null success:    1
 
17500
        
 
17501
# check null-1 success:         1
 
17502
UPDATE t1 SET f_int1 = -@max_row
 
17503
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17504
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17505
        
 
17506
# check null-2 success:         1
 
17507
UPDATE t1 SET f_int1 = NULL
 
17508
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17509
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17510
        
 
17511
# check null-3 success:         1
 
17512
DELETE FROM t1
 
17513
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17514
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17515
        
 
17516
# check null-4 success:         1
 
17517
DELETE FROM t1
 
17518
WHERE f_int1 = 0 AND f_int2 = 0
 
17519
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
17520
AND f_charbig = '#NULL#';
 
17521
SET AUTOCOMMIT= 0;
 
17522
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17523
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17524
FROM t0_template source_tab
 
17525
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17526
        
 
17527
# check transactions-1 success:         1
 
17528
COMMIT WORK;
 
17529
        
 
17530
# check transactions-2 success:         1
 
17531
ROLLBACK WORK;
 
17532
        
 
17533
# check transactions-3 success:         1
 
17534
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17535
COMMIT WORK;
 
17536
ROLLBACK WORK;
 
17537
        
 
17538
# check transactions-4 success:         1
 
17539
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17540
SELECT f_int1, f_int1, '', '', 'was inserted'
 
17541
FROM t0_template source_tab
 
17542
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17543
        
 
17544
# check transactions-5 success:         1
 
17545
ROLLBACK WORK;
 
17546
Warnings:
 
17547
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
17548
        
 
17549
# check transactions-6 success:         1
 
17550
# INFO: Storage engine used for t1 seems to be not transactional.
 
17551
COMMIT;
 
17552
        
 
17553
# check transactions-7 success:         1
 
17554
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17555
COMMIT WORK;
 
17556
SET @@session.sql_mode = 'traditional';
 
17557
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
17558
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17559
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
17560
'', '', 'was inserted' FROM t0_template
 
17561
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
17562
ERROR 22012: Division by 0
 
17563
COMMIT;
 
17564
        
 
17565
# check transactions-8 success:         1
 
17566
# INFO: Storage engine used for t1 seems to be unable to revert
 
17567
#       changes made by the failing statement.
 
17568
SET @@session.sql_mode = '';
 
17569
SET AUTOCOMMIT= 1;
 
17570
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
17571
COMMIT WORK;
 
17572
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
17573
        
 
17574
# check special-1 success:      1
 
17575
UPDATE t1 SET f_charbig = '';
 
17576
        
 
17577
# check special-2 success:      1
 
17578
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
17579
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17580
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
17581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17582
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17583
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17584
'just inserted' FROM t0_template
 
17585
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17586
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
17587
BEGIN
 
17588
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17589
f_charbig = 'updated by trigger'
 
17590
      WHERE f_int1 = new.f_int1;
 
17591
END|
 
17592
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17593
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17594
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17595
        
 
17596
# check trigger-1 success:      1
 
17597
DROP TRIGGER trg_1;
 
17598
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17599
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17600
f_charbig = 'just inserted'
 
17601
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17602
DELETE FROM t0_aux
 
17603
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17604
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17605
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17606
'just inserted' FROM t0_template
 
17607
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17608
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
17609
BEGIN
 
17610
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17611
f_charbig = 'updated by trigger'
 
17612
      WHERE f_int1 = new.f_int1;
 
17613
END|
 
17614
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17615
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
17616
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17617
        
 
17618
# check trigger-2 success:      1
 
17619
DROP TRIGGER trg_1;
 
17620
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17621
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17622
f_charbig = 'just inserted'
 
17623
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17624
DELETE FROM t0_aux
 
17625
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17626
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17627
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17628
'just inserted' FROM t0_template
 
17629
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17630
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17631
BEGIN
 
17632
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17633
f_charbig = 'updated by trigger'
 
17634
      WHERE f_int1 = new.f_int1;
 
17635
END|
 
17636
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17637
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17638
        
 
17639
# check trigger-3 success:      1
 
17640
DROP TRIGGER trg_1;
 
17641
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17642
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17643
f_charbig = 'just inserted'
 
17644
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17645
DELETE FROM t0_aux
 
17646
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17647
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17648
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17649
'just inserted' FROM t0_template
 
17650
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17651
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
17652
BEGIN
 
17653
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17654
f_charbig = 'updated by trigger'
 
17655
      WHERE f_int1 = - old.f_int1;
 
17656
END|
 
17657
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17658
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17659
        
 
17660
# check trigger-4 success:      1
 
17661
DROP TRIGGER trg_1;
 
17662
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17663
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17664
f_charbig = 'just inserted'
 
17665
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17666
DELETE FROM t0_aux
 
17667
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17668
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17669
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17670
'just inserted' FROM t0_template
 
17671
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17672
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17673
BEGIN
 
17674
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17675
f_charbig = 'updated by trigger'
 
17676
      WHERE f_int1 = new.f_int1;
 
17677
END|
 
17678
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17679
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17680
        
 
17681
# check trigger-5 success:      1
 
17682
DROP TRIGGER trg_1;
 
17683
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17684
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17685
f_charbig = 'just inserted'
 
17686
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17687
DELETE FROM t0_aux
 
17688
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17689
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17690
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17691
'just inserted' FROM t0_template
 
17692
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17693
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
17694
BEGIN
 
17695
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17696
f_charbig = 'updated by trigger'
 
17697
      WHERE f_int1 = - old.f_int1;
 
17698
END|
 
17699
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
17700
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17701
        
 
17702
# check trigger-6 success:      1
 
17703
DROP TRIGGER trg_1;
 
17704
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17705
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17706
f_charbig = 'just inserted'
 
17707
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17708
DELETE FROM t0_aux
 
17709
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17710
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17711
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17712
'just inserted' FROM t0_template
 
17713
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17714
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
17715
BEGIN
 
17716
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17717
f_charbig = 'updated by trigger'
 
17718
      WHERE f_int1 = - old.f_int1;
 
17719
END|
 
17720
DELETE FROM t0_aux
 
17721
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17722
        
 
17723
# check trigger-7 success:      1
 
17724
DROP TRIGGER trg_1;
 
17725
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17726
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17727
f_charbig = 'just inserted'
 
17728
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17729
DELETE FROM t0_aux
 
17730
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17731
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17732
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
17733
'just inserted' FROM t0_template
 
17734
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17735
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
17736
BEGIN
 
17737
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
17738
f_charbig = 'updated by trigger'
 
17739
      WHERE f_int1 = - old.f_int1;
 
17740
END|
 
17741
DELETE FROM t0_aux
 
17742
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
17743
        
 
17744
# check trigger-8 success:      1
 
17745
DROP TRIGGER trg_1;
 
17746
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17747
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17748
f_charbig = 'just inserted'
 
17749
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
17750
DELETE FROM t0_aux
 
17751
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17752
DELETE FROM t1
 
17753
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
17754
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17755
BEGIN
 
17756
SET new.f_int1 = old.f_int1 + @max_row,
 
17757
new.f_int2 = old.f_int2 - @max_row,
 
17758
new.f_charbig = '####updated per update trigger####';
 
17759
END|
 
17760
UPDATE t1
 
17761
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17762
f_charbig = '####updated per update statement itself####';
 
17763
        
 
17764
# check trigger-9 success:      1
 
17765
DROP TRIGGER trg_2;
 
17766
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17767
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17768
f_charbig = CONCAT('===',f_char1,'===');
 
17769
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
17770
BEGIN
 
17771
SET new.f_int1 = new.f_int1 + @max_row,
 
17772
new.f_int2 = new.f_int2 - @max_row,
 
17773
new.f_charbig = '####updated per update trigger####';
 
17774
END|
 
17775
UPDATE t1
 
17776
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
17777
f_charbig = '####updated per update statement itself####';
 
17778
        
 
17779
# check trigger-10 success:     1
 
17780
DROP TRIGGER trg_2;
 
17781
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
17782
f_int2 = CAST(f_char1 AS SIGNED INT),
 
17783
f_charbig = CONCAT('===',f_char1,'===');
 
17784
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17785
BEGIN
 
17786
SET new.f_int1 = @my_max1 + @counter,
 
17787
new.f_int2 = @my_min2 - @counter,
 
17788
new.f_charbig = '####updated per insert trigger####';
 
17789
SET @counter = @counter + 1;
 
17790
END|
 
17791
SET @counter = 1;
 
17792
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17793
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17794
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17795
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17796
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17797
ORDER BY f_int1;
 
17798
DROP TRIGGER trg_3;
 
17799
        
 
17800
# check trigger-11 success:     1
 
17801
DELETE FROM t1
 
17802
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17803
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17804
AND f_charbig = '####updated per insert trigger####';
 
17805
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
17806
BEGIN
 
17807
SET new.f_int1 = @my_max1 + @counter,
 
17808
new.f_int2 = @my_min2 - @counter,
 
17809
new.f_charbig = '####updated per insert trigger####';
 
17810
SET @counter = @counter + 1;
 
17811
END|
 
17812
SET @counter = 1;
 
17813
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
17814
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
17815
SELECT CAST(f_int1 AS CHAR),
 
17816
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
17817
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
17818
ORDER BY f_int1;
 
17819
DROP TRIGGER trg_3;
 
17820
        
 
17821
# check trigger-12 success:     1
 
17822
DELETE FROM t1
 
17823
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
17824
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
17825
AND f_charbig = '####updated per insert trigger####';
 
17826
ANALYZE  TABLE t1;
 
17827
Table   Op      Msg_type        Msg_text
 
17828
test.t1 analyze status  OK
 
17829
CHECK    TABLE t1 EXTENDED;
 
17830
Table   Op      Msg_type        Msg_text
 
17831
test.t1 check   status  OK
 
17832
CHECKSUM TABLE t1 EXTENDED;
 
17833
Table   Checksum
 
17834
test.t1 <some_value>
 
17835
OPTIMIZE TABLE t1;
 
17836
Table   Op      Msg_type        Msg_text
 
17837
test.t1 optimize        status  OK
 
17838
# check layout success:    1
 
17839
REPAIR   TABLE t1 EXTENDED;
 
17840
Table   Op      Msg_type        Msg_text
 
17841
test.t1 repair  status  OK
 
17842
# check layout success:    1
 
17843
TRUNCATE t1;
 
17844
        
 
17845
# check TRUNCATE success:       1
 
17846
# check layout success:    1
 
17847
# End usability test (inc/partition_check.inc)
 
17848
DROP TABLE t1;
 
17849
CREATE TABLE t1 (
 
17850
f_int1 INTEGER,
 
17851
f_int2 INTEGER,
 
17852
f_char1 CHAR(20),
 
17853
f_char2 CHAR(20),
 
17854
f_charbig VARCHAR(1000)
 
17855
 
 
17856
)
 
17857
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
17858
(PARTITION part_1 VALUES LESS THAN (0),
 
17859
PARTITION part_2 VALUES LESS THAN (5),
 
17860
PARTITION part_3 VALUES LESS THAN (10),
 
17861
PARTITION part_4 VALUES LESS THAN (2147483646));
 
17862
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17863
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17864
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
17865
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
 
17866
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
17867
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
17868
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
17869
# Start usability test (inc/partition_check.inc)
 
17870
create_command
 
17871
SHOW CREATE TABLE t1;
 
17872
Table   Create Table
 
17873
t1      CREATE TABLE `t1` (
 
17874
  `f_int1` int(11) DEFAULT NULL,
 
17875
  `f_int2` int(11) DEFAULT NULL,
 
17876
  `f_char1` char(20) DEFAULT NULL,
 
17877
  `f_char2` char(20) DEFAULT NULL,
 
17878
  `f_charbig` varchar(1000) DEFAULT NULL
 
17879
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
17880
 
 
17881
unified filelist
 
17882
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
17883
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
17884
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
17885
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
17886
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
17887
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
17888
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
17889
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
17890
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
17891
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
17892
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
17893
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
17894
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYD
 
17895
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYI
 
17896
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYD
 
17897
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYI
 
17898
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
17899
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
17900
 
 
17901
# check prerequisites-1 success:    1
 
17902
# check COUNT(*) success:    1
 
17903
# check MIN/MAX(f_int1) success:    1
 
17904
# check MIN/MAX(f_int2) success:    1
 
17905
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
17906
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
17907
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
17908
WHERE f_int1 IN (2,3);
 
17909
# check prerequisites-3 success:    1
 
17910
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
17911
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
17912
# check read via f_int1 success: 1
 
17913
# check read via f_int2 success: 1
 
17914
        
 
17915
# check multiple-1 success:     1
 
17916
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
17917
        
 
17918
# check multiple-2 success:     1
 
17919
INSERT INTO t1 SELECT * FROM t0_template
 
17920
WHERE MOD(f_int1,3) = 0;
 
17921
        
 
17922
# check multiple-3 success:     1
 
17923
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
17924
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
17925
AND @max_row_div2 + @max_row_div4;
 
17926
        
 
17927
# check multiple-4 success:     1
 
17928
DELETE FROM t1
 
17929
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
17930
AND @max_row_div2 + @max_row_div4 + @max_row;
 
17931
        
 
17932
# check multiple-5 success:     1
 
17933
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
17934
INSERT INTO t1
 
17935
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17936
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17937
f_charbig = '#SINGLE#';
 
17938
        
 
17939
# check single-1 success:       1
 
17940
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
17941
INSERT INTO t1
 
17942
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
17943
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
17944
f_charbig = '#SINGLE#';
 
17945
        
 
17946
# check single-2 success:       1
 
17947
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
17948
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
17949
UPDATE t1 SET f_int1 = @cur_value2
 
17950
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
17951
        
 
17952
# check single-3 success:       1
 
17953
SET @cur_value1= -1;
 
17954
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
17955
UPDATE t1 SET f_int1 = @cur_value1
 
17956
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
17957
        
 
17958
# check single-4 success:       1
 
17959
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
17960
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
17961
        
 
17962
# check single-5 success:       1
 
17963
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
17964
        
 
17965
# check single-6 success:       1
 
17966
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
17967
        
 
17968
# check single-7 success:       1
 
17969
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
17970
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
17971
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
17972
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
17973
f_charbig = '#NULL#';
 
17974
INSERT INTO t1
 
17975
SET f_int1 = NULL , f_int2 = -@max_row,
 
17976
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
17977
f_charbig = '#NULL#';
 
17978
# check null success:    1
 
17979
        
 
17980
# check null-1 success:         1
 
17981
UPDATE t1 SET f_int1 = -@max_row
 
17982
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17983
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17984
        
 
17985
# check null-2 success:         1
 
17986
UPDATE t1 SET f_int1 = NULL
 
17987
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17988
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17989
        
 
17990
# check null-3 success:         1
 
17991
DELETE FROM t1
 
17992
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
17993
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
17994
        
 
17995
# check null-4 success:         1
 
17996
DELETE FROM t1
 
17997
WHERE f_int1 = 0 AND f_int2 = 0
 
17998
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
17999
AND f_charbig = '#NULL#';
 
18000
SET AUTOCOMMIT= 0;
 
18001
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18002
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18003
FROM t0_template source_tab
 
18004
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18005
        
 
18006
# check transactions-1 success:         1
 
18007
COMMIT WORK;
 
18008
        
 
18009
# check transactions-2 success:         1
 
18010
ROLLBACK WORK;
 
18011
        
 
18012
# check transactions-3 success:         1
 
18013
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18014
COMMIT WORK;
 
18015
ROLLBACK WORK;
 
18016
        
 
18017
# check transactions-4 success:         1
 
18018
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18019
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18020
FROM t0_template source_tab
 
18021
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18022
        
 
18023
# check transactions-5 success:         1
 
18024
ROLLBACK WORK;
 
18025
Warnings:
 
18026
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
18027
        
 
18028
# check transactions-6 success:         1
 
18029
# INFO: Storage engine used for t1 seems to be not transactional.
 
18030
COMMIT;
 
18031
        
 
18032
# check transactions-7 success:         1
 
18033
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18034
COMMIT WORK;
 
18035
SET @@session.sql_mode = 'traditional';
 
18036
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
18037
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18038
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
18039
'', '', 'was inserted' FROM t0_template
 
18040
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18041
ERROR 22012: Division by 0
 
18042
COMMIT;
 
18043
        
 
18044
# check transactions-8 success:         1
 
18045
# INFO: Storage engine used for t1 seems to be unable to revert
 
18046
#       changes made by the failing statement.
 
18047
SET @@session.sql_mode = '';
 
18048
SET AUTOCOMMIT= 1;
 
18049
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18050
COMMIT WORK;
 
18051
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
18052
        
 
18053
# check special-1 success:      1
 
18054
UPDATE t1 SET f_charbig = '';
 
18055
        
 
18056
# check special-2 success:      1
 
18057
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
18058
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18059
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
18060
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18061
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18062
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18063
'just inserted' FROM t0_template
 
18064
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18065
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
18066
BEGIN
 
18067
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18068
f_charbig = 'updated by trigger'
 
18069
      WHERE f_int1 = new.f_int1;
 
18070
END|
 
18071
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18072
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18073
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18074
        
 
18075
# check trigger-1 success:      1
 
18076
DROP TRIGGER trg_1;
 
18077
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18078
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18079
f_charbig = 'just inserted'
 
18080
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18081
DELETE FROM t0_aux
 
18082
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18083
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18084
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18085
'just inserted' FROM t0_template
 
18086
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18087
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
18088
BEGIN
 
18089
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18090
f_charbig = 'updated by trigger'
 
18091
      WHERE f_int1 = new.f_int1;
 
18092
END|
 
18093
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18094
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18095
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18096
        
 
18097
# check trigger-2 success:      1
 
18098
DROP TRIGGER trg_1;
 
18099
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18100
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18101
f_charbig = 'just inserted'
 
18102
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18103
DELETE FROM t0_aux
 
18104
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18105
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18106
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18107
'just inserted' FROM t0_template
 
18108
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18109
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18110
BEGIN
 
18111
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18112
f_charbig = 'updated by trigger'
 
18113
      WHERE f_int1 = new.f_int1;
 
18114
END|
 
18115
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18116
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18117
        
 
18118
# check trigger-3 success:      1
 
18119
DROP TRIGGER trg_1;
 
18120
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18121
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18122
f_charbig = 'just inserted'
 
18123
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18124
DELETE FROM t0_aux
 
18125
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18126
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18127
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18128
'just inserted' FROM t0_template
 
18129
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18130
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18131
BEGIN
 
18132
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18133
f_charbig = 'updated by trigger'
 
18134
      WHERE f_int1 = - old.f_int1;
 
18135
END|
 
18136
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18137
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18138
        
 
18139
# check trigger-4 success:      1
 
18140
DROP TRIGGER trg_1;
 
18141
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18142
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18143
f_charbig = 'just inserted'
 
18144
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18145
DELETE FROM t0_aux
 
18146
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18147
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18148
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18149
'just inserted' FROM t0_template
 
18150
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18151
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18152
BEGIN
 
18153
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18154
f_charbig = 'updated by trigger'
 
18155
      WHERE f_int1 = new.f_int1;
 
18156
END|
 
18157
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18158
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18159
        
 
18160
# check trigger-5 success:      1
 
18161
DROP TRIGGER trg_1;
 
18162
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18163
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18164
f_charbig = 'just inserted'
 
18165
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18166
DELETE FROM t0_aux
 
18167
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18168
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18169
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18170
'just inserted' FROM t0_template
 
18171
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18172
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18173
BEGIN
 
18174
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18175
f_charbig = 'updated by trigger'
 
18176
      WHERE f_int1 = - old.f_int1;
 
18177
END|
 
18178
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18179
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18180
        
 
18181
# check trigger-6 success:      1
 
18182
DROP TRIGGER trg_1;
 
18183
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18184
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18185
f_charbig = 'just inserted'
 
18186
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18187
DELETE FROM t0_aux
 
18188
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18189
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18190
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18191
'just inserted' FROM t0_template
 
18192
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18193
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
18194
BEGIN
 
18195
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18196
f_charbig = 'updated by trigger'
 
18197
      WHERE f_int1 = - old.f_int1;
 
18198
END|
 
18199
DELETE FROM t0_aux
 
18200
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18201
        
 
18202
# check trigger-7 success:      1
 
18203
DROP TRIGGER trg_1;
 
18204
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18205
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18206
f_charbig = 'just inserted'
 
18207
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18208
DELETE FROM t0_aux
 
18209
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18210
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18211
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18212
'just inserted' FROM t0_template
 
18213
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18214
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
18215
BEGIN
 
18216
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18217
f_charbig = 'updated by trigger'
 
18218
      WHERE f_int1 = - old.f_int1;
 
18219
END|
 
18220
DELETE FROM t0_aux
 
18221
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18222
        
 
18223
# check trigger-8 success:      1
 
18224
DROP TRIGGER trg_1;
 
18225
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18226
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18227
f_charbig = 'just inserted'
 
18228
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18229
DELETE FROM t0_aux
 
18230
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18231
DELETE FROM t1
 
18232
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18233
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18234
BEGIN
 
18235
SET new.f_int1 = old.f_int1 + @max_row,
 
18236
new.f_int2 = old.f_int2 - @max_row,
 
18237
new.f_charbig = '####updated per update trigger####';
 
18238
END|
 
18239
UPDATE t1
 
18240
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18241
f_charbig = '####updated per update statement itself####';
 
18242
        
 
18243
# check trigger-9 success:      1
 
18244
DROP TRIGGER trg_2;
 
18245
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18246
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18247
f_charbig = CONCAT('===',f_char1,'===');
 
18248
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18249
BEGIN
 
18250
SET new.f_int1 = new.f_int1 + @max_row,
 
18251
new.f_int2 = new.f_int2 - @max_row,
 
18252
new.f_charbig = '####updated per update trigger####';
 
18253
END|
 
18254
UPDATE t1
 
18255
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18256
f_charbig = '####updated per update statement itself####';
 
18257
        
 
18258
# check trigger-10 success:     1
 
18259
DROP TRIGGER trg_2;
 
18260
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18261
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18262
f_charbig = CONCAT('===',f_char1,'===');
 
18263
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18264
BEGIN
 
18265
SET new.f_int1 = @my_max1 + @counter,
 
18266
new.f_int2 = @my_min2 - @counter,
 
18267
new.f_charbig = '####updated per insert trigger####';
 
18268
SET @counter = @counter + 1;
 
18269
END|
 
18270
SET @counter = 1;
 
18271
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18272
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18273
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18274
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18275
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18276
ORDER BY f_int1;
 
18277
DROP TRIGGER trg_3;
 
18278
        
 
18279
# check trigger-11 success:     1
 
18280
DELETE FROM t1
 
18281
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18282
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18283
AND f_charbig = '####updated per insert trigger####';
 
18284
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18285
BEGIN
 
18286
SET new.f_int1 = @my_max1 + @counter,
 
18287
new.f_int2 = @my_min2 - @counter,
 
18288
new.f_charbig = '####updated per insert trigger####';
 
18289
SET @counter = @counter + 1;
 
18290
END|
 
18291
SET @counter = 1;
 
18292
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18293
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
18294
SELECT CAST(f_int1 AS CHAR),
 
18295
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18296
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18297
ORDER BY f_int1;
 
18298
DROP TRIGGER trg_3;
 
18299
        
 
18300
# check trigger-12 success:     1
 
18301
DELETE FROM t1
 
18302
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18303
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18304
AND f_charbig = '####updated per insert trigger####';
 
18305
ANALYZE  TABLE t1;
 
18306
Table   Op      Msg_type        Msg_text
 
18307
test.t1 analyze status  OK
 
18308
CHECK    TABLE t1 EXTENDED;
 
18309
Table   Op      Msg_type        Msg_text
 
18310
test.t1 check   status  OK
 
18311
CHECKSUM TABLE t1 EXTENDED;
 
18312
Table   Checksum
 
18313
test.t1 <some_value>
 
18314
OPTIMIZE TABLE t1;
 
18315
Table   Op      Msg_type        Msg_text
 
18316
test.t1 optimize        status  OK
 
18317
# check layout success:    1
 
18318
REPAIR   TABLE t1 EXTENDED;
 
18319
Table   Op      Msg_type        Msg_text
 
18320
test.t1 repair  status  OK
 
18321
# check layout success:    1
 
18322
TRUNCATE t1;
 
18323
        
 
18324
# check TRUNCATE success:       1
 
18325
# check layout success:    1
 
18326
# End usability test (inc/partition_check.inc)
 
18327
DROP TABLE t1;
 
18328
CREATE TABLE t1 (
 
18329
f_int1 INTEGER,
 
18330
f_int2 INTEGER,
 
18331
f_char1 CHAR(20),
 
18332
f_char2 CHAR(20),
 
18333
f_charbig VARCHAR(1000)
 
18334
 
 
18335
)
 
18336
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
18337
(PARTITION part_1 VALUES LESS THAN (0)
 
18338
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
18339
PARTITION part_2 VALUES LESS THAN (5)
 
18340
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
18341
PARTITION part_3 VALUES LESS THAN (10)
 
18342
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
18343
PARTITION part_4 VALUES LESS THAN (2147483646)
 
18344
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
18345
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18346
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18347
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
18348
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
 
18349
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18350
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18351
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18352
# Start usability test (inc/partition_check.inc)
 
18353
create_command
 
18354
SHOW CREATE TABLE t1;
 
18355
Table   Create Table
 
18356
t1      CREATE TABLE `t1` (
 
18357
  `f_int1` int(11) DEFAULT NULL,
 
18358
  `f_int2` int(11) DEFAULT NULL,
 
18359
  `f_char1` char(20) DEFAULT NULL,
 
18360
  `f_char2` char(20) DEFAULT NULL,
 
18361
  `f_charbig` varchar(1000) DEFAULT NULL
 
18362
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
18363
 
 
18364
unified filelist
 
18365
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYD
 
18366
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYI
 
18367
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYD
 
18368
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYI
 
18369
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYD
 
18370
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYI
 
18371
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYD
 
18372
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYI
 
18373
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYD
 
18374
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYI
 
18375
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYD
 
18376
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYI
 
18377
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYD
 
18378
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYI
 
18379
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYD
 
18380
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYI
 
18381
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
18382
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
18383
 
 
18384
# check prerequisites-1 success:    1
 
18385
# check COUNT(*) success:    1
 
18386
# check MIN/MAX(f_int1) success:    1
 
18387
# check MIN/MAX(f_int2) success:    1
 
18388
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18389
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18390
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
18391
WHERE f_int1 IN (2,3);
 
18392
# check prerequisites-3 success:    1
 
18393
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
18394
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
18395
# check read via f_int1 success: 1
 
18396
# check read via f_int2 success: 1
 
18397
        
 
18398
# check multiple-1 success:     1
 
18399
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
18400
        
 
18401
# check multiple-2 success:     1
 
18402
INSERT INTO t1 SELECT * FROM t0_template
 
18403
WHERE MOD(f_int1,3) = 0;
 
18404
        
 
18405
# check multiple-3 success:     1
 
18406
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
18407
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
18408
AND @max_row_div2 + @max_row_div4;
 
18409
        
 
18410
# check multiple-4 success:     1
 
18411
DELETE FROM t1
 
18412
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
18413
AND @max_row_div2 + @max_row_div4 + @max_row;
 
18414
        
 
18415
# check multiple-5 success:     1
 
18416
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
18417
INSERT INTO t1
 
18418
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18419
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18420
f_charbig = '#SINGLE#';
 
18421
        
 
18422
# check single-1 success:       1
 
18423
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
18424
INSERT INTO t1
 
18425
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18426
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18427
f_charbig = '#SINGLE#';
 
18428
        
 
18429
# check single-2 success:       1
 
18430
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
18431
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
18432
UPDATE t1 SET f_int1 = @cur_value2
 
18433
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
18434
        
 
18435
# check single-3 success:       1
 
18436
SET @cur_value1= -1;
 
18437
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
18438
UPDATE t1 SET f_int1 = @cur_value1
 
18439
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
18440
        
 
18441
# check single-4 success:       1
 
18442
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
18443
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
18444
        
 
18445
# check single-5 success:       1
 
18446
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
18447
        
 
18448
# check single-6 success:       1
 
18449
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
18450
ERROR HY000: Table has no partition for value 2147483647
 
18451
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
18452
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
18453
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
18454
f_charbig = '#NULL#';
 
18455
INSERT INTO t1
 
18456
SET f_int1 = NULL , f_int2 = -@max_row,
 
18457
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
18458
f_charbig = '#NULL#';
 
18459
# check null success:    1
 
18460
        
 
18461
# check null-1 success:         1
 
18462
UPDATE t1 SET f_int1 = -@max_row
 
18463
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18464
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18465
        
 
18466
# check null-2 success:         1
 
18467
UPDATE t1 SET f_int1 = NULL
 
18468
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18469
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18470
        
 
18471
# check null-3 success:         1
 
18472
DELETE FROM t1
 
18473
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18474
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18475
        
 
18476
# check null-4 success:         1
 
18477
DELETE FROM t1
 
18478
WHERE f_int1 = 0 AND f_int2 = 0
 
18479
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
18480
AND f_charbig = '#NULL#';
 
18481
SET AUTOCOMMIT= 0;
 
18482
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18483
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18484
FROM t0_template source_tab
 
18485
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18486
        
 
18487
# check transactions-1 success:         1
 
18488
COMMIT WORK;
 
18489
        
 
18490
# check transactions-2 success:         1
 
18491
ROLLBACK WORK;
 
18492
        
 
18493
# check transactions-3 success:         1
 
18494
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18495
COMMIT WORK;
 
18496
ROLLBACK WORK;
 
18497
        
 
18498
# check transactions-4 success:         1
 
18499
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18500
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18501
FROM t0_template source_tab
 
18502
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18503
        
 
18504
# check transactions-5 success:         1
 
18505
ROLLBACK WORK;
 
18506
Warnings:
 
18507
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
18508
        
 
18509
# check transactions-6 success:         1
 
18510
# INFO: Storage engine used for t1 seems to be not transactional.
 
18511
COMMIT;
 
18512
        
 
18513
# check transactions-7 success:         1
 
18514
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18515
COMMIT WORK;
 
18516
SET @@session.sql_mode = 'traditional';
 
18517
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
18518
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18519
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
18520
'', '', 'was inserted' FROM t0_template
 
18521
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18522
ERROR 22012: Division by 0
 
18523
COMMIT;
 
18524
        
 
18525
# check transactions-8 success:         1
 
18526
# INFO: Storage engine used for t1 seems to be unable to revert
 
18527
#       changes made by the failing statement.
 
18528
SET @@session.sql_mode = '';
 
18529
SET AUTOCOMMIT= 1;
 
18530
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18531
COMMIT WORK;
 
18532
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
18533
        
 
18534
# check special-1 success:      1
 
18535
UPDATE t1 SET f_charbig = '';
 
18536
        
 
18537
# check special-2 success:      1
 
18538
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
18539
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18540
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
18541
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18542
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18543
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18544
'just inserted' FROM t0_template
 
18545
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18546
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
18547
BEGIN
 
18548
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18549
f_charbig = 'updated by trigger'
 
18550
      WHERE f_int1 = new.f_int1;
 
18551
END|
 
18552
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18553
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18554
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18555
        
 
18556
# check trigger-1 success:      1
 
18557
DROP TRIGGER trg_1;
 
18558
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18559
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18560
f_charbig = 'just inserted'
 
18561
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18562
DELETE FROM t0_aux
 
18563
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18564
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18565
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18566
'just inserted' FROM t0_template
 
18567
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18568
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
18569
BEGIN
 
18570
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18571
f_charbig = 'updated by trigger'
 
18572
      WHERE f_int1 = new.f_int1;
 
18573
END|
 
18574
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18575
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
18576
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18577
        
 
18578
# check trigger-2 success:      1
 
18579
DROP TRIGGER trg_1;
 
18580
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18581
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18582
f_charbig = 'just inserted'
 
18583
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18584
DELETE FROM t0_aux
 
18585
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18586
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18587
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18588
'just inserted' FROM t0_template
 
18589
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18590
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18591
BEGIN
 
18592
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18593
f_charbig = 'updated by trigger'
 
18594
      WHERE f_int1 = new.f_int1;
 
18595
END|
 
18596
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18597
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18598
        
 
18599
# check trigger-3 success:      1
 
18600
DROP TRIGGER trg_1;
 
18601
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18602
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18603
f_charbig = 'just inserted'
 
18604
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18605
DELETE FROM t0_aux
 
18606
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18607
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18608
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18609
'just inserted' FROM t0_template
 
18610
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18611
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
18612
BEGIN
 
18613
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18614
f_charbig = 'updated by trigger'
 
18615
      WHERE f_int1 = - old.f_int1;
 
18616
END|
 
18617
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18618
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18619
        
 
18620
# check trigger-4 success:      1
 
18621
DROP TRIGGER trg_1;
 
18622
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18623
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18624
f_charbig = 'just inserted'
 
18625
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18626
DELETE FROM t0_aux
 
18627
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18628
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18629
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18630
'just inserted' FROM t0_template
 
18631
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18632
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18633
BEGIN
 
18634
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18635
f_charbig = 'updated by trigger'
 
18636
      WHERE f_int1 = new.f_int1;
 
18637
END|
 
18638
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18639
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18640
        
 
18641
# check trigger-5 success:      1
 
18642
DROP TRIGGER trg_1;
 
18643
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18644
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18645
f_charbig = 'just inserted'
 
18646
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18647
DELETE FROM t0_aux
 
18648
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18649
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18650
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18651
'just inserted' FROM t0_template
 
18652
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18653
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
18654
BEGIN
 
18655
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18656
f_charbig = 'updated by trigger'
 
18657
      WHERE f_int1 = - old.f_int1;
 
18658
END|
 
18659
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
18660
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18661
        
 
18662
# check trigger-6 success:      1
 
18663
DROP TRIGGER trg_1;
 
18664
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18665
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18666
f_charbig = 'just inserted'
 
18667
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18668
DELETE FROM t0_aux
 
18669
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18670
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18671
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18672
'just inserted' FROM t0_template
 
18673
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18674
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
18675
BEGIN
 
18676
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18677
f_charbig = 'updated by trigger'
 
18678
      WHERE f_int1 = - old.f_int1;
 
18679
END|
 
18680
DELETE FROM t0_aux
 
18681
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18682
        
 
18683
# check trigger-7 success:      1
 
18684
DROP TRIGGER trg_1;
 
18685
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18686
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18687
f_charbig = 'just inserted'
 
18688
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18689
DELETE FROM t0_aux
 
18690
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18691
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18692
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
18693
'just inserted' FROM t0_template
 
18694
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18695
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
18696
BEGIN
 
18697
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
18698
f_charbig = 'updated by trigger'
 
18699
      WHERE f_int1 = - old.f_int1;
 
18700
END|
 
18701
DELETE FROM t0_aux
 
18702
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
18703
        
 
18704
# check trigger-8 success:      1
 
18705
DROP TRIGGER trg_1;
 
18706
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18707
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18708
f_charbig = 'just inserted'
 
18709
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
18710
DELETE FROM t0_aux
 
18711
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18712
DELETE FROM t1
 
18713
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
18714
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18715
BEGIN
 
18716
SET new.f_int1 = old.f_int1 + @max_row,
 
18717
new.f_int2 = old.f_int2 - @max_row,
 
18718
new.f_charbig = '####updated per update trigger####';
 
18719
END|
 
18720
UPDATE t1
 
18721
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18722
f_charbig = '####updated per update statement itself####';
 
18723
        
 
18724
# check trigger-9 success:      1
 
18725
DROP TRIGGER trg_2;
 
18726
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18727
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18728
f_charbig = CONCAT('===',f_char1,'===');
 
18729
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
18730
BEGIN
 
18731
SET new.f_int1 = new.f_int1 + @max_row,
 
18732
new.f_int2 = new.f_int2 - @max_row,
 
18733
new.f_charbig = '####updated per update trigger####';
 
18734
END|
 
18735
UPDATE t1
 
18736
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
18737
f_charbig = '####updated per update statement itself####';
 
18738
        
 
18739
# check trigger-10 success:     1
 
18740
DROP TRIGGER trg_2;
 
18741
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
18742
f_int2 = CAST(f_char1 AS SIGNED INT),
 
18743
f_charbig = CONCAT('===',f_char1,'===');
 
18744
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18745
BEGIN
 
18746
SET new.f_int1 = @my_max1 + @counter,
 
18747
new.f_int2 = @my_min2 - @counter,
 
18748
new.f_charbig = '####updated per insert trigger####';
 
18749
SET @counter = @counter + 1;
 
18750
END|
 
18751
SET @counter = 1;
 
18752
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18753
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18754
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18755
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18756
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18757
ORDER BY f_int1;
 
18758
DROP TRIGGER trg_3;
 
18759
        
 
18760
# check trigger-11 success:     1
 
18761
DELETE FROM t1
 
18762
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18763
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18764
AND f_charbig = '####updated per insert trigger####';
 
18765
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
18766
BEGIN
 
18767
SET new.f_int1 = @my_max1 + @counter,
 
18768
new.f_int2 = @my_min2 - @counter,
 
18769
new.f_charbig = '####updated per insert trigger####';
 
18770
SET @counter = @counter + 1;
 
18771
END|
 
18772
SET @counter = 1;
 
18773
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
18774
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
18775
SELECT CAST(f_int1 AS CHAR),
 
18776
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
18777
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
18778
ORDER BY f_int1;
 
18779
DROP TRIGGER trg_3;
 
18780
        
 
18781
# check trigger-12 success:     1
 
18782
DELETE FROM t1
 
18783
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
18784
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
18785
AND f_charbig = '####updated per insert trigger####';
 
18786
ANALYZE  TABLE t1;
 
18787
Table   Op      Msg_type        Msg_text
 
18788
test.t1 analyze status  OK
 
18789
CHECK    TABLE t1 EXTENDED;
 
18790
Table   Op      Msg_type        Msg_text
 
18791
test.t1 check   status  OK
 
18792
CHECKSUM TABLE t1 EXTENDED;
 
18793
Table   Checksum
 
18794
test.t1 <some_value>
 
18795
OPTIMIZE TABLE t1;
 
18796
Table   Op      Msg_type        Msg_text
 
18797
test.t1 optimize        status  OK
 
18798
# check layout success:    1
 
18799
REPAIR   TABLE t1 EXTENDED;
 
18800
Table   Op      Msg_type        Msg_text
 
18801
test.t1 repair  status  OK
 
18802
# check layout success:    1
 
18803
TRUNCATE t1;
 
18804
        
 
18805
# check TRUNCATE success:       1
 
18806
# check layout success:    1
 
18807
# End usability test (inc/partition_check.inc)
 
18808
DROP TABLE t1;
 
18809
CREATE TABLE t1 (
 
18810
f_int1 INTEGER,
 
18811
f_int2 INTEGER,
 
18812
f_char1 CHAR(20),
 
18813
f_char2 CHAR(20),
 
18814
f_charbig VARCHAR(1000)
 
18815
 
 
18816
)
 
18817
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
18818
(PARTITION part_1 VALUES IN (0)
 
18819
(SUBPARTITION sp11, SUBPARTITION sp12),
 
18820
PARTITION part_2 VALUES IN (1)
 
18821
(SUBPARTITION sp21, SUBPARTITION sp22),
 
18822
PARTITION part_3 VALUES IN (2)
 
18823
(SUBPARTITION sp31, SUBPARTITION sp32),
 
18824
PARTITION part_4 VALUES IN (NULL)
 
18825
(SUBPARTITION sp41, SUBPARTITION sp42));
 
18826
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18827
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18828
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
18829
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
 
18830
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
18831
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
18832
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
18833
# Start usability test (inc/partition_check.inc)
 
18834
create_command
 
18835
SHOW CREATE TABLE t1;
 
18836
Table   Create Table
 
18837
t1      CREATE TABLE `t1` (
 
18838
  `f_int1` int(11) DEFAULT NULL,
 
18839
  `f_int2` int(11) DEFAULT NULL,
 
18840
  `f_char1` char(20) DEFAULT NULL,
 
18841
  `f_char2` char(20) DEFAULT NULL,
 
18842
  `f_charbig` varchar(1000) DEFAULT NULL
 
18843
) ENGINE=MyISAM 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 = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
18844
 
 
18845
unified filelist
 
18846
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYD
 
18847
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYI
 
18848
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYD
 
18849
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYI
 
18850
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYD
 
18851
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYI
 
18852
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYD
 
18853
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYI
 
18854
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYD
 
18855
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYI
 
18856
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYD
 
18857
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYI
 
18858
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYD
 
18859
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYI
 
18860
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYD
 
18861
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYI
 
18862
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
18863
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
18864
 
 
18865
# check prerequisites-1 success:    1
 
18866
# check COUNT(*) success:    1
 
18867
# check MIN/MAX(f_int1) success:    1
 
18868
# check MIN/MAX(f_int2) success:    1
 
18869
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18870
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
18871
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
18872
WHERE f_int1 IN (2,3);
 
18873
# check prerequisites-3 success:    1
 
18874
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
18875
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
18876
# check read via f_int1 success: 1
 
18877
# check read via f_int2 success: 1
 
18878
        
 
18879
# check multiple-1 success:     1
 
18880
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
18881
        
 
18882
# check multiple-2 success:     1
 
18883
INSERT INTO t1 SELECT * FROM t0_template
 
18884
WHERE MOD(f_int1,3) = 0;
 
18885
        
 
18886
# check multiple-3 success:     1
 
18887
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
18888
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
18889
AND @max_row_div2 + @max_row_div4;
 
18890
        
 
18891
# check multiple-4 success:     1
 
18892
DELETE FROM t1
 
18893
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
18894
AND @max_row_div2 + @max_row_div4 + @max_row;
 
18895
        
 
18896
# check multiple-5 success:     1
 
18897
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
18898
INSERT INTO t1
 
18899
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18900
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18901
f_charbig = '#SINGLE#';
 
18902
        
 
18903
# check single-1 success:       1
 
18904
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
18905
INSERT INTO t1
 
18906
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
18907
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
18908
f_charbig = '#SINGLE#';
 
18909
        
 
18910
# check single-2 success:       1
 
18911
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
18912
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
18913
UPDATE t1 SET f_int1 = @cur_value2
 
18914
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
18915
        
 
18916
# check single-3 success:       1
 
18917
SET @cur_value1= -1;
 
18918
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
18919
UPDATE t1 SET f_int1 = @cur_value1
 
18920
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
18921
        
 
18922
# check single-4 success:       1
 
18923
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
18924
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
18925
        
 
18926
# check single-5 success:       1
 
18927
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
18928
        
 
18929
# check single-6 success:       1
 
18930
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
18931
        
 
18932
# check single-7 success:       1
 
18933
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
18934
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
18935
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
18936
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
18937
f_charbig = '#NULL#';
 
18938
INSERT INTO t1
 
18939
SET f_int1 = NULL , f_int2 = -@max_row,
 
18940
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
18941
f_charbig = '#NULL#';
 
18942
# check null success:    1
 
18943
        
 
18944
# check null-1 success:         1
 
18945
UPDATE t1 SET f_int1 = -@max_row
 
18946
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18947
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18948
        
 
18949
# check null-2 success:         1
 
18950
UPDATE t1 SET f_int1 = NULL
 
18951
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18952
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18953
        
 
18954
# check null-3 success:         1
 
18955
DELETE FROM t1
 
18956
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
18957
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
18958
        
 
18959
# check null-4 success:         1
 
18960
DELETE FROM t1
 
18961
WHERE f_int1 = 0 AND f_int2 = 0
 
18962
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
18963
AND f_charbig = '#NULL#';
 
18964
SET AUTOCOMMIT= 0;
 
18965
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18966
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18967
FROM t0_template source_tab
 
18968
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18969
        
 
18970
# check transactions-1 success:         1
 
18971
COMMIT WORK;
 
18972
        
 
18973
# check transactions-2 success:         1
 
18974
ROLLBACK WORK;
 
18975
        
 
18976
# check transactions-3 success:         1
 
18977
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18978
COMMIT WORK;
 
18979
ROLLBACK WORK;
 
18980
        
 
18981
# check transactions-4 success:         1
 
18982
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
18983
SELECT f_int1, f_int1, '', '', 'was inserted'
 
18984
FROM t0_template source_tab
 
18985
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
18986
        
 
18987
# check transactions-5 success:         1
 
18988
ROLLBACK WORK;
 
18989
Warnings:
 
18990
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
18991
        
 
18992
# check transactions-6 success:         1
 
18993
# INFO: Storage engine used for t1 seems to be not transactional.
 
18994
COMMIT;
 
18995
        
 
18996
# check transactions-7 success:         1
 
18997
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
18998
COMMIT WORK;
 
18999
SET @@session.sql_mode = 'traditional';
 
19000
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
19001
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19002
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
19003
'', '', 'was inserted' FROM t0_template
 
19004
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19005
ERROR 22012: Division by 0
 
19006
COMMIT;
 
19007
        
 
19008
# check transactions-8 success:         1
 
19009
# INFO: Storage engine used for t1 seems to be unable to revert
 
19010
#       changes made by the failing statement.
 
19011
SET @@session.sql_mode = '';
 
19012
SET AUTOCOMMIT= 1;
 
19013
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19014
COMMIT WORK;
 
19015
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
19016
        
 
19017
# check special-1 success:      1
 
19018
UPDATE t1 SET f_charbig = '';
 
19019
        
 
19020
# check special-2 success:      1
 
19021
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
19022
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19023
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
19024
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19025
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19026
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19027
'just inserted' FROM t0_template
 
19028
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19029
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
19030
BEGIN
 
19031
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19032
f_charbig = 'updated by trigger'
 
19033
      WHERE f_int1 = new.f_int1;
 
19034
END|
 
19035
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19036
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19037
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19038
        
 
19039
# check trigger-1 success:      1
 
19040
DROP TRIGGER trg_1;
 
19041
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19042
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19043
f_charbig = 'just inserted'
 
19044
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19045
DELETE FROM t0_aux
 
19046
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19047
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19048
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19049
'just inserted' FROM t0_template
 
19050
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19051
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
19052
BEGIN
 
19053
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19054
f_charbig = 'updated by trigger'
 
19055
      WHERE f_int1 = new.f_int1;
 
19056
END|
 
19057
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19058
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19059
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19060
        
 
19061
# check trigger-2 success:      1
 
19062
DROP TRIGGER trg_1;
 
19063
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19064
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19065
f_charbig = 'just inserted'
 
19066
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19067
DELETE FROM t0_aux
 
19068
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19069
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19070
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19071
'just inserted' FROM t0_template
 
19072
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19073
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19074
BEGIN
 
19075
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19076
f_charbig = 'updated by trigger'
 
19077
      WHERE f_int1 = new.f_int1;
 
19078
END|
 
19079
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19080
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19081
        
 
19082
# check trigger-3 success:      1
 
19083
DROP TRIGGER trg_1;
 
19084
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19085
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19086
f_charbig = 'just inserted'
 
19087
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19088
DELETE FROM t0_aux
 
19089
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19090
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19091
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19092
'just inserted' FROM t0_template
 
19093
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19094
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19095
BEGIN
 
19096
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19097
f_charbig = 'updated by trigger'
 
19098
      WHERE f_int1 = - old.f_int1;
 
19099
END|
 
19100
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19101
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19102
        
 
19103
# check trigger-4 success:      1
 
19104
DROP TRIGGER trg_1;
 
19105
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19106
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19107
f_charbig = 'just inserted'
 
19108
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19109
DELETE FROM t0_aux
 
19110
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19111
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19112
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19113
'just inserted' FROM t0_template
 
19114
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19115
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19116
BEGIN
 
19117
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19118
f_charbig = 'updated by trigger'
 
19119
      WHERE f_int1 = new.f_int1;
 
19120
END|
 
19121
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19122
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19123
        
 
19124
# check trigger-5 success:      1
 
19125
DROP TRIGGER trg_1;
 
19126
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19127
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19128
f_charbig = 'just inserted'
 
19129
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19130
DELETE FROM t0_aux
 
19131
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19132
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19133
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19134
'just inserted' FROM t0_template
 
19135
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19136
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19137
BEGIN
 
19138
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19139
f_charbig = 'updated by trigger'
 
19140
      WHERE f_int1 = - old.f_int1;
 
19141
END|
 
19142
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19143
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19144
        
 
19145
# check trigger-6 success:      1
 
19146
DROP TRIGGER trg_1;
 
19147
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19148
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19149
f_charbig = 'just inserted'
 
19150
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19151
DELETE FROM t0_aux
 
19152
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19153
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19154
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19155
'just inserted' FROM t0_template
 
19156
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19157
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
19158
BEGIN
 
19159
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19160
f_charbig = 'updated by trigger'
 
19161
      WHERE f_int1 = - old.f_int1;
 
19162
END|
 
19163
DELETE FROM t0_aux
 
19164
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19165
        
 
19166
# check trigger-7 success:      1
 
19167
DROP TRIGGER trg_1;
 
19168
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19169
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19170
f_charbig = 'just inserted'
 
19171
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19172
DELETE FROM t0_aux
 
19173
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19174
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19175
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19176
'just inserted' FROM t0_template
 
19177
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19178
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
19179
BEGIN
 
19180
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19181
f_charbig = 'updated by trigger'
 
19182
      WHERE f_int1 = - old.f_int1;
 
19183
END|
 
19184
DELETE FROM t0_aux
 
19185
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19186
        
 
19187
# check trigger-8 success:      1
 
19188
DROP TRIGGER trg_1;
 
19189
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19190
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19191
f_charbig = 'just inserted'
 
19192
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19193
DELETE FROM t0_aux
 
19194
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19195
DELETE FROM t1
 
19196
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19197
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19198
BEGIN
 
19199
SET new.f_int1 = old.f_int1 + @max_row,
 
19200
new.f_int2 = old.f_int2 - @max_row,
 
19201
new.f_charbig = '####updated per update trigger####';
 
19202
END|
 
19203
UPDATE t1
 
19204
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19205
f_charbig = '####updated per update statement itself####';
 
19206
        
 
19207
# check trigger-9 success:      1
 
19208
DROP TRIGGER trg_2;
 
19209
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19210
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19211
f_charbig = CONCAT('===',f_char1,'===');
 
19212
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19213
BEGIN
 
19214
SET new.f_int1 = new.f_int1 + @max_row,
 
19215
new.f_int2 = new.f_int2 - @max_row,
 
19216
new.f_charbig = '####updated per update trigger####';
 
19217
END|
 
19218
UPDATE t1
 
19219
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19220
f_charbig = '####updated per update statement itself####';
 
19221
        
 
19222
# check trigger-10 success:     1
 
19223
DROP TRIGGER trg_2;
 
19224
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19225
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19226
f_charbig = CONCAT('===',f_char1,'===');
 
19227
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19228
BEGIN
 
19229
SET new.f_int1 = @my_max1 + @counter,
 
19230
new.f_int2 = @my_min2 - @counter,
 
19231
new.f_charbig = '####updated per insert trigger####';
 
19232
SET @counter = @counter + 1;
 
19233
END|
 
19234
SET @counter = 1;
 
19235
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19236
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19237
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19238
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19239
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19240
ORDER BY f_int1;
 
19241
DROP TRIGGER trg_3;
 
19242
        
 
19243
# check trigger-11 success:     1
 
19244
DELETE FROM t1
 
19245
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19246
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19247
AND f_charbig = '####updated per insert trigger####';
 
19248
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19249
BEGIN
 
19250
SET new.f_int1 = @my_max1 + @counter,
 
19251
new.f_int2 = @my_min2 - @counter,
 
19252
new.f_charbig = '####updated per insert trigger####';
 
19253
SET @counter = @counter + 1;
 
19254
END|
 
19255
SET @counter = 1;
 
19256
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19257
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
19258
SELECT CAST(f_int1 AS CHAR),
 
19259
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19260
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19261
ORDER BY f_int1;
 
19262
DROP TRIGGER trg_3;
 
19263
        
 
19264
# check trigger-12 success:     1
 
19265
DELETE FROM t1
 
19266
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19267
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19268
AND f_charbig = '####updated per insert trigger####';
 
19269
ANALYZE  TABLE t1;
 
19270
Table   Op      Msg_type        Msg_text
 
19271
test.t1 analyze status  OK
 
19272
CHECK    TABLE t1 EXTENDED;
 
19273
Table   Op      Msg_type        Msg_text
 
19274
test.t1 check   status  OK
 
19275
CHECKSUM TABLE t1 EXTENDED;
 
19276
Table   Checksum
 
19277
test.t1 <some_value>
 
19278
OPTIMIZE TABLE t1;
 
19279
Table   Op      Msg_type        Msg_text
 
19280
test.t1 optimize        status  OK
 
19281
# check layout success:    1
 
19282
REPAIR   TABLE t1 EXTENDED;
 
19283
Table   Op      Msg_type        Msg_text
 
19284
test.t1 repair  status  OK
 
19285
# check layout success:    1
 
19286
TRUNCATE t1;
 
19287
        
 
19288
# check TRUNCATE success:       1
 
19289
# check layout success:    1
 
19290
# End usability test (inc/partition_check.inc)
 
19291
DROP TABLE t1;
 
19292
CREATE TABLE t1 (
 
19293
f_int1 INTEGER,
 
19294
f_int2 INTEGER,
 
19295
f_char1 CHAR(20),
 
19296
f_char2 CHAR(20),
 
19297
f_charbig VARCHAR(1000)
 
19298
 
 
19299
)
 
19300
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
19301
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
19302
(PARTITION part_1 VALUES IN (0),
 
19303
 PARTITION part_2 VALUES IN (1),
 
19304
 PARTITION part_3 VALUES IN (NULL));
 
19305
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19306
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19307
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
19308
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
 
19309
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19310
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19311
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19312
# Start usability test (inc/partition_check.inc)
 
19313
create_command
 
19314
SHOW CREATE TABLE t1;
 
19315
Table   Create Table
 
19316
t1      CREATE TABLE `t1` (
 
19317
  `f_int1` int(11) DEFAULT NULL,
 
19318
  `f_int2` int(11) DEFAULT NULL,
 
19319
  `f_char1` char(20) DEFAULT NULL,
 
19320
  `f_char2` char(20) DEFAULT NULL,
 
19321
  `f_charbig` varchar(1000) DEFAULT NULL
 
19322
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */
 
19323
 
 
19324
unified filelist
 
19325
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
19326
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
19327
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
19328
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
19329
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYD
 
19330
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYI
 
19331
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
19332
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
19333
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
19334
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
19335
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYD
 
19336
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYI
 
19337
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
19338
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
19339
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
19340
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
19341
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYD
 
19342
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYI
 
19343
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
19344
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
19345
 
 
19346
# check prerequisites-1 success:    1
 
19347
# check COUNT(*) success:    1
 
19348
# check MIN/MAX(f_int1) success:    1
 
19349
# check MIN/MAX(f_int2) success:    1
 
19350
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19351
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19352
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
19353
WHERE f_int1 IN (2,3);
 
19354
# check prerequisites-3 success:    1
 
19355
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
19356
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
19357
# check read via f_int1 success: 1
 
19358
# check read via f_int2 success: 1
 
19359
        
 
19360
# check multiple-1 success:     1
 
19361
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
19362
        
 
19363
# check multiple-2 success:     1
 
19364
INSERT INTO t1 SELECT * FROM t0_template
 
19365
WHERE MOD(f_int1,3) = 0;
 
19366
        
 
19367
# check multiple-3 success:     1
 
19368
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
19369
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
19370
AND @max_row_div2 + @max_row_div4;
 
19371
        
 
19372
# check multiple-4 success:     1
 
19373
DELETE FROM t1
 
19374
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
19375
AND @max_row_div2 + @max_row_div4 + @max_row;
 
19376
        
 
19377
# check multiple-5 success:     1
 
19378
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
19379
INSERT INTO t1
 
19380
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19381
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19382
f_charbig = '#SINGLE#';
 
19383
        
 
19384
# check single-1 success:       1
 
19385
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
19386
INSERT INTO t1
 
19387
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19388
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19389
f_charbig = '#SINGLE#';
 
19390
        
 
19391
# check single-2 success:       1
 
19392
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
19393
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
19394
UPDATE t1 SET f_int1 = @cur_value2
 
19395
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
19396
        
 
19397
# check single-3 success:       1
 
19398
SET @cur_value1= -1;
 
19399
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
19400
UPDATE t1 SET f_int1 = @cur_value1
 
19401
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
19402
        
 
19403
# check single-4 success:       1
 
19404
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
19405
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
19406
        
 
19407
# check single-5 success:       1
 
19408
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
19409
        
 
19410
# check single-6 success:       1
 
19411
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
19412
        
 
19413
# check single-7 success:       1
 
19414
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
19415
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
19416
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
19417
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
19418
f_charbig = '#NULL#';
 
19419
INSERT INTO t1
 
19420
SET f_int1 = NULL , f_int2 = -@max_row,
 
19421
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
19422
f_charbig = '#NULL#';
 
19423
# check null success:    1
 
19424
        
 
19425
# check null-1 success:         1
 
19426
UPDATE t1 SET f_int1 = -@max_row
 
19427
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19428
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19429
        
 
19430
# check null-2 success:         1
 
19431
UPDATE t1 SET f_int1 = NULL
 
19432
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19433
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19434
        
 
19435
# check null-3 success:         1
 
19436
DELETE FROM t1
 
19437
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19438
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19439
        
 
19440
# check null-4 success:         1
 
19441
DELETE FROM t1
 
19442
WHERE f_int1 = 0 AND f_int2 = 0
 
19443
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
19444
AND f_charbig = '#NULL#';
 
19445
SET AUTOCOMMIT= 0;
 
19446
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19447
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19448
FROM t0_template source_tab
 
19449
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19450
        
 
19451
# check transactions-1 success:         1
 
19452
COMMIT WORK;
 
19453
        
 
19454
# check transactions-2 success:         1
 
19455
ROLLBACK WORK;
 
19456
        
 
19457
# check transactions-3 success:         1
 
19458
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19459
COMMIT WORK;
 
19460
ROLLBACK WORK;
 
19461
        
 
19462
# check transactions-4 success:         1
 
19463
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19464
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19465
FROM t0_template source_tab
 
19466
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19467
        
 
19468
# check transactions-5 success:         1
 
19469
ROLLBACK WORK;
 
19470
Warnings:
 
19471
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
19472
        
 
19473
# check transactions-6 success:         1
 
19474
# INFO: Storage engine used for t1 seems to be not transactional.
 
19475
COMMIT;
 
19476
        
 
19477
# check transactions-7 success:         1
 
19478
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19479
COMMIT WORK;
 
19480
SET @@session.sql_mode = 'traditional';
 
19481
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
19482
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19483
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
19484
'', '', 'was inserted' FROM t0_template
 
19485
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19486
ERROR 22012: Division by 0
 
19487
COMMIT;
 
19488
        
 
19489
# check transactions-8 success:         1
 
19490
# INFO: Storage engine used for t1 seems to be unable to revert
 
19491
#       changes made by the failing statement.
 
19492
SET @@session.sql_mode = '';
 
19493
SET AUTOCOMMIT= 1;
 
19494
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19495
COMMIT WORK;
 
19496
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
19497
        
 
19498
# check special-1 success:      1
 
19499
UPDATE t1 SET f_charbig = '';
 
19500
        
 
19501
# check special-2 success:      1
 
19502
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
19503
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19504
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
19505
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19506
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19507
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19508
'just inserted' FROM t0_template
 
19509
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19510
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
19511
BEGIN
 
19512
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19513
f_charbig = 'updated by trigger'
 
19514
      WHERE f_int1 = new.f_int1;
 
19515
END|
 
19516
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19517
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19518
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19519
        
 
19520
# check trigger-1 success:      1
 
19521
DROP TRIGGER trg_1;
 
19522
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19523
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19524
f_charbig = 'just inserted'
 
19525
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19526
DELETE FROM t0_aux
 
19527
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19528
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19529
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19530
'just inserted' FROM t0_template
 
19531
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19532
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
19533
BEGIN
 
19534
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19535
f_charbig = 'updated by trigger'
 
19536
      WHERE f_int1 = new.f_int1;
 
19537
END|
 
19538
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19539
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19540
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19541
        
 
19542
# check trigger-2 success:      1
 
19543
DROP TRIGGER trg_1;
 
19544
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19545
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19546
f_charbig = 'just inserted'
 
19547
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19548
DELETE FROM t0_aux
 
19549
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19550
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19551
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19552
'just inserted' FROM t0_template
 
19553
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19554
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19555
BEGIN
 
19556
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19557
f_charbig = 'updated by trigger'
 
19558
      WHERE f_int1 = new.f_int1;
 
19559
END|
 
19560
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19561
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19562
        
 
19563
# check trigger-3 success:      1
 
19564
DROP TRIGGER trg_1;
 
19565
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19566
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19567
f_charbig = 'just inserted'
 
19568
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19569
DELETE FROM t0_aux
 
19570
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19571
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19572
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19573
'just inserted' FROM t0_template
 
19574
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19575
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
19576
BEGIN
 
19577
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19578
f_charbig = 'updated by trigger'
 
19579
      WHERE f_int1 = - old.f_int1;
 
19580
END|
 
19581
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19582
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19583
        
 
19584
# check trigger-4 success:      1
 
19585
DROP TRIGGER trg_1;
 
19586
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19587
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19588
f_charbig = 'just inserted'
 
19589
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19590
DELETE FROM t0_aux
 
19591
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19592
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19593
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19594
'just inserted' FROM t0_template
 
19595
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19596
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19597
BEGIN
 
19598
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19599
f_charbig = 'updated by trigger'
 
19600
      WHERE f_int1 = new.f_int1;
 
19601
END|
 
19602
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19603
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19604
        
 
19605
# check trigger-5 success:      1
 
19606
DROP TRIGGER trg_1;
 
19607
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19608
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19609
f_charbig = 'just inserted'
 
19610
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19611
DELETE FROM t0_aux
 
19612
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19613
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19614
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19615
'just inserted' FROM t0_template
 
19616
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19617
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
19618
BEGIN
 
19619
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19620
f_charbig = 'updated by trigger'
 
19621
      WHERE f_int1 = - old.f_int1;
 
19622
END|
 
19623
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
19624
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19625
        
 
19626
# check trigger-6 success:      1
 
19627
DROP TRIGGER trg_1;
 
19628
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19629
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19630
f_charbig = 'just inserted'
 
19631
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19632
DELETE FROM t0_aux
 
19633
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19634
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19635
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19636
'just inserted' FROM t0_template
 
19637
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19638
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
19639
BEGIN
 
19640
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19641
f_charbig = 'updated by trigger'
 
19642
      WHERE f_int1 = - old.f_int1;
 
19643
END|
 
19644
DELETE FROM t0_aux
 
19645
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19646
        
 
19647
# check trigger-7 success:      1
 
19648
DROP TRIGGER trg_1;
 
19649
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19650
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19651
f_charbig = 'just inserted'
 
19652
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19653
DELETE FROM t0_aux
 
19654
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19655
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19656
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19657
'just inserted' FROM t0_template
 
19658
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19659
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
19660
BEGIN
 
19661
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19662
f_charbig = 'updated by trigger'
 
19663
      WHERE f_int1 = - old.f_int1;
 
19664
END|
 
19665
DELETE FROM t0_aux
 
19666
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
19667
        
 
19668
# check trigger-8 success:      1
 
19669
DROP TRIGGER trg_1;
 
19670
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19671
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19672
f_charbig = 'just inserted'
 
19673
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19674
DELETE FROM t0_aux
 
19675
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19676
DELETE FROM t1
 
19677
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19678
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19679
BEGIN
 
19680
SET new.f_int1 = old.f_int1 + @max_row,
 
19681
new.f_int2 = old.f_int2 - @max_row,
 
19682
new.f_charbig = '####updated per update trigger####';
 
19683
END|
 
19684
UPDATE t1
 
19685
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19686
f_charbig = '####updated per update statement itself####';
 
19687
        
 
19688
# check trigger-9 success:      1
 
19689
DROP TRIGGER trg_2;
 
19690
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19691
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19692
f_charbig = CONCAT('===',f_char1,'===');
 
19693
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
19694
BEGIN
 
19695
SET new.f_int1 = new.f_int1 + @max_row,
 
19696
new.f_int2 = new.f_int2 - @max_row,
 
19697
new.f_charbig = '####updated per update trigger####';
 
19698
END|
 
19699
UPDATE t1
 
19700
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
19701
f_charbig = '####updated per update statement itself####';
 
19702
        
 
19703
# check trigger-10 success:     1
 
19704
DROP TRIGGER trg_2;
 
19705
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19706
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19707
f_charbig = CONCAT('===',f_char1,'===');
 
19708
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19709
BEGIN
 
19710
SET new.f_int1 = @my_max1 + @counter,
 
19711
new.f_int2 = @my_min2 - @counter,
 
19712
new.f_charbig = '####updated per insert trigger####';
 
19713
SET @counter = @counter + 1;
 
19714
END|
 
19715
SET @counter = 1;
 
19716
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19717
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19718
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19719
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19720
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19721
ORDER BY f_int1;
 
19722
DROP TRIGGER trg_3;
 
19723
        
 
19724
# check trigger-11 success:     1
 
19725
DELETE FROM t1
 
19726
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19727
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19728
AND f_charbig = '####updated per insert trigger####';
 
19729
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
19730
BEGIN
 
19731
SET new.f_int1 = @my_max1 + @counter,
 
19732
new.f_int2 = @my_min2 - @counter,
 
19733
new.f_charbig = '####updated per insert trigger####';
 
19734
SET @counter = @counter + 1;
 
19735
END|
 
19736
SET @counter = 1;
 
19737
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
19738
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
19739
SELECT CAST(f_int1 AS CHAR),
 
19740
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
19741
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
19742
ORDER BY f_int1;
 
19743
DROP TRIGGER trg_3;
 
19744
        
 
19745
# check trigger-12 success:     1
 
19746
DELETE FROM t1
 
19747
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
19748
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
19749
AND f_charbig = '####updated per insert trigger####';
 
19750
ANALYZE  TABLE t1;
 
19751
Table   Op      Msg_type        Msg_text
 
19752
test.t1 analyze status  OK
 
19753
CHECK    TABLE t1 EXTENDED;
 
19754
Table   Op      Msg_type        Msg_text
 
19755
test.t1 check   status  OK
 
19756
CHECKSUM TABLE t1 EXTENDED;
 
19757
Table   Checksum
 
19758
test.t1 <some_value>
 
19759
OPTIMIZE TABLE t1;
 
19760
Table   Op      Msg_type        Msg_text
 
19761
test.t1 optimize        status  OK
 
19762
# check layout success:    1
 
19763
REPAIR   TABLE t1 EXTENDED;
 
19764
Table   Op      Msg_type        Msg_text
 
19765
test.t1 repair  status  OK
 
19766
# check layout success:    1
 
19767
TRUNCATE t1;
 
19768
        
 
19769
# check TRUNCATE success:       1
 
19770
# check layout success:    1
 
19771
# End usability test (inc/partition_check.inc)
 
19772
DROP TABLE t1;
 
19773
#  3.2 ALTER ... OPTIMIZE PARTITION part_1,part_2;
 
19774
DROP TABLE IF EXISTS t1;
 
19775
CREATE TABLE t1 (
 
19776
f_int1 INTEGER,
 
19777
f_int2 INTEGER,
 
19778
f_char1 CHAR(20),
 
19779
f_char2 CHAR(20),
 
19780
f_charbig VARCHAR(1000)
 
19781
 
 
19782
)
 
19783
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
19784
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19785
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19786
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
19787
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
 
19788
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19789
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
19790
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
19791
# Start usability test (inc/partition_check.inc)
 
19792
create_command
 
19793
SHOW CREATE TABLE t1;
 
19794
Table   Create Table
 
19795
t1      CREATE TABLE `t1` (
 
19796
  `f_int1` int(11) DEFAULT NULL,
 
19797
  `f_int2` int(11) DEFAULT NULL,
 
19798
  `f_char1` char(20) DEFAULT NULL,
 
19799
  `f_char2` char(20) DEFAULT NULL,
 
19800
  `f_charbig` varchar(1000) DEFAULT NULL
 
19801
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */
 
19802
 
 
19803
unified filelist
 
19804
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
19805
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
19806
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
19807
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
19808
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
19809
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
19810
 
 
19811
# check prerequisites-1 success:    1
 
19812
# check COUNT(*) success:    1
 
19813
# check MIN/MAX(f_int1) success:    1
 
19814
# check MIN/MAX(f_int2) success:    1
 
19815
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19816
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
19817
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
19818
WHERE f_int1 IN (2,3);
 
19819
# check prerequisites-3 success:    1
 
19820
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
19821
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
19822
# check read via f_int1 success: 1
 
19823
# check read via f_int2 success: 1
 
19824
        
 
19825
# check multiple-1 success:     1
 
19826
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
19827
        
 
19828
# check multiple-2 success:     1
 
19829
INSERT INTO t1 SELECT * FROM t0_template
 
19830
WHERE MOD(f_int1,3) = 0;
 
19831
        
 
19832
# check multiple-3 success:     1
 
19833
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
19834
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
19835
AND @max_row_div2 + @max_row_div4;
 
19836
        
 
19837
# check multiple-4 success:     1
 
19838
DELETE FROM t1
 
19839
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
19840
AND @max_row_div2 + @max_row_div4 + @max_row;
 
19841
        
 
19842
# check multiple-5 success:     1
 
19843
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
19844
INSERT INTO t1
 
19845
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19846
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19847
f_charbig = '#SINGLE#';
 
19848
        
 
19849
# check single-1 success:       1
 
19850
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
19851
INSERT INTO t1
 
19852
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
19853
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
19854
f_charbig = '#SINGLE#';
 
19855
        
 
19856
# check single-2 success:       1
 
19857
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
19858
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
19859
UPDATE t1 SET f_int1 = @cur_value2
 
19860
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
19861
        
 
19862
# check single-3 success:       1
 
19863
SET @cur_value1= -1;
 
19864
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
19865
UPDATE t1 SET f_int1 = @cur_value1
 
19866
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
19867
        
 
19868
# check single-4 success:       1
 
19869
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
19870
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
19871
        
 
19872
# check single-5 success:       1
 
19873
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
19874
        
 
19875
# check single-6 success:       1
 
19876
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
19877
        
 
19878
# check single-7 success:       1
 
19879
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
19880
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
19881
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
19882
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
19883
f_charbig = '#NULL#';
 
19884
INSERT INTO t1
 
19885
SET f_int1 = NULL , f_int2 = -@max_row,
 
19886
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
19887
f_charbig = '#NULL#';
 
19888
# check null success:    1
 
19889
        
 
19890
# check null-1 success:         1
 
19891
UPDATE t1 SET f_int1 = -@max_row
 
19892
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19893
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19894
        
 
19895
# check null-2 success:         1
 
19896
UPDATE t1 SET f_int1 = NULL
 
19897
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19898
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19899
        
 
19900
# check null-3 success:         1
 
19901
DELETE FROM t1
 
19902
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
19903
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
19904
        
 
19905
# check null-4 success:         1
 
19906
DELETE FROM t1
 
19907
WHERE f_int1 = 0 AND f_int2 = 0
 
19908
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
19909
AND f_charbig = '#NULL#';
 
19910
SET AUTOCOMMIT= 0;
 
19911
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19912
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19913
FROM t0_template source_tab
 
19914
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19915
        
 
19916
# check transactions-1 success:         1
 
19917
COMMIT WORK;
 
19918
        
 
19919
# check transactions-2 success:         1
 
19920
ROLLBACK WORK;
 
19921
        
 
19922
# check transactions-3 success:         1
 
19923
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19924
COMMIT WORK;
 
19925
ROLLBACK WORK;
 
19926
        
 
19927
# check transactions-4 success:         1
 
19928
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19929
SELECT f_int1, f_int1, '', '', 'was inserted'
 
19930
FROM t0_template source_tab
 
19931
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19932
        
 
19933
# check transactions-5 success:         1
 
19934
ROLLBACK WORK;
 
19935
Warnings:
 
19936
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
19937
        
 
19938
# check transactions-6 success:         1
 
19939
# INFO: Storage engine used for t1 seems to be not transactional.
 
19940
COMMIT;
 
19941
        
 
19942
# check transactions-7 success:         1
 
19943
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19944
COMMIT WORK;
 
19945
SET @@session.sql_mode = 'traditional';
 
19946
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
19947
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
19948
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
19949
'', '', 'was inserted' FROM t0_template
 
19950
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
19951
ERROR 22012: Division by 0
 
19952
COMMIT;
 
19953
        
 
19954
# check transactions-8 success:         1
 
19955
# INFO: Storage engine used for t1 seems to be unable to revert
 
19956
#       changes made by the failing statement.
 
19957
SET @@session.sql_mode = '';
 
19958
SET AUTOCOMMIT= 1;
 
19959
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
19960
COMMIT WORK;
 
19961
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
19962
        
 
19963
# check special-1 success:      1
 
19964
UPDATE t1 SET f_charbig = '';
 
19965
        
 
19966
# check special-2 success:      1
 
19967
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
19968
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19969
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
19970
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19971
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19972
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19973
'just inserted' FROM t0_template
 
19974
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19975
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
19976
BEGIN
 
19977
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
19978
f_charbig = 'updated by trigger'
 
19979
      WHERE f_int1 = new.f_int1;
 
19980
END|
 
19981
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19982
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
19983
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19984
        
 
19985
# check trigger-1 success:      1
 
19986
DROP TRIGGER trg_1;
 
19987
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
19988
f_int2 = CAST(f_char1 AS SIGNED INT),
 
19989
f_charbig = 'just inserted'
 
19990
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
19991
DELETE FROM t0_aux
 
19992
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19993
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
19994
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
19995
'just inserted' FROM t0_template
 
19996
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
19997
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
19998
BEGIN
 
19999
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20000
f_charbig = 'updated by trigger'
 
20001
      WHERE f_int1 = new.f_int1;
 
20002
END|
 
20003
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20004
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20005
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20006
        
 
20007
# check trigger-2 success:      1
 
20008
DROP TRIGGER trg_1;
 
20009
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20010
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20011
f_charbig = 'just inserted'
 
20012
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20013
DELETE FROM t0_aux
 
20014
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20015
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20016
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20017
'just inserted' FROM t0_template
 
20018
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20019
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20020
BEGIN
 
20021
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20022
f_charbig = 'updated by trigger'
 
20023
      WHERE f_int1 = new.f_int1;
 
20024
END|
 
20025
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20026
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20027
        
 
20028
# check trigger-3 success:      1
 
20029
DROP TRIGGER trg_1;
 
20030
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20031
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20032
f_charbig = 'just inserted'
 
20033
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20034
DELETE FROM t0_aux
 
20035
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20036
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20037
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20038
'just inserted' FROM t0_template
 
20039
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20040
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20041
BEGIN
 
20042
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20043
f_charbig = 'updated by trigger'
 
20044
      WHERE f_int1 = - old.f_int1;
 
20045
END|
 
20046
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20047
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20048
        
 
20049
# check trigger-4 success:      1
 
20050
DROP TRIGGER trg_1;
 
20051
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20052
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20053
f_charbig = 'just inserted'
 
20054
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20055
DELETE FROM t0_aux
 
20056
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20057
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20058
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20059
'just inserted' FROM t0_template
 
20060
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20061
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20062
BEGIN
 
20063
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20064
f_charbig = 'updated by trigger'
 
20065
      WHERE f_int1 = new.f_int1;
 
20066
END|
 
20067
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20068
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20069
        
 
20070
# check trigger-5 success:      1
 
20071
DROP TRIGGER trg_1;
 
20072
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20073
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20074
f_charbig = 'just inserted'
 
20075
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20076
DELETE FROM t0_aux
 
20077
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20078
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20079
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20080
'just inserted' FROM t0_template
 
20081
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20082
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20083
BEGIN
 
20084
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20085
f_charbig = 'updated by trigger'
 
20086
      WHERE f_int1 = - old.f_int1;
 
20087
END|
 
20088
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20089
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20090
        
 
20091
# check trigger-6 success:      1
 
20092
DROP TRIGGER trg_1;
 
20093
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20094
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20095
f_charbig = 'just inserted'
 
20096
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20097
DELETE FROM t0_aux
 
20098
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20099
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20100
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20101
'just inserted' FROM t0_template
 
20102
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20103
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
20104
BEGIN
 
20105
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20106
f_charbig = 'updated by trigger'
 
20107
      WHERE f_int1 = - old.f_int1;
 
20108
END|
 
20109
DELETE FROM t0_aux
 
20110
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20111
        
 
20112
# check trigger-7 success:      1
 
20113
DROP TRIGGER trg_1;
 
20114
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20115
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20116
f_charbig = 'just inserted'
 
20117
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20118
DELETE FROM t0_aux
 
20119
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20120
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20121
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20122
'just inserted' FROM t0_template
 
20123
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20124
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
20125
BEGIN
 
20126
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20127
f_charbig = 'updated by trigger'
 
20128
      WHERE f_int1 = - old.f_int1;
 
20129
END|
 
20130
DELETE FROM t0_aux
 
20131
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20132
        
 
20133
# check trigger-8 success:      1
 
20134
DROP TRIGGER trg_1;
 
20135
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20136
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20137
f_charbig = 'just inserted'
 
20138
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20139
DELETE FROM t0_aux
 
20140
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20141
DELETE FROM t1
 
20142
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20143
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20144
BEGIN
 
20145
SET new.f_int1 = old.f_int1 + @max_row,
 
20146
new.f_int2 = old.f_int2 - @max_row,
 
20147
new.f_charbig = '####updated per update trigger####';
 
20148
END|
 
20149
UPDATE t1
 
20150
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20151
f_charbig = '####updated per update statement itself####';
 
20152
        
 
20153
# check trigger-9 success:      1
 
20154
DROP TRIGGER trg_2;
 
20155
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20156
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20157
f_charbig = CONCAT('===',f_char1,'===');
 
20158
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20159
BEGIN
 
20160
SET new.f_int1 = new.f_int1 + @max_row,
 
20161
new.f_int2 = new.f_int2 - @max_row,
 
20162
new.f_charbig = '####updated per update trigger####';
 
20163
END|
 
20164
UPDATE t1
 
20165
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20166
f_charbig = '####updated per update statement itself####';
 
20167
        
 
20168
# check trigger-10 success:     1
 
20169
DROP TRIGGER trg_2;
 
20170
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20171
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20172
f_charbig = CONCAT('===',f_char1,'===');
 
20173
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20174
BEGIN
 
20175
SET new.f_int1 = @my_max1 + @counter,
 
20176
new.f_int2 = @my_min2 - @counter,
 
20177
new.f_charbig = '####updated per insert trigger####';
 
20178
SET @counter = @counter + 1;
 
20179
END|
 
20180
SET @counter = 1;
 
20181
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20182
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20183
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20184
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20185
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20186
ORDER BY f_int1;
 
20187
DROP TRIGGER trg_3;
 
20188
        
 
20189
# check trigger-11 success:     1
 
20190
DELETE FROM t1
 
20191
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20192
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20193
AND f_charbig = '####updated per insert trigger####';
 
20194
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20195
BEGIN
 
20196
SET new.f_int1 = @my_max1 + @counter,
 
20197
new.f_int2 = @my_min2 - @counter,
 
20198
new.f_charbig = '####updated per insert trigger####';
 
20199
SET @counter = @counter + 1;
 
20200
END|
 
20201
SET @counter = 1;
 
20202
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20203
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
20204
SELECT CAST(f_int1 AS CHAR),
 
20205
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20206
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20207
ORDER BY f_int1;
 
20208
DROP TRIGGER trg_3;
 
20209
        
 
20210
# check trigger-12 success:     1
 
20211
DELETE FROM t1
 
20212
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20213
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20214
AND f_charbig = '####updated per insert trigger####';
 
20215
ANALYZE  TABLE t1;
 
20216
Table   Op      Msg_type        Msg_text
 
20217
test.t1 analyze status  OK
 
20218
CHECK    TABLE t1 EXTENDED;
 
20219
Table   Op      Msg_type        Msg_text
 
20220
test.t1 check   status  OK
 
20221
CHECKSUM TABLE t1 EXTENDED;
 
20222
Table   Checksum
 
20223
test.t1 <some_value>
 
20224
OPTIMIZE TABLE t1;
 
20225
Table   Op      Msg_type        Msg_text
 
20226
test.t1 optimize        status  OK
 
20227
# check layout success:    1
 
20228
REPAIR   TABLE t1 EXTENDED;
 
20229
Table   Op      Msg_type        Msg_text
 
20230
test.t1 repair  status  OK
 
20231
# check layout success:    1
 
20232
TRUNCATE t1;
 
20233
        
 
20234
# check TRUNCATE success:       1
 
20235
# check layout success:    1
 
20236
# End usability test (inc/partition_check.inc)
 
20237
DROP TABLE t1;
 
20238
CREATE TABLE t1 (
 
20239
f_int1 INTEGER,
 
20240
f_int2 INTEGER,
 
20241
f_char1 CHAR(20),
 
20242
f_char2 CHAR(20),
 
20243
f_charbig VARCHAR(1000)
 
20244
 
 
20245
)
 
20246
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
20247
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20248
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20249
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
20250
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
 
20251
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20252
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20253
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20254
# Start usability test (inc/partition_check.inc)
 
20255
create_command
 
20256
SHOW CREATE TABLE t1;
 
20257
Table   Create Table
 
20258
t1      CREATE TABLE `t1` (
 
20259
  `f_int1` int(11) DEFAULT NULL,
 
20260
  `f_int2` int(11) DEFAULT NULL,
 
20261
  `f_char1` char(20) DEFAULT NULL,
 
20262
  `f_char2` char(20) DEFAULT NULL,
 
20263
  `f_charbig` varchar(1000) DEFAULT NULL
 
20264
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */
 
20265
 
 
20266
unified filelist
 
20267
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
20268
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
20269
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
20270
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
20271
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
20272
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
20273
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
20274
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
20275
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
20276
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
20277
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
20278
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
20279
 
 
20280
# check prerequisites-1 success:    1
 
20281
# check COUNT(*) success:    1
 
20282
# check MIN/MAX(f_int1) success:    1
 
20283
# check MIN/MAX(f_int2) success:    1
 
20284
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20285
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20286
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
20287
WHERE f_int1 IN (2,3);
 
20288
# check prerequisites-3 success:    1
 
20289
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
20290
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
20291
# check read via f_int1 success: 1
 
20292
# check read via f_int2 success: 1
 
20293
        
 
20294
# check multiple-1 success:     1
 
20295
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
20296
        
 
20297
# check multiple-2 success:     1
 
20298
INSERT INTO t1 SELECT * FROM t0_template
 
20299
WHERE MOD(f_int1,3) = 0;
 
20300
        
 
20301
# check multiple-3 success:     1
 
20302
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
20303
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
20304
AND @max_row_div2 + @max_row_div4;
 
20305
        
 
20306
# check multiple-4 success:     1
 
20307
DELETE FROM t1
 
20308
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
20309
AND @max_row_div2 + @max_row_div4 + @max_row;
 
20310
        
 
20311
# check multiple-5 success:     1
 
20312
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
20313
INSERT INTO t1
 
20314
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20315
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20316
f_charbig = '#SINGLE#';
 
20317
        
 
20318
# check single-1 success:       1
 
20319
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
20320
INSERT INTO t1
 
20321
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20322
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20323
f_charbig = '#SINGLE#';
 
20324
        
 
20325
# check single-2 success:       1
 
20326
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
20327
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
20328
UPDATE t1 SET f_int1 = @cur_value2
 
20329
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
20330
        
 
20331
# check single-3 success:       1
 
20332
SET @cur_value1= -1;
 
20333
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
20334
UPDATE t1 SET f_int1 = @cur_value1
 
20335
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
20336
        
 
20337
# check single-4 success:       1
 
20338
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
20339
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
20340
        
 
20341
# check single-5 success:       1
 
20342
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
20343
        
 
20344
# check single-6 success:       1
 
20345
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
20346
        
 
20347
# check single-7 success:       1
 
20348
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
20349
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
20350
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
20351
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
20352
f_charbig = '#NULL#';
 
20353
INSERT INTO t1
 
20354
SET f_int1 = NULL , f_int2 = -@max_row,
 
20355
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
20356
f_charbig = '#NULL#';
 
20357
# check null success:    1
 
20358
        
 
20359
# check null-1 success:         1
 
20360
UPDATE t1 SET f_int1 = -@max_row
 
20361
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20362
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20363
        
 
20364
# check null-2 success:         1
 
20365
UPDATE t1 SET f_int1 = NULL
 
20366
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20367
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20368
        
 
20369
# check null-3 success:         1
 
20370
DELETE FROM t1
 
20371
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20372
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20373
        
 
20374
# check null-4 success:         1
 
20375
DELETE FROM t1
 
20376
WHERE f_int1 = 0 AND f_int2 = 0
 
20377
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
20378
AND f_charbig = '#NULL#';
 
20379
SET AUTOCOMMIT= 0;
 
20380
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20381
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20382
FROM t0_template source_tab
 
20383
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20384
        
 
20385
# check transactions-1 success:         1
 
20386
COMMIT WORK;
 
20387
        
 
20388
# check transactions-2 success:         1
 
20389
ROLLBACK WORK;
 
20390
        
 
20391
# check transactions-3 success:         1
 
20392
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20393
COMMIT WORK;
 
20394
ROLLBACK WORK;
 
20395
        
 
20396
# check transactions-4 success:         1
 
20397
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20398
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20399
FROM t0_template source_tab
 
20400
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20401
        
 
20402
# check transactions-5 success:         1
 
20403
ROLLBACK WORK;
 
20404
Warnings:
 
20405
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
20406
        
 
20407
# check transactions-6 success:         1
 
20408
# INFO: Storage engine used for t1 seems to be not transactional.
 
20409
COMMIT;
 
20410
        
 
20411
# check transactions-7 success:         1
 
20412
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20413
COMMIT WORK;
 
20414
SET @@session.sql_mode = 'traditional';
 
20415
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
20416
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20417
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
20418
'', '', 'was inserted' FROM t0_template
 
20419
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20420
ERROR 22012: Division by 0
 
20421
COMMIT;
 
20422
        
 
20423
# check transactions-8 success:         1
 
20424
# INFO: Storage engine used for t1 seems to be unable to revert
 
20425
#       changes made by the failing statement.
 
20426
SET @@session.sql_mode = '';
 
20427
SET AUTOCOMMIT= 1;
 
20428
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20429
COMMIT WORK;
 
20430
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
20431
        
 
20432
# check special-1 success:      1
 
20433
UPDATE t1 SET f_charbig = '';
 
20434
        
 
20435
# check special-2 success:      1
 
20436
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
20437
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20438
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
20439
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20440
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20441
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20442
'just inserted' FROM t0_template
 
20443
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20444
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
20445
BEGIN
 
20446
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20447
f_charbig = 'updated by trigger'
 
20448
      WHERE f_int1 = new.f_int1;
 
20449
END|
 
20450
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20451
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20452
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20453
        
 
20454
# check trigger-1 success:      1
 
20455
DROP TRIGGER trg_1;
 
20456
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20457
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20458
f_charbig = 'just inserted'
 
20459
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20460
DELETE FROM t0_aux
 
20461
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20462
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20463
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20464
'just inserted' FROM t0_template
 
20465
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20466
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
20467
BEGIN
 
20468
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20469
f_charbig = 'updated by trigger'
 
20470
      WHERE f_int1 = new.f_int1;
 
20471
END|
 
20472
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20473
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20474
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20475
        
 
20476
# check trigger-2 success:      1
 
20477
DROP TRIGGER trg_1;
 
20478
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20479
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20480
f_charbig = 'just inserted'
 
20481
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20482
DELETE FROM t0_aux
 
20483
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20484
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20485
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20486
'just inserted' FROM t0_template
 
20487
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20488
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20489
BEGIN
 
20490
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20491
f_charbig = 'updated by trigger'
 
20492
      WHERE f_int1 = new.f_int1;
 
20493
END|
 
20494
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20495
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20496
        
 
20497
# check trigger-3 success:      1
 
20498
DROP TRIGGER trg_1;
 
20499
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20500
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20501
f_charbig = 'just inserted'
 
20502
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20503
DELETE FROM t0_aux
 
20504
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20505
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20506
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20507
'just inserted' FROM t0_template
 
20508
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20509
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20510
BEGIN
 
20511
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20512
f_charbig = 'updated by trigger'
 
20513
      WHERE f_int1 = - old.f_int1;
 
20514
END|
 
20515
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20516
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20517
        
 
20518
# check trigger-4 success:      1
 
20519
DROP TRIGGER trg_1;
 
20520
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20521
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20522
f_charbig = 'just inserted'
 
20523
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20524
DELETE FROM t0_aux
 
20525
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20526
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20527
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20528
'just inserted' FROM t0_template
 
20529
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20530
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20531
BEGIN
 
20532
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20533
f_charbig = 'updated by trigger'
 
20534
      WHERE f_int1 = new.f_int1;
 
20535
END|
 
20536
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20537
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20538
        
 
20539
# check trigger-5 success:      1
 
20540
DROP TRIGGER trg_1;
 
20541
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20542
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20543
f_charbig = 'just inserted'
 
20544
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20545
DELETE FROM t0_aux
 
20546
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20547
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20548
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20549
'just inserted' FROM t0_template
 
20550
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20551
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
20552
BEGIN
 
20553
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20554
f_charbig = 'updated by trigger'
 
20555
      WHERE f_int1 = - old.f_int1;
 
20556
END|
 
20557
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20558
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20559
        
 
20560
# check trigger-6 success:      1
 
20561
DROP TRIGGER trg_1;
 
20562
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20563
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20564
f_charbig = 'just inserted'
 
20565
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20566
DELETE FROM t0_aux
 
20567
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20568
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20569
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20570
'just inserted' FROM t0_template
 
20571
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20572
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
20573
BEGIN
 
20574
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20575
f_charbig = 'updated by trigger'
 
20576
      WHERE f_int1 = - old.f_int1;
 
20577
END|
 
20578
DELETE FROM t0_aux
 
20579
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20580
        
 
20581
# check trigger-7 success:      1
 
20582
DROP TRIGGER trg_1;
 
20583
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20584
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20585
f_charbig = 'just inserted'
 
20586
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20587
DELETE FROM t0_aux
 
20588
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20589
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20590
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20591
'just inserted' FROM t0_template
 
20592
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20593
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
20594
BEGIN
 
20595
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20596
f_charbig = 'updated by trigger'
 
20597
      WHERE f_int1 = - old.f_int1;
 
20598
END|
 
20599
DELETE FROM t0_aux
 
20600
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20601
        
 
20602
# check trigger-8 success:      1
 
20603
DROP TRIGGER trg_1;
 
20604
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20605
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20606
f_charbig = 'just inserted'
 
20607
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20608
DELETE FROM t0_aux
 
20609
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20610
DELETE FROM t1
 
20611
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20612
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20613
BEGIN
 
20614
SET new.f_int1 = old.f_int1 + @max_row,
 
20615
new.f_int2 = old.f_int2 - @max_row,
 
20616
new.f_charbig = '####updated per update trigger####';
 
20617
END|
 
20618
UPDATE t1
 
20619
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20620
f_charbig = '####updated per update statement itself####';
 
20621
        
 
20622
# check trigger-9 success:      1
 
20623
DROP TRIGGER trg_2;
 
20624
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20625
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20626
f_charbig = CONCAT('===',f_char1,'===');
 
20627
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
20628
BEGIN
 
20629
SET new.f_int1 = new.f_int1 + @max_row,
 
20630
new.f_int2 = new.f_int2 - @max_row,
 
20631
new.f_charbig = '####updated per update trigger####';
 
20632
END|
 
20633
UPDATE t1
 
20634
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
20635
f_charbig = '####updated per update statement itself####';
 
20636
        
 
20637
# check trigger-10 success:     1
 
20638
DROP TRIGGER trg_2;
 
20639
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20640
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20641
f_charbig = CONCAT('===',f_char1,'===');
 
20642
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20643
BEGIN
 
20644
SET new.f_int1 = @my_max1 + @counter,
 
20645
new.f_int2 = @my_min2 - @counter,
 
20646
new.f_charbig = '####updated per insert trigger####';
 
20647
SET @counter = @counter + 1;
 
20648
END|
 
20649
SET @counter = 1;
 
20650
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20651
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20652
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20653
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20654
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20655
ORDER BY f_int1;
 
20656
DROP TRIGGER trg_3;
 
20657
        
 
20658
# check trigger-11 success:     1
 
20659
DELETE FROM t1
 
20660
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20661
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20662
AND f_charbig = '####updated per insert trigger####';
 
20663
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
20664
BEGIN
 
20665
SET new.f_int1 = @my_max1 + @counter,
 
20666
new.f_int2 = @my_min2 - @counter,
 
20667
new.f_charbig = '####updated per insert trigger####';
 
20668
SET @counter = @counter + 1;
 
20669
END|
 
20670
SET @counter = 1;
 
20671
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
20672
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
20673
SELECT CAST(f_int1 AS CHAR),
 
20674
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
20675
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
20676
ORDER BY f_int1;
 
20677
DROP TRIGGER trg_3;
 
20678
        
 
20679
# check trigger-12 success:     1
 
20680
DELETE FROM t1
 
20681
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
20682
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
20683
AND f_charbig = '####updated per insert trigger####';
 
20684
ANALYZE  TABLE t1;
 
20685
Table   Op      Msg_type        Msg_text
 
20686
test.t1 analyze status  OK
 
20687
CHECK    TABLE t1 EXTENDED;
 
20688
Table   Op      Msg_type        Msg_text
 
20689
test.t1 check   status  OK
 
20690
CHECKSUM TABLE t1 EXTENDED;
 
20691
Table   Checksum
 
20692
test.t1 <some_value>
 
20693
OPTIMIZE TABLE t1;
 
20694
Table   Op      Msg_type        Msg_text
 
20695
test.t1 optimize        status  OK
 
20696
# check layout success:    1
 
20697
REPAIR   TABLE t1 EXTENDED;
 
20698
Table   Op      Msg_type        Msg_text
 
20699
test.t1 repair  status  OK
 
20700
# check layout success:    1
 
20701
TRUNCATE t1;
 
20702
        
 
20703
# check TRUNCATE success:       1
 
20704
# check layout success:    1
 
20705
# End usability test (inc/partition_check.inc)
 
20706
DROP TABLE t1;
 
20707
CREATE TABLE t1 (
 
20708
f_int1 INTEGER,
 
20709
f_int2 INTEGER,
 
20710
f_char1 CHAR(20),
 
20711
f_char2 CHAR(20),
 
20712
f_charbig VARCHAR(1000)
 
20713
 
 
20714
)
 
20715
PARTITION BY LIST(MOD(f_int1,4))
 
20716
(PARTITION part_3 VALUES IN (-3),
 
20717
PARTITION part_2 VALUES IN (-2),
 
20718
PARTITION part_1 VALUES IN (-1),
 
20719
PARTITION part_N VALUES IN (NULL),
 
20720
PARTITION part0 VALUES IN (0),
 
20721
PARTITION part1 VALUES IN (1),
 
20722
PARTITION part2 VALUES IN (2),
 
20723
PARTITION part3 VALUES IN (3));
 
20724
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20725
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20726
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
20727
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
 
20728
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20729
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
20730
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
20731
# Start usability test (inc/partition_check.inc)
 
20732
create_command
 
20733
SHOW CREATE TABLE t1;
 
20734
Table   Create Table
 
20735
t1      CREATE TABLE `t1` (
 
20736
  `f_int1` int(11) DEFAULT NULL,
 
20737
  `f_int2` int(11) DEFAULT NULL,
 
20738
  `f_char1` char(20) DEFAULT NULL,
 
20739
  `f_char2` char(20) DEFAULT NULL,
 
20740
  `f_charbig` varchar(1000) DEFAULT NULL
 
20741
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
20742
 
 
20743
unified filelist
 
20744
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
20745
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
20746
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
20747
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
20748
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
20749
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
20750
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
20751
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
20752
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
20753
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
20754
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
20755
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
20756
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
20757
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
20758
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
20759
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
20760
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
20761
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
20762
 
 
20763
# check prerequisites-1 success:    1
 
20764
# check COUNT(*) success:    1
 
20765
# check MIN/MAX(f_int1) success:    1
 
20766
# check MIN/MAX(f_int2) success:    1
 
20767
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20768
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
20769
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
20770
WHERE f_int1 IN (2,3);
 
20771
# check prerequisites-3 success:    1
 
20772
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
20773
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
20774
# check read via f_int1 success: 1
 
20775
# check read via f_int2 success: 1
 
20776
        
 
20777
# check multiple-1 success:     1
 
20778
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
20779
        
 
20780
# check multiple-2 success:     1
 
20781
INSERT INTO t1 SELECT * FROM t0_template
 
20782
WHERE MOD(f_int1,3) = 0;
 
20783
        
 
20784
# check multiple-3 success:     1
 
20785
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
20786
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
20787
AND @max_row_div2 + @max_row_div4;
 
20788
        
 
20789
# check multiple-4 success:     1
 
20790
DELETE FROM t1
 
20791
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
20792
AND @max_row_div2 + @max_row_div4 + @max_row;
 
20793
        
 
20794
# check multiple-5 success:     1
 
20795
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
20796
INSERT INTO t1
 
20797
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20798
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20799
f_charbig = '#SINGLE#';
 
20800
        
 
20801
# check single-1 success:       1
 
20802
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
20803
INSERT INTO t1
 
20804
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
20805
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
20806
f_charbig = '#SINGLE#';
 
20807
        
 
20808
# check single-2 success:       1
 
20809
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
20810
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
20811
UPDATE t1 SET f_int1 = @cur_value2
 
20812
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
20813
        
 
20814
# check single-3 success:       1
 
20815
SET @cur_value1= -1;
 
20816
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
20817
UPDATE t1 SET f_int1 = @cur_value1
 
20818
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
20819
        
 
20820
# check single-4 success:       1
 
20821
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
20822
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
20823
        
 
20824
# check single-5 success:       1
 
20825
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
20826
        
 
20827
# check single-6 success:       1
 
20828
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
20829
        
 
20830
# check single-7 success:       1
 
20831
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
20832
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
20833
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
20834
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
20835
f_charbig = '#NULL#';
 
20836
INSERT INTO t1
 
20837
SET f_int1 = NULL , f_int2 = -@max_row,
 
20838
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
20839
f_charbig = '#NULL#';
 
20840
# check null success:    1
 
20841
        
 
20842
# check null-1 success:         1
 
20843
UPDATE t1 SET f_int1 = -@max_row
 
20844
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20845
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20846
        
 
20847
# check null-2 success:         1
 
20848
UPDATE t1 SET f_int1 = NULL
 
20849
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20850
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20851
        
 
20852
# check null-3 success:         1
 
20853
DELETE FROM t1
 
20854
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
20855
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
20856
        
 
20857
# check null-4 success:         1
 
20858
DELETE FROM t1
 
20859
WHERE f_int1 = 0 AND f_int2 = 0
 
20860
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
20861
AND f_charbig = '#NULL#';
 
20862
SET AUTOCOMMIT= 0;
 
20863
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20864
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20865
FROM t0_template source_tab
 
20866
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20867
        
 
20868
# check transactions-1 success:         1
 
20869
COMMIT WORK;
 
20870
        
 
20871
# check transactions-2 success:         1
 
20872
ROLLBACK WORK;
 
20873
        
 
20874
# check transactions-3 success:         1
 
20875
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20876
COMMIT WORK;
 
20877
ROLLBACK WORK;
 
20878
        
 
20879
# check transactions-4 success:         1
 
20880
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20881
SELECT f_int1, f_int1, '', '', 'was inserted'
 
20882
FROM t0_template source_tab
 
20883
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20884
        
 
20885
# check transactions-5 success:         1
 
20886
ROLLBACK WORK;
 
20887
Warnings:
 
20888
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
20889
        
 
20890
# check transactions-6 success:         1
 
20891
# INFO: Storage engine used for t1 seems to be not transactional.
 
20892
COMMIT;
 
20893
        
 
20894
# check transactions-7 success:         1
 
20895
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20896
COMMIT WORK;
 
20897
SET @@session.sql_mode = 'traditional';
 
20898
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
20899
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
20900
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
20901
'', '', 'was inserted' FROM t0_template
 
20902
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
20903
ERROR 22012: Division by 0
 
20904
COMMIT;
 
20905
        
 
20906
# check transactions-8 success:         1
 
20907
# INFO: Storage engine used for t1 seems to be unable to revert
 
20908
#       changes made by the failing statement.
 
20909
SET @@session.sql_mode = '';
 
20910
SET AUTOCOMMIT= 1;
 
20911
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
20912
COMMIT WORK;
 
20913
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
20914
        
 
20915
# check special-1 success:      1
 
20916
UPDATE t1 SET f_charbig = '';
 
20917
        
 
20918
# check special-2 success:      1
 
20919
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
20920
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20921
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
20922
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20923
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20924
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20925
'just inserted' FROM t0_template
 
20926
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20927
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
20928
BEGIN
 
20929
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20930
f_charbig = 'updated by trigger'
 
20931
      WHERE f_int1 = new.f_int1;
 
20932
END|
 
20933
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20934
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20935
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20936
        
 
20937
# check trigger-1 success:      1
 
20938
DROP TRIGGER trg_1;
 
20939
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20940
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20941
f_charbig = 'just inserted'
 
20942
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20943
DELETE FROM t0_aux
 
20944
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20945
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20946
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20947
'just inserted' FROM t0_template
 
20948
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20949
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
20950
BEGIN
 
20951
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20952
f_charbig = 'updated by trigger'
 
20953
      WHERE f_int1 = new.f_int1;
 
20954
END|
 
20955
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20956
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
20957
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20958
        
 
20959
# check trigger-2 success:      1
 
20960
DROP TRIGGER trg_1;
 
20961
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20962
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20963
f_charbig = 'just inserted'
 
20964
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20965
DELETE FROM t0_aux
 
20966
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20967
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20968
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20969
'just inserted' FROM t0_template
 
20970
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20971
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20972
BEGIN
 
20973
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20974
f_charbig = 'updated by trigger'
 
20975
      WHERE f_int1 = new.f_int1;
 
20976
END|
 
20977
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20978
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
20979
        
 
20980
# check trigger-3 success:      1
 
20981
DROP TRIGGER trg_1;
 
20982
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
20983
f_int2 = CAST(f_char1 AS SIGNED INT),
 
20984
f_charbig = 'just inserted'
 
20985
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
20986
DELETE FROM t0_aux
 
20987
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20988
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
20989
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
20990
'just inserted' FROM t0_template
 
20991
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
20992
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
20993
BEGIN
 
20994
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
20995
f_charbig = 'updated by trigger'
 
20996
      WHERE f_int1 = - old.f_int1;
 
20997
END|
 
20998
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
20999
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21000
        
 
21001
# check trigger-4 success:      1
 
21002
DROP TRIGGER trg_1;
 
21003
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21004
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21005
f_charbig = 'just inserted'
 
21006
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21007
DELETE FROM t0_aux
 
21008
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21009
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21010
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21011
'just inserted' FROM t0_template
 
21012
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21013
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21014
BEGIN
 
21015
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21016
f_charbig = 'updated by trigger'
 
21017
      WHERE f_int1 = new.f_int1;
 
21018
END|
 
21019
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21020
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21021
        
 
21022
# check trigger-5 success:      1
 
21023
DROP TRIGGER trg_1;
 
21024
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21025
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21026
f_charbig = 'just inserted'
 
21027
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21028
DELETE FROM t0_aux
 
21029
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21030
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21031
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21032
'just inserted' FROM t0_template
 
21033
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21034
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21035
BEGIN
 
21036
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21037
f_charbig = 'updated by trigger'
 
21038
      WHERE f_int1 = - old.f_int1;
 
21039
END|
 
21040
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21041
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21042
        
 
21043
# check trigger-6 success:      1
 
21044
DROP TRIGGER trg_1;
 
21045
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21046
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21047
f_charbig = 'just inserted'
 
21048
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21049
DELETE FROM t0_aux
 
21050
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21051
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21052
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21053
'just inserted' FROM t0_template
 
21054
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21055
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
21056
BEGIN
 
21057
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21058
f_charbig = 'updated by trigger'
 
21059
      WHERE f_int1 = - old.f_int1;
 
21060
END|
 
21061
DELETE FROM t0_aux
 
21062
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21063
        
 
21064
# check trigger-7 success:      1
 
21065
DROP TRIGGER trg_1;
 
21066
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21067
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21068
f_charbig = 'just inserted'
 
21069
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21070
DELETE FROM t0_aux
 
21071
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21072
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21073
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21074
'just inserted' FROM t0_template
 
21075
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21076
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
21077
BEGIN
 
21078
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21079
f_charbig = 'updated by trigger'
 
21080
      WHERE f_int1 = - old.f_int1;
 
21081
END|
 
21082
DELETE FROM t0_aux
 
21083
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21084
        
 
21085
# check trigger-8 success:      1
 
21086
DROP TRIGGER trg_1;
 
21087
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21088
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21089
f_charbig = 'just inserted'
 
21090
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21091
DELETE FROM t0_aux
 
21092
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21093
DELETE FROM t1
 
21094
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21095
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21096
BEGIN
 
21097
SET new.f_int1 = old.f_int1 + @max_row,
 
21098
new.f_int2 = old.f_int2 - @max_row,
 
21099
new.f_charbig = '####updated per update trigger####';
 
21100
END|
 
21101
UPDATE t1
 
21102
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21103
f_charbig = '####updated per update statement itself####';
 
21104
        
 
21105
# check trigger-9 success:      1
 
21106
DROP TRIGGER trg_2;
 
21107
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21108
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21109
f_charbig = CONCAT('===',f_char1,'===');
 
21110
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21111
BEGIN
 
21112
SET new.f_int1 = new.f_int1 + @max_row,
 
21113
new.f_int2 = new.f_int2 - @max_row,
 
21114
new.f_charbig = '####updated per update trigger####';
 
21115
END|
 
21116
UPDATE t1
 
21117
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21118
f_charbig = '####updated per update statement itself####';
 
21119
        
 
21120
# check trigger-10 success:     1
 
21121
DROP TRIGGER trg_2;
 
21122
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21123
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21124
f_charbig = CONCAT('===',f_char1,'===');
 
21125
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21126
BEGIN
 
21127
SET new.f_int1 = @my_max1 + @counter,
 
21128
new.f_int2 = @my_min2 - @counter,
 
21129
new.f_charbig = '####updated per insert trigger####';
 
21130
SET @counter = @counter + 1;
 
21131
END|
 
21132
SET @counter = 1;
 
21133
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21134
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21135
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21136
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21137
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21138
ORDER BY f_int1;
 
21139
DROP TRIGGER trg_3;
 
21140
        
 
21141
# check trigger-11 success:     1
 
21142
DELETE FROM t1
 
21143
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21144
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21145
AND f_charbig = '####updated per insert trigger####';
 
21146
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21147
BEGIN
 
21148
SET new.f_int1 = @my_max1 + @counter,
 
21149
new.f_int2 = @my_min2 - @counter,
 
21150
new.f_charbig = '####updated per insert trigger####';
 
21151
SET @counter = @counter + 1;
 
21152
END|
 
21153
SET @counter = 1;
 
21154
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21155
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
21156
SELECT CAST(f_int1 AS CHAR),
 
21157
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21158
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21159
ORDER BY f_int1;
 
21160
DROP TRIGGER trg_3;
 
21161
        
 
21162
# check trigger-12 success:     1
 
21163
DELETE FROM t1
 
21164
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21165
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21166
AND f_charbig = '####updated per insert trigger####';
 
21167
ANALYZE  TABLE t1;
 
21168
Table   Op      Msg_type        Msg_text
 
21169
test.t1 analyze status  OK
 
21170
CHECK    TABLE t1 EXTENDED;
 
21171
Table   Op      Msg_type        Msg_text
 
21172
test.t1 check   status  OK
 
21173
CHECKSUM TABLE t1 EXTENDED;
 
21174
Table   Checksum
 
21175
test.t1 <some_value>
 
21176
OPTIMIZE TABLE t1;
 
21177
Table   Op      Msg_type        Msg_text
 
21178
test.t1 optimize        status  OK
 
21179
# check layout success:    1
 
21180
REPAIR   TABLE t1 EXTENDED;
 
21181
Table   Op      Msg_type        Msg_text
 
21182
test.t1 repair  status  OK
 
21183
# check layout success:    1
 
21184
TRUNCATE t1;
 
21185
        
 
21186
# check TRUNCATE success:       1
 
21187
# check layout success:    1
 
21188
# End usability test (inc/partition_check.inc)
 
21189
DROP TABLE t1;
 
21190
CREATE TABLE t1 (
 
21191
f_int1 INTEGER,
 
21192
f_int2 INTEGER,
 
21193
f_char1 CHAR(20),
 
21194
f_char2 CHAR(20),
 
21195
f_charbig VARCHAR(1000)
 
21196
 
 
21197
)
 
21198
PARTITION BY RANGE(f_int1)
 
21199
(PARTITION parta VALUES LESS THAN (0),
 
21200
PARTITION part_1 VALUES LESS THAN (5),
 
21201
PARTITION part_2 VALUES LESS THAN (10),
 
21202
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
21203
PARTITION part_4 VALUES LESS THAN (20),
 
21204
PARTITION part_5 VALUES LESS THAN (2147483646));
 
21205
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21206
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21207
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
21208
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
 
21209
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21210
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21211
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21212
# Start usability test (inc/partition_check.inc)
 
21213
create_command
 
21214
SHOW CREATE TABLE t1;
 
21215
Table   Create Table
 
21216
t1      CREATE TABLE `t1` (
 
21217
  `f_int1` int(11) DEFAULT NULL,
 
21218
  `f_int2` int(11) DEFAULT NULL,
 
21219
  `f_char1` char(20) DEFAULT NULL,
 
21220
  `f_char2` char(20) DEFAULT NULL,
 
21221
  `f_charbig` varchar(1000) DEFAULT NULL
 
21222
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
21223
 
 
21224
unified filelist
 
21225
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
21226
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
21227
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
21228
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
21229
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
21230
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
21231
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
21232
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
21233
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
21234
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
21235
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
21236
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
21237
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
21238
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
21239
 
 
21240
# check prerequisites-1 success:    1
 
21241
# check COUNT(*) success:    1
 
21242
# check MIN/MAX(f_int1) success:    1
 
21243
# check MIN/MAX(f_int2) success:    1
 
21244
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21245
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21246
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
21247
WHERE f_int1 IN (2,3);
 
21248
# check prerequisites-3 success:    1
 
21249
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21250
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
21251
# check read via f_int1 success: 1
 
21252
# check read via f_int2 success: 1
 
21253
        
 
21254
# check multiple-1 success:     1
 
21255
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
21256
        
 
21257
# check multiple-2 success:     1
 
21258
INSERT INTO t1 SELECT * FROM t0_template
 
21259
WHERE MOD(f_int1,3) = 0;
 
21260
        
 
21261
# check multiple-3 success:     1
 
21262
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
21263
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
21264
AND @max_row_div2 + @max_row_div4;
 
21265
        
 
21266
# check multiple-4 success:     1
 
21267
DELETE FROM t1
 
21268
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
21269
AND @max_row_div2 + @max_row_div4 + @max_row;
 
21270
        
 
21271
# check multiple-5 success:     1
 
21272
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
21273
INSERT INTO t1
 
21274
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21275
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21276
f_charbig = '#SINGLE#';
 
21277
        
 
21278
# check single-1 success:       1
 
21279
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
21280
INSERT INTO t1
 
21281
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21282
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21283
f_charbig = '#SINGLE#';
 
21284
        
 
21285
# check single-2 success:       1
 
21286
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
21287
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
21288
UPDATE t1 SET f_int1 = @cur_value2
 
21289
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
21290
        
 
21291
# check single-3 success:       1
 
21292
SET @cur_value1= -1;
 
21293
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
21294
UPDATE t1 SET f_int1 = @cur_value1
 
21295
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
21296
        
 
21297
# check single-4 success:       1
 
21298
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
21299
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
21300
        
 
21301
# check single-5 success:       1
 
21302
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
21303
        
 
21304
# check single-6 success:       1
 
21305
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
21306
ERROR HY000: Table has no partition for value 2147483647
 
21307
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
21308
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
21309
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
21310
f_charbig = '#NULL#';
 
21311
INSERT INTO t1
 
21312
SET f_int1 = NULL , f_int2 = -@max_row,
 
21313
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
21314
f_charbig = '#NULL#';
 
21315
# check null success:    1
 
21316
        
 
21317
# check null-1 success:         1
 
21318
UPDATE t1 SET f_int1 = -@max_row
 
21319
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21320
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21321
        
 
21322
# check null-2 success:         1
 
21323
UPDATE t1 SET f_int1 = NULL
 
21324
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21325
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21326
        
 
21327
# check null-3 success:         1
 
21328
DELETE FROM t1
 
21329
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21330
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21331
        
 
21332
# check null-4 success:         1
 
21333
DELETE FROM t1
 
21334
WHERE f_int1 = 0 AND f_int2 = 0
 
21335
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
21336
AND f_charbig = '#NULL#';
 
21337
SET AUTOCOMMIT= 0;
 
21338
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21339
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21340
FROM t0_template source_tab
 
21341
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21342
        
 
21343
# check transactions-1 success:         1
 
21344
COMMIT WORK;
 
21345
        
 
21346
# check transactions-2 success:         1
 
21347
ROLLBACK WORK;
 
21348
        
 
21349
# check transactions-3 success:         1
 
21350
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21351
COMMIT WORK;
 
21352
ROLLBACK WORK;
 
21353
        
 
21354
# check transactions-4 success:         1
 
21355
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21356
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21357
FROM t0_template source_tab
 
21358
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21359
        
 
21360
# check transactions-5 success:         1
 
21361
ROLLBACK WORK;
 
21362
Warnings:
 
21363
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
21364
        
 
21365
# check transactions-6 success:         1
 
21366
# INFO: Storage engine used for t1 seems to be not transactional.
 
21367
COMMIT;
 
21368
        
 
21369
# check transactions-7 success:         1
 
21370
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21371
COMMIT WORK;
 
21372
SET @@session.sql_mode = 'traditional';
 
21373
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
21374
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21375
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
21376
'', '', 'was inserted' FROM t0_template
 
21377
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21378
ERROR 22012: Division by 0
 
21379
COMMIT;
 
21380
        
 
21381
# check transactions-8 success:         1
 
21382
# INFO: Storage engine used for t1 seems to be unable to revert
 
21383
#       changes made by the failing statement.
 
21384
SET @@session.sql_mode = '';
 
21385
SET AUTOCOMMIT= 1;
 
21386
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21387
COMMIT WORK;
 
21388
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
21389
        
 
21390
# check special-1 success:      1
 
21391
UPDATE t1 SET f_charbig = '';
 
21392
        
 
21393
# check special-2 success:      1
 
21394
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
21395
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21396
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
21397
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21398
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21399
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21400
'just inserted' FROM t0_template
 
21401
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21402
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
21403
BEGIN
 
21404
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21405
f_charbig = 'updated by trigger'
 
21406
      WHERE f_int1 = new.f_int1;
 
21407
END|
 
21408
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21409
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21410
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21411
        
 
21412
# check trigger-1 success:      1
 
21413
DROP TRIGGER trg_1;
 
21414
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21415
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21416
f_charbig = 'just inserted'
 
21417
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21418
DELETE FROM t0_aux
 
21419
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21420
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21421
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21422
'just inserted' FROM t0_template
 
21423
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21424
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
21425
BEGIN
 
21426
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21427
f_charbig = 'updated by trigger'
 
21428
      WHERE f_int1 = new.f_int1;
 
21429
END|
 
21430
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21431
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21432
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21433
        
 
21434
# check trigger-2 success:      1
 
21435
DROP TRIGGER trg_1;
 
21436
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21437
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21438
f_charbig = 'just inserted'
 
21439
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21440
DELETE FROM t0_aux
 
21441
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21442
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21443
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21444
'just inserted' FROM t0_template
 
21445
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21446
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21447
BEGIN
 
21448
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21449
f_charbig = 'updated by trigger'
 
21450
      WHERE f_int1 = new.f_int1;
 
21451
END|
 
21452
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21453
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21454
        
 
21455
# check trigger-3 success:      1
 
21456
DROP TRIGGER trg_1;
 
21457
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21458
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21459
f_charbig = 'just inserted'
 
21460
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21461
DELETE FROM t0_aux
 
21462
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21463
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21464
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21465
'just inserted' FROM t0_template
 
21466
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21467
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21468
BEGIN
 
21469
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21470
f_charbig = 'updated by trigger'
 
21471
      WHERE f_int1 = - old.f_int1;
 
21472
END|
 
21473
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21474
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21475
        
 
21476
# check trigger-4 success:      1
 
21477
DROP TRIGGER trg_1;
 
21478
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21479
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21480
f_charbig = 'just inserted'
 
21481
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21482
DELETE FROM t0_aux
 
21483
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21484
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21485
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21486
'just inserted' FROM t0_template
 
21487
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21488
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21489
BEGIN
 
21490
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21491
f_charbig = 'updated by trigger'
 
21492
      WHERE f_int1 = new.f_int1;
 
21493
END|
 
21494
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21495
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21496
        
 
21497
# check trigger-5 success:      1
 
21498
DROP TRIGGER trg_1;
 
21499
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21500
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21501
f_charbig = 'just inserted'
 
21502
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21503
DELETE FROM t0_aux
 
21504
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21505
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21506
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21507
'just inserted' FROM t0_template
 
21508
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21509
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21510
BEGIN
 
21511
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21512
f_charbig = 'updated by trigger'
 
21513
      WHERE f_int1 = - old.f_int1;
 
21514
END|
 
21515
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21516
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21517
        
 
21518
# check trigger-6 success:      1
 
21519
DROP TRIGGER trg_1;
 
21520
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21521
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21522
f_charbig = 'just inserted'
 
21523
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21524
DELETE FROM t0_aux
 
21525
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21526
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21527
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21528
'just inserted' FROM t0_template
 
21529
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21530
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
21531
BEGIN
 
21532
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21533
f_charbig = 'updated by trigger'
 
21534
      WHERE f_int1 = - old.f_int1;
 
21535
END|
 
21536
DELETE FROM t0_aux
 
21537
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21538
        
 
21539
# check trigger-7 success:      1
 
21540
DROP TRIGGER trg_1;
 
21541
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21542
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21543
f_charbig = 'just inserted'
 
21544
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21545
DELETE FROM t0_aux
 
21546
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21547
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21548
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21549
'just inserted' FROM t0_template
 
21550
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21551
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
21552
BEGIN
 
21553
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21554
f_charbig = 'updated by trigger'
 
21555
      WHERE f_int1 = - old.f_int1;
 
21556
END|
 
21557
DELETE FROM t0_aux
 
21558
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21559
        
 
21560
# check trigger-8 success:      1
 
21561
DROP TRIGGER trg_1;
 
21562
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21563
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21564
f_charbig = 'just inserted'
 
21565
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21566
DELETE FROM t0_aux
 
21567
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21568
DELETE FROM t1
 
21569
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21570
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21571
BEGIN
 
21572
SET new.f_int1 = old.f_int1 + @max_row,
 
21573
new.f_int2 = old.f_int2 - @max_row,
 
21574
new.f_charbig = '####updated per update trigger####';
 
21575
END|
 
21576
UPDATE t1
 
21577
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21578
f_charbig = '####updated per update statement itself####';
 
21579
        
 
21580
# check trigger-9 success:      1
 
21581
DROP TRIGGER trg_2;
 
21582
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21583
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21584
f_charbig = CONCAT('===',f_char1,'===');
 
21585
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
21586
BEGIN
 
21587
SET new.f_int1 = new.f_int1 + @max_row,
 
21588
new.f_int2 = new.f_int2 - @max_row,
 
21589
new.f_charbig = '####updated per update trigger####';
 
21590
END|
 
21591
UPDATE t1
 
21592
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
21593
f_charbig = '####updated per update statement itself####';
 
21594
        
 
21595
# check trigger-10 success:     1
 
21596
DROP TRIGGER trg_2;
 
21597
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21598
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21599
f_charbig = CONCAT('===',f_char1,'===');
 
21600
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21601
BEGIN
 
21602
SET new.f_int1 = @my_max1 + @counter,
 
21603
new.f_int2 = @my_min2 - @counter,
 
21604
new.f_charbig = '####updated per insert trigger####';
 
21605
SET @counter = @counter + 1;
 
21606
END|
 
21607
SET @counter = 1;
 
21608
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21609
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21610
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21611
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21612
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21613
ORDER BY f_int1;
 
21614
DROP TRIGGER trg_3;
 
21615
        
 
21616
# check trigger-11 success:     1
 
21617
DELETE FROM t1
 
21618
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21619
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21620
AND f_charbig = '####updated per insert trigger####';
 
21621
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
21622
BEGIN
 
21623
SET new.f_int1 = @my_max1 + @counter,
 
21624
new.f_int2 = @my_min2 - @counter,
 
21625
new.f_charbig = '####updated per insert trigger####';
 
21626
SET @counter = @counter + 1;
 
21627
END|
 
21628
SET @counter = 1;
 
21629
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
21630
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
21631
SELECT CAST(f_int1 AS CHAR),
 
21632
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
21633
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
21634
ORDER BY f_int1;
 
21635
DROP TRIGGER trg_3;
 
21636
        
 
21637
# check trigger-12 success:     1
 
21638
DELETE FROM t1
 
21639
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
21640
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
21641
AND f_charbig = '####updated per insert trigger####';
 
21642
ANALYZE  TABLE t1;
 
21643
Table   Op      Msg_type        Msg_text
 
21644
test.t1 analyze status  OK
 
21645
CHECK    TABLE t1 EXTENDED;
 
21646
Table   Op      Msg_type        Msg_text
 
21647
test.t1 check   status  OK
 
21648
CHECKSUM TABLE t1 EXTENDED;
 
21649
Table   Checksum
 
21650
test.t1 <some_value>
 
21651
OPTIMIZE TABLE t1;
 
21652
Table   Op      Msg_type        Msg_text
 
21653
test.t1 optimize        status  OK
 
21654
# check layout success:    1
 
21655
REPAIR   TABLE t1 EXTENDED;
 
21656
Table   Op      Msg_type        Msg_text
 
21657
test.t1 repair  status  OK
 
21658
# check layout success:    1
 
21659
TRUNCATE t1;
 
21660
        
 
21661
# check TRUNCATE success:       1
 
21662
# check layout success:    1
 
21663
# End usability test (inc/partition_check.inc)
 
21664
DROP TABLE t1;
 
21665
CREATE TABLE t1 (
 
21666
f_int1 INTEGER,
 
21667
f_int2 INTEGER,
 
21668
f_char1 CHAR(20),
 
21669
f_char2 CHAR(20),
 
21670
f_charbig VARCHAR(1000)
 
21671
 
 
21672
)
 
21673
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
21674
(PARTITION part_1 VALUES LESS THAN (0),
 
21675
PARTITION part_2 VALUES LESS THAN (5),
 
21676
PARTITION part_3 VALUES LESS THAN (10),
 
21677
PARTITION part_4 VALUES LESS THAN (2147483646));
 
21678
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21679
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21680
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
21681
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
 
21682
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21683
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
21684
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
21685
# Start usability test (inc/partition_check.inc)
 
21686
create_command
 
21687
SHOW CREATE TABLE t1;
 
21688
Table   Create Table
 
21689
t1      CREATE TABLE `t1` (
 
21690
  `f_int1` int(11) DEFAULT NULL,
 
21691
  `f_int2` int(11) DEFAULT NULL,
 
21692
  `f_char1` char(20) DEFAULT NULL,
 
21693
  `f_char2` char(20) DEFAULT NULL,
 
21694
  `f_charbig` varchar(1000) DEFAULT NULL
 
21695
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
21696
 
 
21697
unified filelist
 
21698
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
21699
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
21700
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
21701
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
21702
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
21703
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
21704
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
21705
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
21706
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
21707
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
21708
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
21709
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
21710
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYD
 
21711
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYI
 
21712
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYD
 
21713
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYI
 
21714
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
21715
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
21716
 
 
21717
# check prerequisites-1 success:    1
 
21718
# check COUNT(*) success:    1
 
21719
# check MIN/MAX(f_int1) success:    1
 
21720
# check MIN/MAX(f_int2) success:    1
 
21721
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21722
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
21723
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
21724
WHERE f_int1 IN (2,3);
 
21725
# check prerequisites-3 success:    1
 
21726
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
21727
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
21728
# check read via f_int1 success: 1
 
21729
# check read via f_int2 success: 1
 
21730
        
 
21731
# check multiple-1 success:     1
 
21732
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
21733
        
 
21734
# check multiple-2 success:     1
 
21735
INSERT INTO t1 SELECT * FROM t0_template
 
21736
WHERE MOD(f_int1,3) = 0;
 
21737
        
 
21738
# check multiple-3 success:     1
 
21739
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
21740
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
21741
AND @max_row_div2 + @max_row_div4;
 
21742
        
 
21743
# check multiple-4 success:     1
 
21744
DELETE FROM t1
 
21745
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
21746
AND @max_row_div2 + @max_row_div4 + @max_row;
 
21747
        
 
21748
# check multiple-5 success:     1
 
21749
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
21750
INSERT INTO t1
 
21751
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21752
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21753
f_charbig = '#SINGLE#';
 
21754
        
 
21755
# check single-1 success:       1
 
21756
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
21757
INSERT INTO t1
 
21758
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
21759
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
21760
f_charbig = '#SINGLE#';
 
21761
        
 
21762
# check single-2 success:       1
 
21763
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
21764
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
21765
UPDATE t1 SET f_int1 = @cur_value2
 
21766
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
21767
        
 
21768
# check single-3 success:       1
 
21769
SET @cur_value1= -1;
 
21770
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
21771
UPDATE t1 SET f_int1 = @cur_value1
 
21772
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
21773
        
 
21774
# check single-4 success:       1
 
21775
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
21776
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
21777
        
 
21778
# check single-5 success:       1
 
21779
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
21780
        
 
21781
# check single-6 success:       1
 
21782
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
21783
        
 
21784
# check single-7 success:       1
 
21785
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
21786
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
21787
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
21788
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
21789
f_charbig = '#NULL#';
 
21790
INSERT INTO t1
 
21791
SET f_int1 = NULL , f_int2 = -@max_row,
 
21792
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
21793
f_charbig = '#NULL#';
 
21794
# check null success:    1
 
21795
        
 
21796
# check null-1 success:         1
 
21797
UPDATE t1 SET f_int1 = -@max_row
 
21798
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21799
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21800
        
 
21801
# check null-2 success:         1
 
21802
UPDATE t1 SET f_int1 = NULL
 
21803
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21804
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21805
        
 
21806
# check null-3 success:         1
 
21807
DELETE FROM t1
 
21808
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
21809
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
21810
        
 
21811
# check null-4 success:         1
 
21812
DELETE FROM t1
 
21813
WHERE f_int1 = 0 AND f_int2 = 0
 
21814
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
21815
AND f_charbig = '#NULL#';
 
21816
SET AUTOCOMMIT= 0;
 
21817
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21818
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21819
FROM t0_template source_tab
 
21820
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21821
        
 
21822
# check transactions-1 success:         1
 
21823
COMMIT WORK;
 
21824
        
 
21825
# check transactions-2 success:         1
 
21826
ROLLBACK WORK;
 
21827
        
 
21828
# check transactions-3 success:         1
 
21829
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21830
COMMIT WORK;
 
21831
ROLLBACK WORK;
 
21832
        
 
21833
# check transactions-4 success:         1
 
21834
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21835
SELECT f_int1, f_int1, '', '', 'was inserted'
 
21836
FROM t0_template source_tab
 
21837
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21838
        
 
21839
# check transactions-5 success:         1
 
21840
ROLLBACK WORK;
 
21841
Warnings:
 
21842
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
21843
        
 
21844
# check transactions-6 success:         1
 
21845
# INFO: Storage engine used for t1 seems to be not transactional.
 
21846
COMMIT;
 
21847
        
 
21848
# check transactions-7 success:         1
 
21849
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21850
COMMIT WORK;
 
21851
SET @@session.sql_mode = 'traditional';
 
21852
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
21853
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
21854
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
21855
'', '', 'was inserted' FROM t0_template
 
21856
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
21857
ERROR 22012: Division by 0
 
21858
COMMIT;
 
21859
        
 
21860
# check transactions-8 success:         1
 
21861
# INFO: Storage engine used for t1 seems to be unable to revert
 
21862
#       changes made by the failing statement.
 
21863
SET @@session.sql_mode = '';
 
21864
SET AUTOCOMMIT= 1;
 
21865
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
21866
COMMIT WORK;
 
21867
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
21868
        
 
21869
# check special-1 success:      1
 
21870
UPDATE t1 SET f_charbig = '';
 
21871
        
 
21872
# check special-2 success:      1
 
21873
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
21874
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21875
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
21876
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21877
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21878
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21879
'just inserted' FROM t0_template
 
21880
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21881
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
21882
BEGIN
 
21883
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21884
f_charbig = 'updated by trigger'
 
21885
      WHERE f_int1 = new.f_int1;
 
21886
END|
 
21887
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21888
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21889
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21890
        
 
21891
# check trigger-1 success:      1
 
21892
DROP TRIGGER trg_1;
 
21893
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21894
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21895
f_charbig = 'just inserted'
 
21896
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21897
DELETE FROM t0_aux
 
21898
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21899
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21900
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21901
'just inserted' FROM t0_template
 
21902
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21903
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
21904
BEGIN
 
21905
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21906
f_charbig = 'updated by trigger'
 
21907
      WHERE f_int1 = new.f_int1;
 
21908
END|
 
21909
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21910
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
21911
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21912
        
 
21913
# check trigger-2 success:      1
 
21914
DROP TRIGGER trg_1;
 
21915
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21916
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21917
f_charbig = 'just inserted'
 
21918
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21919
DELETE FROM t0_aux
 
21920
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21921
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21922
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21923
'just inserted' FROM t0_template
 
21924
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21925
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21926
BEGIN
 
21927
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21928
f_charbig = 'updated by trigger'
 
21929
      WHERE f_int1 = new.f_int1;
 
21930
END|
 
21931
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21932
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21933
        
 
21934
# check trigger-3 success:      1
 
21935
DROP TRIGGER trg_1;
 
21936
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21937
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21938
f_charbig = 'just inserted'
 
21939
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21940
DELETE FROM t0_aux
 
21941
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21942
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21943
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21944
'just inserted' FROM t0_template
 
21945
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21946
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
21947
BEGIN
 
21948
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21949
f_charbig = 'updated by trigger'
 
21950
      WHERE f_int1 = - old.f_int1;
 
21951
END|
 
21952
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21953
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21954
        
 
21955
# check trigger-4 success:      1
 
21956
DROP TRIGGER trg_1;
 
21957
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21958
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21959
f_charbig = 'just inserted'
 
21960
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21961
DELETE FROM t0_aux
 
21962
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21963
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21964
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21965
'just inserted' FROM t0_template
 
21966
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21967
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21968
BEGIN
 
21969
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21970
f_charbig = 'updated by trigger'
 
21971
      WHERE f_int1 = new.f_int1;
 
21972
END|
 
21973
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21974
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21975
        
 
21976
# check trigger-5 success:      1
 
21977
DROP TRIGGER trg_1;
 
21978
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
21979
f_int2 = CAST(f_char1 AS SIGNED INT),
 
21980
f_charbig = 'just inserted'
 
21981
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
21982
DELETE FROM t0_aux
 
21983
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21984
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
21985
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
21986
'just inserted' FROM t0_template
 
21987
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
21988
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
21989
BEGIN
 
21990
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
21991
f_charbig = 'updated by trigger'
 
21992
      WHERE f_int1 = - old.f_int1;
 
21993
END|
 
21994
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
21995
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
21996
        
 
21997
# check trigger-6 success:      1
 
21998
DROP TRIGGER trg_1;
 
21999
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22000
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22001
f_charbig = 'just inserted'
 
22002
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22003
DELETE FROM t0_aux
 
22004
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22005
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22006
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22007
'just inserted' FROM t0_template
 
22008
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22009
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
22010
BEGIN
 
22011
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22012
f_charbig = 'updated by trigger'
 
22013
      WHERE f_int1 = - old.f_int1;
 
22014
END|
 
22015
DELETE FROM t0_aux
 
22016
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22017
        
 
22018
# check trigger-7 success:      1
 
22019
DROP TRIGGER trg_1;
 
22020
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22021
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22022
f_charbig = 'just inserted'
 
22023
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22024
DELETE FROM t0_aux
 
22025
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22026
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22027
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22028
'just inserted' FROM t0_template
 
22029
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22030
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
22031
BEGIN
 
22032
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22033
f_charbig = 'updated by trigger'
 
22034
      WHERE f_int1 = - old.f_int1;
 
22035
END|
 
22036
DELETE FROM t0_aux
 
22037
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22038
        
 
22039
# check trigger-8 success:      1
 
22040
DROP TRIGGER trg_1;
 
22041
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22042
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22043
f_charbig = 'just inserted'
 
22044
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22045
DELETE FROM t0_aux
 
22046
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22047
DELETE FROM t1
 
22048
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22049
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22050
BEGIN
 
22051
SET new.f_int1 = old.f_int1 + @max_row,
 
22052
new.f_int2 = old.f_int2 - @max_row,
 
22053
new.f_charbig = '####updated per update trigger####';
 
22054
END|
 
22055
UPDATE t1
 
22056
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22057
f_charbig = '####updated per update statement itself####';
 
22058
        
 
22059
# check trigger-9 success:      1
 
22060
DROP TRIGGER trg_2;
 
22061
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22062
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22063
f_charbig = CONCAT('===',f_char1,'===');
 
22064
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22065
BEGIN
 
22066
SET new.f_int1 = new.f_int1 + @max_row,
 
22067
new.f_int2 = new.f_int2 - @max_row,
 
22068
new.f_charbig = '####updated per update trigger####';
 
22069
END|
 
22070
UPDATE t1
 
22071
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22072
f_charbig = '####updated per update statement itself####';
 
22073
        
 
22074
# check trigger-10 success:     1
 
22075
DROP TRIGGER trg_2;
 
22076
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22077
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22078
f_charbig = CONCAT('===',f_char1,'===');
 
22079
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22080
BEGIN
 
22081
SET new.f_int1 = @my_max1 + @counter,
 
22082
new.f_int2 = @my_min2 - @counter,
 
22083
new.f_charbig = '####updated per insert trigger####';
 
22084
SET @counter = @counter + 1;
 
22085
END|
 
22086
SET @counter = 1;
 
22087
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22088
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22089
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22090
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22091
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22092
ORDER BY f_int1;
 
22093
DROP TRIGGER trg_3;
 
22094
        
 
22095
# check trigger-11 success:     1
 
22096
DELETE FROM t1
 
22097
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22098
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22099
AND f_charbig = '####updated per insert trigger####';
 
22100
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22101
BEGIN
 
22102
SET new.f_int1 = @my_max1 + @counter,
 
22103
new.f_int2 = @my_min2 - @counter,
 
22104
new.f_charbig = '####updated per insert trigger####';
 
22105
SET @counter = @counter + 1;
 
22106
END|
 
22107
SET @counter = 1;
 
22108
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22109
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
22110
SELECT CAST(f_int1 AS CHAR),
 
22111
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22112
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22113
ORDER BY f_int1;
 
22114
DROP TRIGGER trg_3;
 
22115
        
 
22116
# check trigger-12 success:     1
 
22117
DELETE FROM t1
 
22118
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22119
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22120
AND f_charbig = '####updated per insert trigger####';
 
22121
ANALYZE  TABLE t1;
 
22122
Table   Op      Msg_type        Msg_text
 
22123
test.t1 analyze status  OK
 
22124
CHECK    TABLE t1 EXTENDED;
 
22125
Table   Op      Msg_type        Msg_text
 
22126
test.t1 check   status  OK
 
22127
CHECKSUM TABLE t1 EXTENDED;
 
22128
Table   Checksum
 
22129
test.t1 <some_value>
 
22130
OPTIMIZE TABLE t1;
 
22131
Table   Op      Msg_type        Msg_text
 
22132
test.t1 optimize        status  OK
 
22133
# check layout success:    1
 
22134
REPAIR   TABLE t1 EXTENDED;
 
22135
Table   Op      Msg_type        Msg_text
 
22136
test.t1 repair  status  OK
 
22137
# check layout success:    1
 
22138
TRUNCATE t1;
 
22139
        
 
22140
# check TRUNCATE success:       1
 
22141
# check layout success:    1
 
22142
# End usability test (inc/partition_check.inc)
 
22143
DROP TABLE t1;
 
22144
CREATE TABLE t1 (
 
22145
f_int1 INTEGER,
 
22146
f_int2 INTEGER,
 
22147
f_char1 CHAR(20),
 
22148
f_char2 CHAR(20),
 
22149
f_charbig VARCHAR(1000)
 
22150
 
 
22151
)
 
22152
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
22153
(PARTITION part_1 VALUES LESS THAN (0)
 
22154
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
22155
PARTITION part_2 VALUES LESS THAN (5)
 
22156
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
22157
PARTITION part_3 VALUES LESS THAN (10)
 
22158
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
22159
PARTITION part_4 VALUES LESS THAN (2147483646)
 
22160
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
22161
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22162
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22163
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
22164
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
 
22165
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22166
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22167
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22168
# Start usability test (inc/partition_check.inc)
 
22169
create_command
 
22170
SHOW CREATE TABLE t1;
 
22171
Table   Create Table
 
22172
t1      CREATE TABLE `t1` (
 
22173
  `f_int1` int(11) DEFAULT NULL,
 
22174
  `f_int2` int(11) DEFAULT NULL,
 
22175
  `f_char1` char(20) DEFAULT NULL,
 
22176
  `f_char2` char(20) DEFAULT NULL,
 
22177
  `f_charbig` varchar(1000) DEFAULT NULL
 
22178
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
22179
 
 
22180
unified filelist
 
22181
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYD
 
22182
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYI
 
22183
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYD
 
22184
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYI
 
22185
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYD
 
22186
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYI
 
22187
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYD
 
22188
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYI
 
22189
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYD
 
22190
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYI
 
22191
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYD
 
22192
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYI
 
22193
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYD
 
22194
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYI
 
22195
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYD
 
22196
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYI
 
22197
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
22198
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
22199
 
 
22200
# check prerequisites-1 success:    1
 
22201
# check COUNT(*) success:    1
 
22202
# check MIN/MAX(f_int1) success:    1
 
22203
# check MIN/MAX(f_int2) success:    1
 
22204
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22205
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22206
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
22207
WHERE f_int1 IN (2,3);
 
22208
# check prerequisites-3 success:    1
 
22209
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
22210
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
22211
# check read via f_int1 success: 1
 
22212
# check read via f_int2 success: 1
 
22213
        
 
22214
# check multiple-1 success:     1
 
22215
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
22216
        
 
22217
# check multiple-2 success:     1
 
22218
INSERT INTO t1 SELECT * FROM t0_template
 
22219
WHERE MOD(f_int1,3) = 0;
 
22220
        
 
22221
# check multiple-3 success:     1
 
22222
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
22223
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
22224
AND @max_row_div2 + @max_row_div4;
 
22225
        
 
22226
# check multiple-4 success:     1
 
22227
DELETE FROM t1
 
22228
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
22229
AND @max_row_div2 + @max_row_div4 + @max_row;
 
22230
        
 
22231
# check multiple-5 success:     1
 
22232
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
22233
INSERT INTO t1
 
22234
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22235
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22236
f_charbig = '#SINGLE#';
 
22237
        
 
22238
# check single-1 success:       1
 
22239
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
22240
INSERT INTO t1
 
22241
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22242
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22243
f_charbig = '#SINGLE#';
 
22244
        
 
22245
# check single-2 success:       1
 
22246
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
22247
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
22248
UPDATE t1 SET f_int1 = @cur_value2
 
22249
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
22250
        
 
22251
# check single-3 success:       1
 
22252
SET @cur_value1= -1;
 
22253
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
22254
UPDATE t1 SET f_int1 = @cur_value1
 
22255
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
22256
        
 
22257
# check single-4 success:       1
 
22258
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
22259
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
22260
        
 
22261
# check single-5 success:       1
 
22262
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
22263
        
 
22264
# check single-6 success:       1
 
22265
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
22266
ERROR HY000: Table has no partition for value 2147483647
 
22267
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
22268
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
22269
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
22270
f_charbig = '#NULL#';
 
22271
INSERT INTO t1
 
22272
SET f_int1 = NULL , f_int2 = -@max_row,
 
22273
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
22274
f_charbig = '#NULL#';
 
22275
# check null success:    1
 
22276
        
 
22277
# check null-1 success:         1
 
22278
UPDATE t1 SET f_int1 = -@max_row
 
22279
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22280
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22281
        
 
22282
# check null-2 success:         1
 
22283
UPDATE t1 SET f_int1 = NULL
 
22284
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22285
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22286
        
 
22287
# check null-3 success:         1
 
22288
DELETE FROM t1
 
22289
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22290
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22291
        
 
22292
# check null-4 success:         1
 
22293
DELETE FROM t1
 
22294
WHERE f_int1 = 0 AND f_int2 = 0
 
22295
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
22296
AND f_charbig = '#NULL#';
 
22297
SET AUTOCOMMIT= 0;
 
22298
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22299
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22300
FROM t0_template source_tab
 
22301
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22302
        
 
22303
# check transactions-1 success:         1
 
22304
COMMIT WORK;
 
22305
        
 
22306
# check transactions-2 success:         1
 
22307
ROLLBACK WORK;
 
22308
        
 
22309
# check transactions-3 success:         1
 
22310
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22311
COMMIT WORK;
 
22312
ROLLBACK WORK;
 
22313
        
 
22314
# check transactions-4 success:         1
 
22315
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22316
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22317
FROM t0_template source_tab
 
22318
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22319
        
 
22320
# check transactions-5 success:         1
 
22321
ROLLBACK WORK;
 
22322
Warnings:
 
22323
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
22324
        
 
22325
# check transactions-6 success:         1
 
22326
# INFO: Storage engine used for t1 seems to be not transactional.
 
22327
COMMIT;
 
22328
        
 
22329
# check transactions-7 success:         1
 
22330
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22331
COMMIT WORK;
 
22332
SET @@session.sql_mode = 'traditional';
 
22333
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
22334
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22335
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
22336
'', '', 'was inserted' FROM t0_template
 
22337
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22338
ERROR 22012: Division by 0
 
22339
COMMIT;
 
22340
        
 
22341
# check transactions-8 success:         1
 
22342
# INFO: Storage engine used for t1 seems to be unable to revert
 
22343
#       changes made by the failing statement.
 
22344
SET @@session.sql_mode = '';
 
22345
SET AUTOCOMMIT= 1;
 
22346
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22347
COMMIT WORK;
 
22348
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
22349
        
 
22350
# check special-1 success:      1
 
22351
UPDATE t1 SET f_charbig = '';
 
22352
        
 
22353
# check special-2 success:      1
 
22354
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
22355
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22356
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
22357
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22358
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22359
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22360
'just inserted' FROM t0_template
 
22361
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22362
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
22363
BEGIN
 
22364
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22365
f_charbig = 'updated by trigger'
 
22366
      WHERE f_int1 = new.f_int1;
 
22367
END|
 
22368
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22369
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22370
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22371
        
 
22372
# check trigger-1 success:      1
 
22373
DROP TRIGGER trg_1;
 
22374
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22375
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22376
f_charbig = 'just inserted'
 
22377
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22378
DELETE FROM t0_aux
 
22379
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22380
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22381
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22382
'just inserted' FROM t0_template
 
22383
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22384
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
22385
BEGIN
 
22386
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22387
f_charbig = 'updated by trigger'
 
22388
      WHERE f_int1 = new.f_int1;
 
22389
END|
 
22390
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22391
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22392
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22393
        
 
22394
# check trigger-2 success:      1
 
22395
DROP TRIGGER trg_1;
 
22396
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22397
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22398
f_charbig = 'just inserted'
 
22399
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22400
DELETE FROM t0_aux
 
22401
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22402
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22403
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22404
'just inserted' FROM t0_template
 
22405
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22406
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22407
BEGIN
 
22408
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22409
f_charbig = 'updated by trigger'
 
22410
      WHERE f_int1 = new.f_int1;
 
22411
END|
 
22412
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22413
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22414
        
 
22415
# check trigger-3 success:      1
 
22416
DROP TRIGGER trg_1;
 
22417
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22418
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22419
f_charbig = 'just inserted'
 
22420
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22421
DELETE FROM t0_aux
 
22422
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22423
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22424
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22425
'just inserted' FROM t0_template
 
22426
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22427
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22428
BEGIN
 
22429
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22430
f_charbig = 'updated by trigger'
 
22431
      WHERE f_int1 = - old.f_int1;
 
22432
END|
 
22433
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22434
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22435
        
 
22436
# check trigger-4 success:      1
 
22437
DROP TRIGGER trg_1;
 
22438
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22439
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22440
f_charbig = 'just inserted'
 
22441
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22442
DELETE FROM t0_aux
 
22443
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22444
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22445
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22446
'just inserted' FROM t0_template
 
22447
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22448
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22449
BEGIN
 
22450
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22451
f_charbig = 'updated by trigger'
 
22452
      WHERE f_int1 = new.f_int1;
 
22453
END|
 
22454
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22455
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22456
        
 
22457
# check trigger-5 success:      1
 
22458
DROP TRIGGER trg_1;
 
22459
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22460
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22461
f_charbig = 'just inserted'
 
22462
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22463
DELETE FROM t0_aux
 
22464
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22465
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22466
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22467
'just inserted' FROM t0_template
 
22468
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22469
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22470
BEGIN
 
22471
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22472
f_charbig = 'updated by trigger'
 
22473
      WHERE f_int1 = - old.f_int1;
 
22474
END|
 
22475
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22476
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22477
        
 
22478
# check trigger-6 success:      1
 
22479
DROP TRIGGER trg_1;
 
22480
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22481
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22482
f_charbig = 'just inserted'
 
22483
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22484
DELETE FROM t0_aux
 
22485
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22486
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22487
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22488
'just inserted' FROM t0_template
 
22489
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22490
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
22491
BEGIN
 
22492
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22493
f_charbig = 'updated by trigger'
 
22494
      WHERE f_int1 = - old.f_int1;
 
22495
END|
 
22496
DELETE FROM t0_aux
 
22497
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22498
        
 
22499
# check trigger-7 success:      1
 
22500
DROP TRIGGER trg_1;
 
22501
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22502
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22503
f_charbig = 'just inserted'
 
22504
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22505
DELETE FROM t0_aux
 
22506
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22507
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22508
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22509
'just inserted' FROM t0_template
 
22510
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22511
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
22512
BEGIN
 
22513
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22514
f_charbig = 'updated by trigger'
 
22515
      WHERE f_int1 = - old.f_int1;
 
22516
END|
 
22517
DELETE FROM t0_aux
 
22518
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22519
        
 
22520
# check trigger-8 success:      1
 
22521
DROP TRIGGER trg_1;
 
22522
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22523
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22524
f_charbig = 'just inserted'
 
22525
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22526
DELETE FROM t0_aux
 
22527
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22528
DELETE FROM t1
 
22529
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22530
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22531
BEGIN
 
22532
SET new.f_int1 = old.f_int1 + @max_row,
 
22533
new.f_int2 = old.f_int2 - @max_row,
 
22534
new.f_charbig = '####updated per update trigger####';
 
22535
END|
 
22536
UPDATE t1
 
22537
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22538
f_charbig = '####updated per update statement itself####';
 
22539
        
 
22540
# check trigger-9 success:      1
 
22541
DROP TRIGGER trg_2;
 
22542
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22543
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22544
f_charbig = CONCAT('===',f_char1,'===');
 
22545
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
22546
BEGIN
 
22547
SET new.f_int1 = new.f_int1 + @max_row,
 
22548
new.f_int2 = new.f_int2 - @max_row,
 
22549
new.f_charbig = '####updated per update trigger####';
 
22550
END|
 
22551
UPDATE t1
 
22552
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
22553
f_charbig = '####updated per update statement itself####';
 
22554
        
 
22555
# check trigger-10 success:     1
 
22556
DROP TRIGGER trg_2;
 
22557
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22558
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22559
f_charbig = CONCAT('===',f_char1,'===');
 
22560
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22561
BEGIN
 
22562
SET new.f_int1 = @my_max1 + @counter,
 
22563
new.f_int2 = @my_min2 - @counter,
 
22564
new.f_charbig = '####updated per insert trigger####';
 
22565
SET @counter = @counter + 1;
 
22566
END|
 
22567
SET @counter = 1;
 
22568
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22569
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22570
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22571
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22572
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22573
ORDER BY f_int1;
 
22574
DROP TRIGGER trg_3;
 
22575
        
 
22576
# check trigger-11 success:     1
 
22577
DELETE FROM t1
 
22578
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22579
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22580
AND f_charbig = '####updated per insert trigger####';
 
22581
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
22582
BEGIN
 
22583
SET new.f_int1 = @my_max1 + @counter,
 
22584
new.f_int2 = @my_min2 - @counter,
 
22585
new.f_charbig = '####updated per insert trigger####';
 
22586
SET @counter = @counter + 1;
 
22587
END|
 
22588
SET @counter = 1;
 
22589
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
22590
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
22591
SELECT CAST(f_int1 AS CHAR),
 
22592
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
22593
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
22594
ORDER BY f_int1;
 
22595
DROP TRIGGER trg_3;
 
22596
        
 
22597
# check trigger-12 success:     1
 
22598
DELETE FROM t1
 
22599
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
22600
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
22601
AND f_charbig = '####updated per insert trigger####';
 
22602
ANALYZE  TABLE t1;
 
22603
Table   Op      Msg_type        Msg_text
 
22604
test.t1 analyze status  OK
 
22605
CHECK    TABLE t1 EXTENDED;
 
22606
Table   Op      Msg_type        Msg_text
 
22607
test.t1 check   status  OK
 
22608
CHECKSUM TABLE t1 EXTENDED;
 
22609
Table   Checksum
 
22610
test.t1 <some_value>
 
22611
OPTIMIZE TABLE t1;
 
22612
Table   Op      Msg_type        Msg_text
 
22613
test.t1 optimize        status  OK
 
22614
# check layout success:    1
 
22615
REPAIR   TABLE t1 EXTENDED;
 
22616
Table   Op      Msg_type        Msg_text
 
22617
test.t1 repair  status  OK
 
22618
# check layout success:    1
 
22619
TRUNCATE t1;
 
22620
        
 
22621
# check TRUNCATE success:       1
 
22622
# check layout success:    1
 
22623
# End usability test (inc/partition_check.inc)
 
22624
DROP TABLE t1;
 
22625
CREATE TABLE t1 (
 
22626
f_int1 INTEGER,
 
22627
f_int2 INTEGER,
 
22628
f_char1 CHAR(20),
 
22629
f_char2 CHAR(20),
 
22630
f_charbig VARCHAR(1000)
 
22631
 
 
22632
)
 
22633
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
22634
(PARTITION part_1 VALUES IN (0)
 
22635
(SUBPARTITION sp11, SUBPARTITION sp12),
 
22636
PARTITION part_2 VALUES IN (1)
 
22637
(SUBPARTITION sp21, SUBPARTITION sp22),
 
22638
PARTITION part_3 VALUES IN (2)
 
22639
(SUBPARTITION sp31, SUBPARTITION sp32),
 
22640
PARTITION part_4 VALUES IN (NULL)
 
22641
(SUBPARTITION sp41, SUBPARTITION sp42));
 
22642
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22643
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22644
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
22645
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
 
22646
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22647
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
22648
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
22649
# Start usability test (inc/partition_check.inc)
 
22650
create_command
 
22651
SHOW CREATE TABLE t1;
 
22652
Table   Create Table
 
22653
t1      CREATE TABLE `t1` (
 
22654
  `f_int1` int(11) DEFAULT NULL,
 
22655
  `f_int2` int(11) DEFAULT NULL,
 
22656
  `f_char1` char(20) DEFAULT NULL,
 
22657
  `f_char2` char(20) DEFAULT NULL,
 
22658
  `f_charbig` varchar(1000) DEFAULT NULL
 
22659
) ENGINE=MyISAM 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 = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
22660
 
 
22661
unified filelist
 
22662
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYD
 
22663
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYI
 
22664
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYD
 
22665
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYI
 
22666
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYD
 
22667
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYI
 
22668
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYD
 
22669
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYI
 
22670
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYD
 
22671
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYI
 
22672
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYD
 
22673
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYI
 
22674
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYD
 
22675
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYI
 
22676
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYD
 
22677
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYI
 
22678
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
22679
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
22680
 
 
22681
# check prerequisites-1 success:    1
 
22682
# check COUNT(*) success:    1
 
22683
# check MIN/MAX(f_int1) success:    1
 
22684
# check MIN/MAX(f_int2) success:    1
 
22685
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22686
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
22687
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
22688
WHERE f_int1 IN (2,3);
 
22689
# check prerequisites-3 success:    1
 
22690
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
22691
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
22692
# check read via f_int1 success: 1
 
22693
# check read via f_int2 success: 1
 
22694
        
 
22695
# check multiple-1 success:     1
 
22696
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
22697
        
 
22698
# check multiple-2 success:     1
 
22699
INSERT INTO t1 SELECT * FROM t0_template
 
22700
WHERE MOD(f_int1,3) = 0;
 
22701
        
 
22702
# check multiple-3 success:     1
 
22703
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
22704
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
22705
AND @max_row_div2 + @max_row_div4;
 
22706
        
 
22707
# check multiple-4 success:     1
 
22708
DELETE FROM t1
 
22709
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
22710
AND @max_row_div2 + @max_row_div4 + @max_row;
 
22711
        
 
22712
# check multiple-5 success:     1
 
22713
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
22714
INSERT INTO t1
 
22715
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22716
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22717
f_charbig = '#SINGLE#';
 
22718
        
 
22719
# check single-1 success:       1
 
22720
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
22721
INSERT INTO t1
 
22722
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
22723
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
22724
f_charbig = '#SINGLE#';
 
22725
        
 
22726
# check single-2 success:       1
 
22727
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
22728
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
22729
UPDATE t1 SET f_int1 = @cur_value2
 
22730
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
22731
        
 
22732
# check single-3 success:       1
 
22733
SET @cur_value1= -1;
 
22734
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
22735
UPDATE t1 SET f_int1 = @cur_value1
 
22736
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
22737
        
 
22738
# check single-4 success:       1
 
22739
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
22740
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
22741
        
 
22742
# check single-5 success:       1
 
22743
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
22744
        
 
22745
# check single-6 success:       1
 
22746
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
22747
        
 
22748
# check single-7 success:       1
 
22749
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
22750
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
22751
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
22752
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
22753
f_charbig = '#NULL#';
 
22754
INSERT INTO t1
 
22755
SET f_int1 = NULL , f_int2 = -@max_row,
 
22756
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
22757
f_charbig = '#NULL#';
 
22758
# check null success:    1
 
22759
        
 
22760
# check null-1 success:         1
 
22761
UPDATE t1 SET f_int1 = -@max_row
 
22762
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22763
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22764
        
 
22765
# check null-2 success:         1
 
22766
UPDATE t1 SET f_int1 = NULL
 
22767
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22768
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22769
        
 
22770
# check null-3 success:         1
 
22771
DELETE FROM t1
 
22772
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
22773
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
22774
        
 
22775
# check null-4 success:         1
 
22776
DELETE FROM t1
 
22777
WHERE f_int1 = 0 AND f_int2 = 0
 
22778
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
22779
AND f_charbig = '#NULL#';
 
22780
SET AUTOCOMMIT= 0;
 
22781
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22782
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22783
FROM t0_template source_tab
 
22784
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22785
        
 
22786
# check transactions-1 success:         1
 
22787
COMMIT WORK;
 
22788
        
 
22789
# check transactions-2 success:         1
 
22790
ROLLBACK WORK;
 
22791
        
 
22792
# check transactions-3 success:         1
 
22793
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22794
COMMIT WORK;
 
22795
ROLLBACK WORK;
 
22796
        
 
22797
# check transactions-4 success:         1
 
22798
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22799
SELECT f_int1, f_int1, '', '', 'was inserted'
 
22800
FROM t0_template source_tab
 
22801
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22802
        
 
22803
# check transactions-5 success:         1
 
22804
ROLLBACK WORK;
 
22805
Warnings:
 
22806
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
22807
        
 
22808
# check transactions-6 success:         1
 
22809
# INFO: Storage engine used for t1 seems to be not transactional.
 
22810
COMMIT;
 
22811
        
 
22812
# check transactions-7 success:         1
 
22813
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22814
COMMIT WORK;
 
22815
SET @@session.sql_mode = 'traditional';
 
22816
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
22817
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
22818
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
22819
'', '', 'was inserted' FROM t0_template
 
22820
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
22821
ERROR 22012: Division by 0
 
22822
COMMIT;
 
22823
        
 
22824
# check transactions-8 success:         1
 
22825
# INFO: Storage engine used for t1 seems to be unable to revert
 
22826
#       changes made by the failing statement.
 
22827
SET @@session.sql_mode = '';
 
22828
SET AUTOCOMMIT= 1;
 
22829
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
22830
COMMIT WORK;
 
22831
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
22832
        
 
22833
# check special-1 success:      1
 
22834
UPDATE t1 SET f_charbig = '';
 
22835
        
 
22836
# check special-2 success:      1
 
22837
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
22838
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22839
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
22840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22841
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22842
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22843
'just inserted' FROM t0_template
 
22844
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22845
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
22846
BEGIN
 
22847
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22848
f_charbig = 'updated by trigger'
 
22849
      WHERE f_int1 = new.f_int1;
 
22850
END|
 
22851
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22852
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22853
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22854
        
 
22855
# check trigger-1 success:      1
 
22856
DROP TRIGGER trg_1;
 
22857
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22858
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22859
f_charbig = 'just inserted'
 
22860
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22861
DELETE FROM t0_aux
 
22862
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22863
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22864
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22865
'just inserted' FROM t0_template
 
22866
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22867
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
22868
BEGIN
 
22869
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22870
f_charbig = 'updated by trigger'
 
22871
      WHERE f_int1 = new.f_int1;
 
22872
END|
 
22873
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22874
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
22875
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22876
        
 
22877
# check trigger-2 success:      1
 
22878
DROP TRIGGER trg_1;
 
22879
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22880
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22881
f_charbig = 'just inserted'
 
22882
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22883
DELETE FROM t0_aux
 
22884
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22885
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22886
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22887
'just inserted' FROM t0_template
 
22888
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22889
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22890
BEGIN
 
22891
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22892
f_charbig = 'updated by trigger'
 
22893
      WHERE f_int1 = new.f_int1;
 
22894
END|
 
22895
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22896
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22897
        
 
22898
# check trigger-3 success:      1
 
22899
DROP TRIGGER trg_1;
 
22900
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22901
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22902
f_charbig = 'just inserted'
 
22903
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22904
DELETE FROM t0_aux
 
22905
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22906
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22907
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22908
'just inserted' FROM t0_template
 
22909
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22910
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
22911
BEGIN
 
22912
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22913
f_charbig = 'updated by trigger'
 
22914
      WHERE f_int1 = - old.f_int1;
 
22915
END|
 
22916
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22917
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22918
        
 
22919
# check trigger-4 success:      1
 
22920
DROP TRIGGER trg_1;
 
22921
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22922
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22923
f_charbig = 'just inserted'
 
22924
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22925
DELETE FROM t0_aux
 
22926
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22927
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22928
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22929
'just inserted' FROM t0_template
 
22930
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22931
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22932
BEGIN
 
22933
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22934
f_charbig = 'updated by trigger'
 
22935
      WHERE f_int1 = new.f_int1;
 
22936
END|
 
22937
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22938
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22939
        
 
22940
# check trigger-5 success:      1
 
22941
DROP TRIGGER trg_1;
 
22942
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22943
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22944
f_charbig = 'just inserted'
 
22945
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22946
DELETE FROM t0_aux
 
22947
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22948
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22949
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22950
'just inserted' FROM t0_template
 
22951
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22952
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
22953
BEGIN
 
22954
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22955
f_charbig = 'updated by trigger'
 
22956
      WHERE f_int1 = - old.f_int1;
 
22957
END|
 
22958
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
22959
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22960
        
 
22961
# check trigger-6 success:      1
 
22962
DROP TRIGGER trg_1;
 
22963
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22964
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22965
f_charbig = 'just inserted'
 
22966
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22967
DELETE FROM t0_aux
 
22968
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22969
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22970
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22971
'just inserted' FROM t0_template
 
22972
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22973
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
22974
BEGIN
 
22975
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22976
f_charbig = 'updated by trigger'
 
22977
      WHERE f_int1 = - old.f_int1;
 
22978
END|
 
22979
DELETE FROM t0_aux
 
22980
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
22981
        
 
22982
# check trigger-7 success:      1
 
22983
DROP TRIGGER trg_1;
 
22984
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
22985
f_int2 = CAST(f_char1 AS SIGNED INT),
 
22986
f_charbig = 'just inserted'
 
22987
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
22988
DELETE FROM t0_aux
 
22989
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22990
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
22991
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
22992
'just inserted' FROM t0_template
 
22993
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
22994
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
22995
BEGIN
 
22996
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
22997
f_charbig = 'updated by trigger'
 
22998
      WHERE f_int1 = - old.f_int1;
 
22999
END|
 
23000
DELETE FROM t0_aux
 
23001
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23002
        
 
23003
# check trigger-8 success:      1
 
23004
DROP TRIGGER trg_1;
 
23005
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23006
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23007
f_charbig = 'just inserted'
 
23008
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23009
DELETE FROM t0_aux
 
23010
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23011
DELETE FROM t1
 
23012
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23013
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23014
BEGIN
 
23015
SET new.f_int1 = old.f_int1 + @max_row,
 
23016
new.f_int2 = old.f_int2 - @max_row,
 
23017
new.f_charbig = '####updated per update trigger####';
 
23018
END|
 
23019
UPDATE t1
 
23020
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23021
f_charbig = '####updated per update statement itself####';
 
23022
        
 
23023
# check trigger-9 success:      1
 
23024
DROP TRIGGER trg_2;
 
23025
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23026
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23027
f_charbig = CONCAT('===',f_char1,'===');
 
23028
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23029
BEGIN
 
23030
SET new.f_int1 = new.f_int1 + @max_row,
 
23031
new.f_int2 = new.f_int2 - @max_row,
 
23032
new.f_charbig = '####updated per update trigger####';
 
23033
END|
 
23034
UPDATE t1
 
23035
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23036
f_charbig = '####updated per update statement itself####';
 
23037
        
 
23038
# check trigger-10 success:     1
 
23039
DROP TRIGGER trg_2;
 
23040
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23041
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23042
f_charbig = CONCAT('===',f_char1,'===');
 
23043
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23044
BEGIN
 
23045
SET new.f_int1 = @my_max1 + @counter,
 
23046
new.f_int2 = @my_min2 - @counter,
 
23047
new.f_charbig = '####updated per insert trigger####';
 
23048
SET @counter = @counter + 1;
 
23049
END|
 
23050
SET @counter = 1;
 
23051
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23052
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23053
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23054
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23055
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23056
ORDER BY f_int1;
 
23057
DROP TRIGGER trg_3;
 
23058
        
 
23059
# check trigger-11 success:     1
 
23060
DELETE FROM t1
 
23061
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23062
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23063
AND f_charbig = '####updated per insert trigger####';
 
23064
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23065
BEGIN
 
23066
SET new.f_int1 = @my_max1 + @counter,
 
23067
new.f_int2 = @my_min2 - @counter,
 
23068
new.f_charbig = '####updated per insert trigger####';
 
23069
SET @counter = @counter + 1;
 
23070
END|
 
23071
SET @counter = 1;
 
23072
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23073
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
23074
SELECT CAST(f_int1 AS CHAR),
 
23075
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23076
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23077
ORDER BY f_int1;
 
23078
DROP TRIGGER trg_3;
 
23079
        
 
23080
# check trigger-12 success:     1
 
23081
DELETE FROM t1
 
23082
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23083
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23084
AND f_charbig = '####updated per insert trigger####';
 
23085
ANALYZE  TABLE t1;
 
23086
Table   Op      Msg_type        Msg_text
 
23087
test.t1 analyze status  OK
 
23088
CHECK    TABLE t1 EXTENDED;
 
23089
Table   Op      Msg_type        Msg_text
 
23090
test.t1 check   status  OK
 
23091
CHECKSUM TABLE t1 EXTENDED;
 
23092
Table   Checksum
 
23093
test.t1 <some_value>
 
23094
OPTIMIZE TABLE t1;
 
23095
Table   Op      Msg_type        Msg_text
 
23096
test.t1 optimize        status  OK
 
23097
# check layout success:    1
 
23098
REPAIR   TABLE t1 EXTENDED;
 
23099
Table   Op      Msg_type        Msg_text
 
23100
test.t1 repair  status  OK
 
23101
# check layout success:    1
 
23102
TRUNCATE t1;
 
23103
        
 
23104
# check TRUNCATE success:       1
 
23105
# check layout success:    1
 
23106
# End usability test (inc/partition_check.inc)
 
23107
DROP TABLE t1;
 
23108
CREATE TABLE t1 (
 
23109
f_int1 INTEGER,
 
23110
f_int2 INTEGER,
 
23111
f_char1 CHAR(20),
 
23112
f_char2 CHAR(20),
 
23113
f_charbig VARCHAR(1000)
 
23114
 
 
23115
)
 
23116
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
23117
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
23118
(PARTITION part_1 VALUES IN (0),
 
23119
 PARTITION part_2 VALUES IN (1),
 
23120
 PARTITION part_3 VALUES IN (NULL));
 
23121
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23122
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23123
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23124
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
 
23125
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23126
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23127
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23128
# Start usability test (inc/partition_check.inc)
 
23129
create_command
 
23130
SHOW CREATE TABLE t1;
 
23131
Table   Create Table
 
23132
t1      CREATE TABLE `t1` (
 
23133
  `f_int1` int(11) DEFAULT NULL,
 
23134
  `f_int2` int(11) DEFAULT NULL,
 
23135
  `f_char1` char(20) DEFAULT NULL,
 
23136
  `f_char2` char(20) DEFAULT NULL,
 
23137
  `f_charbig` varchar(1000) DEFAULT NULL
 
23138
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */
 
23139
 
 
23140
unified filelist
 
23141
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
23142
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
23143
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
23144
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
23145
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYD
 
23146
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYI
 
23147
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
23148
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
23149
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
23150
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
23151
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYD
 
23152
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYI
 
23153
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
23154
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
23155
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
23156
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
23157
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYD
 
23158
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYI
 
23159
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
23160
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
23161
 
 
23162
# check prerequisites-1 success:    1
 
23163
# check COUNT(*) success:    1
 
23164
# check MIN/MAX(f_int1) success:    1
 
23165
# check MIN/MAX(f_int2) success:    1
 
23166
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23167
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23168
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
23169
WHERE f_int1 IN (2,3);
 
23170
# check prerequisites-3 success:    1
 
23171
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
23172
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
23173
# check read via f_int1 success: 1
 
23174
# check read via f_int2 success: 1
 
23175
        
 
23176
# check multiple-1 success:     1
 
23177
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
23178
        
 
23179
# check multiple-2 success:     1
 
23180
INSERT INTO t1 SELECT * FROM t0_template
 
23181
WHERE MOD(f_int1,3) = 0;
 
23182
        
 
23183
# check multiple-3 success:     1
 
23184
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
23185
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
23186
AND @max_row_div2 + @max_row_div4;
 
23187
        
 
23188
# check multiple-4 success:     1
 
23189
DELETE FROM t1
 
23190
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
23191
AND @max_row_div2 + @max_row_div4 + @max_row;
 
23192
        
 
23193
# check multiple-5 success:     1
 
23194
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
23195
INSERT INTO t1
 
23196
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23197
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23198
f_charbig = '#SINGLE#';
 
23199
        
 
23200
# check single-1 success:       1
 
23201
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
23202
INSERT INTO t1
 
23203
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23204
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23205
f_charbig = '#SINGLE#';
 
23206
        
 
23207
# check single-2 success:       1
 
23208
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
23209
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
23210
UPDATE t1 SET f_int1 = @cur_value2
 
23211
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
23212
        
 
23213
# check single-3 success:       1
 
23214
SET @cur_value1= -1;
 
23215
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
23216
UPDATE t1 SET f_int1 = @cur_value1
 
23217
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
23218
        
 
23219
# check single-4 success:       1
 
23220
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
23221
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
23222
        
 
23223
# check single-5 success:       1
 
23224
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
23225
        
 
23226
# check single-6 success:       1
 
23227
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
23228
        
 
23229
# check single-7 success:       1
 
23230
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
23231
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
23232
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
23233
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
23234
f_charbig = '#NULL#';
 
23235
INSERT INTO t1
 
23236
SET f_int1 = NULL , f_int2 = -@max_row,
 
23237
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
23238
f_charbig = '#NULL#';
 
23239
# check null success:    1
 
23240
        
 
23241
# check null-1 success:         1
 
23242
UPDATE t1 SET f_int1 = -@max_row
 
23243
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23244
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23245
        
 
23246
# check null-2 success:         1
 
23247
UPDATE t1 SET f_int1 = NULL
 
23248
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23249
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23250
        
 
23251
# check null-3 success:         1
 
23252
DELETE FROM t1
 
23253
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
23254
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
23255
        
 
23256
# check null-4 success:         1
 
23257
DELETE FROM t1
 
23258
WHERE f_int1 = 0 AND f_int2 = 0
 
23259
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
23260
AND f_charbig = '#NULL#';
 
23261
SET AUTOCOMMIT= 0;
 
23262
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23263
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23264
FROM t0_template source_tab
 
23265
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23266
        
 
23267
# check transactions-1 success:         1
 
23268
COMMIT WORK;
 
23269
        
 
23270
# check transactions-2 success:         1
 
23271
ROLLBACK WORK;
 
23272
        
 
23273
# check transactions-3 success:         1
 
23274
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23275
COMMIT WORK;
 
23276
ROLLBACK WORK;
 
23277
        
 
23278
# check transactions-4 success:         1
 
23279
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23280
SELECT f_int1, f_int1, '', '', 'was inserted'
 
23281
FROM t0_template source_tab
 
23282
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23283
        
 
23284
# check transactions-5 success:         1
 
23285
ROLLBACK WORK;
 
23286
Warnings:
 
23287
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
23288
        
 
23289
# check transactions-6 success:         1
 
23290
# INFO: Storage engine used for t1 seems to be not transactional.
 
23291
COMMIT;
 
23292
        
 
23293
# check transactions-7 success:         1
 
23294
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23295
COMMIT WORK;
 
23296
SET @@session.sql_mode = 'traditional';
 
23297
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
23298
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23299
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
23300
'', '', 'was inserted' FROM t0_template
 
23301
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
23302
ERROR 22012: Division by 0
 
23303
COMMIT;
 
23304
        
 
23305
# check transactions-8 success:         1
 
23306
# INFO: Storage engine used for t1 seems to be unable to revert
 
23307
#       changes made by the failing statement.
 
23308
SET @@session.sql_mode = '';
 
23309
SET AUTOCOMMIT= 1;
 
23310
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
23311
COMMIT WORK;
 
23312
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
23313
        
 
23314
# check special-1 success:      1
 
23315
UPDATE t1 SET f_charbig = '';
 
23316
        
 
23317
# check special-2 success:      1
 
23318
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
23319
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23320
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
23321
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23322
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23323
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23324
'just inserted' FROM t0_template
 
23325
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23326
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
23327
BEGIN
 
23328
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23329
f_charbig = 'updated by trigger'
 
23330
      WHERE f_int1 = new.f_int1;
 
23331
END|
 
23332
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23333
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23334
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23335
        
 
23336
# check trigger-1 success:      1
 
23337
DROP TRIGGER trg_1;
 
23338
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23339
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23340
f_charbig = 'just inserted'
 
23341
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23342
DELETE FROM t0_aux
 
23343
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23344
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23345
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23346
'just inserted' FROM t0_template
 
23347
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23348
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
23349
BEGIN
 
23350
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23351
f_charbig = 'updated by trigger'
 
23352
      WHERE f_int1 = new.f_int1;
 
23353
END|
 
23354
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23355
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
23356
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23357
        
 
23358
# check trigger-2 success:      1
 
23359
DROP TRIGGER trg_1;
 
23360
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23361
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23362
f_charbig = 'just inserted'
 
23363
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23364
DELETE FROM t0_aux
 
23365
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23366
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23367
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23368
'just inserted' FROM t0_template
 
23369
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23370
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23371
BEGIN
 
23372
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23373
f_charbig = 'updated by trigger'
 
23374
      WHERE f_int1 = new.f_int1;
 
23375
END|
 
23376
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23377
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23378
        
 
23379
# check trigger-3 success:      1
 
23380
DROP TRIGGER trg_1;
 
23381
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23382
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23383
f_charbig = 'just inserted'
 
23384
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23385
DELETE FROM t0_aux
 
23386
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23387
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23388
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23389
'just inserted' FROM t0_template
 
23390
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23391
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
23392
BEGIN
 
23393
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23394
f_charbig = 'updated by trigger'
 
23395
      WHERE f_int1 = - old.f_int1;
 
23396
END|
 
23397
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23398
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23399
        
 
23400
# check trigger-4 success:      1
 
23401
DROP TRIGGER trg_1;
 
23402
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23403
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23404
f_charbig = 'just inserted'
 
23405
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23406
DELETE FROM t0_aux
 
23407
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23408
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23409
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23410
'just inserted' FROM t0_template
 
23411
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23412
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23413
BEGIN
 
23414
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23415
f_charbig = 'updated by trigger'
 
23416
      WHERE f_int1 = new.f_int1;
 
23417
END|
 
23418
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23419
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23420
        
 
23421
# check trigger-5 success:      1
 
23422
DROP TRIGGER trg_1;
 
23423
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23424
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23425
f_charbig = 'just inserted'
 
23426
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23427
DELETE FROM t0_aux
 
23428
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23429
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23430
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23431
'just inserted' FROM t0_template
 
23432
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23433
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
23434
BEGIN
 
23435
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23436
f_charbig = 'updated by trigger'
 
23437
      WHERE f_int1 = - old.f_int1;
 
23438
END|
 
23439
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
23440
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23441
        
 
23442
# check trigger-6 success:      1
 
23443
DROP TRIGGER trg_1;
 
23444
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23445
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23446
f_charbig = 'just inserted'
 
23447
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23448
DELETE FROM t0_aux
 
23449
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23450
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23451
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23452
'just inserted' FROM t0_template
 
23453
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23454
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
23455
BEGIN
 
23456
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23457
f_charbig = 'updated by trigger'
 
23458
      WHERE f_int1 = - old.f_int1;
 
23459
END|
 
23460
DELETE FROM t0_aux
 
23461
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23462
        
 
23463
# check trigger-7 success:      1
 
23464
DROP TRIGGER trg_1;
 
23465
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23466
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23467
f_charbig = 'just inserted'
 
23468
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23469
DELETE FROM t0_aux
 
23470
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23471
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23472
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
23473
'just inserted' FROM t0_template
 
23474
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23475
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
23476
BEGIN
 
23477
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
23478
f_charbig = 'updated by trigger'
 
23479
      WHERE f_int1 = - old.f_int1;
 
23480
END|
 
23481
DELETE FROM t0_aux
 
23482
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
23483
        
 
23484
# check trigger-8 success:      1
 
23485
DROP TRIGGER trg_1;
 
23486
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23487
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23488
f_charbig = 'just inserted'
 
23489
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
23490
DELETE FROM t0_aux
 
23491
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23492
DELETE FROM t1
 
23493
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
23494
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23495
BEGIN
 
23496
SET new.f_int1 = old.f_int1 + @max_row,
 
23497
new.f_int2 = old.f_int2 - @max_row,
 
23498
new.f_charbig = '####updated per update trigger####';
 
23499
END|
 
23500
UPDATE t1
 
23501
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23502
f_charbig = '####updated per update statement itself####';
 
23503
        
 
23504
# check trigger-9 success:      1
 
23505
DROP TRIGGER trg_2;
 
23506
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23507
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23508
f_charbig = CONCAT('===',f_char1,'===');
 
23509
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
23510
BEGIN
 
23511
SET new.f_int1 = new.f_int1 + @max_row,
 
23512
new.f_int2 = new.f_int2 - @max_row,
 
23513
new.f_charbig = '####updated per update trigger####';
 
23514
END|
 
23515
UPDATE t1
 
23516
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
23517
f_charbig = '####updated per update statement itself####';
 
23518
        
 
23519
# check trigger-10 success:     1
 
23520
DROP TRIGGER trg_2;
 
23521
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
23522
f_int2 = CAST(f_char1 AS SIGNED INT),
 
23523
f_charbig = CONCAT('===',f_char1,'===');
 
23524
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23525
BEGIN
 
23526
SET new.f_int1 = @my_max1 + @counter,
 
23527
new.f_int2 = @my_min2 - @counter,
 
23528
new.f_charbig = '####updated per insert trigger####';
 
23529
SET @counter = @counter + 1;
 
23530
END|
 
23531
SET @counter = 1;
 
23532
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23533
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23534
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23535
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23536
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23537
ORDER BY f_int1;
 
23538
DROP TRIGGER trg_3;
 
23539
        
 
23540
# check trigger-11 success:     1
 
23541
DELETE FROM t1
 
23542
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23543
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23544
AND f_charbig = '####updated per insert trigger####';
 
23545
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
23546
BEGIN
 
23547
SET new.f_int1 = @my_max1 + @counter,
 
23548
new.f_int2 = @my_min2 - @counter,
 
23549
new.f_charbig = '####updated per insert trigger####';
 
23550
SET @counter = @counter + 1;
 
23551
END|
 
23552
SET @counter = 1;
 
23553
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
23554
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
23555
SELECT CAST(f_int1 AS CHAR),
 
23556
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
23557
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
23558
ORDER BY f_int1;
 
23559
DROP TRIGGER trg_3;
 
23560
        
 
23561
# check trigger-12 success:     1
 
23562
DELETE FROM t1
 
23563
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
23564
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
23565
AND f_charbig = '####updated per insert trigger####';
 
23566
ANALYZE  TABLE t1;
 
23567
Table   Op      Msg_type        Msg_text
 
23568
test.t1 analyze status  OK
 
23569
CHECK    TABLE t1 EXTENDED;
 
23570
Table   Op      Msg_type        Msg_text
 
23571
test.t1 check   status  OK
 
23572
CHECKSUM TABLE t1 EXTENDED;
 
23573
Table   Checksum
 
23574
test.t1 <some_value>
 
23575
OPTIMIZE TABLE t1;
 
23576
Table   Op      Msg_type        Msg_text
 
23577
test.t1 optimize        status  OK
 
23578
# check layout success:    1
 
23579
REPAIR   TABLE t1 EXTENDED;
 
23580
Table   Op      Msg_type        Msg_text
 
23581
test.t1 repair  status  OK
 
23582
# check layout success:    1
 
23583
TRUNCATE t1;
 
23584
        
 
23585
# check TRUNCATE success:       1
 
23586
# check layout success:    1
 
23587
# End usability test (inc/partition_check.inc)
 
23588
DROP TABLE t1;
 
23589
#  3.3 ALTER ... OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
23590
DROP TABLE IF EXISTS t1;
 
23591
CREATE TABLE t1 (
 
23592
f_int1 INTEGER,
 
23593
f_int2 INTEGER,
 
23594
f_char1 CHAR(20),
 
23595
f_char2 CHAR(20),
 
23596
f_charbig VARCHAR(1000)
 
23597
 
 
23598
)
 
23599
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
23600
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23601
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23602
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23603
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
23604
ERROR HY000: Error in list of partitions to OPTIMIZE
 
23605
DROP TABLE t1;
 
23606
CREATE TABLE t1 (
 
23607
f_int1 INTEGER,
 
23608
f_int2 INTEGER,
 
23609
f_char1 CHAR(20),
 
23610
f_char2 CHAR(20),
 
23611
f_charbig VARCHAR(1000)
 
23612
 
 
23613
)
 
23614
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
23615
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23616
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23617
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23618
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
23619
ERROR HY000: Error in list of partitions to OPTIMIZE
 
23620
DROP TABLE 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 LIST(MOD(f_int1,4))
 
23630
(PARTITION part_3 VALUES IN (-3),
 
23631
PARTITION part_2 VALUES IN (-2),
 
23632
PARTITION part_1 VALUES IN (-1),
 
23633
PARTITION part_N VALUES IN (NULL),
 
23634
PARTITION part0 VALUES IN (0),
 
23635
PARTITION part1 VALUES IN (1),
 
23636
PARTITION part2 VALUES IN (2),
 
23637
PARTITION part3 VALUES IN (3));
 
23638
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23639
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23640
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23641
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
23642
ERROR HY000: Error in list of partitions to OPTIMIZE
 
23643
DROP TABLE t1;
 
23644
CREATE TABLE t1 (
 
23645
f_int1 INTEGER,
 
23646
f_int2 INTEGER,
 
23647
f_char1 CHAR(20),
 
23648
f_char2 CHAR(20),
 
23649
f_charbig VARCHAR(1000)
 
23650
 
 
23651
)
 
23652
PARTITION BY RANGE(f_int1)
 
23653
(PARTITION parta VALUES LESS THAN (0),
 
23654
PARTITION part_1 VALUES LESS THAN (5),
 
23655
PARTITION part_2 VALUES LESS THAN (10),
 
23656
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
23657
PARTITION part_4 VALUES LESS THAN (20),
 
23658
PARTITION part_5 VALUES LESS THAN (2147483646));
 
23659
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23660
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23661
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23662
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
23663
ERROR HY000: Error in list of partitions to OPTIMIZE
 
23664
DROP TABLE t1;
 
23665
CREATE TABLE t1 (
 
23666
f_int1 INTEGER,
 
23667
f_int2 INTEGER,
 
23668
f_char1 CHAR(20),
 
23669
f_char2 CHAR(20),
 
23670
f_charbig VARCHAR(1000)
 
23671
 
 
23672
)
 
23673
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
23674
(PARTITION part_1 VALUES LESS THAN (0),
 
23675
PARTITION part_2 VALUES LESS THAN (5),
 
23676
PARTITION part_3 VALUES LESS THAN (10),
 
23677
PARTITION part_4 VALUES LESS THAN (2147483646));
 
23678
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23679
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23680
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23681
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
23682
ERROR HY000: Error in list of partitions to OPTIMIZE
 
23683
DROP TABLE t1;
 
23684
CREATE TABLE t1 (
 
23685
f_int1 INTEGER,
 
23686
f_int2 INTEGER,
 
23687
f_char1 CHAR(20),
 
23688
f_char2 CHAR(20),
 
23689
f_charbig VARCHAR(1000)
 
23690
 
 
23691
)
 
23692
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
23693
(PARTITION part_1 VALUES LESS THAN (0)
 
23694
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
23695
PARTITION part_2 VALUES LESS THAN (5)
 
23696
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
23697
PARTITION part_3 VALUES LESS THAN (10)
 
23698
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
23699
PARTITION part_4 VALUES LESS THAN (2147483646)
 
23700
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
23701
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23702
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23703
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23704
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
23705
ERROR HY000: Error in list of partitions to OPTIMIZE
 
23706
DROP TABLE t1;
 
23707
CREATE TABLE t1 (
 
23708
f_int1 INTEGER,
 
23709
f_int2 INTEGER,
 
23710
f_char1 CHAR(20),
 
23711
f_char2 CHAR(20),
 
23712
f_charbig VARCHAR(1000)
 
23713
 
 
23714
)
 
23715
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
23716
(PARTITION part_1 VALUES IN (0)
 
23717
(SUBPARTITION sp11, SUBPARTITION sp12),
 
23718
PARTITION part_2 VALUES IN (1)
 
23719
(SUBPARTITION sp21, SUBPARTITION sp22),
 
23720
PARTITION part_3 VALUES IN (2)
 
23721
(SUBPARTITION sp31, SUBPARTITION sp32),
 
23722
PARTITION part_4 VALUES IN (NULL)
 
23723
(SUBPARTITION sp41, SUBPARTITION sp42));
 
23724
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23725
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23726
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23727
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
23728
ERROR HY000: Error in list of partitions to OPTIMIZE
 
23729
DROP TABLE t1;
 
23730
CREATE TABLE t1 (
 
23731
f_int1 INTEGER,
 
23732
f_int2 INTEGER,
 
23733
f_char1 CHAR(20),
 
23734
f_char2 CHAR(20),
 
23735
f_charbig VARCHAR(1000)
 
23736
 
 
23737
)
 
23738
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
23739
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
23740
(PARTITION part_1 VALUES IN (0),
 
23741
 PARTITION part_2 VALUES IN (1),
 
23742
 PARTITION part_3 VALUES IN (NULL));
 
23743
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23744
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23745
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23746
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
 
23747
ERROR HY000: Error in list of partitions to OPTIMIZE
 
23748
DROP TABLE t1;
 
23749
#  3.4 ALTER ... OPTIMIZE PARTITION part_1,part_1,part_1;
 
23750
DROP TABLE IF EXISTS t1;
 
23751
CREATE TABLE t1 (
 
23752
f_int1 INTEGER,
 
23753
f_int2 INTEGER,
 
23754
f_char1 CHAR(20),
 
23755
f_char2 CHAR(20),
 
23756
f_charbig VARCHAR(1000)
 
23757
 
 
23758
)
 
23759
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
23760
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23761
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23762
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23763
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
 
23764
ERROR HY000: Error in list of partitions to OPTIMIZE
 
23765
DROP TABLE t1;
 
23766
CREATE TABLE t1 (
 
23767
f_int1 INTEGER,
 
23768
f_int2 INTEGER,
 
23769
f_char1 CHAR(20),
 
23770
f_char2 CHAR(20),
 
23771
f_charbig VARCHAR(1000)
 
23772
 
 
23773
)
 
23774
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
23775
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23776
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23777
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23778
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
 
23779
ERROR HY000: Error in list of partitions to OPTIMIZE
 
23780
DROP TABLE t1;
 
23781
CREATE TABLE t1 (
 
23782
f_int1 INTEGER,
 
23783
f_int2 INTEGER,
 
23784
f_char1 CHAR(20),
 
23785
f_char2 CHAR(20),
 
23786
f_charbig VARCHAR(1000)
 
23787
 
 
23788
)
 
23789
PARTITION BY LIST(MOD(f_int1,4))
 
23790
(PARTITION part_3 VALUES IN (-3),
 
23791
PARTITION part_2 VALUES IN (-2),
 
23792
PARTITION part_1 VALUES IN (-1),
 
23793
PARTITION part_N VALUES IN (NULL),
 
23794
PARTITION part0 VALUES IN (0),
 
23795
PARTITION part1 VALUES IN (1),
 
23796
PARTITION part2 VALUES IN (2),
 
23797
PARTITION part3 VALUES IN (3));
 
23798
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23799
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23800
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23801
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
 
23802
ERROR HY000: Error in list of partitions to OPTIMIZE
 
23803
DROP TABLE t1;
 
23804
CREATE TABLE t1 (
 
23805
f_int1 INTEGER,
 
23806
f_int2 INTEGER,
 
23807
f_char1 CHAR(20),
 
23808
f_char2 CHAR(20),
 
23809
f_charbig VARCHAR(1000)
 
23810
 
 
23811
)
 
23812
PARTITION BY RANGE(f_int1)
 
23813
(PARTITION parta VALUES LESS THAN (0),
 
23814
PARTITION part_1 VALUES LESS THAN (5),
 
23815
PARTITION part_2 VALUES LESS THAN (10),
 
23816
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
23817
PARTITION part_4 VALUES LESS THAN (20),
 
23818
PARTITION part_5 VALUES LESS THAN (2147483646));
 
23819
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23820
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23821
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23822
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
 
23823
ERROR HY000: Error in list of partitions to OPTIMIZE
 
23824
DROP TABLE t1;
 
23825
CREATE TABLE t1 (
 
23826
f_int1 INTEGER,
 
23827
f_int2 INTEGER,
 
23828
f_char1 CHAR(20),
 
23829
f_char2 CHAR(20),
 
23830
f_charbig VARCHAR(1000)
 
23831
 
 
23832
)
 
23833
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
23834
(PARTITION part_1 VALUES LESS THAN (0),
 
23835
PARTITION part_2 VALUES LESS THAN (5),
 
23836
PARTITION part_3 VALUES LESS THAN (10),
 
23837
PARTITION part_4 VALUES LESS THAN (2147483646));
 
23838
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23839
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23840
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23841
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
 
23842
ERROR HY000: Error in list of partitions to OPTIMIZE
 
23843
DROP TABLE t1;
 
23844
CREATE TABLE t1 (
 
23845
f_int1 INTEGER,
 
23846
f_int2 INTEGER,
 
23847
f_char1 CHAR(20),
 
23848
f_char2 CHAR(20),
 
23849
f_charbig VARCHAR(1000)
 
23850
 
 
23851
)
 
23852
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
23853
(PARTITION part_1 VALUES LESS THAN (0)
 
23854
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
23855
PARTITION part_2 VALUES LESS THAN (5)
 
23856
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
23857
PARTITION part_3 VALUES LESS THAN (10)
 
23858
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
23859
PARTITION part_4 VALUES LESS THAN (2147483646)
 
23860
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
23861
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23862
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23863
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23864
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
 
23865
ERROR HY000: Error in list of partitions to OPTIMIZE
 
23866
DROP TABLE t1;
 
23867
CREATE TABLE t1 (
 
23868
f_int1 INTEGER,
 
23869
f_int2 INTEGER,
 
23870
f_char1 CHAR(20),
 
23871
f_char2 CHAR(20),
 
23872
f_charbig VARCHAR(1000)
 
23873
 
 
23874
)
 
23875
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
23876
(PARTITION part_1 VALUES IN (0)
 
23877
(SUBPARTITION sp11, SUBPARTITION sp12),
 
23878
PARTITION part_2 VALUES IN (1)
 
23879
(SUBPARTITION sp21, SUBPARTITION sp22),
 
23880
PARTITION part_3 VALUES IN (2)
 
23881
(SUBPARTITION sp31, SUBPARTITION sp32),
 
23882
PARTITION part_4 VALUES IN (NULL)
 
23883
(SUBPARTITION sp41, SUBPARTITION sp42));
 
23884
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23885
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23886
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23887
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
 
23888
ERROR HY000: Error in list of partitions to OPTIMIZE
 
23889
DROP TABLE t1;
 
23890
CREATE TABLE t1 (
 
23891
f_int1 INTEGER,
 
23892
f_int2 INTEGER,
 
23893
f_char1 CHAR(20),
 
23894
f_char2 CHAR(20),
 
23895
f_charbig VARCHAR(1000)
 
23896
 
 
23897
)
 
23898
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
23899
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
23900
(PARTITION part_1 VALUES IN (0),
 
23901
 PARTITION part_2 VALUES IN (1),
 
23902
 PARTITION part_3 VALUES IN (NULL));
 
23903
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23904
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23905
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23906
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
 
23907
ERROR HY000: Error in list of partitions to OPTIMIZE
 
23908
DROP TABLE t1;
 
23909
#------------------------------------------------------------------------
 
23910
#  4   ALTER ... REBUILD PARTITION
 
23911
#------------------------------------------------------------------------
 
23912
#  4.1 ALTER ... REBUILD PARTITION part_1;
 
23913
DROP TABLE IF EXISTS t1;
 
23914
CREATE TABLE t1 (
 
23915
f_int1 INTEGER,
 
23916
f_int2 INTEGER,
 
23917
f_char1 CHAR(20),
 
23918
f_char2 CHAR(20),
 
23919
f_charbig VARCHAR(1000)
 
23920
 
 
23921
)
 
23922
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
23923
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23924
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23925
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
23926
ALTER TABLE t1 REBUILD PARTITION part_1;
 
23927
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
23928
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
23929
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
23930
# Start usability test (inc/partition_check.inc)
 
23931
create_command
 
23932
SHOW CREATE TABLE t1;
 
23933
Table   Create Table
 
23934
t1      CREATE TABLE `t1` (
 
23935
  `f_int1` int(11) DEFAULT NULL,
 
23936
  `f_int2` int(11) DEFAULT NULL,
 
23937
  `f_char1` char(20) DEFAULT NULL,
 
23938
  `f_char2` char(20) DEFAULT NULL,
 
23939
  `f_charbig` varchar(1000) DEFAULT NULL
 
23940
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */
 
23941
 
 
23942
unified filelist
 
23943
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
23944
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
23945
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
23946
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
23947
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
23948
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
23949
 
 
23950
# check prerequisites-1 success:    1
 
23951
# check COUNT(*) success:    1
 
23952
# check MIN/MAX(f_int1) success:    1
 
23953
# check MIN/MAX(f_int2) success:    1
 
23954
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
23955
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
23956
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
23957
WHERE f_int1 IN (2,3);
 
23958
# check prerequisites-3 success:    1
 
23959
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
23960
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
23961
# check read via f_int1 success: 1
 
23962
# check read via f_int2 success: 1
 
23963
        
 
23964
# check multiple-1 success:     1
 
23965
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
23966
        
 
23967
# check multiple-2 success:     1
 
23968
INSERT INTO t1 SELECT * FROM t0_template
 
23969
WHERE MOD(f_int1,3) = 0;
 
23970
        
 
23971
# check multiple-3 success:     1
 
23972
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
23973
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
23974
AND @max_row_div2 + @max_row_div4;
 
23975
        
 
23976
# check multiple-4 success:     1
 
23977
DELETE FROM t1
 
23978
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
23979
AND @max_row_div2 + @max_row_div4 + @max_row;
 
23980
        
 
23981
# check multiple-5 success:     1
 
23982
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
23983
INSERT INTO t1
 
23984
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23985
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23986
f_charbig = '#SINGLE#';
 
23987
        
 
23988
# check single-1 success:       1
 
23989
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
23990
INSERT INTO t1
 
23991
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
23992
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
23993
f_charbig = '#SINGLE#';
 
23994
        
 
23995
# check single-2 success:       1
 
23996
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
23997
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
23998
UPDATE t1 SET f_int1 = @cur_value2
 
23999
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
24000
        
 
24001
# check single-3 success:       1
 
24002
SET @cur_value1= -1;
 
24003
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
24004
UPDATE t1 SET f_int1 = @cur_value1
 
24005
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
24006
        
 
24007
# check single-4 success:       1
 
24008
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
24009
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
24010
        
 
24011
# check single-5 success:       1
 
24012
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
24013
        
 
24014
# check single-6 success:       1
 
24015
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
24016
        
 
24017
# check single-7 success:       1
 
24018
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
24019
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
24020
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
24021
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
24022
f_charbig = '#NULL#';
 
24023
INSERT INTO t1
 
24024
SET f_int1 = NULL , f_int2 = -@max_row,
 
24025
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
24026
f_charbig = '#NULL#';
 
24027
# check null success:    1
 
24028
        
 
24029
# check null-1 success:         1
 
24030
UPDATE t1 SET f_int1 = -@max_row
 
24031
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24032
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24033
        
 
24034
# check null-2 success:         1
 
24035
UPDATE t1 SET f_int1 = NULL
 
24036
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24037
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24038
        
 
24039
# check null-3 success:         1
 
24040
DELETE FROM t1
 
24041
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24042
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24043
        
 
24044
# check null-4 success:         1
 
24045
DELETE FROM t1
 
24046
WHERE f_int1 = 0 AND f_int2 = 0
 
24047
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
24048
AND f_charbig = '#NULL#';
 
24049
SET AUTOCOMMIT= 0;
 
24050
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24051
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24052
FROM t0_template source_tab
 
24053
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24054
        
 
24055
# check transactions-1 success:         1
 
24056
COMMIT WORK;
 
24057
        
 
24058
# check transactions-2 success:         1
 
24059
ROLLBACK WORK;
 
24060
        
 
24061
# check transactions-3 success:         1
 
24062
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24063
COMMIT WORK;
 
24064
ROLLBACK WORK;
 
24065
        
 
24066
# check transactions-4 success:         1
 
24067
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24068
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24069
FROM t0_template source_tab
 
24070
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24071
        
 
24072
# check transactions-5 success:         1
 
24073
ROLLBACK WORK;
 
24074
Warnings:
 
24075
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
24076
        
 
24077
# check transactions-6 success:         1
 
24078
# INFO: Storage engine used for t1 seems to be not transactional.
 
24079
COMMIT;
 
24080
        
 
24081
# check transactions-7 success:         1
 
24082
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24083
COMMIT WORK;
 
24084
SET @@session.sql_mode = 'traditional';
 
24085
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
24086
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24087
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
24088
'', '', 'was inserted' FROM t0_template
 
24089
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24090
ERROR 22012: Division by 0
 
24091
COMMIT;
 
24092
        
 
24093
# check transactions-8 success:         1
 
24094
# INFO: Storage engine used for t1 seems to be unable to revert
 
24095
#       changes made by the failing statement.
 
24096
SET @@session.sql_mode = '';
 
24097
SET AUTOCOMMIT= 1;
 
24098
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24099
COMMIT WORK;
 
24100
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
24101
        
 
24102
# check special-1 success:      1
 
24103
UPDATE t1 SET f_charbig = '';
 
24104
        
 
24105
# check special-2 success:      1
 
24106
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
24107
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24108
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
24109
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24110
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24111
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24112
'just inserted' FROM t0_template
 
24113
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24114
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
24115
BEGIN
 
24116
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24117
f_charbig = 'updated by trigger'
 
24118
      WHERE f_int1 = new.f_int1;
 
24119
END|
 
24120
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24121
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24122
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24123
        
 
24124
# check trigger-1 success:      1
 
24125
DROP TRIGGER trg_1;
 
24126
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24127
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24128
f_charbig = 'just inserted'
 
24129
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24130
DELETE FROM t0_aux
 
24131
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24132
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24133
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24134
'just inserted' FROM t0_template
 
24135
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24136
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
24137
BEGIN
 
24138
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24139
f_charbig = 'updated by trigger'
 
24140
      WHERE f_int1 = new.f_int1;
 
24141
END|
 
24142
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24143
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24144
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24145
        
 
24146
# check trigger-2 success:      1
 
24147
DROP TRIGGER trg_1;
 
24148
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24149
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24150
f_charbig = 'just inserted'
 
24151
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24152
DELETE FROM t0_aux
 
24153
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24154
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24155
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24156
'just inserted' FROM t0_template
 
24157
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24158
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24159
BEGIN
 
24160
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24161
f_charbig = 'updated by trigger'
 
24162
      WHERE f_int1 = new.f_int1;
 
24163
END|
 
24164
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24165
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24166
        
 
24167
# check trigger-3 success:      1
 
24168
DROP TRIGGER trg_1;
 
24169
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24170
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24171
f_charbig = 'just inserted'
 
24172
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24173
DELETE FROM t0_aux
 
24174
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24175
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24176
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24177
'just inserted' FROM t0_template
 
24178
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24179
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24180
BEGIN
 
24181
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24182
f_charbig = 'updated by trigger'
 
24183
      WHERE f_int1 = - old.f_int1;
 
24184
END|
 
24185
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24186
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24187
        
 
24188
# check trigger-4 success:      1
 
24189
DROP TRIGGER trg_1;
 
24190
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24191
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24192
f_charbig = 'just inserted'
 
24193
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24194
DELETE FROM t0_aux
 
24195
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24196
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24197
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24198
'just inserted' FROM t0_template
 
24199
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24200
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24201
BEGIN
 
24202
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24203
f_charbig = 'updated by trigger'
 
24204
      WHERE f_int1 = new.f_int1;
 
24205
END|
 
24206
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24207
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24208
        
 
24209
# check trigger-5 success:      1
 
24210
DROP TRIGGER trg_1;
 
24211
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24212
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24213
f_charbig = 'just inserted'
 
24214
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24215
DELETE FROM t0_aux
 
24216
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24217
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24218
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24219
'just inserted' FROM t0_template
 
24220
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24221
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24222
BEGIN
 
24223
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24224
f_charbig = 'updated by trigger'
 
24225
      WHERE f_int1 = - old.f_int1;
 
24226
END|
 
24227
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24228
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24229
        
 
24230
# check trigger-6 success:      1
 
24231
DROP TRIGGER trg_1;
 
24232
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24233
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24234
f_charbig = 'just inserted'
 
24235
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24236
DELETE FROM t0_aux
 
24237
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24238
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24239
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24240
'just inserted' FROM t0_template
 
24241
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24242
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
24243
BEGIN
 
24244
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24245
f_charbig = 'updated by trigger'
 
24246
      WHERE f_int1 = - old.f_int1;
 
24247
END|
 
24248
DELETE FROM t0_aux
 
24249
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24250
        
 
24251
# check trigger-7 success:      1
 
24252
DROP TRIGGER trg_1;
 
24253
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24254
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24255
f_charbig = 'just inserted'
 
24256
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24257
DELETE FROM t0_aux
 
24258
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24259
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24260
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24261
'just inserted' FROM t0_template
 
24262
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24263
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
24264
BEGIN
 
24265
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24266
f_charbig = 'updated by trigger'
 
24267
      WHERE f_int1 = - old.f_int1;
 
24268
END|
 
24269
DELETE FROM t0_aux
 
24270
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24271
        
 
24272
# check trigger-8 success:      1
 
24273
DROP TRIGGER trg_1;
 
24274
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24275
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24276
f_charbig = 'just inserted'
 
24277
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24278
DELETE FROM t0_aux
 
24279
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24280
DELETE FROM t1
 
24281
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24282
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24283
BEGIN
 
24284
SET new.f_int1 = old.f_int1 + @max_row,
 
24285
new.f_int2 = old.f_int2 - @max_row,
 
24286
new.f_charbig = '####updated per update trigger####';
 
24287
END|
 
24288
UPDATE t1
 
24289
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24290
f_charbig = '####updated per update statement itself####';
 
24291
        
 
24292
# check trigger-9 success:      1
 
24293
DROP TRIGGER trg_2;
 
24294
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24295
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24296
f_charbig = CONCAT('===',f_char1,'===');
 
24297
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24298
BEGIN
 
24299
SET new.f_int1 = new.f_int1 + @max_row,
 
24300
new.f_int2 = new.f_int2 - @max_row,
 
24301
new.f_charbig = '####updated per update trigger####';
 
24302
END|
 
24303
UPDATE t1
 
24304
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24305
f_charbig = '####updated per update statement itself####';
 
24306
        
 
24307
# check trigger-10 success:     1
 
24308
DROP TRIGGER trg_2;
 
24309
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24310
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24311
f_charbig = CONCAT('===',f_char1,'===');
 
24312
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24313
BEGIN
 
24314
SET new.f_int1 = @my_max1 + @counter,
 
24315
new.f_int2 = @my_min2 - @counter,
 
24316
new.f_charbig = '####updated per insert trigger####';
 
24317
SET @counter = @counter + 1;
 
24318
END|
 
24319
SET @counter = 1;
 
24320
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24321
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24322
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24323
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24324
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24325
ORDER BY f_int1;
 
24326
DROP TRIGGER trg_3;
 
24327
        
 
24328
# check trigger-11 success:     1
 
24329
DELETE FROM t1
 
24330
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24331
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24332
AND f_charbig = '####updated per insert trigger####';
 
24333
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24334
BEGIN
 
24335
SET new.f_int1 = @my_max1 + @counter,
 
24336
new.f_int2 = @my_min2 - @counter,
 
24337
new.f_charbig = '####updated per insert trigger####';
 
24338
SET @counter = @counter + 1;
 
24339
END|
 
24340
SET @counter = 1;
 
24341
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24342
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
24343
SELECT CAST(f_int1 AS CHAR),
 
24344
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24345
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24346
ORDER BY f_int1;
 
24347
DROP TRIGGER trg_3;
 
24348
        
 
24349
# check trigger-12 success:     1
 
24350
DELETE FROM t1
 
24351
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24352
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24353
AND f_charbig = '####updated per insert trigger####';
 
24354
ANALYZE  TABLE t1;
 
24355
Table   Op      Msg_type        Msg_text
 
24356
test.t1 analyze status  OK
 
24357
CHECK    TABLE t1 EXTENDED;
 
24358
Table   Op      Msg_type        Msg_text
 
24359
test.t1 check   status  OK
 
24360
CHECKSUM TABLE t1 EXTENDED;
 
24361
Table   Checksum
 
24362
test.t1 <some_value>
 
24363
OPTIMIZE TABLE t1;
 
24364
Table   Op      Msg_type        Msg_text
 
24365
test.t1 optimize        status  OK
 
24366
# check layout success:    1
 
24367
REPAIR   TABLE t1 EXTENDED;
 
24368
Table   Op      Msg_type        Msg_text
 
24369
test.t1 repair  status  OK
 
24370
# check layout success:    1
 
24371
TRUNCATE t1;
 
24372
        
 
24373
# check TRUNCATE success:       1
 
24374
# check layout success:    1
 
24375
# End usability test (inc/partition_check.inc)
 
24376
DROP TABLE t1;
 
24377
CREATE TABLE t1 (
 
24378
f_int1 INTEGER,
 
24379
f_int2 INTEGER,
 
24380
f_char1 CHAR(20),
 
24381
f_char2 CHAR(20),
 
24382
f_charbig VARCHAR(1000)
 
24383
 
 
24384
)
 
24385
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
24386
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24387
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24388
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
24389
ALTER TABLE t1 REBUILD PARTITION part_1;
 
24390
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24391
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24392
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24393
# Start usability test (inc/partition_check.inc)
 
24394
create_command
 
24395
SHOW CREATE TABLE t1;
 
24396
Table   Create Table
 
24397
t1      CREATE TABLE `t1` (
 
24398
  `f_int1` int(11) DEFAULT NULL,
 
24399
  `f_int2` int(11) DEFAULT NULL,
 
24400
  `f_char1` char(20) DEFAULT NULL,
 
24401
  `f_char2` char(20) DEFAULT NULL,
 
24402
  `f_charbig` varchar(1000) DEFAULT NULL
 
24403
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */
 
24404
 
 
24405
unified filelist
 
24406
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
24407
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
24408
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
24409
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
24410
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
24411
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
24412
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
24413
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
24414
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
24415
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
24416
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
24417
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
24418
 
 
24419
# check prerequisites-1 success:    1
 
24420
# check COUNT(*) success:    1
 
24421
# check MIN/MAX(f_int1) success:    1
 
24422
# check MIN/MAX(f_int2) success:    1
 
24423
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24424
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24425
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
24426
WHERE f_int1 IN (2,3);
 
24427
# check prerequisites-3 success:    1
 
24428
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
24429
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
24430
# check read via f_int1 success: 1
 
24431
# check read via f_int2 success: 1
 
24432
        
 
24433
# check multiple-1 success:     1
 
24434
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
24435
        
 
24436
# check multiple-2 success:     1
 
24437
INSERT INTO t1 SELECT * FROM t0_template
 
24438
WHERE MOD(f_int1,3) = 0;
 
24439
        
 
24440
# check multiple-3 success:     1
 
24441
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
24442
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
24443
AND @max_row_div2 + @max_row_div4;
 
24444
        
 
24445
# check multiple-4 success:     1
 
24446
DELETE FROM t1
 
24447
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
24448
AND @max_row_div2 + @max_row_div4 + @max_row;
 
24449
        
 
24450
# check multiple-5 success:     1
 
24451
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
24452
INSERT INTO t1
 
24453
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24454
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24455
f_charbig = '#SINGLE#';
 
24456
        
 
24457
# check single-1 success:       1
 
24458
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
24459
INSERT INTO t1
 
24460
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24461
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24462
f_charbig = '#SINGLE#';
 
24463
        
 
24464
# check single-2 success:       1
 
24465
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
24466
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
24467
UPDATE t1 SET f_int1 = @cur_value2
 
24468
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
24469
        
 
24470
# check single-3 success:       1
 
24471
SET @cur_value1= -1;
 
24472
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
24473
UPDATE t1 SET f_int1 = @cur_value1
 
24474
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
24475
        
 
24476
# check single-4 success:       1
 
24477
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
24478
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
24479
        
 
24480
# check single-5 success:       1
 
24481
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
24482
        
 
24483
# check single-6 success:       1
 
24484
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
24485
        
 
24486
# check single-7 success:       1
 
24487
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
24488
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
24489
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
24490
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
24491
f_charbig = '#NULL#';
 
24492
INSERT INTO t1
 
24493
SET f_int1 = NULL , f_int2 = -@max_row,
 
24494
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
24495
f_charbig = '#NULL#';
 
24496
# check null success:    1
 
24497
        
 
24498
# check null-1 success:         1
 
24499
UPDATE t1 SET f_int1 = -@max_row
 
24500
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24501
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24502
        
 
24503
# check null-2 success:         1
 
24504
UPDATE t1 SET f_int1 = NULL
 
24505
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24506
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24507
        
 
24508
# check null-3 success:         1
 
24509
DELETE FROM t1
 
24510
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24511
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24512
        
 
24513
# check null-4 success:         1
 
24514
DELETE FROM t1
 
24515
WHERE f_int1 = 0 AND f_int2 = 0
 
24516
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
24517
AND f_charbig = '#NULL#';
 
24518
SET AUTOCOMMIT= 0;
 
24519
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24520
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24521
FROM t0_template source_tab
 
24522
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24523
        
 
24524
# check transactions-1 success:         1
 
24525
COMMIT WORK;
 
24526
        
 
24527
# check transactions-2 success:         1
 
24528
ROLLBACK WORK;
 
24529
        
 
24530
# check transactions-3 success:         1
 
24531
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24532
COMMIT WORK;
 
24533
ROLLBACK WORK;
 
24534
        
 
24535
# check transactions-4 success:         1
 
24536
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24537
SELECT f_int1, f_int1, '', '', 'was inserted'
 
24538
FROM t0_template source_tab
 
24539
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24540
        
 
24541
# check transactions-5 success:         1
 
24542
ROLLBACK WORK;
 
24543
Warnings:
 
24544
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
24545
        
 
24546
# check transactions-6 success:         1
 
24547
# INFO: Storage engine used for t1 seems to be not transactional.
 
24548
COMMIT;
 
24549
        
 
24550
# check transactions-7 success:         1
 
24551
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24552
COMMIT WORK;
 
24553
SET @@session.sql_mode = 'traditional';
 
24554
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
24555
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24556
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
24557
'', '', 'was inserted' FROM t0_template
 
24558
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
24559
ERROR 22012: Division by 0
 
24560
COMMIT;
 
24561
        
 
24562
# check transactions-8 success:         1
 
24563
# INFO: Storage engine used for t1 seems to be unable to revert
 
24564
#       changes made by the failing statement.
 
24565
SET @@session.sql_mode = '';
 
24566
SET AUTOCOMMIT= 1;
 
24567
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
24568
COMMIT WORK;
 
24569
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
24570
        
 
24571
# check special-1 success:      1
 
24572
UPDATE t1 SET f_charbig = '';
 
24573
        
 
24574
# check special-2 success:      1
 
24575
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
24576
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24577
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
24578
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24579
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24580
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24581
'just inserted' FROM t0_template
 
24582
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24583
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
24584
BEGIN
 
24585
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24586
f_charbig = 'updated by trigger'
 
24587
      WHERE f_int1 = new.f_int1;
 
24588
END|
 
24589
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24590
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24591
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24592
        
 
24593
# check trigger-1 success:      1
 
24594
DROP TRIGGER trg_1;
 
24595
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24596
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24597
f_charbig = 'just inserted'
 
24598
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24599
DELETE FROM t0_aux
 
24600
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24601
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24602
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24603
'just inserted' FROM t0_template
 
24604
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24605
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
24606
BEGIN
 
24607
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24608
f_charbig = 'updated by trigger'
 
24609
      WHERE f_int1 = new.f_int1;
 
24610
END|
 
24611
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24612
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
24613
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24614
        
 
24615
# check trigger-2 success:      1
 
24616
DROP TRIGGER trg_1;
 
24617
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24618
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24619
f_charbig = 'just inserted'
 
24620
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24621
DELETE FROM t0_aux
 
24622
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24623
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24624
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24625
'just inserted' FROM t0_template
 
24626
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24627
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24628
BEGIN
 
24629
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24630
f_charbig = 'updated by trigger'
 
24631
      WHERE f_int1 = new.f_int1;
 
24632
END|
 
24633
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24634
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24635
        
 
24636
# check trigger-3 success:      1
 
24637
DROP TRIGGER trg_1;
 
24638
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24639
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24640
f_charbig = 'just inserted'
 
24641
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24642
DELETE FROM t0_aux
 
24643
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24644
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24645
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24646
'just inserted' FROM t0_template
 
24647
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24648
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
24649
BEGIN
 
24650
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24651
f_charbig = 'updated by trigger'
 
24652
      WHERE f_int1 = - old.f_int1;
 
24653
END|
 
24654
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24655
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24656
        
 
24657
# check trigger-4 success:      1
 
24658
DROP TRIGGER trg_1;
 
24659
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24660
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24661
f_charbig = 'just inserted'
 
24662
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24663
DELETE FROM t0_aux
 
24664
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24665
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24666
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24667
'just inserted' FROM t0_template
 
24668
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24669
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24670
BEGIN
 
24671
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24672
f_charbig = 'updated by trigger'
 
24673
      WHERE f_int1 = new.f_int1;
 
24674
END|
 
24675
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24676
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24677
        
 
24678
# check trigger-5 success:      1
 
24679
DROP TRIGGER trg_1;
 
24680
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24681
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24682
f_charbig = 'just inserted'
 
24683
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24684
DELETE FROM t0_aux
 
24685
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24686
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24687
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24688
'just inserted' FROM t0_template
 
24689
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24690
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
24691
BEGIN
 
24692
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24693
f_charbig = 'updated by trigger'
 
24694
      WHERE f_int1 = - old.f_int1;
 
24695
END|
 
24696
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
24697
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24698
        
 
24699
# check trigger-6 success:      1
 
24700
DROP TRIGGER trg_1;
 
24701
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24702
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24703
f_charbig = 'just inserted'
 
24704
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24705
DELETE FROM t0_aux
 
24706
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24707
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24708
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24709
'just inserted' FROM t0_template
 
24710
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24711
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
24712
BEGIN
 
24713
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24714
f_charbig = 'updated by trigger'
 
24715
      WHERE f_int1 = - old.f_int1;
 
24716
END|
 
24717
DELETE FROM t0_aux
 
24718
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24719
        
 
24720
# check trigger-7 success:      1
 
24721
DROP TRIGGER trg_1;
 
24722
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24723
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24724
f_charbig = 'just inserted'
 
24725
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24726
DELETE FROM t0_aux
 
24727
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24728
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24729
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
24730
'just inserted' FROM t0_template
 
24731
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24732
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
24733
BEGIN
 
24734
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
24735
f_charbig = 'updated by trigger'
 
24736
      WHERE f_int1 = - old.f_int1;
 
24737
END|
 
24738
DELETE FROM t0_aux
 
24739
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
24740
        
 
24741
# check trigger-8 success:      1
 
24742
DROP TRIGGER trg_1;
 
24743
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24744
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24745
f_charbig = 'just inserted'
 
24746
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
24747
DELETE FROM t0_aux
 
24748
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24749
DELETE FROM t1
 
24750
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
24751
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24752
BEGIN
 
24753
SET new.f_int1 = old.f_int1 + @max_row,
 
24754
new.f_int2 = old.f_int2 - @max_row,
 
24755
new.f_charbig = '####updated per update trigger####';
 
24756
END|
 
24757
UPDATE t1
 
24758
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24759
f_charbig = '####updated per update statement itself####';
 
24760
        
 
24761
# check trigger-9 success:      1
 
24762
DROP TRIGGER trg_2;
 
24763
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24764
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24765
f_charbig = CONCAT('===',f_char1,'===');
 
24766
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
24767
BEGIN
 
24768
SET new.f_int1 = new.f_int1 + @max_row,
 
24769
new.f_int2 = new.f_int2 - @max_row,
 
24770
new.f_charbig = '####updated per update trigger####';
 
24771
END|
 
24772
UPDATE t1
 
24773
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
24774
f_charbig = '####updated per update statement itself####';
 
24775
        
 
24776
# check trigger-10 success:     1
 
24777
DROP TRIGGER trg_2;
 
24778
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
24779
f_int2 = CAST(f_char1 AS SIGNED INT),
 
24780
f_charbig = CONCAT('===',f_char1,'===');
 
24781
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24782
BEGIN
 
24783
SET new.f_int1 = @my_max1 + @counter,
 
24784
new.f_int2 = @my_min2 - @counter,
 
24785
new.f_charbig = '####updated per insert trigger####';
 
24786
SET @counter = @counter + 1;
 
24787
END|
 
24788
SET @counter = 1;
 
24789
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24790
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24791
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24792
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24793
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24794
ORDER BY f_int1;
 
24795
DROP TRIGGER trg_3;
 
24796
        
 
24797
# check trigger-11 success:     1
 
24798
DELETE FROM t1
 
24799
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24800
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24801
AND f_charbig = '####updated per insert trigger####';
 
24802
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
24803
BEGIN
 
24804
SET new.f_int1 = @my_max1 + @counter,
 
24805
new.f_int2 = @my_min2 - @counter,
 
24806
new.f_charbig = '####updated per insert trigger####';
 
24807
SET @counter = @counter + 1;
 
24808
END|
 
24809
SET @counter = 1;
 
24810
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
24811
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
24812
SELECT CAST(f_int1 AS CHAR),
 
24813
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
24814
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
24815
ORDER BY f_int1;
 
24816
DROP TRIGGER trg_3;
 
24817
        
 
24818
# check trigger-12 success:     1
 
24819
DELETE FROM t1
 
24820
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
24821
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
24822
AND f_charbig = '####updated per insert trigger####';
 
24823
ANALYZE  TABLE t1;
 
24824
Table   Op      Msg_type        Msg_text
 
24825
test.t1 analyze status  OK
 
24826
CHECK    TABLE t1 EXTENDED;
 
24827
Table   Op      Msg_type        Msg_text
 
24828
test.t1 check   status  OK
 
24829
CHECKSUM TABLE t1 EXTENDED;
 
24830
Table   Checksum
 
24831
test.t1 <some_value>
 
24832
OPTIMIZE TABLE t1;
 
24833
Table   Op      Msg_type        Msg_text
 
24834
test.t1 optimize        status  OK
 
24835
# check layout success:    1
 
24836
REPAIR   TABLE t1 EXTENDED;
 
24837
Table   Op      Msg_type        Msg_text
 
24838
test.t1 repair  status  OK
 
24839
# check layout success:    1
 
24840
TRUNCATE t1;
 
24841
        
 
24842
# check TRUNCATE success:       1
 
24843
# check layout success:    1
 
24844
# End usability test (inc/partition_check.inc)
 
24845
DROP TABLE t1;
 
24846
CREATE TABLE t1 (
 
24847
f_int1 INTEGER,
 
24848
f_int2 INTEGER,
 
24849
f_char1 CHAR(20),
 
24850
f_char2 CHAR(20),
 
24851
f_charbig VARCHAR(1000)
 
24852
 
 
24853
)
 
24854
PARTITION BY LIST(MOD(f_int1,4))
 
24855
(PARTITION part_3 VALUES IN (-3),
 
24856
PARTITION part_2 VALUES IN (-2),
 
24857
PARTITION part_1 VALUES IN (-1),
 
24858
PARTITION part_N VALUES IN (NULL),
 
24859
PARTITION part0 VALUES IN (0),
 
24860
PARTITION part1 VALUES IN (1),
 
24861
PARTITION part2 VALUES IN (2),
 
24862
PARTITION part3 VALUES IN (3));
 
24863
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24864
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24865
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
24866
ALTER TABLE t1 REBUILD PARTITION part_1;
 
24867
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
24868
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
24869
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
24870
# Start usability test (inc/partition_check.inc)
 
24871
create_command
 
24872
SHOW CREATE TABLE t1;
 
24873
Table   Create Table
 
24874
t1      CREATE TABLE `t1` (
 
24875
  `f_int1` int(11) DEFAULT NULL,
 
24876
  `f_int2` int(11) DEFAULT NULL,
 
24877
  `f_char1` char(20) DEFAULT NULL,
 
24878
  `f_char2` char(20) DEFAULT NULL,
 
24879
  `f_charbig` varchar(1000) DEFAULT NULL
 
24880
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
24881
 
 
24882
unified filelist
 
24883
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
24884
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
24885
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
24886
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
24887
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
24888
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
24889
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
24890
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
24891
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
24892
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
24893
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
24894
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
24895
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
24896
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
24897
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
24898
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
24899
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
24900
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
24901
 
 
24902
# check prerequisites-1 success:    1
 
24903
# check COUNT(*) success:    1
 
24904
# check MIN/MAX(f_int1) success:    1
 
24905
# check MIN/MAX(f_int2) success:    1
 
24906
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
24907
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
24908
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
24909
WHERE f_int1 IN (2,3);
 
24910
# check prerequisites-3 success:    1
 
24911
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
24912
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
24913
# check read via f_int1 success: 1
 
24914
# check read via f_int2 success: 1
 
24915
        
 
24916
# check multiple-1 success:     1
 
24917
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
24918
        
 
24919
# check multiple-2 success:     1
 
24920
INSERT INTO t1 SELECT * FROM t0_template
 
24921
WHERE MOD(f_int1,3) = 0;
 
24922
        
 
24923
# check multiple-3 success:     1
 
24924
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
24925
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
24926
AND @max_row_div2 + @max_row_div4;
 
24927
        
 
24928
# check multiple-4 success:     1
 
24929
DELETE FROM t1
 
24930
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
24931
AND @max_row_div2 + @max_row_div4 + @max_row;
 
24932
        
 
24933
# check multiple-5 success:     1
 
24934
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
24935
INSERT INTO t1
 
24936
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24937
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24938
f_charbig = '#SINGLE#';
 
24939
        
 
24940
# check single-1 success:       1
 
24941
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
24942
INSERT INTO t1
 
24943
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
24944
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
24945
f_charbig = '#SINGLE#';
 
24946
        
 
24947
# check single-2 success:       1
 
24948
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
24949
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
24950
UPDATE t1 SET f_int1 = @cur_value2
 
24951
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
24952
        
 
24953
# check single-3 success:       1
 
24954
SET @cur_value1= -1;
 
24955
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
24956
UPDATE t1 SET f_int1 = @cur_value1
 
24957
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
24958
        
 
24959
# check single-4 success:       1
 
24960
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
24961
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
24962
        
 
24963
# check single-5 success:       1
 
24964
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
24965
        
 
24966
# check single-6 success:       1
 
24967
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
24968
        
 
24969
# check single-7 success:       1
 
24970
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
24971
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
24972
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
24973
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
24974
f_charbig = '#NULL#';
 
24975
INSERT INTO t1
 
24976
SET f_int1 = NULL , f_int2 = -@max_row,
 
24977
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
24978
f_charbig = '#NULL#';
 
24979
# check null success:    1
 
24980
        
 
24981
# check null-1 success:         1
 
24982
UPDATE t1 SET f_int1 = -@max_row
 
24983
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24984
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24985
        
 
24986
# check null-2 success:         1
 
24987
UPDATE t1 SET f_int1 = NULL
 
24988
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24989
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24990
        
 
24991
# check null-3 success:         1
 
24992
DELETE FROM t1
 
24993
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
24994
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
24995
        
 
24996
# check null-4 success:         1
 
24997
DELETE FROM t1
 
24998
WHERE f_int1 = 0 AND f_int2 = 0
 
24999
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
25000
AND f_charbig = '#NULL#';
 
25001
SET AUTOCOMMIT= 0;
 
25002
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25003
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25004
FROM t0_template source_tab
 
25005
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25006
        
 
25007
# check transactions-1 success:         1
 
25008
COMMIT WORK;
 
25009
        
 
25010
# check transactions-2 success:         1
 
25011
ROLLBACK WORK;
 
25012
        
 
25013
# check transactions-3 success:         1
 
25014
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25015
COMMIT WORK;
 
25016
ROLLBACK WORK;
 
25017
        
 
25018
# check transactions-4 success:         1
 
25019
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25020
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25021
FROM t0_template source_tab
 
25022
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25023
        
 
25024
# check transactions-5 success:         1
 
25025
ROLLBACK WORK;
 
25026
Warnings:
 
25027
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
25028
        
 
25029
# check transactions-6 success:         1
 
25030
# INFO: Storage engine used for t1 seems to be not transactional.
 
25031
COMMIT;
 
25032
        
 
25033
# check transactions-7 success:         1
 
25034
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25035
COMMIT WORK;
 
25036
SET @@session.sql_mode = 'traditional';
 
25037
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
25038
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25039
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
25040
'', '', 'was inserted' FROM t0_template
 
25041
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25042
ERROR 22012: Division by 0
 
25043
COMMIT;
 
25044
        
 
25045
# check transactions-8 success:         1
 
25046
# INFO: Storage engine used for t1 seems to be unable to revert
 
25047
#       changes made by the failing statement.
 
25048
SET @@session.sql_mode = '';
 
25049
SET AUTOCOMMIT= 1;
 
25050
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25051
COMMIT WORK;
 
25052
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
25053
        
 
25054
# check special-1 success:      1
 
25055
UPDATE t1 SET f_charbig = '';
 
25056
        
 
25057
# check special-2 success:      1
 
25058
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
25059
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25060
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
25061
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25062
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25063
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25064
'just inserted' FROM t0_template
 
25065
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25066
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
25067
BEGIN
 
25068
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25069
f_charbig = 'updated by trigger'
 
25070
      WHERE f_int1 = new.f_int1;
 
25071
END|
 
25072
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25073
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25074
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25075
        
 
25076
# check trigger-1 success:      1
 
25077
DROP TRIGGER trg_1;
 
25078
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25079
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25080
f_charbig = 'just inserted'
 
25081
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25082
DELETE FROM t0_aux
 
25083
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25084
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25085
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25086
'just inserted' FROM t0_template
 
25087
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25088
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
25089
BEGIN
 
25090
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25091
f_charbig = 'updated by trigger'
 
25092
      WHERE f_int1 = new.f_int1;
 
25093
END|
 
25094
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25095
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25096
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25097
        
 
25098
# check trigger-2 success:      1
 
25099
DROP TRIGGER trg_1;
 
25100
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25101
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25102
f_charbig = 'just inserted'
 
25103
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25104
DELETE FROM t0_aux
 
25105
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25106
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25107
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25108
'just inserted' FROM t0_template
 
25109
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25110
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25111
BEGIN
 
25112
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25113
f_charbig = 'updated by trigger'
 
25114
      WHERE f_int1 = new.f_int1;
 
25115
END|
 
25116
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25117
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25118
        
 
25119
# check trigger-3 success:      1
 
25120
DROP TRIGGER trg_1;
 
25121
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25122
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25123
f_charbig = 'just inserted'
 
25124
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25125
DELETE FROM t0_aux
 
25126
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25127
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25128
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25129
'just inserted' FROM t0_template
 
25130
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25131
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25132
BEGIN
 
25133
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25134
f_charbig = 'updated by trigger'
 
25135
      WHERE f_int1 = - old.f_int1;
 
25136
END|
 
25137
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25138
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25139
        
 
25140
# check trigger-4 success:      1
 
25141
DROP TRIGGER trg_1;
 
25142
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25143
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25144
f_charbig = 'just inserted'
 
25145
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25146
DELETE FROM t0_aux
 
25147
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25148
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25149
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25150
'just inserted' FROM t0_template
 
25151
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25152
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25153
BEGIN
 
25154
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25155
f_charbig = 'updated by trigger'
 
25156
      WHERE f_int1 = new.f_int1;
 
25157
END|
 
25158
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25159
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25160
        
 
25161
# check trigger-5 success:      1
 
25162
DROP TRIGGER trg_1;
 
25163
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25164
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25165
f_charbig = 'just inserted'
 
25166
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25167
DELETE FROM t0_aux
 
25168
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25169
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25170
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25171
'just inserted' FROM t0_template
 
25172
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25173
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25174
BEGIN
 
25175
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25176
f_charbig = 'updated by trigger'
 
25177
      WHERE f_int1 = - old.f_int1;
 
25178
END|
 
25179
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25180
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25181
        
 
25182
# check trigger-6 success:      1
 
25183
DROP TRIGGER trg_1;
 
25184
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25185
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25186
f_charbig = 'just inserted'
 
25187
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25188
DELETE FROM t0_aux
 
25189
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25190
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25191
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25192
'just inserted' FROM t0_template
 
25193
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25194
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
25195
BEGIN
 
25196
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25197
f_charbig = 'updated by trigger'
 
25198
      WHERE f_int1 = - old.f_int1;
 
25199
END|
 
25200
DELETE FROM t0_aux
 
25201
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25202
        
 
25203
# check trigger-7 success:      1
 
25204
DROP TRIGGER trg_1;
 
25205
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25206
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25207
f_charbig = 'just inserted'
 
25208
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25209
DELETE FROM t0_aux
 
25210
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25211
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25212
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25213
'just inserted' FROM t0_template
 
25214
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25215
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
25216
BEGIN
 
25217
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25218
f_charbig = 'updated by trigger'
 
25219
      WHERE f_int1 = - old.f_int1;
 
25220
END|
 
25221
DELETE FROM t0_aux
 
25222
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25223
        
 
25224
# check trigger-8 success:      1
 
25225
DROP TRIGGER trg_1;
 
25226
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25227
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25228
f_charbig = 'just inserted'
 
25229
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25230
DELETE FROM t0_aux
 
25231
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25232
DELETE FROM t1
 
25233
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25234
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25235
BEGIN
 
25236
SET new.f_int1 = old.f_int1 + @max_row,
 
25237
new.f_int2 = old.f_int2 - @max_row,
 
25238
new.f_charbig = '####updated per update trigger####';
 
25239
END|
 
25240
UPDATE t1
 
25241
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25242
f_charbig = '####updated per update statement itself####';
 
25243
        
 
25244
# check trigger-9 success:      1
 
25245
DROP TRIGGER trg_2;
 
25246
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25247
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25248
f_charbig = CONCAT('===',f_char1,'===');
 
25249
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25250
BEGIN
 
25251
SET new.f_int1 = new.f_int1 + @max_row,
 
25252
new.f_int2 = new.f_int2 - @max_row,
 
25253
new.f_charbig = '####updated per update trigger####';
 
25254
END|
 
25255
UPDATE t1
 
25256
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25257
f_charbig = '####updated per update statement itself####';
 
25258
        
 
25259
# check trigger-10 success:     1
 
25260
DROP TRIGGER trg_2;
 
25261
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25262
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25263
f_charbig = CONCAT('===',f_char1,'===');
 
25264
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25265
BEGIN
 
25266
SET new.f_int1 = @my_max1 + @counter,
 
25267
new.f_int2 = @my_min2 - @counter,
 
25268
new.f_charbig = '####updated per insert trigger####';
 
25269
SET @counter = @counter + 1;
 
25270
END|
 
25271
SET @counter = 1;
 
25272
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25273
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25274
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25275
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25276
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25277
ORDER BY f_int1;
 
25278
DROP TRIGGER trg_3;
 
25279
        
 
25280
# check trigger-11 success:     1
 
25281
DELETE FROM t1
 
25282
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25283
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25284
AND f_charbig = '####updated per insert trigger####';
 
25285
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25286
BEGIN
 
25287
SET new.f_int1 = @my_max1 + @counter,
 
25288
new.f_int2 = @my_min2 - @counter,
 
25289
new.f_charbig = '####updated per insert trigger####';
 
25290
SET @counter = @counter + 1;
 
25291
END|
 
25292
SET @counter = 1;
 
25293
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25294
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
25295
SELECT CAST(f_int1 AS CHAR),
 
25296
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25297
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25298
ORDER BY f_int1;
 
25299
DROP TRIGGER trg_3;
 
25300
        
 
25301
# check trigger-12 success:     1
 
25302
DELETE FROM t1
 
25303
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25304
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25305
AND f_charbig = '####updated per insert trigger####';
 
25306
ANALYZE  TABLE t1;
 
25307
Table   Op      Msg_type        Msg_text
 
25308
test.t1 analyze status  OK
 
25309
CHECK    TABLE t1 EXTENDED;
 
25310
Table   Op      Msg_type        Msg_text
 
25311
test.t1 check   status  OK
 
25312
CHECKSUM TABLE t1 EXTENDED;
 
25313
Table   Checksum
 
25314
test.t1 <some_value>
 
25315
OPTIMIZE TABLE t1;
 
25316
Table   Op      Msg_type        Msg_text
 
25317
test.t1 optimize        status  OK
 
25318
# check layout success:    1
 
25319
REPAIR   TABLE t1 EXTENDED;
 
25320
Table   Op      Msg_type        Msg_text
 
25321
test.t1 repair  status  OK
 
25322
# check layout success:    1
 
25323
TRUNCATE t1;
 
25324
        
 
25325
# check TRUNCATE success:       1
 
25326
# check layout success:    1
 
25327
# End usability test (inc/partition_check.inc)
 
25328
DROP TABLE t1;
 
25329
CREATE TABLE t1 (
 
25330
f_int1 INTEGER,
 
25331
f_int2 INTEGER,
 
25332
f_char1 CHAR(20),
 
25333
f_char2 CHAR(20),
 
25334
f_charbig VARCHAR(1000)
 
25335
 
 
25336
)
 
25337
PARTITION BY RANGE(f_int1)
 
25338
(PARTITION parta VALUES LESS THAN (0),
 
25339
PARTITION part_1 VALUES LESS THAN (5),
 
25340
PARTITION part_2 VALUES LESS THAN (10),
 
25341
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
25342
PARTITION part_4 VALUES LESS THAN (20),
 
25343
PARTITION part_5 VALUES LESS THAN (2147483646));
 
25344
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25345
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25346
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
25347
ALTER TABLE t1 REBUILD PARTITION part_1;
 
25348
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25349
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25350
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25351
# Start usability test (inc/partition_check.inc)
 
25352
create_command
 
25353
SHOW CREATE TABLE t1;
 
25354
Table   Create Table
 
25355
t1      CREATE TABLE `t1` (
 
25356
  `f_int1` int(11) DEFAULT NULL,
 
25357
  `f_int2` int(11) DEFAULT NULL,
 
25358
  `f_char1` char(20) DEFAULT NULL,
 
25359
  `f_char2` char(20) DEFAULT NULL,
 
25360
  `f_charbig` varchar(1000) DEFAULT NULL
 
25361
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
25362
 
 
25363
unified filelist
 
25364
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
25365
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
25366
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
25367
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
25368
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
25369
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
25370
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
25371
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
25372
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
25373
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
25374
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
25375
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
25376
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
25377
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
25378
 
 
25379
# check prerequisites-1 success:    1
 
25380
# check COUNT(*) success:    1
 
25381
# check MIN/MAX(f_int1) success:    1
 
25382
# check MIN/MAX(f_int2) success:    1
 
25383
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25384
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25385
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
25386
WHERE f_int1 IN (2,3);
 
25387
# check prerequisites-3 success:    1
 
25388
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25389
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
25390
# check read via f_int1 success: 1
 
25391
# check read via f_int2 success: 1
 
25392
        
 
25393
# check multiple-1 success:     1
 
25394
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
25395
        
 
25396
# check multiple-2 success:     1
 
25397
INSERT INTO t1 SELECT * FROM t0_template
 
25398
WHERE MOD(f_int1,3) = 0;
 
25399
        
 
25400
# check multiple-3 success:     1
 
25401
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
25402
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
25403
AND @max_row_div2 + @max_row_div4;
 
25404
        
 
25405
# check multiple-4 success:     1
 
25406
DELETE FROM t1
 
25407
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
25408
AND @max_row_div2 + @max_row_div4 + @max_row;
 
25409
        
 
25410
# check multiple-5 success:     1
 
25411
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
25412
INSERT INTO t1
 
25413
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25414
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25415
f_charbig = '#SINGLE#';
 
25416
        
 
25417
# check single-1 success:       1
 
25418
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
25419
INSERT INTO t1
 
25420
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25421
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25422
f_charbig = '#SINGLE#';
 
25423
        
 
25424
# check single-2 success:       1
 
25425
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
25426
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
25427
UPDATE t1 SET f_int1 = @cur_value2
 
25428
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
25429
        
 
25430
# check single-3 success:       1
 
25431
SET @cur_value1= -1;
 
25432
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
25433
UPDATE t1 SET f_int1 = @cur_value1
 
25434
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
25435
        
 
25436
# check single-4 success:       1
 
25437
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
25438
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
25439
        
 
25440
# check single-5 success:       1
 
25441
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
25442
        
 
25443
# check single-6 success:       1
 
25444
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
25445
ERROR HY000: Table has no partition for value 2147483647
 
25446
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
25447
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
25448
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
25449
f_charbig = '#NULL#';
 
25450
INSERT INTO t1
 
25451
SET f_int1 = NULL , f_int2 = -@max_row,
 
25452
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
25453
f_charbig = '#NULL#';
 
25454
# check null success:    1
 
25455
        
 
25456
# check null-1 success:         1
 
25457
UPDATE t1 SET f_int1 = -@max_row
 
25458
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25459
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25460
        
 
25461
# check null-2 success:         1
 
25462
UPDATE t1 SET f_int1 = NULL
 
25463
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25464
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25465
        
 
25466
# check null-3 success:         1
 
25467
DELETE FROM t1
 
25468
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25469
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25470
        
 
25471
# check null-4 success:         1
 
25472
DELETE FROM t1
 
25473
WHERE f_int1 = 0 AND f_int2 = 0
 
25474
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
25475
AND f_charbig = '#NULL#';
 
25476
SET AUTOCOMMIT= 0;
 
25477
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25478
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25479
FROM t0_template source_tab
 
25480
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25481
        
 
25482
# check transactions-1 success:         1
 
25483
COMMIT WORK;
 
25484
        
 
25485
# check transactions-2 success:         1
 
25486
ROLLBACK WORK;
 
25487
        
 
25488
# check transactions-3 success:         1
 
25489
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25490
COMMIT WORK;
 
25491
ROLLBACK WORK;
 
25492
        
 
25493
# check transactions-4 success:         1
 
25494
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25495
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25496
FROM t0_template source_tab
 
25497
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25498
        
 
25499
# check transactions-5 success:         1
 
25500
ROLLBACK WORK;
 
25501
Warnings:
 
25502
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
25503
        
 
25504
# check transactions-6 success:         1
 
25505
# INFO: Storage engine used for t1 seems to be not transactional.
 
25506
COMMIT;
 
25507
        
 
25508
# check transactions-7 success:         1
 
25509
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25510
COMMIT WORK;
 
25511
SET @@session.sql_mode = 'traditional';
 
25512
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
25513
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25514
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
25515
'', '', 'was inserted' FROM t0_template
 
25516
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25517
ERROR 22012: Division by 0
 
25518
COMMIT;
 
25519
        
 
25520
# check transactions-8 success:         1
 
25521
# INFO: Storage engine used for t1 seems to be unable to revert
 
25522
#       changes made by the failing statement.
 
25523
SET @@session.sql_mode = '';
 
25524
SET AUTOCOMMIT= 1;
 
25525
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25526
COMMIT WORK;
 
25527
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
25528
        
 
25529
# check special-1 success:      1
 
25530
UPDATE t1 SET f_charbig = '';
 
25531
        
 
25532
# check special-2 success:      1
 
25533
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
25534
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25535
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
25536
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25537
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25538
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25539
'just inserted' FROM t0_template
 
25540
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25541
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
25542
BEGIN
 
25543
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25544
f_charbig = 'updated by trigger'
 
25545
      WHERE f_int1 = new.f_int1;
 
25546
END|
 
25547
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25548
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25549
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25550
        
 
25551
# check trigger-1 success:      1
 
25552
DROP TRIGGER trg_1;
 
25553
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25554
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25555
f_charbig = 'just inserted'
 
25556
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25557
DELETE FROM t0_aux
 
25558
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25559
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25560
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25561
'just inserted' FROM t0_template
 
25562
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25563
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
25564
BEGIN
 
25565
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25566
f_charbig = 'updated by trigger'
 
25567
      WHERE f_int1 = new.f_int1;
 
25568
END|
 
25569
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25570
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
25571
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25572
        
 
25573
# check trigger-2 success:      1
 
25574
DROP TRIGGER trg_1;
 
25575
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25576
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25577
f_charbig = 'just inserted'
 
25578
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25579
DELETE FROM t0_aux
 
25580
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25581
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25582
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25583
'just inserted' FROM t0_template
 
25584
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25585
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25586
BEGIN
 
25587
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25588
f_charbig = 'updated by trigger'
 
25589
      WHERE f_int1 = new.f_int1;
 
25590
END|
 
25591
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25592
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25593
        
 
25594
# check trigger-3 success:      1
 
25595
DROP TRIGGER trg_1;
 
25596
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25597
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25598
f_charbig = 'just inserted'
 
25599
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25600
DELETE FROM t0_aux
 
25601
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25602
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25603
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25604
'just inserted' FROM t0_template
 
25605
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25606
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
25607
BEGIN
 
25608
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25609
f_charbig = 'updated by trigger'
 
25610
      WHERE f_int1 = - old.f_int1;
 
25611
END|
 
25612
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25613
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25614
        
 
25615
# check trigger-4 success:      1
 
25616
DROP TRIGGER trg_1;
 
25617
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25618
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25619
f_charbig = 'just inserted'
 
25620
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25621
DELETE FROM t0_aux
 
25622
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25623
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25624
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25625
'just inserted' FROM t0_template
 
25626
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25627
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25628
BEGIN
 
25629
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25630
f_charbig = 'updated by trigger'
 
25631
      WHERE f_int1 = new.f_int1;
 
25632
END|
 
25633
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25634
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25635
        
 
25636
# check trigger-5 success:      1
 
25637
DROP TRIGGER trg_1;
 
25638
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25639
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25640
f_charbig = 'just inserted'
 
25641
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25642
DELETE FROM t0_aux
 
25643
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25644
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25645
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25646
'just inserted' FROM t0_template
 
25647
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25648
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
25649
BEGIN
 
25650
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25651
f_charbig = 'updated by trigger'
 
25652
      WHERE f_int1 = - old.f_int1;
 
25653
END|
 
25654
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
25655
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25656
        
 
25657
# check trigger-6 success:      1
 
25658
DROP TRIGGER trg_1;
 
25659
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25660
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25661
f_charbig = 'just inserted'
 
25662
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25663
DELETE FROM t0_aux
 
25664
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25665
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25666
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25667
'just inserted' FROM t0_template
 
25668
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25669
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
25670
BEGIN
 
25671
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25672
f_charbig = 'updated by trigger'
 
25673
      WHERE f_int1 = - old.f_int1;
 
25674
END|
 
25675
DELETE FROM t0_aux
 
25676
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25677
        
 
25678
# check trigger-7 success:      1
 
25679
DROP TRIGGER trg_1;
 
25680
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25681
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25682
f_charbig = 'just inserted'
 
25683
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25684
DELETE FROM t0_aux
 
25685
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25686
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25687
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
25688
'just inserted' FROM t0_template
 
25689
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25690
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
25691
BEGIN
 
25692
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
25693
f_charbig = 'updated by trigger'
 
25694
      WHERE f_int1 = - old.f_int1;
 
25695
END|
 
25696
DELETE FROM t0_aux
 
25697
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
25698
        
 
25699
# check trigger-8 success:      1
 
25700
DROP TRIGGER trg_1;
 
25701
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25702
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25703
f_charbig = 'just inserted'
 
25704
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
25705
DELETE FROM t0_aux
 
25706
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25707
DELETE FROM t1
 
25708
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
25709
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25710
BEGIN
 
25711
SET new.f_int1 = old.f_int1 + @max_row,
 
25712
new.f_int2 = old.f_int2 - @max_row,
 
25713
new.f_charbig = '####updated per update trigger####';
 
25714
END|
 
25715
UPDATE t1
 
25716
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25717
f_charbig = '####updated per update statement itself####';
 
25718
        
 
25719
# check trigger-9 success:      1
 
25720
DROP TRIGGER trg_2;
 
25721
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25722
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25723
f_charbig = CONCAT('===',f_char1,'===');
 
25724
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
25725
BEGIN
 
25726
SET new.f_int1 = new.f_int1 + @max_row,
 
25727
new.f_int2 = new.f_int2 - @max_row,
 
25728
new.f_charbig = '####updated per update trigger####';
 
25729
END|
 
25730
UPDATE t1
 
25731
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
25732
f_charbig = '####updated per update statement itself####';
 
25733
        
 
25734
# check trigger-10 success:     1
 
25735
DROP TRIGGER trg_2;
 
25736
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
25737
f_int2 = CAST(f_char1 AS SIGNED INT),
 
25738
f_charbig = CONCAT('===',f_char1,'===');
 
25739
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25740
BEGIN
 
25741
SET new.f_int1 = @my_max1 + @counter,
 
25742
new.f_int2 = @my_min2 - @counter,
 
25743
new.f_charbig = '####updated per insert trigger####';
 
25744
SET @counter = @counter + 1;
 
25745
END|
 
25746
SET @counter = 1;
 
25747
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25748
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25749
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25750
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25751
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25752
ORDER BY f_int1;
 
25753
DROP TRIGGER trg_3;
 
25754
        
 
25755
# check trigger-11 success:     1
 
25756
DELETE FROM t1
 
25757
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25758
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25759
AND f_charbig = '####updated per insert trigger####';
 
25760
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
25761
BEGIN
 
25762
SET new.f_int1 = @my_max1 + @counter,
 
25763
new.f_int2 = @my_min2 - @counter,
 
25764
new.f_charbig = '####updated per insert trigger####';
 
25765
SET @counter = @counter + 1;
 
25766
END|
 
25767
SET @counter = 1;
 
25768
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
25769
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
25770
SELECT CAST(f_int1 AS CHAR),
 
25771
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
25772
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
25773
ORDER BY f_int1;
 
25774
DROP TRIGGER trg_3;
 
25775
        
 
25776
# check trigger-12 success:     1
 
25777
DELETE FROM t1
 
25778
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
25779
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
25780
AND f_charbig = '####updated per insert trigger####';
 
25781
ANALYZE  TABLE t1;
 
25782
Table   Op      Msg_type        Msg_text
 
25783
test.t1 analyze status  OK
 
25784
CHECK    TABLE t1 EXTENDED;
 
25785
Table   Op      Msg_type        Msg_text
 
25786
test.t1 check   status  OK
 
25787
CHECKSUM TABLE t1 EXTENDED;
 
25788
Table   Checksum
 
25789
test.t1 <some_value>
 
25790
OPTIMIZE TABLE t1;
 
25791
Table   Op      Msg_type        Msg_text
 
25792
test.t1 optimize        status  OK
 
25793
# check layout success:    1
 
25794
REPAIR   TABLE t1 EXTENDED;
 
25795
Table   Op      Msg_type        Msg_text
 
25796
test.t1 repair  status  OK
 
25797
# check layout success:    1
 
25798
TRUNCATE t1;
 
25799
        
 
25800
# check TRUNCATE success:       1
 
25801
# check layout success:    1
 
25802
# End usability test (inc/partition_check.inc)
 
25803
DROP TABLE t1;
 
25804
CREATE TABLE t1 (
 
25805
f_int1 INTEGER,
 
25806
f_int2 INTEGER,
 
25807
f_char1 CHAR(20),
 
25808
f_char2 CHAR(20),
 
25809
f_charbig VARCHAR(1000)
 
25810
 
 
25811
)
 
25812
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
25813
(PARTITION part_1 VALUES LESS THAN (0),
 
25814
PARTITION part_2 VALUES LESS THAN (5),
 
25815
PARTITION part_3 VALUES LESS THAN (10),
 
25816
PARTITION part_4 VALUES LESS THAN (2147483646));
 
25817
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25818
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25819
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
25820
ALTER TABLE t1 REBUILD PARTITION part_1;
 
25821
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
25822
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
25823
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
25824
# Start usability test (inc/partition_check.inc)
 
25825
create_command
 
25826
SHOW CREATE TABLE t1;
 
25827
Table   Create Table
 
25828
t1      CREATE TABLE `t1` (
 
25829
  `f_int1` int(11) DEFAULT NULL,
 
25830
  `f_int2` int(11) DEFAULT NULL,
 
25831
  `f_char1` char(20) DEFAULT NULL,
 
25832
  `f_char2` char(20) DEFAULT NULL,
 
25833
  `f_charbig` varchar(1000) DEFAULT NULL
 
25834
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
25835
 
 
25836
unified filelist
 
25837
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
25838
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
25839
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
25840
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
25841
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
25842
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
25843
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
25844
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
25845
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
25846
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
25847
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
25848
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
25849
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYD
 
25850
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYI
 
25851
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYD
 
25852
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYI
 
25853
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
25854
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
25855
 
 
25856
# check prerequisites-1 success:    1
 
25857
# check COUNT(*) success:    1
 
25858
# check MIN/MAX(f_int1) success:    1
 
25859
# check MIN/MAX(f_int2) success:    1
 
25860
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25861
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
25862
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
25863
WHERE f_int1 IN (2,3);
 
25864
# check prerequisites-3 success:    1
 
25865
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
25866
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
25867
# check read via f_int1 success: 1
 
25868
# check read via f_int2 success: 1
 
25869
        
 
25870
# check multiple-1 success:     1
 
25871
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
25872
        
 
25873
# check multiple-2 success:     1
 
25874
INSERT INTO t1 SELECT * FROM t0_template
 
25875
WHERE MOD(f_int1,3) = 0;
 
25876
        
 
25877
# check multiple-3 success:     1
 
25878
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
25879
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
25880
AND @max_row_div2 + @max_row_div4;
 
25881
        
 
25882
# check multiple-4 success:     1
 
25883
DELETE FROM t1
 
25884
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
25885
AND @max_row_div2 + @max_row_div4 + @max_row;
 
25886
        
 
25887
# check multiple-5 success:     1
 
25888
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
25889
INSERT INTO t1
 
25890
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25891
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25892
f_charbig = '#SINGLE#';
 
25893
        
 
25894
# check single-1 success:       1
 
25895
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
25896
INSERT INTO t1
 
25897
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
25898
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
25899
f_charbig = '#SINGLE#';
 
25900
        
 
25901
# check single-2 success:       1
 
25902
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
25903
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
25904
UPDATE t1 SET f_int1 = @cur_value2
 
25905
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
25906
        
 
25907
# check single-3 success:       1
 
25908
SET @cur_value1= -1;
 
25909
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
25910
UPDATE t1 SET f_int1 = @cur_value1
 
25911
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
25912
        
 
25913
# check single-4 success:       1
 
25914
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
25915
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
25916
        
 
25917
# check single-5 success:       1
 
25918
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
25919
        
 
25920
# check single-6 success:       1
 
25921
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
25922
        
 
25923
# check single-7 success:       1
 
25924
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
25925
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
25926
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
25927
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
25928
f_charbig = '#NULL#';
 
25929
INSERT INTO t1
 
25930
SET f_int1 = NULL , f_int2 = -@max_row,
 
25931
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
25932
f_charbig = '#NULL#';
 
25933
# check null success:    1
 
25934
        
 
25935
# check null-1 success:         1
 
25936
UPDATE t1 SET f_int1 = -@max_row
 
25937
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25938
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25939
        
 
25940
# check null-2 success:         1
 
25941
UPDATE t1 SET f_int1 = NULL
 
25942
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25943
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25944
        
 
25945
# check null-3 success:         1
 
25946
DELETE FROM t1
 
25947
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
25948
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
25949
        
 
25950
# check null-4 success:         1
 
25951
DELETE FROM t1
 
25952
WHERE f_int1 = 0 AND f_int2 = 0
 
25953
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
25954
AND f_charbig = '#NULL#';
 
25955
SET AUTOCOMMIT= 0;
 
25956
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25957
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25958
FROM t0_template source_tab
 
25959
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25960
        
 
25961
# check transactions-1 success:         1
 
25962
COMMIT WORK;
 
25963
        
 
25964
# check transactions-2 success:         1
 
25965
ROLLBACK WORK;
 
25966
        
 
25967
# check transactions-3 success:         1
 
25968
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25969
COMMIT WORK;
 
25970
ROLLBACK WORK;
 
25971
        
 
25972
# check transactions-4 success:         1
 
25973
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25974
SELECT f_int1, f_int1, '', '', 'was inserted'
 
25975
FROM t0_template source_tab
 
25976
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25977
        
 
25978
# check transactions-5 success:         1
 
25979
ROLLBACK WORK;
 
25980
Warnings:
 
25981
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
25982
        
 
25983
# check transactions-6 success:         1
 
25984
# INFO: Storage engine used for t1 seems to be not transactional.
 
25985
COMMIT;
 
25986
        
 
25987
# check transactions-7 success:         1
 
25988
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
25989
COMMIT WORK;
 
25990
SET @@session.sql_mode = 'traditional';
 
25991
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
25992
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
25993
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
25994
'', '', 'was inserted' FROM t0_template
 
25995
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
25996
ERROR 22012: Division by 0
 
25997
COMMIT;
 
25998
        
 
25999
# check transactions-8 success:         1
 
26000
# INFO: Storage engine used for t1 seems to be unable to revert
 
26001
#       changes made by the failing statement.
 
26002
SET @@session.sql_mode = '';
 
26003
SET AUTOCOMMIT= 1;
 
26004
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26005
COMMIT WORK;
 
26006
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
26007
        
 
26008
# check special-1 success:      1
 
26009
UPDATE t1 SET f_charbig = '';
 
26010
        
 
26011
# check special-2 success:      1
 
26012
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
26013
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26014
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
26015
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26016
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26017
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26018
'just inserted' FROM t0_template
 
26019
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26020
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
26021
BEGIN
 
26022
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26023
f_charbig = 'updated by trigger'
 
26024
      WHERE f_int1 = new.f_int1;
 
26025
END|
 
26026
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26027
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26028
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26029
        
 
26030
# check trigger-1 success:      1
 
26031
DROP TRIGGER trg_1;
 
26032
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26033
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26034
f_charbig = 'just inserted'
 
26035
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26036
DELETE FROM t0_aux
 
26037
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26038
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26039
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26040
'just inserted' FROM t0_template
 
26041
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26042
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
26043
BEGIN
 
26044
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26045
f_charbig = 'updated by trigger'
 
26046
      WHERE f_int1 = new.f_int1;
 
26047
END|
 
26048
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26049
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26050
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26051
        
 
26052
# check trigger-2 success:      1
 
26053
DROP TRIGGER trg_1;
 
26054
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26055
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26056
f_charbig = 'just inserted'
 
26057
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26058
DELETE FROM t0_aux
 
26059
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26060
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26061
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26062
'just inserted' FROM t0_template
 
26063
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26064
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26065
BEGIN
 
26066
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26067
f_charbig = 'updated by trigger'
 
26068
      WHERE f_int1 = new.f_int1;
 
26069
END|
 
26070
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26071
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26072
        
 
26073
# check trigger-3 success:      1
 
26074
DROP TRIGGER trg_1;
 
26075
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26076
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26077
f_charbig = 'just inserted'
 
26078
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26079
DELETE FROM t0_aux
 
26080
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26081
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26082
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26083
'just inserted' FROM t0_template
 
26084
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26085
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26086
BEGIN
 
26087
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26088
f_charbig = 'updated by trigger'
 
26089
      WHERE f_int1 = - old.f_int1;
 
26090
END|
 
26091
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26092
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26093
        
 
26094
# check trigger-4 success:      1
 
26095
DROP TRIGGER trg_1;
 
26096
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26097
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26098
f_charbig = 'just inserted'
 
26099
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26100
DELETE FROM t0_aux
 
26101
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26102
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26103
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26104
'just inserted' FROM t0_template
 
26105
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26106
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26107
BEGIN
 
26108
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26109
f_charbig = 'updated by trigger'
 
26110
      WHERE f_int1 = new.f_int1;
 
26111
END|
 
26112
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26113
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26114
        
 
26115
# check trigger-5 success:      1
 
26116
DROP TRIGGER trg_1;
 
26117
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26118
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26119
f_charbig = 'just inserted'
 
26120
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26121
DELETE FROM t0_aux
 
26122
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26123
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26124
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26125
'just inserted' FROM t0_template
 
26126
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26127
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26128
BEGIN
 
26129
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26130
f_charbig = 'updated by trigger'
 
26131
      WHERE f_int1 = - old.f_int1;
 
26132
END|
 
26133
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26134
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26135
        
 
26136
# check trigger-6 success:      1
 
26137
DROP TRIGGER trg_1;
 
26138
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26139
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26140
f_charbig = 'just inserted'
 
26141
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26142
DELETE FROM t0_aux
 
26143
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26144
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26145
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26146
'just inserted' FROM t0_template
 
26147
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26148
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
26149
BEGIN
 
26150
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26151
f_charbig = 'updated by trigger'
 
26152
      WHERE f_int1 = - old.f_int1;
 
26153
END|
 
26154
DELETE FROM t0_aux
 
26155
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26156
        
 
26157
# check trigger-7 success:      1
 
26158
DROP TRIGGER trg_1;
 
26159
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26160
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26161
f_charbig = 'just inserted'
 
26162
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26163
DELETE FROM t0_aux
 
26164
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26165
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26166
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26167
'just inserted' FROM t0_template
 
26168
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26169
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
26170
BEGIN
 
26171
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26172
f_charbig = 'updated by trigger'
 
26173
      WHERE f_int1 = - old.f_int1;
 
26174
END|
 
26175
DELETE FROM t0_aux
 
26176
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26177
        
 
26178
# check trigger-8 success:      1
 
26179
DROP TRIGGER trg_1;
 
26180
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26181
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26182
f_charbig = 'just inserted'
 
26183
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26184
DELETE FROM t0_aux
 
26185
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26186
DELETE FROM t1
 
26187
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26188
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26189
BEGIN
 
26190
SET new.f_int1 = old.f_int1 + @max_row,
 
26191
new.f_int2 = old.f_int2 - @max_row,
 
26192
new.f_charbig = '####updated per update trigger####';
 
26193
END|
 
26194
UPDATE t1
 
26195
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26196
f_charbig = '####updated per update statement itself####';
 
26197
        
 
26198
# check trigger-9 success:      1
 
26199
DROP TRIGGER trg_2;
 
26200
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26201
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26202
f_charbig = CONCAT('===',f_char1,'===');
 
26203
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26204
BEGIN
 
26205
SET new.f_int1 = new.f_int1 + @max_row,
 
26206
new.f_int2 = new.f_int2 - @max_row,
 
26207
new.f_charbig = '####updated per update trigger####';
 
26208
END|
 
26209
UPDATE t1
 
26210
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26211
f_charbig = '####updated per update statement itself####';
 
26212
        
 
26213
# check trigger-10 success:     1
 
26214
DROP TRIGGER trg_2;
 
26215
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26216
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26217
f_charbig = CONCAT('===',f_char1,'===');
 
26218
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26219
BEGIN
 
26220
SET new.f_int1 = @my_max1 + @counter,
 
26221
new.f_int2 = @my_min2 - @counter,
 
26222
new.f_charbig = '####updated per insert trigger####';
 
26223
SET @counter = @counter + 1;
 
26224
END|
 
26225
SET @counter = 1;
 
26226
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26227
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26228
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26229
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26230
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26231
ORDER BY f_int1;
 
26232
DROP TRIGGER trg_3;
 
26233
        
 
26234
# check trigger-11 success:     1
 
26235
DELETE FROM t1
 
26236
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26237
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26238
AND f_charbig = '####updated per insert trigger####';
 
26239
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26240
BEGIN
 
26241
SET new.f_int1 = @my_max1 + @counter,
 
26242
new.f_int2 = @my_min2 - @counter,
 
26243
new.f_charbig = '####updated per insert trigger####';
 
26244
SET @counter = @counter + 1;
 
26245
END|
 
26246
SET @counter = 1;
 
26247
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26248
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
26249
SELECT CAST(f_int1 AS CHAR),
 
26250
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26251
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26252
ORDER BY f_int1;
 
26253
DROP TRIGGER trg_3;
 
26254
        
 
26255
# check trigger-12 success:     1
 
26256
DELETE FROM t1
 
26257
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26258
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26259
AND f_charbig = '####updated per insert trigger####';
 
26260
ANALYZE  TABLE t1;
 
26261
Table   Op      Msg_type        Msg_text
 
26262
test.t1 analyze status  OK
 
26263
CHECK    TABLE t1 EXTENDED;
 
26264
Table   Op      Msg_type        Msg_text
 
26265
test.t1 check   status  OK
 
26266
CHECKSUM TABLE t1 EXTENDED;
 
26267
Table   Checksum
 
26268
test.t1 <some_value>
 
26269
OPTIMIZE TABLE t1;
 
26270
Table   Op      Msg_type        Msg_text
 
26271
test.t1 optimize        status  OK
 
26272
# check layout success:    1
 
26273
REPAIR   TABLE t1 EXTENDED;
 
26274
Table   Op      Msg_type        Msg_text
 
26275
test.t1 repair  status  OK
 
26276
# check layout success:    1
 
26277
TRUNCATE t1;
 
26278
        
 
26279
# check TRUNCATE success:       1
 
26280
# check layout success:    1
 
26281
# End usability test (inc/partition_check.inc)
 
26282
DROP TABLE t1;
 
26283
CREATE TABLE t1 (
 
26284
f_int1 INTEGER,
 
26285
f_int2 INTEGER,
 
26286
f_char1 CHAR(20),
 
26287
f_char2 CHAR(20),
 
26288
f_charbig VARCHAR(1000)
 
26289
 
 
26290
)
 
26291
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
26292
(PARTITION part_1 VALUES LESS THAN (0)
 
26293
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
26294
PARTITION part_2 VALUES LESS THAN (5)
 
26295
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
26296
PARTITION part_3 VALUES LESS THAN (10)
 
26297
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
26298
PARTITION part_4 VALUES LESS THAN (2147483646)
 
26299
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
26300
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26301
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26302
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
26303
ALTER TABLE t1 REBUILD PARTITION part_1;
 
26304
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26305
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26306
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26307
# Start usability test (inc/partition_check.inc)
 
26308
create_command
 
26309
SHOW CREATE TABLE t1;
 
26310
Table   Create Table
 
26311
t1      CREATE TABLE `t1` (
 
26312
  `f_int1` int(11) DEFAULT NULL,
 
26313
  `f_int2` int(11) DEFAULT NULL,
 
26314
  `f_char1` char(20) DEFAULT NULL,
 
26315
  `f_char2` char(20) DEFAULT NULL,
 
26316
  `f_charbig` varchar(1000) DEFAULT NULL
 
26317
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
26318
 
 
26319
unified filelist
 
26320
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYD
 
26321
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYI
 
26322
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYD
 
26323
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYI
 
26324
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYD
 
26325
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYI
 
26326
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYD
 
26327
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYI
 
26328
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYD
 
26329
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYI
 
26330
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYD
 
26331
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYI
 
26332
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYD
 
26333
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYI
 
26334
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYD
 
26335
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYI
 
26336
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
26337
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
26338
 
 
26339
# check prerequisites-1 success:    1
 
26340
# check COUNT(*) success:    1
 
26341
# check MIN/MAX(f_int1) success:    1
 
26342
# check MIN/MAX(f_int2) success:    1
 
26343
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26344
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26345
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
26346
WHERE f_int1 IN (2,3);
 
26347
# check prerequisites-3 success:    1
 
26348
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
26349
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
26350
# check read via f_int1 success: 1
 
26351
# check read via f_int2 success: 1
 
26352
        
 
26353
# check multiple-1 success:     1
 
26354
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
26355
        
 
26356
# check multiple-2 success:     1
 
26357
INSERT INTO t1 SELECT * FROM t0_template
 
26358
WHERE MOD(f_int1,3) = 0;
 
26359
        
 
26360
# check multiple-3 success:     1
 
26361
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
26362
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
26363
AND @max_row_div2 + @max_row_div4;
 
26364
        
 
26365
# check multiple-4 success:     1
 
26366
DELETE FROM t1
 
26367
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
26368
AND @max_row_div2 + @max_row_div4 + @max_row;
 
26369
        
 
26370
# check multiple-5 success:     1
 
26371
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
26372
INSERT INTO t1
 
26373
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26374
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26375
f_charbig = '#SINGLE#';
 
26376
        
 
26377
# check single-1 success:       1
 
26378
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
26379
INSERT INTO t1
 
26380
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26381
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26382
f_charbig = '#SINGLE#';
 
26383
        
 
26384
# check single-2 success:       1
 
26385
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
26386
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
26387
UPDATE t1 SET f_int1 = @cur_value2
 
26388
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
26389
        
 
26390
# check single-3 success:       1
 
26391
SET @cur_value1= -1;
 
26392
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
26393
UPDATE t1 SET f_int1 = @cur_value1
 
26394
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
26395
        
 
26396
# check single-4 success:       1
 
26397
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
26398
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
26399
        
 
26400
# check single-5 success:       1
 
26401
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
26402
        
 
26403
# check single-6 success:       1
 
26404
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
26405
ERROR HY000: Table has no partition for value 2147483647
 
26406
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
26407
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
26408
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
26409
f_charbig = '#NULL#';
 
26410
INSERT INTO t1
 
26411
SET f_int1 = NULL , f_int2 = -@max_row,
 
26412
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
26413
f_charbig = '#NULL#';
 
26414
# check null success:    1
 
26415
        
 
26416
# check null-1 success:         1
 
26417
UPDATE t1 SET f_int1 = -@max_row
 
26418
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26419
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26420
        
 
26421
# check null-2 success:         1
 
26422
UPDATE t1 SET f_int1 = NULL
 
26423
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26424
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26425
        
 
26426
# check null-3 success:         1
 
26427
DELETE FROM t1
 
26428
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26429
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26430
        
 
26431
# check null-4 success:         1
 
26432
DELETE FROM t1
 
26433
WHERE f_int1 = 0 AND f_int2 = 0
 
26434
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
26435
AND f_charbig = '#NULL#';
 
26436
SET AUTOCOMMIT= 0;
 
26437
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26438
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26439
FROM t0_template source_tab
 
26440
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26441
        
 
26442
# check transactions-1 success:         1
 
26443
COMMIT WORK;
 
26444
        
 
26445
# check transactions-2 success:         1
 
26446
ROLLBACK WORK;
 
26447
        
 
26448
# check transactions-3 success:         1
 
26449
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26450
COMMIT WORK;
 
26451
ROLLBACK WORK;
 
26452
        
 
26453
# check transactions-4 success:         1
 
26454
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26455
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26456
FROM t0_template source_tab
 
26457
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26458
        
 
26459
# check transactions-5 success:         1
 
26460
ROLLBACK WORK;
 
26461
Warnings:
 
26462
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
26463
        
 
26464
# check transactions-6 success:         1
 
26465
# INFO: Storage engine used for t1 seems to be not transactional.
 
26466
COMMIT;
 
26467
        
 
26468
# check transactions-7 success:         1
 
26469
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26470
COMMIT WORK;
 
26471
SET @@session.sql_mode = 'traditional';
 
26472
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
26473
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26474
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
26475
'', '', 'was inserted' FROM t0_template
 
26476
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26477
ERROR 22012: Division by 0
 
26478
COMMIT;
 
26479
        
 
26480
# check transactions-8 success:         1
 
26481
# INFO: Storage engine used for t1 seems to be unable to revert
 
26482
#       changes made by the failing statement.
 
26483
SET @@session.sql_mode = '';
 
26484
SET AUTOCOMMIT= 1;
 
26485
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26486
COMMIT WORK;
 
26487
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
26488
        
 
26489
# check special-1 success:      1
 
26490
UPDATE t1 SET f_charbig = '';
 
26491
        
 
26492
# check special-2 success:      1
 
26493
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
26494
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26495
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
26496
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26497
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26498
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26499
'just inserted' FROM t0_template
 
26500
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26501
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
26502
BEGIN
 
26503
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26504
f_charbig = 'updated by trigger'
 
26505
      WHERE f_int1 = new.f_int1;
 
26506
END|
 
26507
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26508
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26509
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26510
        
 
26511
# check trigger-1 success:      1
 
26512
DROP TRIGGER trg_1;
 
26513
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26514
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26515
f_charbig = 'just inserted'
 
26516
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26517
DELETE FROM t0_aux
 
26518
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26519
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26520
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26521
'just inserted' FROM t0_template
 
26522
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26523
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
26524
BEGIN
 
26525
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26526
f_charbig = 'updated by trigger'
 
26527
      WHERE f_int1 = new.f_int1;
 
26528
END|
 
26529
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26530
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26531
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26532
        
 
26533
# check trigger-2 success:      1
 
26534
DROP TRIGGER trg_1;
 
26535
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26536
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26537
f_charbig = 'just inserted'
 
26538
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26539
DELETE FROM t0_aux
 
26540
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26541
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26542
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26543
'just inserted' FROM t0_template
 
26544
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26545
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26546
BEGIN
 
26547
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26548
f_charbig = 'updated by trigger'
 
26549
      WHERE f_int1 = new.f_int1;
 
26550
END|
 
26551
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26552
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26553
        
 
26554
# check trigger-3 success:      1
 
26555
DROP TRIGGER trg_1;
 
26556
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26557
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26558
f_charbig = 'just inserted'
 
26559
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26560
DELETE FROM t0_aux
 
26561
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26562
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26563
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26564
'just inserted' FROM t0_template
 
26565
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26566
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
26567
BEGIN
 
26568
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26569
f_charbig = 'updated by trigger'
 
26570
      WHERE f_int1 = - old.f_int1;
 
26571
END|
 
26572
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26573
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26574
        
 
26575
# check trigger-4 success:      1
 
26576
DROP TRIGGER trg_1;
 
26577
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26578
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26579
f_charbig = 'just inserted'
 
26580
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26581
DELETE FROM t0_aux
 
26582
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26583
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26584
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26585
'just inserted' FROM t0_template
 
26586
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26587
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26588
BEGIN
 
26589
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26590
f_charbig = 'updated by trigger'
 
26591
      WHERE f_int1 = new.f_int1;
 
26592
END|
 
26593
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26594
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26595
        
 
26596
# check trigger-5 success:      1
 
26597
DROP TRIGGER trg_1;
 
26598
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26599
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26600
f_charbig = 'just inserted'
 
26601
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26602
DELETE FROM t0_aux
 
26603
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26604
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26605
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26606
'just inserted' FROM t0_template
 
26607
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26608
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
26609
BEGIN
 
26610
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26611
f_charbig = 'updated by trigger'
 
26612
      WHERE f_int1 = - old.f_int1;
 
26613
END|
 
26614
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
26615
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26616
        
 
26617
# check trigger-6 success:      1
 
26618
DROP TRIGGER trg_1;
 
26619
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26620
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26621
f_charbig = 'just inserted'
 
26622
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26623
DELETE FROM t0_aux
 
26624
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26625
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26626
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26627
'just inserted' FROM t0_template
 
26628
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26629
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
26630
BEGIN
 
26631
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26632
f_charbig = 'updated by trigger'
 
26633
      WHERE f_int1 = - old.f_int1;
 
26634
END|
 
26635
DELETE FROM t0_aux
 
26636
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26637
        
 
26638
# check trigger-7 success:      1
 
26639
DROP TRIGGER trg_1;
 
26640
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26641
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26642
f_charbig = 'just inserted'
 
26643
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26644
DELETE FROM t0_aux
 
26645
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26646
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26647
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26648
'just inserted' FROM t0_template
 
26649
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26650
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
26651
BEGIN
 
26652
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26653
f_charbig = 'updated by trigger'
 
26654
      WHERE f_int1 = - old.f_int1;
 
26655
END|
 
26656
DELETE FROM t0_aux
 
26657
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
26658
        
 
26659
# check trigger-8 success:      1
 
26660
DROP TRIGGER trg_1;
 
26661
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26662
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26663
f_charbig = 'just inserted'
 
26664
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
26665
DELETE FROM t0_aux
 
26666
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26667
DELETE FROM t1
 
26668
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26669
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26670
BEGIN
 
26671
SET new.f_int1 = old.f_int1 + @max_row,
 
26672
new.f_int2 = old.f_int2 - @max_row,
 
26673
new.f_charbig = '####updated per update trigger####';
 
26674
END|
 
26675
UPDATE t1
 
26676
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26677
f_charbig = '####updated per update statement itself####';
 
26678
        
 
26679
# check trigger-9 success:      1
 
26680
DROP TRIGGER trg_2;
 
26681
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26682
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26683
f_charbig = CONCAT('===',f_char1,'===');
 
26684
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
26685
BEGIN
 
26686
SET new.f_int1 = new.f_int1 + @max_row,
 
26687
new.f_int2 = new.f_int2 - @max_row,
 
26688
new.f_charbig = '####updated per update trigger####';
 
26689
END|
 
26690
UPDATE t1
 
26691
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
26692
f_charbig = '####updated per update statement itself####';
 
26693
        
 
26694
# check trigger-10 success:     1
 
26695
DROP TRIGGER trg_2;
 
26696
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26697
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26698
f_charbig = CONCAT('===',f_char1,'===');
 
26699
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26700
BEGIN
 
26701
SET new.f_int1 = @my_max1 + @counter,
 
26702
new.f_int2 = @my_min2 - @counter,
 
26703
new.f_charbig = '####updated per insert trigger####';
 
26704
SET @counter = @counter + 1;
 
26705
END|
 
26706
SET @counter = 1;
 
26707
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26708
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26709
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26710
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26711
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26712
ORDER BY f_int1;
 
26713
DROP TRIGGER trg_3;
 
26714
        
 
26715
# check trigger-11 success:     1
 
26716
DELETE FROM t1
 
26717
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26718
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26719
AND f_charbig = '####updated per insert trigger####';
 
26720
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
26721
BEGIN
 
26722
SET new.f_int1 = @my_max1 + @counter,
 
26723
new.f_int2 = @my_min2 - @counter,
 
26724
new.f_charbig = '####updated per insert trigger####';
 
26725
SET @counter = @counter + 1;
 
26726
END|
 
26727
SET @counter = 1;
 
26728
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
26729
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
26730
SELECT CAST(f_int1 AS CHAR),
 
26731
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
26732
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
26733
ORDER BY f_int1;
 
26734
DROP TRIGGER trg_3;
 
26735
        
 
26736
# check trigger-12 success:     1
 
26737
DELETE FROM t1
 
26738
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
26739
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
26740
AND f_charbig = '####updated per insert trigger####';
 
26741
ANALYZE  TABLE t1;
 
26742
Table   Op      Msg_type        Msg_text
 
26743
test.t1 analyze status  OK
 
26744
CHECK    TABLE t1 EXTENDED;
 
26745
Table   Op      Msg_type        Msg_text
 
26746
test.t1 check   status  OK
 
26747
CHECKSUM TABLE t1 EXTENDED;
 
26748
Table   Checksum
 
26749
test.t1 <some_value>
 
26750
OPTIMIZE TABLE t1;
 
26751
Table   Op      Msg_type        Msg_text
 
26752
test.t1 optimize        status  OK
 
26753
# check layout success:    1
 
26754
REPAIR   TABLE t1 EXTENDED;
 
26755
Table   Op      Msg_type        Msg_text
 
26756
test.t1 repair  status  OK
 
26757
# check layout success:    1
 
26758
TRUNCATE t1;
 
26759
        
 
26760
# check TRUNCATE success:       1
 
26761
# check layout success:    1
 
26762
# End usability test (inc/partition_check.inc)
 
26763
DROP TABLE t1;
 
26764
CREATE TABLE t1 (
 
26765
f_int1 INTEGER,
 
26766
f_int2 INTEGER,
 
26767
f_char1 CHAR(20),
 
26768
f_char2 CHAR(20),
 
26769
f_charbig VARCHAR(1000)
 
26770
 
 
26771
)
 
26772
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
26773
(PARTITION part_1 VALUES IN (0)
 
26774
(SUBPARTITION sp11, SUBPARTITION sp12),
 
26775
PARTITION part_2 VALUES IN (1)
 
26776
(SUBPARTITION sp21, SUBPARTITION sp22),
 
26777
PARTITION part_3 VALUES IN (2)
 
26778
(SUBPARTITION sp31, SUBPARTITION sp32),
 
26779
PARTITION part_4 VALUES IN (NULL)
 
26780
(SUBPARTITION sp41, SUBPARTITION sp42));
 
26781
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26782
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26783
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
26784
ALTER TABLE t1 REBUILD PARTITION part_1;
 
26785
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26786
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
26787
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
26788
# Start usability test (inc/partition_check.inc)
 
26789
create_command
 
26790
SHOW CREATE TABLE t1;
 
26791
Table   Create Table
 
26792
t1      CREATE TABLE `t1` (
 
26793
  `f_int1` int(11) DEFAULT NULL,
 
26794
  `f_int2` int(11) DEFAULT NULL,
 
26795
  `f_char1` char(20) DEFAULT NULL,
 
26796
  `f_char2` char(20) DEFAULT NULL,
 
26797
  `f_charbig` varchar(1000) DEFAULT NULL
 
26798
) ENGINE=MyISAM 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 = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
26799
 
 
26800
unified filelist
 
26801
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYD
 
26802
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYI
 
26803
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYD
 
26804
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYI
 
26805
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYD
 
26806
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYI
 
26807
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYD
 
26808
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYI
 
26809
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYD
 
26810
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYI
 
26811
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYD
 
26812
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYI
 
26813
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYD
 
26814
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYI
 
26815
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYD
 
26816
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYI
 
26817
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
26818
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
26819
 
 
26820
# check prerequisites-1 success:    1
 
26821
# check COUNT(*) success:    1
 
26822
# check MIN/MAX(f_int1) success:    1
 
26823
# check MIN/MAX(f_int2) success:    1
 
26824
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26825
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
26826
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
26827
WHERE f_int1 IN (2,3);
 
26828
# check prerequisites-3 success:    1
 
26829
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
26830
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
26831
# check read via f_int1 success: 1
 
26832
# check read via f_int2 success: 1
 
26833
        
 
26834
# check multiple-1 success:     1
 
26835
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
26836
        
 
26837
# check multiple-2 success:     1
 
26838
INSERT INTO t1 SELECT * FROM t0_template
 
26839
WHERE MOD(f_int1,3) = 0;
 
26840
        
 
26841
# check multiple-3 success:     1
 
26842
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
26843
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
26844
AND @max_row_div2 + @max_row_div4;
 
26845
        
 
26846
# check multiple-4 success:     1
 
26847
DELETE FROM t1
 
26848
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
26849
AND @max_row_div2 + @max_row_div4 + @max_row;
 
26850
        
 
26851
# check multiple-5 success:     1
 
26852
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
26853
INSERT INTO t1
 
26854
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26855
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26856
f_charbig = '#SINGLE#';
 
26857
        
 
26858
# check single-1 success:       1
 
26859
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
26860
INSERT INTO t1
 
26861
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
26862
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
26863
f_charbig = '#SINGLE#';
 
26864
        
 
26865
# check single-2 success:       1
 
26866
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
26867
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
26868
UPDATE t1 SET f_int1 = @cur_value2
 
26869
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
26870
        
 
26871
# check single-3 success:       1
 
26872
SET @cur_value1= -1;
 
26873
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
26874
UPDATE t1 SET f_int1 = @cur_value1
 
26875
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
26876
        
 
26877
# check single-4 success:       1
 
26878
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
26879
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
26880
        
 
26881
# check single-5 success:       1
 
26882
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
26883
        
 
26884
# check single-6 success:       1
 
26885
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
26886
        
 
26887
# check single-7 success:       1
 
26888
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
26889
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
26890
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
26891
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
26892
f_charbig = '#NULL#';
 
26893
INSERT INTO t1
 
26894
SET f_int1 = NULL , f_int2 = -@max_row,
 
26895
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
26896
f_charbig = '#NULL#';
 
26897
# check null success:    1
 
26898
        
 
26899
# check null-1 success:         1
 
26900
UPDATE t1 SET f_int1 = -@max_row
 
26901
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26902
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26903
        
 
26904
# check null-2 success:         1
 
26905
UPDATE t1 SET f_int1 = NULL
 
26906
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26907
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26908
        
 
26909
# check null-3 success:         1
 
26910
DELETE FROM t1
 
26911
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
26912
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
26913
        
 
26914
# check null-4 success:         1
 
26915
DELETE FROM t1
 
26916
WHERE f_int1 = 0 AND f_int2 = 0
 
26917
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
26918
AND f_charbig = '#NULL#';
 
26919
SET AUTOCOMMIT= 0;
 
26920
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26921
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26922
FROM t0_template source_tab
 
26923
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26924
        
 
26925
# check transactions-1 success:         1
 
26926
COMMIT WORK;
 
26927
        
 
26928
# check transactions-2 success:         1
 
26929
ROLLBACK WORK;
 
26930
        
 
26931
# check transactions-3 success:         1
 
26932
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26933
COMMIT WORK;
 
26934
ROLLBACK WORK;
 
26935
        
 
26936
# check transactions-4 success:         1
 
26937
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26938
SELECT f_int1, f_int1, '', '', 'was inserted'
 
26939
FROM t0_template source_tab
 
26940
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26941
        
 
26942
# check transactions-5 success:         1
 
26943
ROLLBACK WORK;
 
26944
Warnings:
 
26945
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
26946
        
 
26947
# check transactions-6 success:         1
 
26948
# INFO: Storage engine used for t1 seems to be not transactional.
 
26949
COMMIT;
 
26950
        
 
26951
# check transactions-7 success:         1
 
26952
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26953
COMMIT WORK;
 
26954
SET @@session.sql_mode = 'traditional';
 
26955
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
26956
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
26957
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
26958
'', '', 'was inserted' FROM t0_template
 
26959
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
26960
ERROR 22012: Division by 0
 
26961
COMMIT;
 
26962
        
 
26963
# check transactions-8 success:         1
 
26964
# INFO: Storage engine used for t1 seems to be unable to revert
 
26965
#       changes made by the failing statement.
 
26966
SET @@session.sql_mode = '';
 
26967
SET AUTOCOMMIT= 1;
 
26968
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
26969
COMMIT WORK;
 
26970
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
26971
        
 
26972
# check special-1 success:      1
 
26973
UPDATE t1 SET f_charbig = '';
 
26974
        
 
26975
# check special-2 success:      1
 
26976
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
26977
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26978
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
26979
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26980
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26981
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
26982
'just inserted' FROM t0_template
 
26983
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26984
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
26985
BEGIN
 
26986
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
26987
f_charbig = 'updated by trigger'
 
26988
      WHERE f_int1 = new.f_int1;
 
26989
END|
 
26990
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
26991
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
26992
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
26993
        
 
26994
# check trigger-1 success:      1
 
26995
DROP TRIGGER trg_1;
 
26996
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
26997
f_int2 = CAST(f_char1 AS SIGNED INT),
 
26998
f_charbig = 'just inserted'
 
26999
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27000
DELETE FROM t0_aux
 
27001
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27002
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27003
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27004
'just inserted' FROM t0_template
 
27005
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27006
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
27007
BEGIN
 
27008
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27009
f_charbig = 'updated by trigger'
 
27010
      WHERE f_int1 = new.f_int1;
 
27011
END|
 
27012
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27013
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27014
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27015
        
 
27016
# check trigger-2 success:      1
 
27017
DROP TRIGGER trg_1;
 
27018
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27019
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27020
f_charbig = 'just inserted'
 
27021
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27022
DELETE FROM t0_aux
 
27023
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27024
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27025
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27026
'just inserted' FROM t0_template
 
27027
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27028
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27029
BEGIN
 
27030
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27031
f_charbig = 'updated by trigger'
 
27032
      WHERE f_int1 = new.f_int1;
 
27033
END|
 
27034
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27035
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27036
        
 
27037
# check trigger-3 success:      1
 
27038
DROP TRIGGER trg_1;
 
27039
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27040
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27041
f_charbig = 'just inserted'
 
27042
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27043
DELETE FROM t0_aux
 
27044
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27045
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27046
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27047
'just inserted' FROM t0_template
 
27048
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27049
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27050
BEGIN
 
27051
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27052
f_charbig = 'updated by trigger'
 
27053
      WHERE f_int1 = - old.f_int1;
 
27054
END|
 
27055
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27056
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27057
        
 
27058
# check trigger-4 success:      1
 
27059
DROP TRIGGER trg_1;
 
27060
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27061
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27062
f_charbig = 'just inserted'
 
27063
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27064
DELETE FROM t0_aux
 
27065
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27066
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27067
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27068
'just inserted' FROM t0_template
 
27069
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27070
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27071
BEGIN
 
27072
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27073
f_charbig = 'updated by trigger'
 
27074
      WHERE f_int1 = new.f_int1;
 
27075
END|
 
27076
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27077
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27078
        
 
27079
# check trigger-5 success:      1
 
27080
DROP TRIGGER trg_1;
 
27081
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27082
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27083
f_charbig = 'just inserted'
 
27084
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27085
DELETE FROM t0_aux
 
27086
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27087
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27088
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27089
'just inserted' FROM t0_template
 
27090
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27091
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27092
BEGIN
 
27093
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27094
f_charbig = 'updated by trigger'
 
27095
      WHERE f_int1 = - old.f_int1;
 
27096
END|
 
27097
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27098
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27099
        
 
27100
# check trigger-6 success:      1
 
27101
DROP TRIGGER trg_1;
 
27102
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27103
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27104
f_charbig = 'just inserted'
 
27105
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27106
DELETE FROM t0_aux
 
27107
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27108
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27109
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27110
'just inserted' FROM t0_template
 
27111
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27112
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
27113
BEGIN
 
27114
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27115
f_charbig = 'updated by trigger'
 
27116
      WHERE f_int1 = - old.f_int1;
 
27117
END|
 
27118
DELETE FROM t0_aux
 
27119
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27120
        
 
27121
# check trigger-7 success:      1
 
27122
DROP TRIGGER trg_1;
 
27123
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27124
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27125
f_charbig = 'just inserted'
 
27126
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27127
DELETE FROM t0_aux
 
27128
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27129
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27130
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27131
'just inserted' FROM t0_template
 
27132
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27133
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
27134
BEGIN
 
27135
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27136
f_charbig = 'updated by trigger'
 
27137
      WHERE f_int1 = - old.f_int1;
 
27138
END|
 
27139
DELETE FROM t0_aux
 
27140
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27141
        
 
27142
# check trigger-8 success:      1
 
27143
DROP TRIGGER trg_1;
 
27144
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27145
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27146
f_charbig = 'just inserted'
 
27147
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27148
DELETE FROM t0_aux
 
27149
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27150
DELETE FROM t1
 
27151
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27152
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27153
BEGIN
 
27154
SET new.f_int1 = old.f_int1 + @max_row,
 
27155
new.f_int2 = old.f_int2 - @max_row,
 
27156
new.f_charbig = '####updated per update trigger####';
 
27157
END|
 
27158
UPDATE t1
 
27159
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27160
f_charbig = '####updated per update statement itself####';
 
27161
        
 
27162
# check trigger-9 success:      1
 
27163
DROP TRIGGER trg_2;
 
27164
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27165
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27166
f_charbig = CONCAT('===',f_char1,'===');
 
27167
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27168
BEGIN
 
27169
SET new.f_int1 = new.f_int1 + @max_row,
 
27170
new.f_int2 = new.f_int2 - @max_row,
 
27171
new.f_charbig = '####updated per update trigger####';
 
27172
END|
 
27173
UPDATE t1
 
27174
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27175
f_charbig = '####updated per update statement itself####';
 
27176
        
 
27177
# check trigger-10 success:     1
 
27178
DROP TRIGGER trg_2;
 
27179
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27180
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27181
f_charbig = CONCAT('===',f_char1,'===');
 
27182
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27183
BEGIN
 
27184
SET new.f_int1 = @my_max1 + @counter,
 
27185
new.f_int2 = @my_min2 - @counter,
 
27186
new.f_charbig = '####updated per insert trigger####';
 
27187
SET @counter = @counter + 1;
 
27188
END|
 
27189
SET @counter = 1;
 
27190
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27191
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27192
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27193
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27194
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27195
ORDER BY f_int1;
 
27196
DROP TRIGGER trg_3;
 
27197
        
 
27198
# check trigger-11 success:     1
 
27199
DELETE FROM t1
 
27200
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27201
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27202
AND f_charbig = '####updated per insert trigger####';
 
27203
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27204
BEGIN
 
27205
SET new.f_int1 = @my_max1 + @counter,
 
27206
new.f_int2 = @my_min2 - @counter,
 
27207
new.f_charbig = '####updated per insert trigger####';
 
27208
SET @counter = @counter + 1;
 
27209
END|
 
27210
SET @counter = 1;
 
27211
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27212
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
27213
SELECT CAST(f_int1 AS CHAR),
 
27214
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27215
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27216
ORDER BY f_int1;
 
27217
DROP TRIGGER trg_3;
 
27218
        
 
27219
# check trigger-12 success:     1
 
27220
DELETE FROM t1
 
27221
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27222
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27223
AND f_charbig = '####updated per insert trigger####';
 
27224
ANALYZE  TABLE t1;
 
27225
Table   Op      Msg_type        Msg_text
 
27226
test.t1 analyze status  OK
 
27227
CHECK    TABLE t1 EXTENDED;
 
27228
Table   Op      Msg_type        Msg_text
 
27229
test.t1 check   status  OK
 
27230
CHECKSUM TABLE t1 EXTENDED;
 
27231
Table   Checksum
 
27232
test.t1 <some_value>
 
27233
OPTIMIZE TABLE t1;
 
27234
Table   Op      Msg_type        Msg_text
 
27235
test.t1 optimize        status  OK
 
27236
# check layout success:    1
 
27237
REPAIR   TABLE t1 EXTENDED;
 
27238
Table   Op      Msg_type        Msg_text
 
27239
test.t1 repair  status  OK
 
27240
# check layout success:    1
 
27241
TRUNCATE t1;
 
27242
        
 
27243
# check TRUNCATE success:       1
 
27244
# check layout success:    1
 
27245
# End usability test (inc/partition_check.inc)
 
27246
DROP TABLE t1;
 
27247
CREATE TABLE t1 (
 
27248
f_int1 INTEGER,
 
27249
f_int2 INTEGER,
 
27250
f_char1 CHAR(20),
 
27251
f_char2 CHAR(20),
 
27252
f_charbig VARCHAR(1000)
 
27253
 
 
27254
)
 
27255
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
27256
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
27257
(PARTITION part_1 VALUES IN (0),
 
27258
 PARTITION part_2 VALUES IN (1),
 
27259
 PARTITION part_3 VALUES IN (NULL));
 
27260
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27261
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27262
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
27263
ALTER TABLE t1 REBUILD PARTITION part_1;
 
27264
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27265
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27266
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
27267
# Start usability test (inc/partition_check.inc)
 
27268
create_command
 
27269
SHOW CREATE TABLE t1;
 
27270
Table   Create Table
 
27271
t1      CREATE TABLE `t1` (
 
27272
  `f_int1` int(11) DEFAULT NULL,
 
27273
  `f_int2` int(11) DEFAULT NULL,
 
27274
  `f_char1` char(20) DEFAULT NULL,
 
27275
  `f_char2` char(20) DEFAULT NULL,
 
27276
  `f_charbig` varchar(1000) DEFAULT NULL
 
27277
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */
 
27278
 
 
27279
unified filelist
 
27280
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
27281
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
27282
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
27283
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
27284
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYD
 
27285
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYI
 
27286
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
27287
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
27288
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
27289
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
27290
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYD
 
27291
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYI
 
27292
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
27293
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
27294
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
27295
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
27296
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYD
 
27297
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYI
 
27298
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
27299
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
27300
 
 
27301
# check prerequisites-1 success:    1
 
27302
# check COUNT(*) success:    1
 
27303
# check MIN/MAX(f_int1) success:    1
 
27304
# check MIN/MAX(f_int2) success:    1
 
27305
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27306
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27307
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
27308
WHERE f_int1 IN (2,3);
 
27309
# check prerequisites-3 success:    1
 
27310
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27311
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
27312
# check read via f_int1 success: 1
 
27313
# check read via f_int2 success: 1
 
27314
        
 
27315
# check multiple-1 success:     1
 
27316
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
27317
        
 
27318
# check multiple-2 success:     1
 
27319
INSERT INTO t1 SELECT * FROM t0_template
 
27320
WHERE MOD(f_int1,3) = 0;
 
27321
        
 
27322
# check multiple-3 success:     1
 
27323
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
27324
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
27325
AND @max_row_div2 + @max_row_div4;
 
27326
        
 
27327
# check multiple-4 success:     1
 
27328
DELETE FROM t1
 
27329
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
27330
AND @max_row_div2 + @max_row_div4 + @max_row;
 
27331
        
 
27332
# check multiple-5 success:     1
 
27333
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
27334
INSERT INTO t1
 
27335
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27336
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27337
f_charbig = '#SINGLE#';
 
27338
        
 
27339
# check single-1 success:       1
 
27340
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
27341
INSERT INTO t1
 
27342
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27343
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27344
f_charbig = '#SINGLE#';
 
27345
        
 
27346
# check single-2 success:       1
 
27347
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
27348
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
27349
UPDATE t1 SET f_int1 = @cur_value2
 
27350
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
27351
        
 
27352
# check single-3 success:       1
 
27353
SET @cur_value1= -1;
 
27354
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
27355
UPDATE t1 SET f_int1 = @cur_value1
 
27356
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
27357
        
 
27358
# check single-4 success:       1
 
27359
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
27360
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
27361
        
 
27362
# check single-5 success:       1
 
27363
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
27364
        
 
27365
# check single-6 success:       1
 
27366
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
27367
        
 
27368
# check single-7 success:       1
 
27369
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
27370
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
27371
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
27372
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
27373
f_charbig = '#NULL#';
 
27374
INSERT INTO t1
 
27375
SET f_int1 = NULL , f_int2 = -@max_row,
 
27376
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
27377
f_charbig = '#NULL#';
 
27378
# check null success:    1
 
27379
        
 
27380
# check null-1 success:         1
 
27381
UPDATE t1 SET f_int1 = -@max_row
 
27382
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27383
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27384
        
 
27385
# check null-2 success:         1
 
27386
UPDATE t1 SET f_int1 = NULL
 
27387
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27388
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27389
        
 
27390
# check null-3 success:         1
 
27391
DELETE FROM t1
 
27392
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27393
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27394
        
 
27395
# check null-4 success:         1
 
27396
DELETE FROM t1
 
27397
WHERE f_int1 = 0 AND f_int2 = 0
 
27398
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
27399
AND f_charbig = '#NULL#';
 
27400
SET AUTOCOMMIT= 0;
 
27401
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27402
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27403
FROM t0_template source_tab
 
27404
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27405
        
 
27406
# check transactions-1 success:         1
 
27407
COMMIT WORK;
 
27408
        
 
27409
# check transactions-2 success:         1
 
27410
ROLLBACK WORK;
 
27411
        
 
27412
# check transactions-3 success:         1
 
27413
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27414
COMMIT WORK;
 
27415
ROLLBACK WORK;
 
27416
        
 
27417
# check transactions-4 success:         1
 
27418
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27419
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27420
FROM t0_template source_tab
 
27421
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27422
        
 
27423
# check transactions-5 success:         1
 
27424
ROLLBACK WORK;
 
27425
Warnings:
 
27426
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
27427
        
 
27428
# check transactions-6 success:         1
 
27429
# INFO: Storage engine used for t1 seems to be not transactional.
 
27430
COMMIT;
 
27431
        
 
27432
# check transactions-7 success:         1
 
27433
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27434
COMMIT WORK;
 
27435
SET @@session.sql_mode = 'traditional';
 
27436
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
27437
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27438
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
27439
'', '', 'was inserted' FROM t0_template
 
27440
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27441
ERROR 22012: Division by 0
 
27442
COMMIT;
 
27443
        
 
27444
# check transactions-8 success:         1
 
27445
# INFO: Storage engine used for t1 seems to be unable to revert
 
27446
#       changes made by the failing statement.
 
27447
SET @@session.sql_mode = '';
 
27448
SET AUTOCOMMIT= 1;
 
27449
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27450
COMMIT WORK;
 
27451
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
27452
        
 
27453
# check special-1 success:      1
 
27454
UPDATE t1 SET f_charbig = '';
 
27455
        
 
27456
# check special-2 success:      1
 
27457
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
27458
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27459
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
27460
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27461
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27462
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27463
'just inserted' FROM t0_template
 
27464
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27465
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
27466
BEGIN
 
27467
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27468
f_charbig = 'updated by trigger'
 
27469
      WHERE f_int1 = new.f_int1;
 
27470
END|
 
27471
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27472
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27473
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27474
        
 
27475
# check trigger-1 success:      1
 
27476
DROP TRIGGER trg_1;
 
27477
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27478
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27479
f_charbig = 'just inserted'
 
27480
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27481
DELETE FROM t0_aux
 
27482
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27483
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27484
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27485
'just inserted' FROM t0_template
 
27486
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27487
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
27488
BEGIN
 
27489
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27490
f_charbig = 'updated by trigger'
 
27491
      WHERE f_int1 = new.f_int1;
 
27492
END|
 
27493
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27494
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27495
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27496
        
 
27497
# check trigger-2 success:      1
 
27498
DROP TRIGGER trg_1;
 
27499
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27500
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27501
f_charbig = 'just inserted'
 
27502
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27503
DELETE FROM t0_aux
 
27504
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27505
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27506
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27507
'just inserted' FROM t0_template
 
27508
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27509
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27510
BEGIN
 
27511
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27512
f_charbig = 'updated by trigger'
 
27513
      WHERE f_int1 = new.f_int1;
 
27514
END|
 
27515
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27516
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27517
        
 
27518
# check trigger-3 success:      1
 
27519
DROP TRIGGER trg_1;
 
27520
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27521
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27522
f_charbig = 'just inserted'
 
27523
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27524
DELETE FROM t0_aux
 
27525
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27526
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27527
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27528
'just inserted' FROM t0_template
 
27529
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27530
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27531
BEGIN
 
27532
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27533
f_charbig = 'updated by trigger'
 
27534
      WHERE f_int1 = - old.f_int1;
 
27535
END|
 
27536
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27537
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27538
        
 
27539
# check trigger-4 success:      1
 
27540
DROP TRIGGER trg_1;
 
27541
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27542
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27543
f_charbig = 'just inserted'
 
27544
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27545
DELETE FROM t0_aux
 
27546
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27547
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27548
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27549
'just inserted' FROM t0_template
 
27550
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27551
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27552
BEGIN
 
27553
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27554
f_charbig = 'updated by trigger'
 
27555
      WHERE f_int1 = new.f_int1;
 
27556
END|
 
27557
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27558
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27559
        
 
27560
# check trigger-5 success:      1
 
27561
DROP TRIGGER trg_1;
 
27562
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27563
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27564
f_charbig = 'just inserted'
 
27565
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27566
DELETE FROM t0_aux
 
27567
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27568
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27569
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27570
'just inserted' FROM t0_template
 
27571
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27572
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
27573
BEGIN
 
27574
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27575
f_charbig = 'updated by trigger'
 
27576
      WHERE f_int1 = - old.f_int1;
 
27577
END|
 
27578
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27579
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27580
        
 
27581
# check trigger-6 success:      1
 
27582
DROP TRIGGER trg_1;
 
27583
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27584
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27585
f_charbig = 'just inserted'
 
27586
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27587
DELETE FROM t0_aux
 
27588
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27589
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27590
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27591
'just inserted' FROM t0_template
 
27592
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27593
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
27594
BEGIN
 
27595
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27596
f_charbig = 'updated by trigger'
 
27597
      WHERE f_int1 = - old.f_int1;
 
27598
END|
 
27599
DELETE FROM t0_aux
 
27600
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27601
        
 
27602
# check trigger-7 success:      1
 
27603
DROP TRIGGER trg_1;
 
27604
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27605
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27606
f_charbig = 'just inserted'
 
27607
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27608
DELETE FROM t0_aux
 
27609
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27610
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27611
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27612
'just inserted' FROM t0_template
 
27613
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27614
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
27615
BEGIN
 
27616
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27617
f_charbig = 'updated by trigger'
 
27618
      WHERE f_int1 = - old.f_int1;
 
27619
END|
 
27620
DELETE FROM t0_aux
 
27621
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27622
        
 
27623
# check trigger-8 success:      1
 
27624
DROP TRIGGER trg_1;
 
27625
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27626
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27627
f_charbig = 'just inserted'
 
27628
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27629
DELETE FROM t0_aux
 
27630
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27631
DELETE FROM t1
 
27632
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27633
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27634
BEGIN
 
27635
SET new.f_int1 = old.f_int1 + @max_row,
 
27636
new.f_int2 = old.f_int2 - @max_row,
 
27637
new.f_charbig = '####updated per update trigger####';
 
27638
END|
 
27639
UPDATE t1
 
27640
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27641
f_charbig = '####updated per update statement itself####';
 
27642
        
 
27643
# check trigger-9 success:      1
 
27644
DROP TRIGGER trg_2;
 
27645
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27646
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27647
f_charbig = CONCAT('===',f_char1,'===');
 
27648
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
27649
BEGIN
 
27650
SET new.f_int1 = new.f_int1 + @max_row,
 
27651
new.f_int2 = new.f_int2 - @max_row,
 
27652
new.f_charbig = '####updated per update trigger####';
 
27653
END|
 
27654
UPDATE t1
 
27655
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
27656
f_charbig = '####updated per update statement itself####';
 
27657
        
 
27658
# check trigger-10 success:     1
 
27659
DROP TRIGGER trg_2;
 
27660
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27661
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27662
f_charbig = CONCAT('===',f_char1,'===');
 
27663
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27664
BEGIN
 
27665
SET new.f_int1 = @my_max1 + @counter,
 
27666
new.f_int2 = @my_min2 - @counter,
 
27667
new.f_charbig = '####updated per insert trigger####';
 
27668
SET @counter = @counter + 1;
 
27669
END|
 
27670
SET @counter = 1;
 
27671
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27672
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27673
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27674
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27675
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27676
ORDER BY f_int1;
 
27677
DROP TRIGGER trg_3;
 
27678
        
 
27679
# check trigger-11 success:     1
 
27680
DELETE FROM t1
 
27681
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27682
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27683
AND f_charbig = '####updated per insert trigger####';
 
27684
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
27685
BEGIN
 
27686
SET new.f_int1 = @my_max1 + @counter,
 
27687
new.f_int2 = @my_min2 - @counter,
 
27688
new.f_charbig = '####updated per insert trigger####';
 
27689
SET @counter = @counter + 1;
 
27690
END|
 
27691
SET @counter = 1;
 
27692
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
27693
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
27694
SELECT CAST(f_int1 AS CHAR),
 
27695
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
27696
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
27697
ORDER BY f_int1;
 
27698
DROP TRIGGER trg_3;
 
27699
        
 
27700
# check trigger-12 success:     1
 
27701
DELETE FROM t1
 
27702
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
27703
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
27704
AND f_charbig = '####updated per insert trigger####';
 
27705
ANALYZE  TABLE t1;
 
27706
Table   Op      Msg_type        Msg_text
 
27707
test.t1 analyze status  OK
 
27708
CHECK    TABLE t1 EXTENDED;
 
27709
Table   Op      Msg_type        Msg_text
 
27710
test.t1 check   status  OK
 
27711
CHECKSUM TABLE t1 EXTENDED;
 
27712
Table   Checksum
 
27713
test.t1 <some_value>
 
27714
OPTIMIZE TABLE t1;
 
27715
Table   Op      Msg_type        Msg_text
 
27716
test.t1 optimize        status  OK
 
27717
# check layout success:    1
 
27718
REPAIR   TABLE t1 EXTENDED;
 
27719
Table   Op      Msg_type        Msg_text
 
27720
test.t1 repair  status  OK
 
27721
# check layout success:    1
 
27722
TRUNCATE t1;
 
27723
        
 
27724
# check TRUNCATE success:       1
 
27725
# check layout success:    1
 
27726
# End usability test (inc/partition_check.inc)
 
27727
DROP TABLE t1;
 
27728
#  4.2 ALTER ... REBUILD PARTITION part_1,part_2;
 
27729
DROP TABLE IF EXISTS t1;
 
27730
CREATE TABLE t1 (
 
27731
f_int1 INTEGER,
 
27732
f_int2 INTEGER,
 
27733
f_char1 CHAR(20),
 
27734
f_char2 CHAR(20),
 
27735
f_charbig VARCHAR(1000)
 
27736
 
 
27737
)
 
27738
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
27739
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27740
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
27741
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
27742
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
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 @max_row_div2 AND @max_row;
 
27746
# Start usability test (inc/partition_check.inc)
 
27747
create_command
 
27748
SHOW CREATE TABLE t1;
 
27749
Table   Create Table
 
27750
t1      CREATE TABLE `t1` (
 
27751
  `f_int1` int(11) DEFAULT NULL,
 
27752
  `f_int2` int(11) DEFAULT NULL,
 
27753
  `f_char1` char(20) DEFAULT NULL,
 
27754
  `f_char2` char(20) DEFAULT NULL,
 
27755
  `f_charbig` varchar(1000) DEFAULT NULL
 
27756
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */
 
27757
 
 
27758
unified filelist
 
27759
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
27760
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
27761
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
27762
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
27763
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
27764
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
27765
 
 
27766
# check prerequisites-1 success:    1
 
27767
# check COUNT(*) success:    1
 
27768
# check MIN/MAX(f_int1) success:    1
 
27769
# check MIN/MAX(f_int2) success:    1
 
27770
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27771
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
27772
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
27773
WHERE f_int1 IN (2,3);
 
27774
# check prerequisites-3 success:    1
 
27775
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
27776
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
27777
# check read via f_int1 success: 1
 
27778
# check read via f_int2 success: 1
 
27779
        
 
27780
# check multiple-1 success:     1
 
27781
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
27782
        
 
27783
# check multiple-2 success:     1
 
27784
INSERT INTO t1 SELECT * FROM t0_template
 
27785
WHERE MOD(f_int1,3) = 0;
 
27786
        
 
27787
# check multiple-3 success:     1
 
27788
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
27789
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
27790
AND @max_row_div2 + @max_row_div4;
 
27791
        
 
27792
# check multiple-4 success:     1
 
27793
DELETE FROM t1
 
27794
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
27795
AND @max_row_div2 + @max_row_div4 + @max_row;
 
27796
        
 
27797
# check multiple-5 success:     1
 
27798
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
27799
INSERT INTO t1
 
27800
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27801
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27802
f_charbig = '#SINGLE#';
 
27803
        
 
27804
# check single-1 success:       1
 
27805
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
27806
INSERT INTO t1
 
27807
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
27808
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
27809
f_charbig = '#SINGLE#';
 
27810
        
 
27811
# check single-2 success:       1
 
27812
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
27813
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
27814
UPDATE t1 SET f_int1 = @cur_value2
 
27815
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
27816
        
 
27817
# check single-3 success:       1
 
27818
SET @cur_value1= -1;
 
27819
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
27820
UPDATE t1 SET f_int1 = @cur_value1
 
27821
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
27822
        
 
27823
# check single-4 success:       1
 
27824
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
27825
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
27826
        
 
27827
# check single-5 success:       1
 
27828
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
27829
        
 
27830
# check single-6 success:       1
 
27831
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
27832
        
 
27833
# check single-7 success:       1
 
27834
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
27835
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
27836
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
27837
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
27838
f_charbig = '#NULL#';
 
27839
INSERT INTO t1
 
27840
SET f_int1 = NULL , f_int2 = -@max_row,
 
27841
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
27842
f_charbig = '#NULL#';
 
27843
# check null success:    1
 
27844
        
 
27845
# check null-1 success:         1
 
27846
UPDATE t1 SET f_int1 = -@max_row
 
27847
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27848
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27849
        
 
27850
# check null-2 success:         1
 
27851
UPDATE t1 SET f_int1 = NULL
 
27852
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27853
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27854
        
 
27855
# check null-3 success:         1
 
27856
DELETE FROM t1
 
27857
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
27858
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
27859
        
 
27860
# check null-4 success:         1
 
27861
DELETE FROM t1
 
27862
WHERE f_int1 = 0 AND f_int2 = 0
 
27863
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
27864
AND f_charbig = '#NULL#';
 
27865
SET AUTOCOMMIT= 0;
 
27866
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27867
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27868
FROM t0_template source_tab
 
27869
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27870
        
 
27871
# check transactions-1 success:         1
 
27872
COMMIT WORK;
 
27873
        
 
27874
# check transactions-2 success:         1
 
27875
ROLLBACK WORK;
 
27876
        
 
27877
# check transactions-3 success:         1
 
27878
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27879
COMMIT WORK;
 
27880
ROLLBACK WORK;
 
27881
        
 
27882
# check transactions-4 success:         1
 
27883
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27884
SELECT f_int1, f_int1, '', '', 'was inserted'
 
27885
FROM t0_template source_tab
 
27886
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27887
        
 
27888
# check transactions-5 success:         1
 
27889
ROLLBACK WORK;
 
27890
Warnings:
 
27891
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
27892
        
 
27893
# check transactions-6 success:         1
 
27894
# INFO: Storage engine used for t1 seems to be not transactional.
 
27895
COMMIT;
 
27896
        
 
27897
# check transactions-7 success:         1
 
27898
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27899
COMMIT WORK;
 
27900
SET @@session.sql_mode = 'traditional';
 
27901
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
27902
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
27903
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
27904
'', '', 'was inserted' FROM t0_template
 
27905
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
27906
ERROR 22012: Division by 0
 
27907
COMMIT;
 
27908
        
 
27909
# check transactions-8 success:         1
 
27910
# INFO: Storage engine used for t1 seems to be unable to revert
 
27911
#       changes made by the failing statement.
 
27912
SET @@session.sql_mode = '';
 
27913
SET AUTOCOMMIT= 1;
 
27914
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
27915
COMMIT WORK;
 
27916
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
27917
        
 
27918
# check special-1 success:      1
 
27919
UPDATE t1 SET f_charbig = '';
 
27920
        
 
27921
# check special-2 success:      1
 
27922
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
27923
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27924
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
27925
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27926
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27927
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27928
'just inserted' FROM t0_template
 
27929
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27930
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
27931
BEGIN
 
27932
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27933
f_charbig = 'updated by trigger'
 
27934
      WHERE f_int1 = new.f_int1;
 
27935
END|
 
27936
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27937
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27938
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27939
        
 
27940
# check trigger-1 success:      1
 
27941
DROP TRIGGER trg_1;
 
27942
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27943
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27944
f_charbig = 'just inserted'
 
27945
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27946
DELETE FROM t0_aux
 
27947
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27948
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27949
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27950
'just inserted' FROM t0_template
 
27951
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27952
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
27953
BEGIN
 
27954
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27955
f_charbig = 'updated by trigger'
 
27956
      WHERE f_int1 = new.f_int1;
 
27957
END|
 
27958
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27959
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
27960
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27961
        
 
27962
# check trigger-2 success:      1
 
27963
DROP TRIGGER trg_1;
 
27964
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27965
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27966
f_charbig = 'just inserted'
 
27967
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27968
DELETE FROM t0_aux
 
27969
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27970
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27971
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27972
'just inserted' FROM t0_template
 
27973
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27974
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27975
BEGIN
 
27976
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27977
f_charbig = 'updated by trigger'
 
27978
      WHERE f_int1 = new.f_int1;
 
27979
END|
 
27980
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
27981
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
27982
        
 
27983
# check trigger-3 success:      1
 
27984
DROP TRIGGER trg_1;
 
27985
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
27986
f_int2 = CAST(f_char1 AS SIGNED INT),
 
27987
f_charbig = 'just inserted'
 
27988
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
27989
DELETE FROM t0_aux
 
27990
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27991
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
27992
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
27993
'just inserted' FROM t0_template
 
27994
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
27995
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
27996
BEGIN
 
27997
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
27998
f_charbig = 'updated by trigger'
 
27999
      WHERE f_int1 = - old.f_int1;
 
28000
END|
 
28001
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28002
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28003
        
 
28004
# check trigger-4 success:      1
 
28005
DROP TRIGGER trg_1;
 
28006
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28007
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28008
f_charbig = 'just inserted'
 
28009
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28010
DELETE FROM t0_aux
 
28011
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28012
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28013
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28014
'just inserted' FROM t0_template
 
28015
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28016
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28017
BEGIN
 
28018
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28019
f_charbig = 'updated by trigger'
 
28020
      WHERE f_int1 = new.f_int1;
 
28021
END|
 
28022
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28023
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28024
        
 
28025
# check trigger-5 success:      1
 
28026
DROP TRIGGER trg_1;
 
28027
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28028
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28029
f_charbig = 'just inserted'
 
28030
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28031
DELETE FROM t0_aux
 
28032
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28033
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28034
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28035
'just inserted' FROM t0_template
 
28036
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28037
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28038
BEGIN
 
28039
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28040
f_charbig = 'updated by trigger'
 
28041
      WHERE f_int1 = - old.f_int1;
 
28042
END|
 
28043
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28044
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28045
        
 
28046
# check trigger-6 success:      1
 
28047
DROP TRIGGER trg_1;
 
28048
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28049
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28050
f_charbig = 'just inserted'
 
28051
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28052
DELETE FROM t0_aux
 
28053
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28054
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28055
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28056
'just inserted' FROM t0_template
 
28057
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28058
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
28059
BEGIN
 
28060
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28061
f_charbig = 'updated by trigger'
 
28062
      WHERE f_int1 = - old.f_int1;
 
28063
END|
 
28064
DELETE FROM t0_aux
 
28065
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28066
        
 
28067
# check trigger-7 success:      1
 
28068
DROP TRIGGER trg_1;
 
28069
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28070
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28071
f_charbig = 'just inserted'
 
28072
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28073
DELETE FROM t0_aux
 
28074
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28075
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28076
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28077
'just inserted' FROM t0_template
 
28078
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28079
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
28080
BEGIN
 
28081
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28082
f_charbig = 'updated by trigger'
 
28083
      WHERE f_int1 = - old.f_int1;
 
28084
END|
 
28085
DELETE FROM t0_aux
 
28086
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28087
        
 
28088
# check trigger-8 success:      1
 
28089
DROP TRIGGER trg_1;
 
28090
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28091
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28092
f_charbig = 'just inserted'
 
28093
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28094
DELETE FROM t0_aux
 
28095
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28096
DELETE FROM t1
 
28097
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28098
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28099
BEGIN
 
28100
SET new.f_int1 = old.f_int1 + @max_row,
 
28101
new.f_int2 = old.f_int2 - @max_row,
 
28102
new.f_charbig = '####updated per update trigger####';
 
28103
END|
 
28104
UPDATE t1
 
28105
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28106
f_charbig = '####updated per update statement itself####';
 
28107
        
 
28108
# check trigger-9 success:      1
 
28109
DROP TRIGGER trg_2;
 
28110
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28111
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28112
f_charbig = CONCAT('===',f_char1,'===');
 
28113
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28114
BEGIN
 
28115
SET new.f_int1 = new.f_int1 + @max_row,
 
28116
new.f_int2 = new.f_int2 - @max_row,
 
28117
new.f_charbig = '####updated per update trigger####';
 
28118
END|
 
28119
UPDATE t1
 
28120
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28121
f_charbig = '####updated per update statement itself####';
 
28122
        
 
28123
# check trigger-10 success:     1
 
28124
DROP TRIGGER trg_2;
 
28125
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28126
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28127
f_charbig = CONCAT('===',f_char1,'===');
 
28128
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28129
BEGIN
 
28130
SET new.f_int1 = @my_max1 + @counter,
 
28131
new.f_int2 = @my_min2 - @counter,
 
28132
new.f_charbig = '####updated per insert trigger####';
 
28133
SET @counter = @counter + 1;
 
28134
END|
 
28135
SET @counter = 1;
 
28136
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28137
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28138
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28139
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28140
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28141
ORDER BY f_int1;
 
28142
DROP TRIGGER trg_3;
 
28143
        
 
28144
# check trigger-11 success:     1
 
28145
DELETE FROM t1
 
28146
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28147
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28148
AND f_charbig = '####updated per insert trigger####';
 
28149
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28150
BEGIN
 
28151
SET new.f_int1 = @my_max1 + @counter,
 
28152
new.f_int2 = @my_min2 - @counter,
 
28153
new.f_charbig = '####updated per insert trigger####';
 
28154
SET @counter = @counter + 1;
 
28155
END|
 
28156
SET @counter = 1;
 
28157
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28158
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
28159
SELECT CAST(f_int1 AS CHAR),
 
28160
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28161
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28162
ORDER BY f_int1;
 
28163
DROP TRIGGER trg_3;
 
28164
        
 
28165
# check trigger-12 success:     1
 
28166
DELETE FROM t1
 
28167
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28168
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28169
AND f_charbig = '####updated per insert trigger####';
 
28170
ANALYZE  TABLE t1;
 
28171
Table   Op      Msg_type        Msg_text
 
28172
test.t1 analyze status  OK
 
28173
CHECK    TABLE t1 EXTENDED;
 
28174
Table   Op      Msg_type        Msg_text
 
28175
test.t1 check   status  OK
 
28176
CHECKSUM TABLE t1 EXTENDED;
 
28177
Table   Checksum
 
28178
test.t1 <some_value>
 
28179
OPTIMIZE TABLE t1;
 
28180
Table   Op      Msg_type        Msg_text
 
28181
test.t1 optimize        status  OK
 
28182
# check layout success:    1
 
28183
REPAIR   TABLE t1 EXTENDED;
 
28184
Table   Op      Msg_type        Msg_text
 
28185
test.t1 repair  status  OK
 
28186
# check layout success:    1
 
28187
TRUNCATE t1;
 
28188
        
 
28189
# check TRUNCATE success:       1
 
28190
# check layout success:    1
 
28191
# End usability test (inc/partition_check.inc)
 
28192
DROP TABLE t1;
 
28193
CREATE TABLE t1 (
 
28194
f_int1 INTEGER,
 
28195
f_int2 INTEGER,
 
28196
f_char1 CHAR(20),
 
28197
f_char2 CHAR(20),
 
28198
f_charbig VARCHAR(1000)
 
28199
 
 
28200
)
 
28201
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
28202
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28203
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28204
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
28205
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
28206
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28207
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28208
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28209
# Start usability test (inc/partition_check.inc)
 
28210
create_command
 
28211
SHOW CREATE TABLE t1;
 
28212
Table   Create Table
 
28213
t1      CREATE TABLE `t1` (
 
28214
  `f_int1` int(11) DEFAULT NULL,
 
28215
  `f_int2` int(11) DEFAULT NULL,
 
28216
  `f_char1` char(20) DEFAULT NULL,
 
28217
  `f_char2` char(20) DEFAULT NULL,
 
28218
  `f_charbig` varchar(1000) DEFAULT NULL
 
28219
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */
 
28220
 
 
28221
unified filelist
 
28222
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
28223
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
28224
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
28225
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
28226
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
28227
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
28228
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
28229
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
28230
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
28231
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
28232
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
28233
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
28234
 
 
28235
# check prerequisites-1 success:    1
 
28236
# check COUNT(*) success:    1
 
28237
# check MIN/MAX(f_int1) success:    1
 
28238
# check MIN/MAX(f_int2) success:    1
 
28239
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28240
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28241
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
28242
WHERE f_int1 IN (2,3);
 
28243
# check prerequisites-3 success:    1
 
28244
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
28245
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
28246
# check read via f_int1 success: 1
 
28247
# check read via f_int2 success: 1
 
28248
        
 
28249
# check multiple-1 success:     1
 
28250
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
28251
        
 
28252
# check multiple-2 success:     1
 
28253
INSERT INTO t1 SELECT * FROM t0_template
 
28254
WHERE MOD(f_int1,3) = 0;
 
28255
        
 
28256
# check multiple-3 success:     1
 
28257
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
28258
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
28259
AND @max_row_div2 + @max_row_div4;
 
28260
        
 
28261
# check multiple-4 success:     1
 
28262
DELETE FROM t1
 
28263
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
28264
AND @max_row_div2 + @max_row_div4 + @max_row;
 
28265
        
 
28266
# check multiple-5 success:     1
 
28267
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
28268
INSERT INTO t1
 
28269
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28270
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28271
f_charbig = '#SINGLE#';
 
28272
        
 
28273
# check single-1 success:       1
 
28274
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
28275
INSERT INTO t1
 
28276
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28277
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28278
f_charbig = '#SINGLE#';
 
28279
        
 
28280
# check single-2 success:       1
 
28281
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
28282
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
28283
UPDATE t1 SET f_int1 = @cur_value2
 
28284
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
28285
        
 
28286
# check single-3 success:       1
 
28287
SET @cur_value1= -1;
 
28288
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
28289
UPDATE t1 SET f_int1 = @cur_value1
 
28290
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
28291
        
 
28292
# check single-4 success:       1
 
28293
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
28294
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
28295
        
 
28296
# check single-5 success:       1
 
28297
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
28298
        
 
28299
# check single-6 success:       1
 
28300
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
28301
        
 
28302
# check single-7 success:       1
 
28303
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
28304
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
28305
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
28306
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
28307
f_charbig = '#NULL#';
 
28308
INSERT INTO t1
 
28309
SET f_int1 = NULL , f_int2 = -@max_row,
 
28310
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
28311
f_charbig = '#NULL#';
 
28312
# check null success:    1
 
28313
        
 
28314
# check null-1 success:         1
 
28315
UPDATE t1 SET f_int1 = -@max_row
 
28316
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28317
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28318
        
 
28319
# check null-2 success:         1
 
28320
UPDATE t1 SET f_int1 = NULL
 
28321
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28322
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28323
        
 
28324
# check null-3 success:         1
 
28325
DELETE FROM t1
 
28326
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28327
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28328
        
 
28329
# check null-4 success:         1
 
28330
DELETE FROM t1
 
28331
WHERE f_int1 = 0 AND f_int2 = 0
 
28332
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
28333
AND f_charbig = '#NULL#';
 
28334
SET AUTOCOMMIT= 0;
 
28335
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28336
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28337
FROM t0_template source_tab
 
28338
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28339
        
 
28340
# check transactions-1 success:         1
 
28341
COMMIT WORK;
 
28342
        
 
28343
# check transactions-2 success:         1
 
28344
ROLLBACK WORK;
 
28345
        
 
28346
# check transactions-3 success:         1
 
28347
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28348
COMMIT WORK;
 
28349
ROLLBACK WORK;
 
28350
        
 
28351
# check transactions-4 success:         1
 
28352
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28353
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28354
FROM t0_template source_tab
 
28355
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28356
        
 
28357
# check transactions-5 success:         1
 
28358
ROLLBACK WORK;
 
28359
Warnings:
 
28360
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
28361
        
 
28362
# check transactions-6 success:         1
 
28363
# INFO: Storage engine used for t1 seems to be not transactional.
 
28364
COMMIT;
 
28365
        
 
28366
# check transactions-7 success:         1
 
28367
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28368
COMMIT WORK;
 
28369
SET @@session.sql_mode = 'traditional';
 
28370
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
28371
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28372
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
28373
'', '', 'was inserted' FROM t0_template
 
28374
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28375
ERROR 22012: Division by 0
 
28376
COMMIT;
 
28377
        
 
28378
# check transactions-8 success:         1
 
28379
# INFO: Storage engine used for t1 seems to be unable to revert
 
28380
#       changes made by the failing statement.
 
28381
SET @@session.sql_mode = '';
 
28382
SET AUTOCOMMIT= 1;
 
28383
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28384
COMMIT WORK;
 
28385
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
28386
        
 
28387
# check special-1 success:      1
 
28388
UPDATE t1 SET f_charbig = '';
 
28389
        
 
28390
# check special-2 success:      1
 
28391
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
28392
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28393
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
28394
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28395
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28396
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28397
'just inserted' FROM t0_template
 
28398
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28399
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
28400
BEGIN
 
28401
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28402
f_charbig = 'updated by trigger'
 
28403
      WHERE f_int1 = new.f_int1;
 
28404
END|
 
28405
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28406
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28407
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28408
        
 
28409
# check trigger-1 success:      1
 
28410
DROP TRIGGER trg_1;
 
28411
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28412
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28413
f_charbig = 'just inserted'
 
28414
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28415
DELETE FROM t0_aux
 
28416
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28417
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28418
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28419
'just inserted' FROM t0_template
 
28420
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28421
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
28422
BEGIN
 
28423
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28424
f_charbig = 'updated by trigger'
 
28425
      WHERE f_int1 = new.f_int1;
 
28426
END|
 
28427
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28428
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28429
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28430
        
 
28431
# check trigger-2 success:      1
 
28432
DROP TRIGGER trg_1;
 
28433
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28434
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28435
f_charbig = 'just inserted'
 
28436
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28437
DELETE FROM t0_aux
 
28438
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28439
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28440
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28441
'just inserted' FROM t0_template
 
28442
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28443
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28444
BEGIN
 
28445
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28446
f_charbig = 'updated by trigger'
 
28447
      WHERE f_int1 = new.f_int1;
 
28448
END|
 
28449
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28450
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28451
        
 
28452
# check trigger-3 success:      1
 
28453
DROP TRIGGER trg_1;
 
28454
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28455
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28456
f_charbig = 'just inserted'
 
28457
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28458
DELETE FROM t0_aux
 
28459
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28460
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28461
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28462
'just inserted' FROM t0_template
 
28463
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28464
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28465
BEGIN
 
28466
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28467
f_charbig = 'updated by trigger'
 
28468
      WHERE f_int1 = - old.f_int1;
 
28469
END|
 
28470
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28471
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28472
        
 
28473
# check trigger-4 success:      1
 
28474
DROP TRIGGER trg_1;
 
28475
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28476
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28477
f_charbig = 'just inserted'
 
28478
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28479
DELETE FROM t0_aux
 
28480
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28481
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28482
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28483
'just inserted' FROM t0_template
 
28484
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28485
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28486
BEGIN
 
28487
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28488
f_charbig = 'updated by trigger'
 
28489
      WHERE f_int1 = new.f_int1;
 
28490
END|
 
28491
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28492
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28493
        
 
28494
# check trigger-5 success:      1
 
28495
DROP TRIGGER trg_1;
 
28496
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28497
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28498
f_charbig = 'just inserted'
 
28499
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28500
DELETE FROM t0_aux
 
28501
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28502
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28503
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28504
'just inserted' FROM t0_template
 
28505
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28506
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28507
BEGIN
 
28508
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28509
f_charbig = 'updated by trigger'
 
28510
      WHERE f_int1 = - old.f_int1;
 
28511
END|
 
28512
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28513
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28514
        
 
28515
# check trigger-6 success:      1
 
28516
DROP TRIGGER trg_1;
 
28517
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28518
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28519
f_charbig = 'just inserted'
 
28520
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28521
DELETE FROM t0_aux
 
28522
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28523
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28524
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28525
'just inserted' FROM t0_template
 
28526
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28527
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
28528
BEGIN
 
28529
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28530
f_charbig = 'updated by trigger'
 
28531
      WHERE f_int1 = - old.f_int1;
 
28532
END|
 
28533
DELETE FROM t0_aux
 
28534
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28535
        
 
28536
# check trigger-7 success:      1
 
28537
DROP TRIGGER trg_1;
 
28538
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28539
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28540
f_charbig = 'just inserted'
 
28541
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28542
DELETE FROM t0_aux
 
28543
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28544
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28545
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28546
'just inserted' FROM t0_template
 
28547
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28548
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
28549
BEGIN
 
28550
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28551
f_charbig = 'updated by trigger'
 
28552
      WHERE f_int1 = - old.f_int1;
 
28553
END|
 
28554
DELETE FROM t0_aux
 
28555
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28556
        
 
28557
# check trigger-8 success:      1
 
28558
DROP TRIGGER trg_1;
 
28559
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28560
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28561
f_charbig = 'just inserted'
 
28562
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28563
DELETE FROM t0_aux
 
28564
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28565
DELETE FROM t1
 
28566
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28567
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28568
BEGIN
 
28569
SET new.f_int1 = old.f_int1 + @max_row,
 
28570
new.f_int2 = old.f_int2 - @max_row,
 
28571
new.f_charbig = '####updated per update trigger####';
 
28572
END|
 
28573
UPDATE t1
 
28574
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28575
f_charbig = '####updated per update statement itself####';
 
28576
        
 
28577
# check trigger-9 success:      1
 
28578
DROP TRIGGER trg_2;
 
28579
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28580
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28581
f_charbig = CONCAT('===',f_char1,'===');
 
28582
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
28583
BEGIN
 
28584
SET new.f_int1 = new.f_int1 + @max_row,
 
28585
new.f_int2 = new.f_int2 - @max_row,
 
28586
new.f_charbig = '####updated per update trigger####';
 
28587
END|
 
28588
UPDATE t1
 
28589
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
28590
f_charbig = '####updated per update statement itself####';
 
28591
        
 
28592
# check trigger-10 success:     1
 
28593
DROP TRIGGER trg_2;
 
28594
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28595
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28596
f_charbig = CONCAT('===',f_char1,'===');
 
28597
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28598
BEGIN
 
28599
SET new.f_int1 = @my_max1 + @counter,
 
28600
new.f_int2 = @my_min2 - @counter,
 
28601
new.f_charbig = '####updated per insert trigger####';
 
28602
SET @counter = @counter + 1;
 
28603
END|
 
28604
SET @counter = 1;
 
28605
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28606
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28607
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28608
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28609
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28610
ORDER BY f_int1;
 
28611
DROP TRIGGER trg_3;
 
28612
        
 
28613
# check trigger-11 success:     1
 
28614
DELETE FROM t1
 
28615
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28616
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28617
AND f_charbig = '####updated per insert trigger####';
 
28618
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
28619
BEGIN
 
28620
SET new.f_int1 = @my_max1 + @counter,
 
28621
new.f_int2 = @my_min2 - @counter,
 
28622
new.f_charbig = '####updated per insert trigger####';
 
28623
SET @counter = @counter + 1;
 
28624
END|
 
28625
SET @counter = 1;
 
28626
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
28627
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
28628
SELECT CAST(f_int1 AS CHAR),
 
28629
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
28630
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
28631
ORDER BY f_int1;
 
28632
DROP TRIGGER trg_3;
 
28633
        
 
28634
# check trigger-12 success:     1
 
28635
DELETE FROM t1
 
28636
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
28637
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
28638
AND f_charbig = '####updated per insert trigger####';
 
28639
ANALYZE  TABLE t1;
 
28640
Table   Op      Msg_type        Msg_text
 
28641
test.t1 analyze status  OK
 
28642
CHECK    TABLE t1 EXTENDED;
 
28643
Table   Op      Msg_type        Msg_text
 
28644
test.t1 check   status  OK
 
28645
CHECKSUM TABLE t1 EXTENDED;
 
28646
Table   Checksum
 
28647
test.t1 <some_value>
 
28648
OPTIMIZE TABLE t1;
 
28649
Table   Op      Msg_type        Msg_text
 
28650
test.t1 optimize        status  OK
 
28651
# check layout success:    1
 
28652
REPAIR   TABLE t1 EXTENDED;
 
28653
Table   Op      Msg_type        Msg_text
 
28654
test.t1 repair  status  OK
 
28655
# check layout success:    1
 
28656
TRUNCATE t1;
 
28657
        
 
28658
# check TRUNCATE success:       1
 
28659
# check layout success:    1
 
28660
# End usability test (inc/partition_check.inc)
 
28661
DROP TABLE t1;
 
28662
CREATE TABLE t1 (
 
28663
f_int1 INTEGER,
 
28664
f_int2 INTEGER,
 
28665
f_char1 CHAR(20),
 
28666
f_char2 CHAR(20),
 
28667
f_charbig VARCHAR(1000)
 
28668
 
 
28669
)
 
28670
PARTITION BY LIST(MOD(f_int1,4))
 
28671
(PARTITION part_3 VALUES IN (-3),
 
28672
PARTITION part_2 VALUES IN (-2),
 
28673
PARTITION part_1 VALUES IN (-1),
 
28674
PARTITION part_N VALUES IN (NULL),
 
28675
PARTITION part0 VALUES IN (0),
 
28676
PARTITION part1 VALUES IN (1),
 
28677
PARTITION part2 VALUES IN (2),
 
28678
PARTITION part3 VALUES IN (3));
 
28679
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28680
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28681
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
28682
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
28683
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28684
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
28685
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
28686
# Start usability test (inc/partition_check.inc)
 
28687
create_command
 
28688
SHOW CREATE TABLE t1;
 
28689
Table   Create Table
 
28690
t1      CREATE TABLE `t1` (
 
28691
  `f_int1` int(11) DEFAULT NULL,
 
28692
  `f_int2` int(11) DEFAULT NULL,
 
28693
  `f_char1` char(20) DEFAULT NULL,
 
28694
  `f_char2` char(20) DEFAULT NULL,
 
28695
  `f_charbig` varchar(1000) DEFAULT NULL
 
28696
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
28697
 
 
28698
unified filelist
 
28699
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
28700
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
28701
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
28702
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
28703
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
28704
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
28705
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
28706
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
28707
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
28708
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
28709
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
28710
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
28711
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
28712
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
28713
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
28714
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
28715
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
28716
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
28717
 
 
28718
# check prerequisites-1 success:    1
 
28719
# check COUNT(*) success:    1
 
28720
# check MIN/MAX(f_int1) success:    1
 
28721
# check MIN/MAX(f_int2) success:    1
 
28722
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28723
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
28724
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
28725
WHERE f_int1 IN (2,3);
 
28726
# check prerequisites-3 success:    1
 
28727
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
28728
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
28729
# check read via f_int1 success: 1
 
28730
# check read via f_int2 success: 1
 
28731
        
 
28732
# check multiple-1 success:     1
 
28733
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
28734
        
 
28735
# check multiple-2 success:     1
 
28736
INSERT INTO t1 SELECT * FROM t0_template
 
28737
WHERE MOD(f_int1,3) = 0;
 
28738
        
 
28739
# check multiple-3 success:     1
 
28740
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
28741
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
28742
AND @max_row_div2 + @max_row_div4;
 
28743
        
 
28744
# check multiple-4 success:     1
 
28745
DELETE FROM t1
 
28746
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
28747
AND @max_row_div2 + @max_row_div4 + @max_row;
 
28748
        
 
28749
# check multiple-5 success:     1
 
28750
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
28751
INSERT INTO t1
 
28752
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28753
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28754
f_charbig = '#SINGLE#';
 
28755
        
 
28756
# check single-1 success:       1
 
28757
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
28758
INSERT INTO t1
 
28759
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
28760
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
28761
f_charbig = '#SINGLE#';
 
28762
        
 
28763
# check single-2 success:       1
 
28764
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
28765
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
28766
UPDATE t1 SET f_int1 = @cur_value2
 
28767
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
28768
        
 
28769
# check single-3 success:       1
 
28770
SET @cur_value1= -1;
 
28771
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
28772
UPDATE t1 SET f_int1 = @cur_value1
 
28773
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
28774
        
 
28775
# check single-4 success:       1
 
28776
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
28777
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
28778
        
 
28779
# check single-5 success:       1
 
28780
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
28781
        
 
28782
# check single-6 success:       1
 
28783
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
28784
        
 
28785
# check single-7 success:       1
 
28786
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
28787
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
28788
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
28789
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
28790
f_charbig = '#NULL#';
 
28791
INSERT INTO t1
 
28792
SET f_int1 = NULL , f_int2 = -@max_row,
 
28793
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
28794
f_charbig = '#NULL#';
 
28795
# check null success:    1
 
28796
        
 
28797
# check null-1 success:         1
 
28798
UPDATE t1 SET f_int1 = -@max_row
 
28799
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28800
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28801
        
 
28802
# check null-2 success:         1
 
28803
UPDATE t1 SET f_int1 = NULL
 
28804
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28805
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28806
        
 
28807
# check null-3 success:         1
 
28808
DELETE FROM t1
 
28809
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
28810
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
28811
        
 
28812
# check null-4 success:         1
 
28813
DELETE FROM t1
 
28814
WHERE f_int1 = 0 AND f_int2 = 0
 
28815
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
28816
AND f_charbig = '#NULL#';
 
28817
SET AUTOCOMMIT= 0;
 
28818
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28819
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28820
FROM t0_template source_tab
 
28821
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28822
        
 
28823
# check transactions-1 success:         1
 
28824
COMMIT WORK;
 
28825
        
 
28826
# check transactions-2 success:         1
 
28827
ROLLBACK WORK;
 
28828
        
 
28829
# check transactions-3 success:         1
 
28830
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28831
COMMIT WORK;
 
28832
ROLLBACK WORK;
 
28833
        
 
28834
# check transactions-4 success:         1
 
28835
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28836
SELECT f_int1, f_int1, '', '', 'was inserted'
 
28837
FROM t0_template source_tab
 
28838
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28839
        
 
28840
# check transactions-5 success:         1
 
28841
ROLLBACK WORK;
 
28842
Warnings:
 
28843
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
28844
        
 
28845
# check transactions-6 success:         1
 
28846
# INFO: Storage engine used for t1 seems to be not transactional.
 
28847
COMMIT;
 
28848
        
 
28849
# check transactions-7 success:         1
 
28850
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28851
COMMIT WORK;
 
28852
SET @@session.sql_mode = 'traditional';
 
28853
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
28854
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
28855
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
28856
'', '', 'was inserted' FROM t0_template
 
28857
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
28858
ERROR 22012: Division by 0
 
28859
COMMIT;
 
28860
        
 
28861
# check transactions-8 success:         1
 
28862
# INFO: Storage engine used for t1 seems to be unable to revert
 
28863
#       changes made by the failing statement.
 
28864
SET @@session.sql_mode = '';
 
28865
SET AUTOCOMMIT= 1;
 
28866
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
28867
COMMIT WORK;
 
28868
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
28869
        
 
28870
# check special-1 success:      1
 
28871
UPDATE t1 SET f_charbig = '';
 
28872
        
 
28873
# check special-2 success:      1
 
28874
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
28875
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28876
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
28877
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28878
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28879
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28880
'just inserted' FROM t0_template
 
28881
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28882
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
28883
BEGIN
 
28884
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28885
f_charbig = 'updated by trigger'
 
28886
      WHERE f_int1 = new.f_int1;
 
28887
END|
 
28888
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28889
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28890
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28891
        
 
28892
# check trigger-1 success:      1
 
28893
DROP TRIGGER trg_1;
 
28894
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28895
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28896
f_charbig = 'just inserted'
 
28897
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28898
DELETE FROM t0_aux
 
28899
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28900
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28901
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28902
'just inserted' FROM t0_template
 
28903
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28904
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
28905
BEGIN
 
28906
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28907
f_charbig = 'updated by trigger'
 
28908
      WHERE f_int1 = new.f_int1;
 
28909
END|
 
28910
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28911
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
28912
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28913
        
 
28914
# check trigger-2 success:      1
 
28915
DROP TRIGGER trg_1;
 
28916
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28917
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28918
f_charbig = 'just inserted'
 
28919
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28920
DELETE FROM t0_aux
 
28921
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28922
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28923
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28924
'just inserted' FROM t0_template
 
28925
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28926
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28927
BEGIN
 
28928
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28929
f_charbig = 'updated by trigger'
 
28930
      WHERE f_int1 = new.f_int1;
 
28931
END|
 
28932
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28933
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28934
        
 
28935
# check trigger-3 success:      1
 
28936
DROP TRIGGER trg_1;
 
28937
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28938
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28939
f_charbig = 'just inserted'
 
28940
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28941
DELETE FROM t0_aux
 
28942
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28943
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28944
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28945
'just inserted' FROM t0_template
 
28946
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28947
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
28948
BEGIN
 
28949
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28950
f_charbig = 'updated by trigger'
 
28951
      WHERE f_int1 = - old.f_int1;
 
28952
END|
 
28953
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28954
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28955
        
 
28956
# check trigger-4 success:      1
 
28957
DROP TRIGGER trg_1;
 
28958
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28959
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28960
f_charbig = 'just inserted'
 
28961
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28962
DELETE FROM t0_aux
 
28963
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28964
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28965
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28966
'just inserted' FROM t0_template
 
28967
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28968
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28969
BEGIN
 
28970
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28971
f_charbig = 'updated by trigger'
 
28972
      WHERE f_int1 = new.f_int1;
 
28973
END|
 
28974
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28975
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28976
        
 
28977
# check trigger-5 success:      1
 
28978
DROP TRIGGER trg_1;
 
28979
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
28980
f_int2 = CAST(f_char1 AS SIGNED INT),
 
28981
f_charbig = 'just inserted'
 
28982
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
28983
DELETE FROM t0_aux
 
28984
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28985
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
28986
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
28987
'just inserted' FROM t0_template
 
28988
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
28989
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
28990
BEGIN
 
28991
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
28992
f_charbig = 'updated by trigger'
 
28993
      WHERE f_int1 = - old.f_int1;
 
28994
END|
 
28995
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
28996
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
28997
        
 
28998
# check trigger-6 success:      1
 
28999
DROP TRIGGER trg_1;
 
29000
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29001
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29002
f_charbig = 'just inserted'
 
29003
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29004
DELETE FROM t0_aux
 
29005
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29006
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29007
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29008
'just inserted' FROM t0_template
 
29009
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29010
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
29011
BEGIN
 
29012
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29013
f_charbig = 'updated by trigger'
 
29014
      WHERE f_int1 = - old.f_int1;
 
29015
END|
 
29016
DELETE FROM t0_aux
 
29017
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29018
        
 
29019
# check trigger-7 success:      1
 
29020
DROP TRIGGER trg_1;
 
29021
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29022
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29023
f_charbig = 'just inserted'
 
29024
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29025
DELETE FROM t0_aux
 
29026
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29027
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29028
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29029
'just inserted' FROM t0_template
 
29030
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29031
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
29032
BEGIN
 
29033
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29034
f_charbig = 'updated by trigger'
 
29035
      WHERE f_int1 = - old.f_int1;
 
29036
END|
 
29037
DELETE FROM t0_aux
 
29038
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29039
        
 
29040
# check trigger-8 success:      1
 
29041
DROP TRIGGER trg_1;
 
29042
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29043
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29044
f_charbig = 'just inserted'
 
29045
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29046
DELETE FROM t0_aux
 
29047
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29048
DELETE FROM t1
 
29049
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29050
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29051
BEGIN
 
29052
SET new.f_int1 = old.f_int1 + @max_row,
 
29053
new.f_int2 = old.f_int2 - @max_row,
 
29054
new.f_charbig = '####updated per update trigger####';
 
29055
END|
 
29056
UPDATE t1
 
29057
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29058
f_charbig = '####updated per update statement itself####';
 
29059
        
 
29060
# check trigger-9 success:      1
 
29061
DROP TRIGGER trg_2;
 
29062
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29063
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29064
f_charbig = CONCAT('===',f_char1,'===');
 
29065
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29066
BEGIN
 
29067
SET new.f_int1 = new.f_int1 + @max_row,
 
29068
new.f_int2 = new.f_int2 - @max_row,
 
29069
new.f_charbig = '####updated per update trigger####';
 
29070
END|
 
29071
UPDATE t1
 
29072
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29073
f_charbig = '####updated per update statement itself####';
 
29074
        
 
29075
# check trigger-10 success:     1
 
29076
DROP TRIGGER trg_2;
 
29077
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29078
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29079
f_charbig = CONCAT('===',f_char1,'===');
 
29080
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29081
BEGIN
 
29082
SET new.f_int1 = @my_max1 + @counter,
 
29083
new.f_int2 = @my_min2 - @counter,
 
29084
new.f_charbig = '####updated per insert trigger####';
 
29085
SET @counter = @counter + 1;
 
29086
END|
 
29087
SET @counter = 1;
 
29088
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29089
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29090
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29091
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29092
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29093
ORDER BY f_int1;
 
29094
DROP TRIGGER trg_3;
 
29095
        
 
29096
# check trigger-11 success:     1
 
29097
DELETE FROM t1
 
29098
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29099
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29100
AND f_charbig = '####updated per insert trigger####';
 
29101
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29102
BEGIN
 
29103
SET new.f_int1 = @my_max1 + @counter,
 
29104
new.f_int2 = @my_min2 - @counter,
 
29105
new.f_charbig = '####updated per insert trigger####';
 
29106
SET @counter = @counter + 1;
 
29107
END|
 
29108
SET @counter = 1;
 
29109
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29110
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
29111
SELECT CAST(f_int1 AS CHAR),
 
29112
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29113
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29114
ORDER BY f_int1;
 
29115
DROP TRIGGER trg_3;
 
29116
        
 
29117
# check trigger-12 success:     1
 
29118
DELETE FROM t1
 
29119
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29120
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29121
AND f_charbig = '####updated per insert trigger####';
 
29122
ANALYZE  TABLE t1;
 
29123
Table   Op      Msg_type        Msg_text
 
29124
test.t1 analyze status  OK
 
29125
CHECK    TABLE t1 EXTENDED;
 
29126
Table   Op      Msg_type        Msg_text
 
29127
test.t1 check   status  OK
 
29128
CHECKSUM TABLE t1 EXTENDED;
 
29129
Table   Checksum
 
29130
test.t1 <some_value>
 
29131
OPTIMIZE TABLE t1;
 
29132
Table   Op      Msg_type        Msg_text
 
29133
test.t1 optimize        status  OK
 
29134
# check layout success:    1
 
29135
REPAIR   TABLE t1 EXTENDED;
 
29136
Table   Op      Msg_type        Msg_text
 
29137
test.t1 repair  status  OK
 
29138
# check layout success:    1
 
29139
TRUNCATE t1;
 
29140
        
 
29141
# check TRUNCATE success:       1
 
29142
# check layout success:    1
 
29143
# End usability test (inc/partition_check.inc)
 
29144
DROP TABLE t1;
 
29145
CREATE TABLE t1 (
 
29146
f_int1 INTEGER,
 
29147
f_int2 INTEGER,
 
29148
f_char1 CHAR(20),
 
29149
f_char2 CHAR(20),
 
29150
f_charbig VARCHAR(1000)
 
29151
 
 
29152
)
 
29153
PARTITION BY RANGE(f_int1)
 
29154
(PARTITION parta VALUES LESS THAN (0),
 
29155
PARTITION part_1 VALUES LESS THAN (5),
 
29156
PARTITION part_2 VALUES LESS THAN (10),
 
29157
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
29158
PARTITION part_4 VALUES LESS THAN (20),
 
29159
PARTITION part_5 VALUES LESS THAN (2147483646));
 
29160
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29161
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29162
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
29163
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
29164
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29165
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29166
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29167
# Start usability test (inc/partition_check.inc)
 
29168
create_command
 
29169
SHOW CREATE TABLE t1;
 
29170
Table   Create Table
 
29171
t1      CREATE TABLE `t1` (
 
29172
  `f_int1` int(11) DEFAULT NULL,
 
29173
  `f_int2` int(11) DEFAULT NULL,
 
29174
  `f_char1` char(20) DEFAULT NULL,
 
29175
  `f_char2` char(20) DEFAULT NULL,
 
29176
  `f_charbig` varchar(1000) DEFAULT NULL
 
29177
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
29178
 
 
29179
unified filelist
 
29180
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
29181
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
29182
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
29183
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
29184
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
29185
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
29186
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
29187
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
29188
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
29189
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
29190
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
29191
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
29192
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
29193
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
29194
 
 
29195
# check prerequisites-1 success:    1
 
29196
# check COUNT(*) success:    1
 
29197
# check MIN/MAX(f_int1) success:    1
 
29198
# check MIN/MAX(f_int2) success:    1
 
29199
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29200
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29201
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
29202
WHERE f_int1 IN (2,3);
 
29203
# check prerequisites-3 success:    1
 
29204
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
29205
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
29206
# check read via f_int1 success: 1
 
29207
# check read via f_int2 success: 1
 
29208
        
 
29209
# check multiple-1 success:     1
 
29210
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
29211
        
 
29212
# check multiple-2 success:     1
 
29213
INSERT INTO t1 SELECT * FROM t0_template
 
29214
WHERE MOD(f_int1,3) = 0;
 
29215
        
 
29216
# check multiple-3 success:     1
 
29217
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
29218
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
29219
AND @max_row_div2 + @max_row_div4;
 
29220
        
 
29221
# check multiple-4 success:     1
 
29222
DELETE FROM t1
 
29223
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
29224
AND @max_row_div2 + @max_row_div4 + @max_row;
 
29225
        
 
29226
# check multiple-5 success:     1
 
29227
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
29228
INSERT INTO t1
 
29229
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29230
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29231
f_charbig = '#SINGLE#';
 
29232
        
 
29233
# check single-1 success:       1
 
29234
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
29235
INSERT INTO t1
 
29236
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29237
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29238
f_charbig = '#SINGLE#';
 
29239
        
 
29240
# check single-2 success:       1
 
29241
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
29242
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
29243
UPDATE t1 SET f_int1 = @cur_value2
 
29244
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
29245
        
 
29246
# check single-3 success:       1
 
29247
SET @cur_value1= -1;
 
29248
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
29249
UPDATE t1 SET f_int1 = @cur_value1
 
29250
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
29251
        
 
29252
# check single-4 success:       1
 
29253
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
29254
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
29255
        
 
29256
# check single-5 success:       1
 
29257
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
29258
        
 
29259
# check single-6 success:       1
 
29260
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
29261
ERROR HY000: Table has no partition for value 2147483647
 
29262
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
29263
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
29264
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
29265
f_charbig = '#NULL#';
 
29266
INSERT INTO t1
 
29267
SET f_int1 = NULL , f_int2 = -@max_row,
 
29268
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
29269
f_charbig = '#NULL#';
 
29270
# check null success:    1
 
29271
        
 
29272
# check null-1 success:         1
 
29273
UPDATE t1 SET f_int1 = -@max_row
 
29274
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29275
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29276
        
 
29277
# check null-2 success:         1
 
29278
UPDATE t1 SET f_int1 = NULL
 
29279
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29280
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29281
        
 
29282
# check null-3 success:         1
 
29283
DELETE FROM t1
 
29284
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29285
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29286
        
 
29287
# check null-4 success:         1
 
29288
DELETE FROM t1
 
29289
WHERE f_int1 = 0 AND f_int2 = 0
 
29290
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
29291
AND f_charbig = '#NULL#';
 
29292
SET AUTOCOMMIT= 0;
 
29293
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29294
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29295
FROM t0_template source_tab
 
29296
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29297
        
 
29298
# check transactions-1 success:         1
 
29299
COMMIT WORK;
 
29300
        
 
29301
# check transactions-2 success:         1
 
29302
ROLLBACK WORK;
 
29303
        
 
29304
# check transactions-3 success:         1
 
29305
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29306
COMMIT WORK;
 
29307
ROLLBACK WORK;
 
29308
        
 
29309
# check transactions-4 success:         1
 
29310
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29311
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29312
FROM t0_template source_tab
 
29313
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29314
        
 
29315
# check transactions-5 success:         1
 
29316
ROLLBACK WORK;
 
29317
Warnings:
 
29318
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
29319
        
 
29320
# check transactions-6 success:         1
 
29321
# INFO: Storage engine used for t1 seems to be not transactional.
 
29322
COMMIT;
 
29323
        
 
29324
# check transactions-7 success:         1
 
29325
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29326
COMMIT WORK;
 
29327
SET @@session.sql_mode = 'traditional';
 
29328
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
29329
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29330
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
29331
'', '', 'was inserted' FROM t0_template
 
29332
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29333
ERROR 22012: Division by 0
 
29334
COMMIT;
 
29335
        
 
29336
# check transactions-8 success:         1
 
29337
# INFO: Storage engine used for t1 seems to be unable to revert
 
29338
#       changes made by the failing statement.
 
29339
SET @@session.sql_mode = '';
 
29340
SET AUTOCOMMIT= 1;
 
29341
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29342
COMMIT WORK;
 
29343
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
29344
        
 
29345
# check special-1 success:      1
 
29346
UPDATE t1 SET f_charbig = '';
 
29347
        
 
29348
# check special-2 success:      1
 
29349
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
29350
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29351
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
29352
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29353
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29354
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29355
'just inserted' FROM t0_template
 
29356
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29357
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
29358
BEGIN
 
29359
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29360
f_charbig = 'updated by trigger'
 
29361
      WHERE f_int1 = new.f_int1;
 
29362
END|
 
29363
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29364
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29365
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29366
        
 
29367
# check trigger-1 success:      1
 
29368
DROP TRIGGER trg_1;
 
29369
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29370
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29371
f_charbig = 'just inserted'
 
29372
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29373
DELETE FROM t0_aux
 
29374
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29375
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29376
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29377
'just inserted' FROM t0_template
 
29378
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29379
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
29380
BEGIN
 
29381
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29382
f_charbig = 'updated by trigger'
 
29383
      WHERE f_int1 = new.f_int1;
 
29384
END|
 
29385
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29386
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29387
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29388
        
 
29389
# check trigger-2 success:      1
 
29390
DROP TRIGGER trg_1;
 
29391
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29392
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29393
f_charbig = 'just inserted'
 
29394
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29395
DELETE FROM t0_aux
 
29396
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29397
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29398
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29399
'just inserted' FROM t0_template
 
29400
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29401
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29402
BEGIN
 
29403
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29404
f_charbig = 'updated by trigger'
 
29405
      WHERE f_int1 = new.f_int1;
 
29406
END|
 
29407
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29408
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29409
        
 
29410
# check trigger-3 success:      1
 
29411
DROP TRIGGER trg_1;
 
29412
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29413
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29414
f_charbig = 'just inserted'
 
29415
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29416
DELETE FROM t0_aux
 
29417
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29418
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29419
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29420
'just inserted' FROM t0_template
 
29421
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29422
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29423
BEGIN
 
29424
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29425
f_charbig = 'updated by trigger'
 
29426
      WHERE f_int1 = - old.f_int1;
 
29427
END|
 
29428
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29429
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29430
        
 
29431
# check trigger-4 success:      1
 
29432
DROP TRIGGER trg_1;
 
29433
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29434
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29435
f_charbig = 'just inserted'
 
29436
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29437
DELETE FROM t0_aux
 
29438
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29439
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29440
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29441
'just inserted' FROM t0_template
 
29442
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29443
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29444
BEGIN
 
29445
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29446
f_charbig = 'updated by trigger'
 
29447
      WHERE f_int1 = new.f_int1;
 
29448
END|
 
29449
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29450
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29451
        
 
29452
# check trigger-5 success:      1
 
29453
DROP TRIGGER trg_1;
 
29454
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29455
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29456
f_charbig = 'just inserted'
 
29457
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29458
DELETE FROM t0_aux
 
29459
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29460
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29461
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29462
'just inserted' FROM t0_template
 
29463
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29464
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29465
BEGIN
 
29466
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29467
f_charbig = 'updated by trigger'
 
29468
      WHERE f_int1 = - old.f_int1;
 
29469
END|
 
29470
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29471
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29472
        
 
29473
# check trigger-6 success:      1
 
29474
DROP TRIGGER trg_1;
 
29475
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29476
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29477
f_charbig = 'just inserted'
 
29478
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29479
DELETE FROM t0_aux
 
29480
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29481
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29482
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29483
'just inserted' FROM t0_template
 
29484
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29485
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
29486
BEGIN
 
29487
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29488
f_charbig = 'updated by trigger'
 
29489
      WHERE f_int1 = - old.f_int1;
 
29490
END|
 
29491
DELETE FROM t0_aux
 
29492
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29493
        
 
29494
# check trigger-7 success:      1
 
29495
DROP TRIGGER trg_1;
 
29496
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29497
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29498
f_charbig = 'just inserted'
 
29499
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29500
DELETE FROM t0_aux
 
29501
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29502
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29503
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29504
'just inserted' FROM t0_template
 
29505
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29506
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
29507
BEGIN
 
29508
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29509
f_charbig = 'updated by trigger'
 
29510
      WHERE f_int1 = - old.f_int1;
 
29511
END|
 
29512
DELETE FROM t0_aux
 
29513
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29514
        
 
29515
# check trigger-8 success:      1
 
29516
DROP TRIGGER trg_1;
 
29517
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29518
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29519
f_charbig = 'just inserted'
 
29520
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29521
DELETE FROM t0_aux
 
29522
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29523
DELETE FROM t1
 
29524
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29525
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29526
BEGIN
 
29527
SET new.f_int1 = old.f_int1 + @max_row,
 
29528
new.f_int2 = old.f_int2 - @max_row,
 
29529
new.f_charbig = '####updated per update trigger####';
 
29530
END|
 
29531
UPDATE t1
 
29532
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29533
f_charbig = '####updated per update statement itself####';
 
29534
        
 
29535
# check trigger-9 success:      1
 
29536
DROP TRIGGER trg_2;
 
29537
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29538
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29539
f_charbig = CONCAT('===',f_char1,'===');
 
29540
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
29541
BEGIN
 
29542
SET new.f_int1 = new.f_int1 + @max_row,
 
29543
new.f_int2 = new.f_int2 - @max_row,
 
29544
new.f_charbig = '####updated per update trigger####';
 
29545
END|
 
29546
UPDATE t1
 
29547
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
29548
f_charbig = '####updated per update statement itself####';
 
29549
        
 
29550
# check trigger-10 success:     1
 
29551
DROP TRIGGER trg_2;
 
29552
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29553
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29554
f_charbig = CONCAT('===',f_char1,'===');
 
29555
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29556
BEGIN
 
29557
SET new.f_int1 = @my_max1 + @counter,
 
29558
new.f_int2 = @my_min2 - @counter,
 
29559
new.f_charbig = '####updated per insert trigger####';
 
29560
SET @counter = @counter + 1;
 
29561
END|
 
29562
SET @counter = 1;
 
29563
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29564
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29565
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29566
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29567
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29568
ORDER BY f_int1;
 
29569
DROP TRIGGER trg_3;
 
29570
        
 
29571
# check trigger-11 success:     1
 
29572
DELETE FROM t1
 
29573
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29574
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29575
AND f_charbig = '####updated per insert trigger####';
 
29576
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
29577
BEGIN
 
29578
SET new.f_int1 = @my_max1 + @counter,
 
29579
new.f_int2 = @my_min2 - @counter,
 
29580
new.f_charbig = '####updated per insert trigger####';
 
29581
SET @counter = @counter + 1;
 
29582
END|
 
29583
SET @counter = 1;
 
29584
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
29585
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
29586
SELECT CAST(f_int1 AS CHAR),
 
29587
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
29588
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
29589
ORDER BY f_int1;
 
29590
DROP TRIGGER trg_3;
 
29591
        
 
29592
# check trigger-12 success:     1
 
29593
DELETE FROM t1
 
29594
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
29595
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
29596
AND f_charbig = '####updated per insert trigger####';
 
29597
ANALYZE  TABLE t1;
 
29598
Table   Op      Msg_type        Msg_text
 
29599
test.t1 analyze status  OK
 
29600
CHECK    TABLE t1 EXTENDED;
 
29601
Table   Op      Msg_type        Msg_text
 
29602
test.t1 check   status  OK
 
29603
CHECKSUM TABLE t1 EXTENDED;
 
29604
Table   Checksum
 
29605
test.t1 <some_value>
 
29606
OPTIMIZE TABLE t1;
 
29607
Table   Op      Msg_type        Msg_text
 
29608
test.t1 optimize        status  OK
 
29609
# check layout success:    1
 
29610
REPAIR   TABLE t1 EXTENDED;
 
29611
Table   Op      Msg_type        Msg_text
 
29612
test.t1 repair  status  OK
 
29613
# check layout success:    1
 
29614
TRUNCATE t1;
 
29615
        
 
29616
# check TRUNCATE success:       1
 
29617
# check layout success:    1
 
29618
# End usability test (inc/partition_check.inc)
 
29619
DROP TABLE t1;
 
29620
CREATE TABLE t1 (
 
29621
f_int1 INTEGER,
 
29622
f_int2 INTEGER,
 
29623
f_char1 CHAR(20),
 
29624
f_char2 CHAR(20),
 
29625
f_charbig VARCHAR(1000)
 
29626
 
 
29627
)
 
29628
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
29629
(PARTITION part_1 VALUES LESS THAN (0),
 
29630
PARTITION part_2 VALUES LESS THAN (5),
 
29631
PARTITION part_3 VALUES LESS THAN (10),
 
29632
PARTITION part_4 VALUES LESS THAN (2147483646));
 
29633
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29634
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29635
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
29636
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
29637
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29638
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
29639
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
29640
# Start usability test (inc/partition_check.inc)
 
29641
create_command
 
29642
SHOW CREATE TABLE t1;
 
29643
Table   Create Table
 
29644
t1      CREATE TABLE `t1` (
 
29645
  `f_int1` int(11) DEFAULT NULL,
 
29646
  `f_int2` int(11) DEFAULT NULL,
 
29647
  `f_char1` char(20) DEFAULT NULL,
 
29648
  `f_char2` char(20) DEFAULT NULL,
 
29649
  `f_charbig` varchar(1000) DEFAULT NULL
 
29650
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
29651
 
 
29652
unified filelist
 
29653
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
29654
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
29655
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
29656
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
29657
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
29658
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
29659
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
29660
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
29661
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
29662
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
29663
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
29664
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
29665
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYD
 
29666
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYI
 
29667
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYD
 
29668
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYI
 
29669
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
29670
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
29671
 
 
29672
# check prerequisites-1 success:    1
 
29673
# check COUNT(*) success:    1
 
29674
# check MIN/MAX(f_int1) success:    1
 
29675
# check MIN/MAX(f_int2) success:    1
 
29676
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29677
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
29678
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
29679
WHERE f_int1 IN (2,3);
 
29680
# check prerequisites-3 success:    1
 
29681
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
29682
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
29683
# check read via f_int1 success: 1
 
29684
# check read via f_int2 success: 1
 
29685
        
 
29686
# check multiple-1 success:     1
 
29687
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
29688
        
 
29689
# check multiple-2 success:     1
 
29690
INSERT INTO t1 SELECT * FROM t0_template
 
29691
WHERE MOD(f_int1,3) = 0;
 
29692
        
 
29693
# check multiple-3 success:     1
 
29694
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
29695
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
29696
AND @max_row_div2 + @max_row_div4;
 
29697
        
 
29698
# check multiple-4 success:     1
 
29699
DELETE FROM t1
 
29700
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
29701
AND @max_row_div2 + @max_row_div4 + @max_row;
 
29702
        
 
29703
# check multiple-5 success:     1
 
29704
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
29705
INSERT INTO t1
 
29706
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29707
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29708
f_charbig = '#SINGLE#';
 
29709
        
 
29710
# check single-1 success:       1
 
29711
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
29712
INSERT INTO t1
 
29713
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
29714
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
29715
f_charbig = '#SINGLE#';
 
29716
        
 
29717
# check single-2 success:       1
 
29718
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
29719
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
29720
UPDATE t1 SET f_int1 = @cur_value2
 
29721
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
29722
        
 
29723
# check single-3 success:       1
 
29724
SET @cur_value1= -1;
 
29725
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
29726
UPDATE t1 SET f_int1 = @cur_value1
 
29727
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
29728
        
 
29729
# check single-4 success:       1
 
29730
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
29731
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
29732
        
 
29733
# check single-5 success:       1
 
29734
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
29735
        
 
29736
# check single-6 success:       1
 
29737
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
29738
        
 
29739
# check single-7 success:       1
 
29740
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
29741
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
29742
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
29743
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
29744
f_charbig = '#NULL#';
 
29745
INSERT INTO t1
 
29746
SET f_int1 = NULL , f_int2 = -@max_row,
 
29747
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
29748
f_charbig = '#NULL#';
 
29749
# check null success:    1
 
29750
        
 
29751
# check null-1 success:         1
 
29752
UPDATE t1 SET f_int1 = -@max_row
 
29753
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29754
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29755
        
 
29756
# check null-2 success:         1
 
29757
UPDATE t1 SET f_int1 = NULL
 
29758
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29759
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29760
        
 
29761
# check null-3 success:         1
 
29762
DELETE FROM t1
 
29763
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
29764
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
29765
        
 
29766
# check null-4 success:         1
 
29767
DELETE FROM t1
 
29768
WHERE f_int1 = 0 AND f_int2 = 0
 
29769
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
29770
AND f_charbig = '#NULL#';
 
29771
SET AUTOCOMMIT= 0;
 
29772
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29773
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29774
FROM t0_template source_tab
 
29775
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29776
        
 
29777
# check transactions-1 success:         1
 
29778
COMMIT WORK;
 
29779
        
 
29780
# check transactions-2 success:         1
 
29781
ROLLBACK WORK;
 
29782
        
 
29783
# check transactions-3 success:         1
 
29784
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29785
COMMIT WORK;
 
29786
ROLLBACK WORK;
 
29787
        
 
29788
# check transactions-4 success:         1
 
29789
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29790
SELECT f_int1, f_int1, '', '', 'was inserted'
 
29791
FROM t0_template source_tab
 
29792
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29793
        
 
29794
# check transactions-5 success:         1
 
29795
ROLLBACK WORK;
 
29796
Warnings:
 
29797
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
29798
        
 
29799
# check transactions-6 success:         1
 
29800
# INFO: Storage engine used for t1 seems to be not transactional.
 
29801
COMMIT;
 
29802
        
 
29803
# check transactions-7 success:         1
 
29804
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29805
COMMIT WORK;
 
29806
SET @@session.sql_mode = 'traditional';
 
29807
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
29808
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
29809
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
29810
'', '', 'was inserted' FROM t0_template
 
29811
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
29812
ERROR 22012: Division by 0
 
29813
COMMIT;
 
29814
        
 
29815
# check transactions-8 success:         1
 
29816
# INFO: Storage engine used for t1 seems to be unable to revert
 
29817
#       changes made by the failing statement.
 
29818
SET @@session.sql_mode = '';
 
29819
SET AUTOCOMMIT= 1;
 
29820
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
29821
COMMIT WORK;
 
29822
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
29823
        
 
29824
# check special-1 success:      1
 
29825
UPDATE t1 SET f_charbig = '';
 
29826
        
 
29827
# check special-2 success:      1
 
29828
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
29829
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29830
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
29831
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29832
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29833
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29834
'just inserted' FROM t0_template
 
29835
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29836
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
29837
BEGIN
 
29838
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29839
f_charbig = 'updated by trigger'
 
29840
      WHERE f_int1 = new.f_int1;
 
29841
END|
 
29842
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29843
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29844
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29845
        
 
29846
# check trigger-1 success:      1
 
29847
DROP TRIGGER trg_1;
 
29848
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29849
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29850
f_charbig = 'just inserted'
 
29851
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29852
DELETE FROM t0_aux
 
29853
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29854
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29855
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29856
'just inserted' FROM t0_template
 
29857
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29858
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
29859
BEGIN
 
29860
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29861
f_charbig = 'updated by trigger'
 
29862
      WHERE f_int1 = new.f_int1;
 
29863
END|
 
29864
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29865
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
29866
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29867
        
 
29868
# check trigger-2 success:      1
 
29869
DROP TRIGGER trg_1;
 
29870
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29871
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29872
f_charbig = 'just inserted'
 
29873
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29874
DELETE FROM t0_aux
 
29875
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29876
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29877
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29878
'just inserted' FROM t0_template
 
29879
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29880
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29881
BEGIN
 
29882
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29883
f_charbig = 'updated by trigger'
 
29884
      WHERE f_int1 = new.f_int1;
 
29885
END|
 
29886
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29887
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29888
        
 
29889
# check trigger-3 success:      1
 
29890
DROP TRIGGER trg_1;
 
29891
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29892
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29893
f_charbig = 'just inserted'
 
29894
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29895
DELETE FROM t0_aux
 
29896
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29897
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29898
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29899
'just inserted' FROM t0_template
 
29900
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29901
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
29902
BEGIN
 
29903
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29904
f_charbig = 'updated by trigger'
 
29905
      WHERE f_int1 = - old.f_int1;
 
29906
END|
 
29907
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29908
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29909
        
 
29910
# check trigger-4 success:      1
 
29911
DROP TRIGGER trg_1;
 
29912
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29913
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29914
f_charbig = 'just inserted'
 
29915
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29916
DELETE FROM t0_aux
 
29917
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29918
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29919
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29920
'just inserted' FROM t0_template
 
29921
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29922
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29923
BEGIN
 
29924
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29925
f_charbig = 'updated by trigger'
 
29926
      WHERE f_int1 = new.f_int1;
 
29927
END|
 
29928
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29929
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29930
        
 
29931
# check trigger-5 success:      1
 
29932
DROP TRIGGER trg_1;
 
29933
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29934
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29935
f_charbig = 'just inserted'
 
29936
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29937
DELETE FROM t0_aux
 
29938
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29939
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29940
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29941
'just inserted' FROM t0_template
 
29942
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29943
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
29944
BEGIN
 
29945
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29946
f_charbig = 'updated by trigger'
 
29947
      WHERE f_int1 = - old.f_int1;
 
29948
END|
 
29949
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
29950
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29951
        
 
29952
# check trigger-6 success:      1
 
29953
DROP TRIGGER trg_1;
 
29954
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29955
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29956
f_charbig = 'just inserted'
 
29957
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29958
DELETE FROM t0_aux
 
29959
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29960
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29961
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29962
'just inserted' FROM t0_template
 
29963
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29964
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
29965
BEGIN
 
29966
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29967
f_charbig = 'updated by trigger'
 
29968
      WHERE f_int1 = - old.f_int1;
 
29969
END|
 
29970
DELETE FROM t0_aux
 
29971
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29972
        
 
29973
# check trigger-7 success:      1
 
29974
DROP TRIGGER trg_1;
 
29975
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29976
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29977
f_charbig = 'just inserted'
 
29978
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
29979
DELETE FROM t0_aux
 
29980
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29981
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
29982
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
29983
'just inserted' FROM t0_template
 
29984
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
29985
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
29986
BEGIN
 
29987
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
29988
f_charbig = 'updated by trigger'
 
29989
      WHERE f_int1 = - old.f_int1;
 
29990
END|
 
29991
DELETE FROM t0_aux
 
29992
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
29993
        
 
29994
# check trigger-8 success:      1
 
29995
DROP TRIGGER trg_1;
 
29996
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
29997
f_int2 = CAST(f_char1 AS SIGNED INT),
 
29998
f_charbig = 'just inserted'
 
29999
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30000
DELETE FROM t0_aux
 
30001
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30002
DELETE FROM t1
 
30003
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30004
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30005
BEGIN
 
30006
SET new.f_int1 = old.f_int1 + @max_row,
 
30007
new.f_int2 = old.f_int2 - @max_row,
 
30008
new.f_charbig = '####updated per update trigger####';
 
30009
END|
 
30010
UPDATE t1
 
30011
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30012
f_charbig = '####updated per update statement itself####';
 
30013
        
 
30014
# check trigger-9 success:      1
 
30015
DROP TRIGGER trg_2;
 
30016
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30017
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30018
f_charbig = CONCAT('===',f_char1,'===');
 
30019
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30020
BEGIN
 
30021
SET new.f_int1 = new.f_int1 + @max_row,
 
30022
new.f_int2 = new.f_int2 - @max_row,
 
30023
new.f_charbig = '####updated per update trigger####';
 
30024
END|
 
30025
UPDATE t1
 
30026
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30027
f_charbig = '####updated per update statement itself####';
 
30028
        
 
30029
# check trigger-10 success:     1
 
30030
DROP TRIGGER trg_2;
 
30031
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30032
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30033
f_charbig = CONCAT('===',f_char1,'===');
 
30034
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30035
BEGIN
 
30036
SET new.f_int1 = @my_max1 + @counter,
 
30037
new.f_int2 = @my_min2 - @counter,
 
30038
new.f_charbig = '####updated per insert trigger####';
 
30039
SET @counter = @counter + 1;
 
30040
END|
 
30041
SET @counter = 1;
 
30042
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30043
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30044
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30045
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30046
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30047
ORDER BY f_int1;
 
30048
DROP TRIGGER trg_3;
 
30049
        
 
30050
# check trigger-11 success:     1
 
30051
DELETE FROM t1
 
30052
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30053
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30054
AND f_charbig = '####updated per insert trigger####';
 
30055
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30056
BEGIN
 
30057
SET new.f_int1 = @my_max1 + @counter,
 
30058
new.f_int2 = @my_min2 - @counter,
 
30059
new.f_charbig = '####updated per insert trigger####';
 
30060
SET @counter = @counter + 1;
 
30061
END|
 
30062
SET @counter = 1;
 
30063
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30064
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
30065
SELECT CAST(f_int1 AS CHAR),
 
30066
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30067
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30068
ORDER BY f_int1;
 
30069
DROP TRIGGER trg_3;
 
30070
        
 
30071
# check trigger-12 success:     1
 
30072
DELETE FROM t1
 
30073
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30074
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30075
AND f_charbig = '####updated per insert trigger####';
 
30076
ANALYZE  TABLE t1;
 
30077
Table   Op      Msg_type        Msg_text
 
30078
test.t1 analyze status  OK
 
30079
CHECK    TABLE t1 EXTENDED;
 
30080
Table   Op      Msg_type        Msg_text
 
30081
test.t1 check   status  OK
 
30082
CHECKSUM TABLE t1 EXTENDED;
 
30083
Table   Checksum
 
30084
test.t1 <some_value>
 
30085
OPTIMIZE TABLE t1;
 
30086
Table   Op      Msg_type        Msg_text
 
30087
test.t1 optimize        status  OK
 
30088
# check layout success:    1
 
30089
REPAIR   TABLE t1 EXTENDED;
 
30090
Table   Op      Msg_type        Msg_text
 
30091
test.t1 repair  status  OK
 
30092
# check layout success:    1
 
30093
TRUNCATE t1;
 
30094
        
 
30095
# check TRUNCATE success:       1
 
30096
# check layout success:    1
 
30097
# End usability test (inc/partition_check.inc)
 
30098
DROP TABLE t1;
 
30099
CREATE TABLE t1 (
 
30100
f_int1 INTEGER,
 
30101
f_int2 INTEGER,
 
30102
f_char1 CHAR(20),
 
30103
f_char2 CHAR(20),
 
30104
f_charbig VARCHAR(1000)
 
30105
 
 
30106
)
 
30107
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
30108
(PARTITION part_1 VALUES LESS THAN (0)
 
30109
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
30110
PARTITION part_2 VALUES LESS THAN (5)
 
30111
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
30112
PARTITION part_3 VALUES LESS THAN (10)
 
30113
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
30114
PARTITION part_4 VALUES LESS THAN (2147483646)
 
30115
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
30116
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30117
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30118
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
30119
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
30120
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30121
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30122
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30123
# Start usability test (inc/partition_check.inc)
 
30124
create_command
 
30125
SHOW CREATE TABLE t1;
 
30126
Table   Create Table
 
30127
t1      CREATE TABLE `t1` (
 
30128
  `f_int1` int(11) DEFAULT NULL,
 
30129
  `f_int2` int(11) DEFAULT NULL,
 
30130
  `f_char1` char(20) DEFAULT NULL,
 
30131
  `f_char2` char(20) DEFAULT NULL,
 
30132
  `f_charbig` varchar(1000) DEFAULT NULL
 
30133
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
30134
 
 
30135
unified filelist
 
30136
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYD
 
30137
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYI
 
30138
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYD
 
30139
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYI
 
30140
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYD
 
30141
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYI
 
30142
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYD
 
30143
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYI
 
30144
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYD
 
30145
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYI
 
30146
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYD
 
30147
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYI
 
30148
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYD
 
30149
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYI
 
30150
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYD
 
30151
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYI
 
30152
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
30153
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
30154
 
 
30155
# check prerequisites-1 success:    1
 
30156
# check COUNT(*) success:    1
 
30157
# check MIN/MAX(f_int1) success:    1
 
30158
# check MIN/MAX(f_int2) success:    1
 
30159
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30160
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30161
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
30162
WHERE f_int1 IN (2,3);
 
30163
# check prerequisites-3 success:    1
 
30164
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
30165
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
30166
# check read via f_int1 success: 1
 
30167
# check read via f_int2 success: 1
 
30168
        
 
30169
# check multiple-1 success:     1
 
30170
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
30171
        
 
30172
# check multiple-2 success:     1
 
30173
INSERT INTO t1 SELECT * FROM t0_template
 
30174
WHERE MOD(f_int1,3) = 0;
 
30175
        
 
30176
# check multiple-3 success:     1
 
30177
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
30178
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
30179
AND @max_row_div2 + @max_row_div4;
 
30180
        
 
30181
# check multiple-4 success:     1
 
30182
DELETE FROM t1
 
30183
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
30184
AND @max_row_div2 + @max_row_div4 + @max_row;
 
30185
        
 
30186
# check multiple-5 success:     1
 
30187
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
30188
INSERT INTO t1
 
30189
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30190
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30191
f_charbig = '#SINGLE#';
 
30192
        
 
30193
# check single-1 success:       1
 
30194
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
30195
INSERT INTO t1
 
30196
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30197
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30198
f_charbig = '#SINGLE#';
 
30199
        
 
30200
# check single-2 success:       1
 
30201
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
30202
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
30203
UPDATE t1 SET f_int1 = @cur_value2
 
30204
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
30205
        
 
30206
# check single-3 success:       1
 
30207
SET @cur_value1= -1;
 
30208
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
30209
UPDATE t1 SET f_int1 = @cur_value1
 
30210
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
30211
        
 
30212
# check single-4 success:       1
 
30213
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
30214
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
30215
        
 
30216
# check single-5 success:       1
 
30217
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
30218
        
 
30219
# check single-6 success:       1
 
30220
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
30221
ERROR HY000: Table has no partition for value 2147483647
 
30222
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
30223
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
30224
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
30225
f_charbig = '#NULL#';
 
30226
INSERT INTO t1
 
30227
SET f_int1 = NULL , f_int2 = -@max_row,
 
30228
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
30229
f_charbig = '#NULL#';
 
30230
# check null success:    1
 
30231
        
 
30232
# check null-1 success:         1
 
30233
UPDATE t1 SET f_int1 = -@max_row
 
30234
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30235
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30236
        
 
30237
# check null-2 success:         1
 
30238
UPDATE t1 SET f_int1 = NULL
 
30239
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30240
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30241
        
 
30242
# check null-3 success:         1
 
30243
DELETE FROM t1
 
30244
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30245
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30246
        
 
30247
# check null-4 success:         1
 
30248
DELETE FROM t1
 
30249
WHERE f_int1 = 0 AND f_int2 = 0
 
30250
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
30251
AND f_charbig = '#NULL#';
 
30252
SET AUTOCOMMIT= 0;
 
30253
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30254
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30255
FROM t0_template source_tab
 
30256
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30257
        
 
30258
# check transactions-1 success:         1
 
30259
COMMIT WORK;
 
30260
        
 
30261
# check transactions-2 success:         1
 
30262
ROLLBACK WORK;
 
30263
        
 
30264
# check transactions-3 success:         1
 
30265
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30266
COMMIT WORK;
 
30267
ROLLBACK WORK;
 
30268
        
 
30269
# check transactions-4 success:         1
 
30270
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30271
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30272
FROM t0_template source_tab
 
30273
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30274
        
 
30275
# check transactions-5 success:         1
 
30276
ROLLBACK WORK;
 
30277
Warnings:
 
30278
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
30279
        
 
30280
# check transactions-6 success:         1
 
30281
# INFO: Storage engine used for t1 seems to be not transactional.
 
30282
COMMIT;
 
30283
        
 
30284
# check transactions-7 success:         1
 
30285
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30286
COMMIT WORK;
 
30287
SET @@session.sql_mode = 'traditional';
 
30288
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
30289
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30290
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
30291
'', '', 'was inserted' FROM t0_template
 
30292
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30293
ERROR 22012: Division by 0
 
30294
COMMIT;
 
30295
        
 
30296
# check transactions-8 success:         1
 
30297
# INFO: Storage engine used for t1 seems to be unable to revert
 
30298
#       changes made by the failing statement.
 
30299
SET @@session.sql_mode = '';
 
30300
SET AUTOCOMMIT= 1;
 
30301
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30302
COMMIT WORK;
 
30303
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
30304
        
 
30305
# check special-1 success:      1
 
30306
UPDATE t1 SET f_charbig = '';
 
30307
        
 
30308
# check special-2 success:      1
 
30309
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
30310
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30311
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
30312
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30313
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30314
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30315
'just inserted' FROM t0_template
 
30316
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30317
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
30318
BEGIN
 
30319
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30320
f_charbig = 'updated by trigger'
 
30321
      WHERE f_int1 = new.f_int1;
 
30322
END|
 
30323
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30324
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30325
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30326
        
 
30327
# check trigger-1 success:      1
 
30328
DROP TRIGGER trg_1;
 
30329
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30330
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30331
f_charbig = 'just inserted'
 
30332
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30333
DELETE FROM t0_aux
 
30334
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30335
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30336
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30337
'just inserted' FROM t0_template
 
30338
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30339
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
30340
BEGIN
 
30341
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30342
f_charbig = 'updated by trigger'
 
30343
      WHERE f_int1 = new.f_int1;
 
30344
END|
 
30345
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30346
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30347
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30348
        
 
30349
# check trigger-2 success:      1
 
30350
DROP TRIGGER trg_1;
 
30351
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30352
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30353
f_charbig = 'just inserted'
 
30354
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30355
DELETE FROM t0_aux
 
30356
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30357
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30358
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30359
'just inserted' FROM t0_template
 
30360
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30361
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30362
BEGIN
 
30363
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30364
f_charbig = 'updated by trigger'
 
30365
      WHERE f_int1 = new.f_int1;
 
30366
END|
 
30367
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30368
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30369
        
 
30370
# check trigger-3 success:      1
 
30371
DROP TRIGGER trg_1;
 
30372
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30373
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30374
f_charbig = 'just inserted'
 
30375
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30376
DELETE FROM t0_aux
 
30377
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30378
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30379
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30380
'just inserted' FROM t0_template
 
30381
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30382
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30383
BEGIN
 
30384
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30385
f_charbig = 'updated by trigger'
 
30386
      WHERE f_int1 = - old.f_int1;
 
30387
END|
 
30388
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30389
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30390
        
 
30391
# check trigger-4 success:      1
 
30392
DROP TRIGGER trg_1;
 
30393
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30394
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30395
f_charbig = 'just inserted'
 
30396
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30397
DELETE FROM t0_aux
 
30398
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30399
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30400
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30401
'just inserted' FROM t0_template
 
30402
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30403
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30404
BEGIN
 
30405
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30406
f_charbig = 'updated by trigger'
 
30407
      WHERE f_int1 = new.f_int1;
 
30408
END|
 
30409
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30410
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30411
        
 
30412
# check trigger-5 success:      1
 
30413
DROP TRIGGER trg_1;
 
30414
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30415
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30416
f_charbig = 'just inserted'
 
30417
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30418
DELETE FROM t0_aux
 
30419
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30420
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30421
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30422
'just inserted' FROM t0_template
 
30423
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30424
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30425
BEGIN
 
30426
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30427
f_charbig = 'updated by trigger'
 
30428
      WHERE f_int1 = - old.f_int1;
 
30429
END|
 
30430
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30431
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30432
        
 
30433
# check trigger-6 success:      1
 
30434
DROP TRIGGER trg_1;
 
30435
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30436
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30437
f_charbig = 'just inserted'
 
30438
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30439
DELETE FROM t0_aux
 
30440
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30441
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30442
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30443
'just inserted' FROM t0_template
 
30444
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30445
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
30446
BEGIN
 
30447
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30448
f_charbig = 'updated by trigger'
 
30449
      WHERE f_int1 = - old.f_int1;
 
30450
END|
 
30451
DELETE FROM t0_aux
 
30452
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30453
        
 
30454
# check trigger-7 success:      1
 
30455
DROP TRIGGER trg_1;
 
30456
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30457
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30458
f_charbig = 'just inserted'
 
30459
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30460
DELETE FROM t0_aux
 
30461
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30462
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30463
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30464
'just inserted' FROM t0_template
 
30465
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30466
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
30467
BEGIN
 
30468
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30469
f_charbig = 'updated by trigger'
 
30470
      WHERE f_int1 = - old.f_int1;
 
30471
END|
 
30472
DELETE FROM t0_aux
 
30473
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30474
        
 
30475
# check trigger-8 success:      1
 
30476
DROP TRIGGER trg_1;
 
30477
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30478
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30479
f_charbig = 'just inserted'
 
30480
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30481
DELETE FROM t0_aux
 
30482
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30483
DELETE FROM t1
 
30484
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30485
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30486
BEGIN
 
30487
SET new.f_int1 = old.f_int1 + @max_row,
 
30488
new.f_int2 = old.f_int2 - @max_row,
 
30489
new.f_charbig = '####updated per update trigger####';
 
30490
END|
 
30491
UPDATE t1
 
30492
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30493
f_charbig = '####updated per update statement itself####';
 
30494
        
 
30495
# check trigger-9 success:      1
 
30496
DROP TRIGGER trg_2;
 
30497
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30498
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30499
f_charbig = CONCAT('===',f_char1,'===');
 
30500
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30501
BEGIN
 
30502
SET new.f_int1 = new.f_int1 + @max_row,
 
30503
new.f_int2 = new.f_int2 - @max_row,
 
30504
new.f_charbig = '####updated per update trigger####';
 
30505
END|
 
30506
UPDATE t1
 
30507
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30508
f_charbig = '####updated per update statement itself####';
 
30509
        
 
30510
# check trigger-10 success:     1
 
30511
DROP TRIGGER trg_2;
 
30512
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30513
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30514
f_charbig = CONCAT('===',f_char1,'===');
 
30515
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30516
BEGIN
 
30517
SET new.f_int1 = @my_max1 + @counter,
 
30518
new.f_int2 = @my_min2 - @counter,
 
30519
new.f_charbig = '####updated per insert trigger####';
 
30520
SET @counter = @counter + 1;
 
30521
END|
 
30522
SET @counter = 1;
 
30523
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30524
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30525
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30526
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30527
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30528
ORDER BY f_int1;
 
30529
DROP TRIGGER trg_3;
 
30530
        
 
30531
# check trigger-11 success:     1
 
30532
DELETE FROM t1
 
30533
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30534
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30535
AND f_charbig = '####updated per insert trigger####';
 
30536
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30537
BEGIN
 
30538
SET new.f_int1 = @my_max1 + @counter,
 
30539
new.f_int2 = @my_min2 - @counter,
 
30540
new.f_charbig = '####updated per insert trigger####';
 
30541
SET @counter = @counter + 1;
 
30542
END|
 
30543
SET @counter = 1;
 
30544
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
30545
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
30546
SELECT CAST(f_int1 AS CHAR),
 
30547
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
30548
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
30549
ORDER BY f_int1;
 
30550
DROP TRIGGER trg_3;
 
30551
        
 
30552
# check trigger-12 success:     1
 
30553
DELETE FROM t1
 
30554
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
30555
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
30556
AND f_charbig = '####updated per insert trigger####';
 
30557
ANALYZE  TABLE t1;
 
30558
Table   Op      Msg_type        Msg_text
 
30559
test.t1 analyze status  OK
 
30560
CHECK    TABLE t1 EXTENDED;
 
30561
Table   Op      Msg_type        Msg_text
 
30562
test.t1 check   status  OK
 
30563
CHECKSUM TABLE t1 EXTENDED;
 
30564
Table   Checksum
 
30565
test.t1 <some_value>
 
30566
OPTIMIZE TABLE t1;
 
30567
Table   Op      Msg_type        Msg_text
 
30568
test.t1 optimize        status  OK
 
30569
# check layout success:    1
 
30570
REPAIR   TABLE t1 EXTENDED;
 
30571
Table   Op      Msg_type        Msg_text
 
30572
test.t1 repair  status  OK
 
30573
# check layout success:    1
 
30574
TRUNCATE t1;
 
30575
        
 
30576
# check TRUNCATE success:       1
 
30577
# check layout success:    1
 
30578
# End usability test (inc/partition_check.inc)
 
30579
DROP TABLE t1;
 
30580
CREATE TABLE t1 (
 
30581
f_int1 INTEGER,
 
30582
f_int2 INTEGER,
 
30583
f_char1 CHAR(20),
 
30584
f_char2 CHAR(20),
 
30585
f_charbig VARCHAR(1000)
 
30586
 
 
30587
)
 
30588
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
30589
(PARTITION part_1 VALUES IN (0)
 
30590
(SUBPARTITION sp11, SUBPARTITION sp12),
 
30591
PARTITION part_2 VALUES IN (1)
 
30592
(SUBPARTITION sp21, SUBPARTITION sp22),
 
30593
PARTITION part_3 VALUES IN (2)
 
30594
(SUBPARTITION sp31, SUBPARTITION sp32),
 
30595
PARTITION part_4 VALUES IN (NULL)
 
30596
(SUBPARTITION sp41, SUBPARTITION sp42));
 
30597
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30598
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30599
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
30600
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
30601
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30602
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
30603
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
30604
# Start usability test (inc/partition_check.inc)
 
30605
create_command
 
30606
SHOW CREATE TABLE t1;
 
30607
Table   Create Table
 
30608
t1      CREATE TABLE `t1` (
 
30609
  `f_int1` int(11) DEFAULT NULL,
 
30610
  `f_int2` int(11) DEFAULT NULL,
 
30611
  `f_char1` char(20) DEFAULT NULL,
 
30612
  `f_char2` char(20) DEFAULT NULL,
 
30613
  `f_charbig` varchar(1000) DEFAULT NULL
 
30614
) ENGINE=MyISAM 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 = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
30615
 
 
30616
unified filelist
 
30617
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYD
 
30618
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYI
 
30619
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYD
 
30620
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYI
 
30621
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYD
 
30622
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYI
 
30623
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYD
 
30624
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYI
 
30625
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYD
 
30626
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYI
 
30627
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYD
 
30628
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYI
 
30629
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYD
 
30630
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYI
 
30631
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYD
 
30632
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYI
 
30633
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
30634
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
30635
 
 
30636
# check prerequisites-1 success:    1
 
30637
# check COUNT(*) success:    1
 
30638
# check MIN/MAX(f_int1) success:    1
 
30639
# check MIN/MAX(f_int2) success:    1
 
30640
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30641
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
30642
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
30643
WHERE f_int1 IN (2,3);
 
30644
# check prerequisites-3 success:    1
 
30645
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
30646
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
30647
# check read via f_int1 success: 1
 
30648
# check read via f_int2 success: 1
 
30649
        
 
30650
# check multiple-1 success:     1
 
30651
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
30652
        
 
30653
# check multiple-2 success:     1
 
30654
INSERT INTO t1 SELECT * FROM t0_template
 
30655
WHERE MOD(f_int1,3) = 0;
 
30656
        
 
30657
# check multiple-3 success:     1
 
30658
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
30659
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
30660
AND @max_row_div2 + @max_row_div4;
 
30661
        
 
30662
# check multiple-4 success:     1
 
30663
DELETE FROM t1
 
30664
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
30665
AND @max_row_div2 + @max_row_div4 + @max_row;
 
30666
        
 
30667
# check multiple-5 success:     1
 
30668
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
30669
INSERT INTO t1
 
30670
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30671
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30672
f_charbig = '#SINGLE#';
 
30673
        
 
30674
# check single-1 success:       1
 
30675
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
30676
INSERT INTO t1
 
30677
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
30678
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
30679
f_charbig = '#SINGLE#';
 
30680
        
 
30681
# check single-2 success:       1
 
30682
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
30683
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
30684
UPDATE t1 SET f_int1 = @cur_value2
 
30685
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
30686
        
 
30687
# check single-3 success:       1
 
30688
SET @cur_value1= -1;
 
30689
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
30690
UPDATE t1 SET f_int1 = @cur_value1
 
30691
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
30692
        
 
30693
# check single-4 success:       1
 
30694
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
30695
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
30696
        
 
30697
# check single-5 success:       1
 
30698
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
30699
        
 
30700
# check single-6 success:       1
 
30701
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
30702
        
 
30703
# check single-7 success:       1
 
30704
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
30705
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
30706
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
30707
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
30708
f_charbig = '#NULL#';
 
30709
INSERT INTO t1
 
30710
SET f_int1 = NULL , f_int2 = -@max_row,
 
30711
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
30712
f_charbig = '#NULL#';
 
30713
# check null success:    1
 
30714
        
 
30715
# check null-1 success:         1
 
30716
UPDATE t1 SET f_int1 = -@max_row
 
30717
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30718
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30719
        
 
30720
# check null-2 success:         1
 
30721
UPDATE t1 SET f_int1 = NULL
 
30722
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30723
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30724
        
 
30725
# check null-3 success:         1
 
30726
DELETE FROM t1
 
30727
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
30728
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
30729
        
 
30730
# check null-4 success:         1
 
30731
DELETE FROM t1
 
30732
WHERE f_int1 = 0 AND f_int2 = 0
 
30733
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
30734
AND f_charbig = '#NULL#';
 
30735
SET AUTOCOMMIT= 0;
 
30736
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30737
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30738
FROM t0_template source_tab
 
30739
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30740
        
 
30741
# check transactions-1 success:         1
 
30742
COMMIT WORK;
 
30743
        
 
30744
# check transactions-2 success:         1
 
30745
ROLLBACK WORK;
 
30746
        
 
30747
# check transactions-3 success:         1
 
30748
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30749
COMMIT WORK;
 
30750
ROLLBACK WORK;
 
30751
        
 
30752
# check transactions-4 success:         1
 
30753
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30754
SELECT f_int1, f_int1, '', '', 'was inserted'
 
30755
FROM t0_template source_tab
 
30756
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30757
        
 
30758
# check transactions-5 success:         1
 
30759
ROLLBACK WORK;
 
30760
Warnings:
 
30761
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
30762
        
 
30763
# check transactions-6 success:         1
 
30764
# INFO: Storage engine used for t1 seems to be not transactional.
 
30765
COMMIT;
 
30766
        
 
30767
# check transactions-7 success:         1
 
30768
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30769
COMMIT WORK;
 
30770
SET @@session.sql_mode = 'traditional';
 
30771
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
30772
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
30773
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
30774
'', '', 'was inserted' FROM t0_template
 
30775
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
30776
ERROR 22012: Division by 0
 
30777
COMMIT;
 
30778
        
 
30779
# check transactions-8 success:         1
 
30780
# INFO: Storage engine used for t1 seems to be unable to revert
 
30781
#       changes made by the failing statement.
 
30782
SET @@session.sql_mode = '';
 
30783
SET AUTOCOMMIT= 1;
 
30784
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
30785
COMMIT WORK;
 
30786
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
30787
        
 
30788
# check special-1 success:      1
 
30789
UPDATE t1 SET f_charbig = '';
 
30790
        
 
30791
# check special-2 success:      1
 
30792
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
30793
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30794
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
30795
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30796
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30797
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30798
'just inserted' FROM t0_template
 
30799
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30800
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
30801
BEGIN
 
30802
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30803
f_charbig = 'updated by trigger'
 
30804
      WHERE f_int1 = new.f_int1;
 
30805
END|
 
30806
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30807
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30808
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30809
        
 
30810
# check trigger-1 success:      1
 
30811
DROP TRIGGER trg_1;
 
30812
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30813
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30814
f_charbig = 'just inserted'
 
30815
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30816
DELETE FROM t0_aux
 
30817
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30818
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30819
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30820
'just inserted' FROM t0_template
 
30821
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30822
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
30823
BEGIN
 
30824
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30825
f_charbig = 'updated by trigger'
 
30826
      WHERE f_int1 = new.f_int1;
 
30827
END|
 
30828
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30829
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
30830
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30831
        
 
30832
# check trigger-2 success:      1
 
30833
DROP TRIGGER trg_1;
 
30834
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30835
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30836
f_charbig = 'just inserted'
 
30837
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30838
DELETE FROM t0_aux
 
30839
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30840
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30841
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30842
'just inserted' FROM t0_template
 
30843
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30844
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30845
BEGIN
 
30846
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30847
f_charbig = 'updated by trigger'
 
30848
      WHERE f_int1 = new.f_int1;
 
30849
END|
 
30850
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30851
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30852
        
 
30853
# check trigger-3 success:      1
 
30854
DROP TRIGGER trg_1;
 
30855
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30856
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30857
f_charbig = 'just inserted'
 
30858
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30859
DELETE FROM t0_aux
 
30860
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30861
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30862
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30863
'just inserted' FROM t0_template
 
30864
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30865
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
30866
BEGIN
 
30867
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30868
f_charbig = 'updated by trigger'
 
30869
      WHERE f_int1 = - old.f_int1;
 
30870
END|
 
30871
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30872
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30873
        
 
30874
# check trigger-4 success:      1
 
30875
DROP TRIGGER trg_1;
 
30876
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30877
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30878
f_charbig = 'just inserted'
 
30879
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30880
DELETE FROM t0_aux
 
30881
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30882
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30883
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30884
'just inserted' FROM t0_template
 
30885
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30886
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30887
BEGIN
 
30888
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30889
f_charbig = 'updated by trigger'
 
30890
      WHERE f_int1 = new.f_int1;
 
30891
END|
 
30892
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30893
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30894
        
 
30895
# check trigger-5 success:      1
 
30896
DROP TRIGGER trg_1;
 
30897
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30898
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30899
f_charbig = 'just inserted'
 
30900
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30901
DELETE FROM t0_aux
 
30902
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30903
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30904
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30905
'just inserted' FROM t0_template
 
30906
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30907
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
30908
BEGIN
 
30909
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30910
f_charbig = 'updated by trigger'
 
30911
      WHERE f_int1 = - old.f_int1;
 
30912
END|
 
30913
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
30914
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30915
        
 
30916
# check trigger-6 success:      1
 
30917
DROP TRIGGER trg_1;
 
30918
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30919
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30920
f_charbig = 'just inserted'
 
30921
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30922
DELETE FROM t0_aux
 
30923
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30924
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30925
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30926
'just inserted' FROM t0_template
 
30927
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30928
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
30929
BEGIN
 
30930
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30931
f_charbig = 'updated by trigger'
 
30932
      WHERE f_int1 = - old.f_int1;
 
30933
END|
 
30934
DELETE FROM t0_aux
 
30935
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30936
        
 
30937
# check trigger-7 success:      1
 
30938
DROP TRIGGER trg_1;
 
30939
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30940
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30941
f_charbig = 'just inserted'
 
30942
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30943
DELETE FROM t0_aux
 
30944
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30945
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
30946
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
30947
'just inserted' FROM t0_template
 
30948
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30949
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
30950
BEGIN
 
30951
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
30952
f_charbig = 'updated by trigger'
 
30953
      WHERE f_int1 = - old.f_int1;
 
30954
END|
 
30955
DELETE FROM t0_aux
 
30956
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
30957
        
 
30958
# check trigger-8 success:      1
 
30959
DROP TRIGGER trg_1;
 
30960
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30961
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30962
f_charbig = 'just inserted'
 
30963
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
30964
DELETE FROM t0_aux
 
30965
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30966
DELETE FROM t1
 
30967
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
30968
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30969
BEGIN
 
30970
SET new.f_int1 = old.f_int1 + @max_row,
 
30971
new.f_int2 = old.f_int2 - @max_row,
 
30972
new.f_charbig = '####updated per update trigger####';
 
30973
END|
 
30974
UPDATE t1
 
30975
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30976
f_charbig = '####updated per update statement itself####';
 
30977
        
 
30978
# check trigger-9 success:      1
 
30979
DROP TRIGGER trg_2;
 
30980
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30981
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30982
f_charbig = CONCAT('===',f_char1,'===');
 
30983
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
30984
BEGIN
 
30985
SET new.f_int1 = new.f_int1 + @max_row,
 
30986
new.f_int2 = new.f_int2 - @max_row,
 
30987
new.f_charbig = '####updated per update trigger####';
 
30988
END|
 
30989
UPDATE t1
 
30990
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
30991
f_charbig = '####updated per update statement itself####';
 
30992
        
 
30993
# check trigger-10 success:     1
 
30994
DROP TRIGGER trg_2;
 
30995
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
30996
f_int2 = CAST(f_char1 AS SIGNED INT),
 
30997
f_charbig = CONCAT('===',f_char1,'===');
 
30998
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
30999
BEGIN
 
31000
SET new.f_int1 = @my_max1 + @counter,
 
31001
new.f_int2 = @my_min2 - @counter,
 
31002
new.f_charbig = '####updated per insert trigger####';
 
31003
SET @counter = @counter + 1;
 
31004
END|
 
31005
SET @counter = 1;
 
31006
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31007
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31008
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31009
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31010
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31011
ORDER BY f_int1;
 
31012
DROP TRIGGER trg_3;
 
31013
        
 
31014
# check trigger-11 success:     1
 
31015
DELETE FROM t1
 
31016
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31017
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31018
AND f_charbig = '####updated per insert trigger####';
 
31019
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31020
BEGIN
 
31021
SET new.f_int1 = @my_max1 + @counter,
 
31022
new.f_int2 = @my_min2 - @counter,
 
31023
new.f_charbig = '####updated per insert trigger####';
 
31024
SET @counter = @counter + 1;
 
31025
END|
 
31026
SET @counter = 1;
 
31027
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31028
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
31029
SELECT CAST(f_int1 AS CHAR),
 
31030
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31031
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31032
ORDER BY f_int1;
 
31033
DROP TRIGGER trg_3;
 
31034
        
 
31035
# check trigger-12 success:     1
 
31036
DELETE FROM t1
 
31037
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31038
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31039
AND f_charbig = '####updated per insert trigger####';
 
31040
ANALYZE  TABLE t1;
 
31041
Table   Op      Msg_type        Msg_text
 
31042
test.t1 analyze status  OK
 
31043
CHECK    TABLE t1 EXTENDED;
 
31044
Table   Op      Msg_type        Msg_text
 
31045
test.t1 check   status  OK
 
31046
CHECKSUM TABLE t1 EXTENDED;
 
31047
Table   Checksum
 
31048
test.t1 <some_value>
 
31049
OPTIMIZE TABLE t1;
 
31050
Table   Op      Msg_type        Msg_text
 
31051
test.t1 optimize        status  OK
 
31052
# check layout success:    1
 
31053
REPAIR   TABLE t1 EXTENDED;
 
31054
Table   Op      Msg_type        Msg_text
 
31055
test.t1 repair  status  OK
 
31056
# check layout success:    1
 
31057
TRUNCATE t1;
 
31058
        
 
31059
# check TRUNCATE success:       1
 
31060
# check layout success:    1
 
31061
# End usability test (inc/partition_check.inc)
 
31062
DROP TABLE t1;
 
31063
CREATE TABLE t1 (
 
31064
f_int1 INTEGER,
 
31065
f_int2 INTEGER,
 
31066
f_char1 CHAR(20),
 
31067
f_char2 CHAR(20),
 
31068
f_charbig VARCHAR(1000)
 
31069
 
 
31070
)
 
31071
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
31072
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
31073
(PARTITION part_1 VALUES IN (0),
 
31074
 PARTITION part_2 VALUES IN (1),
 
31075
 PARTITION part_3 VALUES IN (NULL));
 
31076
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31077
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31078
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31079
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
31080
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31081
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31082
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31083
# Start usability test (inc/partition_check.inc)
 
31084
create_command
 
31085
SHOW CREATE TABLE t1;
 
31086
Table   Create Table
 
31087
t1      CREATE TABLE `t1` (
 
31088
  `f_int1` int(11) DEFAULT NULL,
 
31089
  `f_int2` int(11) DEFAULT NULL,
 
31090
  `f_char1` char(20) DEFAULT NULL,
 
31091
  `f_char2` char(20) DEFAULT NULL,
 
31092
  `f_charbig` varchar(1000) DEFAULT NULL
 
31093
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */
 
31094
 
 
31095
unified filelist
 
31096
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
31097
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
31098
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
31099
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
31100
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYD
 
31101
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYI
 
31102
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
31103
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
31104
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
31105
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
31106
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYD
 
31107
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYI
 
31108
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
31109
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
31110
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
31111
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
31112
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYD
 
31113
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYI
 
31114
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
31115
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
31116
 
 
31117
# check prerequisites-1 success:    1
 
31118
# check COUNT(*) success:    1
 
31119
# check MIN/MAX(f_int1) success:    1
 
31120
# check MIN/MAX(f_int2) success:    1
 
31121
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31122
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31123
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
31124
WHERE f_int1 IN (2,3);
 
31125
# check prerequisites-3 success:    1
 
31126
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
31127
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
31128
# check read via f_int1 success: 1
 
31129
# check read via f_int2 success: 1
 
31130
        
 
31131
# check multiple-1 success:     1
 
31132
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
31133
        
 
31134
# check multiple-2 success:     1
 
31135
INSERT INTO t1 SELECT * FROM t0_template
 
31136
WHERE MOD(f_int1,3) = 0;
 
31137
        
 
31138
# check multiple-3 success:     1
 
31139
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
31140
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
31141
AND @max_row_div2 + @max_row_div4;
 
31142
        
 
31143
# check multiple-4 success:     1
 
31144
DELETE FROM t1
 
31145
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
31146
AND @max_row_div2 + @max_row_div4 + @max_row;
 
31147
        
 
31148
# check multiple-5 success:     1
 
31149
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
31150
INSERT INTO t1
 
31151
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31152
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31153
f_charbig = '#SINGLE#';
 
31154
        
 
31155
# check single-1 success:       1
 
31156
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
31157
INSERT INTO t1
 
31158
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31159
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31160
f_charbig = '#SINGLE#';
 
31161
        
 
31162
# check single-2 success:       1
 
31163
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
31164
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
31165
UPDATE t1 SET f_int1 = @cur_value2
 
31166
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
31167
        
 
31168
# check single-3 success:       1
 
31169
SET @cur_value1= -1;
 
31170
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
31171
UPDATE t1 SET f_int1 = @cur_value1
 
31172
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
31173
        
 
31174
# check single-4 success:       1
 
31175
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
31176
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
31177
        
 
31178
# check single-5 success:       1
 
31179
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
31180
        
 
31181
# check single-6 success:       1
 
31182
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
31183
        
 
31184
# check single-7 success:       1
 
31185
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
31186
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
31187
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
31188
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
31189
f_charbig = '#NULL#';
 
31190
INSERT INTO t1
 
31191
SET f_int1 = NULL , f_int2 = -@max_row,
 
31192
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
31193
f_charbig = '#NULL#';
 
31194
# check null success:    1
 
31195
        
 
31196
# check null-1 success:         1
 
31197
UPDATE t1 SET f_int1 = -@max_row
 
31198
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31199
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31200
        
 
31201
# check null-2 success:         1
 
31202
UPDATE t1 SET f_int1 = NULL
 
31203
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31204
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31205
        
 
31206
# check null-3 success:         1
 
31207
DELETE FROM t1
 
31208
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31209
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31210
        
 
31211
# check null-4 success:         1
 
31212
DELETE FROM t1
 
31213
WHERE f_int1 = 0 AND f_int2 = 0
 
31214
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
31215
AND f_charbig = '#NULL#';
 
31216
SET AUTOCOMMIT= 0;
 
31217
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31218
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31219
FROM t0_template source_tab
 
31220
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31221
        
 
31222
# check transactions-1 success:         1
 
31223
COMMIT WORK;
 
31224
        
 
31225
# check transactions-2 success:         1
 
31226
ROLLBACK WORK;
 
31227
        
 
31228
# check transactions-3 success:         1
 
31229
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31230
COMMIT WORK;
 
31231
ROLLBACK WORK;
 
31232
        
 
31233
# check transactions-4 success:         1
 
31234
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31235
SELECT f_int1, f_int1, '', '', 'was inserted'
 
31236
FROM t0_template source_tab
 
31237
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31238
        
 
31239
# check transactions-5 success:         1
 
31240
ROLLBACK WORK;
 
31241
Warnings:
 
31242
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
31243
        
 
31244
# check transactions-6 success:         1
 
31245
# INFO: Storage engine used for t1 seems to be not transactional.
 
31246
COMMIT;
 
31247
        
 
31248
# check transactions-7 success:         1
 
31249
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31250
COMMIT WORK;
 
31251
SET @@session.sql_mode = 'traditional';
 
31252
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
31253
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31254
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
31255
'', '', 'was inserted' FROM t0_template
 
31256
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
31257
ERROR 22012: Division by 0
 
31258
COMMIT;
 
31259
        
 
31260
# check transactions-8 success:         1
 
31261
# INFO: Storage engine used for t1 seems to be unable to revert
 
31262
#       changes made by the failing statement.
 
31263
SET @@session.sql_mode = '';
 
31264
SET AUTOCOMMIT= 1;
 
31265
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
31266
COMMIT WORK;
 
31267
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
31268
        
 
31269
# check special-1 success:      1
 
31270
UPDATE t1 SET f_charbig = '';
 
31271
        
 
31272
# check special-2 success:      1
 
31273
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
31274
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31275
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
31276
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31277
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31278
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31279
'just inserted' FROM t0_template
 
31280
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31281
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
31282
BEGIN
 
31283
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31284
f_charbig = 'updated by trigger'
 
31285
      WHERE f_int1 = new.f_int1;
 
31286
END|
 
31287
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31288
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31289
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31290
        
 
31291
# check trigger-1 success:      1
 
31292
DROP TRIGGER trg_1;
 
31293
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31294
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31295
f_charbig = 'just inserted'
 
31296
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31297
DELETE FROM t0_aux
 
31298
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31299
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31300
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31301
'just inserted' FROM t0_template
 
31302
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31303
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
31304
BEGIN
 
31305
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31306
f_charbig = 'updated by trigger'
 
31307
      WHERE f_int1 = new.f_int1;
 
31308
END|
 
31309
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31310
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
31311
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31312
        
 
31313
# check trigger-2 success:      1
 
31314
DROP TRIGGER trg_1;
 
31315
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31316
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31317
f_charbig = 'just inserted'
 
31318
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31319
DELETE FROM t0_aux
 
31320
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31321
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31322
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31323
'just inserted' FROM t0_template
 
31324
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31325
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31326
BEGIN
 
31327
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31328
f_charbig = 'updated by trigger'
 
31329
      WHERE f_int1 = new.f_int1;
 
31330
END|
 
31331
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31332
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31333
        
 
31334
# check trigger-3 success:      1
 
31335
DROP TRIGGER trg_1;
 
31336
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31337
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31338
f_charbig = 'just inserted'
 
31339
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31340
DELETE FROM t0_aux
 
31341
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31342
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31343
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31344
'just inserted' FROM t0_template
 
31345
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31346
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
31347
BEGIN
 
31348
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31349
f_charbig = 'updated by trigger'
 
31350
      WHERE f_int1 = - old.f_int1;
 
31351
END|
 
31352
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31353
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31354
        
 
31355
# check trigger-4 success:      1
 
31356
DROP TRIGGER trg_1;
 
31357
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31358
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31359
f_charbig = 'just inserted'
 
31360
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31361
DELETE FROM t0_aux
 
31362
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31363
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31364
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31365
'just inserted' FROM t0_template
 
31366
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31367
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31368
BEGIN
 
31369
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31370
f_charbig = 'updated by trigger'
 
31371
      WHERE f_int1 = new.f_int1;
 
31372
END|
 
31373
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31374
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31375
        
 
31376
# check trigger-5 success:      1
 
31377
DROP TRIGGER trg_1;
 
31378
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31379
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31380
f_charbig = 'just inserted'
 
31381
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31382
DELETE FROM t0_aux
 
31383
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31384
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31385
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31386
'just inserted' FROM t0_template
 
31387
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31388
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
31389
BEGIN
 
31390
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31391
f_charbig = 'updated by trigger'
 
31392
      WHERE f_int1 = - old.f_int1;
 
31393
END|
 
31394
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
31395
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31396
        
 
31397
# check trigger-6 success:      1
 
31398
DROP TRIGGER trg_1;
 
31399
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31400
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31401
f_charbig = 'just inserted'
 
31402
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31403
DELETE FROM t0_aux
 
31404
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31405
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31406
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31407
'just inserted' FROM t0_template
 
31408
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31409
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
31410
BEGIN
 
31411
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31412
f_charbig = 'updated by trigger'
 
31413
      WHERE f_int1 = - old.f_int1;
 
31414
END|
 
31415
DELETE FROM t0_aux
 
31416
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31417
        
 
31418
# check trigger-7 success:      1
 
31419
DROP TRIGGER trg_1;
 
31420
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31421
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31422
f_charbig = 'just inserted'
 
31423
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31424
DELETE FROM t0_aux
 
31425
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31426
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31427
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
31428
'just inserted' FROM t0_template
 
31429
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31430
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
31431
BEGIN
 
31432
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
31433
f_charbig = 'updated by trigger'
 
31434
      WHERE f_int1 = - old.f_int1;
 
31435
END|
 
31436
DELETE FROM t0_aux
 
31437
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
31438
        
 
31439
# check trigger-8 success:      1
 
31440
DROP TRIGGER trg_1;
 
31441
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31442
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31443
f_charbig = 'just inserted'
 
31444
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
31445
DELETE FROM t0_aux
 
31446
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31447
DELETE FROM t1
 
31448
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
31449
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31450
BEGIN
 
31451
SET new.f_int1 = old.f_int1 + @max_row,
 
31452
new.f_int2 = old.f_int2 - @max_row,
 
31453
new.f_charbig = '####updated per update trigger####';
 
31454
END|
 
31455
UPDATE t1
 
31456
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31457
f_charbig = '####updated per update statement itself####';
 
31458
        
 
31459
# check trigger-9 success:      1
 
31460
DROP TRIGGER trg_2;
 
31461
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31462
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31463
f_charbig = CONCAT('===',f_char1,'===');
 
31464
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
31465
BEGIN
 
31466
SET new.f_int1 = new.f_int1 + @max_row,
 
31467
new.f_int2 = new.f_int2 - @max_row,
 
31468
new.f_charbig = '####updated per update trigger####';
 
31469
END|
 
31470
UPDATE t1
 
31471
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
31472
f_charbig = '####updated per update statement itself####';
 
31473
        
 
31474
# check trigger-10 success:     1
 
31475
DROP TRIGGER trg_2;
 
31476
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
31477
f_int2 = CAST(f_char1 AS SIGNED INT),
 
31478
f_charbig = CONCAT('===',f_char1,'===');
 
31479
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31480
BEGIN
 
31481
SET new.f_int1 = @my_max1 + @counter,
 
31482
new.f_int2 = @my_min2 - @counter,
 
31483
new.f_charbig = '####updated per insert trigger####';
 
31484
SET @counter = @counter + 1;
 
31485
END|
 
31486
SET @counter = 1;
 
31487
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31488
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31489
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31490
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31491
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31492
ORDER BY f_int1;
 
31493
DROP TRIGGER trg_3;
 
31494
        
 
31495
# check trigger-11 success:     1
 
31496
DELETE FROM t1
 
31497
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31498
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31499
AND f_charbig = '####updated per insert trigger####';
 
31500
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
31501
BEGIN
 
31502
SET new.f_int1 = @my_max1 + @counter,
 
31503
new.f_int2 = @my_min2 - @counter,
 
31504
new.f_charbig = '####updated per insert trigger####';
 
31505
SET @counter = @counter + 1;
 
31506
END|
 
31507
SET @counter = 1;
 
31508
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
31509
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
31510
SELECT CAST(f_int1 AS CHAR),
 
31511
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
31512
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
31513
ORDER BY f_int1;
 
31514
DROP TRIGGER trg_3;
 
31515
        
 
31516
# check trigger-12 success:     1
 
31517
DELETE FROM t1
 
31518
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
31519
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
31520
AND f_charbig = '####updated per insert trigger####';
 
31521
ANALYZE  TABLE t1;
 
31522
Table   Op      Msg_type        Msg_text
 
31523
test.t1 analyze status  OK
 
31524
CHECK    TABLE t1 EXTENDED;
 
31525
Table   Op      Msg_type        Msg_text
 
31526
test.t1 check   status  OK
 
31527
CHECKSUM TABLE t1 EXTENDED;
 
31528
Table   Checksum
 
31529
test.t1 <some_value>
 
31530
OPTIMIZE TABLE t1;
 
31531
Table   Op      Msg_type        Msg_text
 
31532
test.t1 optimize        status  OK
 
31533
# check layout success:    1
 
31534
REPAIR   TABLE t1 EXTENDED;
 
31535
Table   Op      Msg_type        Msg_text
 
31536
test.t1 repair  status  OK
 
31537
# check layout success:    1
 
31538
TRUNCATE t1;
 
31539
        
 
31540
# check TRUNCATE success:       1
 
31541
# check layout success:    1
 
31542
# End usability test (inc/partition_check.inc)
 
31543
DROP TABLE t1;
 
31544
#  4.3 ALTER ... REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
31545
DROP TABLE IF EXISTS t1;
 
31546
CREATE TABLE t1 (
 
31547
f_int1 INTEGER,
 
31548
f_int2 INTEGER,
 
31549
f_char1 CHAR(20),
 
31550
f_char2 CHAR(20),
 
31551
f_charbig VARCHAR(1000)
 
31552
 
 
31553
)
 
31554
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
31555
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31556
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31557
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31558
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
31559
ERROR HY000: Error in list of partitions to REBUILD
 
31560
DROP TABLE t1;
 
31561
CREATE TABLE t1 (
 
31562
f_int1 INTEGER,
 
31563
f_int2 INTEGER,
 
31564
f_char1 CHAR(20),
 
31565
f_char2 CHAR(20),
 
31566
f_charbig VARCHAR(1000)
 
31567
 
 
31568
)
 
31569
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
31570
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31571
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31572
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31573
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
31574
ERROR HY000: Error in list of partitions to REBUILD
 
31575
DROP TABLE t1;
 
31576
CREATE TABLE t1 (
 
31577
f_int1 INTEGER,
 
31578
f_int2 INTEGER,
 
31579
f_char1 CHAR(20),
 
31580
f_char2 CHAR(20),
 
31581
f_charbig VARCHAR(1000)
 
31582
 
 
31583
)
 
31584
PARTITION BY LIST(MOD(f_int1,4))
 
31585
(PARTITION part_3 VALUES IN (-3),
 
31586
PARTITION part_2 VALUES IN (-2),
 
31587
PARTITION part_1 VALUES IN (-1),
 
31588
PARTITION part_N VALUES IN (NULL),
 
31589
PARTITION part0 VALUES IN (0),
 
31590
PARTITION part1 VALUES IN (1),
 
31591
PARTITION part2 VALUES IN (2),
 
31592
PARTITION part3 VALUES IN (3));
 
31593
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31594
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31595
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31596
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
31597
ERROR HY000: Error in list of partitions to REBUILD
 
31598
DROP TABLE t1;
 
31599
CREATE TABLE t1 (
 
31600
f_int1 INTEGER,
 
31601
f_int2 INTEGER,
 
31602
f_char1 CHAR(20),
 
31603
f_char2 CHAR(20),
 
31604
f_charbig VARCHAR(1000)
 
31605
 
 
31606
)
 
31607
PARTITION BY RANGE(f_int1)
 
31608
(PARTITION parta VALUES LESS THAN (0),
 
31609
PARTITION part_1 VALUES LESS THAN (5),
 
31610
PARTITION part_2 VALUES LESS THAN (10),
 
31611
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
31612
PARTITION part_4 VALUES LESS THAN (20),
 
31613
PARTITION part_5 VALUES LESS THAN (2147483646));
 
31614
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31615
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31616
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31617
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
31618
ERROR HY000: Error in list of partitions to REBUILD
 
31619
DROP TABLE t1;
 
31620
CREATE TABLE t1 (
 
31621
f_int1 INTEGER,
 
31622
f_int2 INTEGER,
 
31623
f_char1 CHAR(20),
 
31624
f_char2 CHAR(20),
 
31625
f_charbig VARCHAR(1000)
 
31626
 
 
31627
)
 
31628
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
31629
(PARTITION part_1 VALUES LESS THAN (0),
 
31630
PARTITION part_2 VALUES LESS THAN (5),
 
31631
PARTITION part_3 VALUES LESS THAN (10),
 
31632
PARTITION part_4 VALUES LESS THAN (2147483646));
 
31633
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31634
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31635
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31636
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
31637
ERROR HY000: Error in list of partitions to REBUILD
 
31638
DROP TABLE t1;
 
31639
CREATE TABLE t1 (
 
31640
f_int1 INTEGER,
 
31641
f_int2 INTEGER,
 
31642
f_char1 CHAR(20),
 
31643
f_char2 CHAR(20),
 
31644
f_charbig VARCHAR(1000)
 
31645
 
 
31646
)
 
31647
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
31648
(PARTITION part_1 VALUES LESS THAN (0)
 
31649
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
31650
PARTITION part_2 VALUES LESS THAN (5)
 
31651
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
31652
PARTITION part_3 VALUES LESS THAN (10)
 
31653
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
31654
PARTITION part_4 VALUES LESS THAN (2147483646)
 
31655
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
31656
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31657
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31658
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31659
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
31660
ERROR HY000: Error in list of partitions to REBUILD
 
31661
DROP TABLE t1;
 
31662
CREATE TABLE t1 (
 
31663
f_int1 INTEGER,
 
31664
f_int2 INTEGER,
 
31665
f_char1 CHAR(20),
 
31666
f_char2 CHAR(20),
 
31667
f_charbig VARCHAR(1000)
 
31668
 
 
31669
)
 
31670
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
31671
(PARTITION part_1 VALUES IN (0)
 
31672
(SUBPARTITION sp11, SUBPARTITION sp12),
 
31673
PARTITION part_2 VALUES IN (1)
 
31674
(SUBPARTITION sp21, SUBPARTITION sp22),
 
31675
PARTITION part_3 VALUES IN (2)
 
31676
(SUBPARTITION sp31, SUBPARTITION sp32),
 
31677
PARTITION part_4 VALUES IN (NULL)
 
31678
(SUBPARTITION sp41, SUBPARTITION sp42));
 
31679
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31680
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31681
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31682
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
31683
ERROR HY000: Error in list of partitions to REBUILD
 
31684
DROP TABLE t1;
 
31685
CREATE TABLE t1 (
 
31686
f_int1 INTEGER,
 
31687
f_int2 INTEGER,
 
31688
f_char1 CHAR(20),
 
31689
f_char2 CHAR(20),
 
31690
f_charbig VARCHAR(1000)
 
31691
 
 
31692
)
 
31693
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
31694
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
31695
(PARTITION part_1 VALUES IN (0),
 
31696
 PARTITION part_2 VALUES IN (1),
 
31697
 PARTITION part_3 VALUES IN (NULL));
 
31698
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31699
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31700
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31701
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
31702
ERROR HY000: Error in list of partitions to REBUILD
 
31703
DROP TABLE t1;
 
31704
#  4.4 ALTER ... REBUILD PARTITION part_1,part_1,part_1;
 
31705
DROP TABLE IF EXISTS t1;
 
31706
CREATE TABLE t1 (
 
31707
f_int1 INTEGER,
 
31708
f_int2 INTEGER,
 
31709
f_char1 CHAR(20),
 
31710
f_char2 CHAR(20),
 
31711
f_charbig VARCHAR(1000)
 
31712
 
 
31713
)
 
31714
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
31715
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31716
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31717
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31718
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
31719
ERROR HY000: Error in list of partitions to REBUILD
 
31720
DROP TABLE t1;
 
31721
CREATE TABLE t1 (
 
31722
f_int1 INTEGER,
 
31723
f_int2 INTEGER,
 
31724
f_char1 CHAR(20),
 
31725
f_char2 CHAR(20),
 
31726
f_charbig VARCHAR(1000)
 
31727
 
 
31728
)
 
31729
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
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 1 AND @max_row_div2 - 1;
 
31733
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
31734
ERROR HY000: Error in list of partitions to REBUILD
 
31735
DROP TABLE t1;
 
31736
CREATE TABLE t1 (
 
31737
f_int1 INTEGER,
 
31738
f_int2 INTEGER,
 
31739
f_char1 CHAR(20),
 
31740
f_char2 CHAR(20),
 
31741
f_charbig VARCHAR(1000)
 
31742
 
 
31743
)
 
31744
PARTITION BY LIST(MOD(f_int1,4))
 
31745
(PARTITION part_3 VALUES IN (-3),
 
31746
PARTITION part_2 VALUES IN (-2),
 
31747
PARTITION part_1 VALUES IN (-1),
 
31748
PARTITION part_N VALUES IN (NULL),
 
31749
PARTITION part0 VALUES IN (0),
 
31750
PARTITION part1 VALUES IN (1),
 
31751
PARTITION part2 VALUES IN (2),
 
31752
PARTITION part3 VALUES IN (3));
 
31753
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31754
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31755
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31756
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
31757
ERROR HY000: Error in list of partitions to REBUILD
 
31758
DROP TABLE t1;
 
31759
CREATE TABLE t1 (
 
31760
f_int1 INTEGER,
 
31761
f_int2 INTEGER,
 
31762
f_char1 CHAR(20),
 
31763
f_char2 CHAR(20),
 
31764
f_charbig VARCHAR(1000)
 
31765
 
 
31766
)
 
31767
PARTITION BY RANGE(f_int1)
 
31768
(PARTITION parta VALUES LESS THAN (0),
 
31769
PARTITION part_1 VALUES LESS THAN (5),
 
31770
PARTITION part_2 VALUES LESS THAN (10),
 
31771
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
31772
PARTITION part_4 VALUES LESS THAN (20),
 
31773
PARTITION part_5 VALUES LESS THAN (2147483646));
 
31774
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31775
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31776
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31777
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
31778
ERROR HY000: Error in list of partitions to REBUILD
 
31779
DROP TABLE t1;
 
31780
CREATE TABLE t1 (
 
31781
f_int1 INTEGER,
 
31782
f_int2 INTEGER,
 
31783
f_char1 CHAR(20),
 
31784
f_char2 CHAR(20),
 
31785
f_charbig VARCHAR(1000)
 
31786
 
 
31787
)
 
31788
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
31789
(PARTITION part_1 VALUES LESS THAN (0),
 
31790
PARTITION part_2 VALUES LESS THAN (5),
 
31791
PARTITION part_3 VALUES LESS THAN (10),
 
31792
PARTITION part_4 VALUES LESS THAN (2147483646));
 
31793
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31794
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31795
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31796
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
31797
ERROR HY000: Error in list of partitions to REBUILD
 
31798
DROP TABLE t1;
 
31799
CREATE TABLE t1 (
 
31800
f_int1 INTEGER,
 
31801
f_int2 INTEGER,
 
31802
f_char1 CHAR(20),
 
31803
f_char2 CHAR(20),
 
31804
f_charbig VARCHAR(1000)
 
31805
 
 
31806
)
 
31807
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
31808
(PARTITION part_1 VALUES LESS THAN (0)
 
31809
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
31810
PARTITION part_2 VALUES LESS THAN (5)
 
31811
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
31812
PARTITION part_3 VALUES LESS THAN (10)
 
31813
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
31814
PARTITION part_4 VALUES LESS THAN (2147483646)
 
31815
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
31816
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31817
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31818
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31819
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
31820
ERROR HY000: Error in list of partitions to REBUILD
 
31821
DROP TABLE t1;
 
31822
CREATE TABLE t1 (
 
31823
f_int1 INTEGER,
 
31824
f_int2 INTEGER,
 
31825
f_char1 CHAR(20),
 
31826
f_char2 CHAR(20),
 
31827
f_charbig VARCHAR(1000)
 
31828
 
 
31829
)
 
31830
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
31831
(PARTITION part_1 VALUES IN (0)
 
31832
(SUBPARTITION sp11, SUBPARTITION sp12),
 
31833
PARTITION part_2 VALUES IN (1)
 
31834
(SUBPARTITION sp21, SUBPARTITION sp22),
 
31835
PARTITION part_3 VALUES IN (2)
 
31836
(SUBPARTITION sp31, SUBPARTITION sp32),
 
31837
PARTITION part_4 VALUES IN (NULL)
 
31838
(SUBPARTITION sp41, SUBPARTITION sp42));
 
31839
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31840
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31841
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31842
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
31843
ERROR HY000: Error in list of partitions to REBUILD
 
31844
DROP TABLE t1;
 
31845
CREATE TABLE t1 (
 
31846
f_int1 INTEGER,
 
31847
f_int2 INTEGER,
 
31848
f_char1 CHAR(20),
 
31849
f_char2 CHAR(20),
 
31850
f_charbig VARCHAR(1000)
 
31851
 
 
31852
)
 
31853
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
31854
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
31855
(PARTITION part_1 VALUES IN (0),
 
31856
 PARTITION part_2 VALUES IN (1),
 
31857
 PARTITION part_3 VALUES IN (NULL));
 
31858
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31859
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31860
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31861
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
31862
ERROR HY000: Error in list of partitions to REBUILD
 
31863
DROP TABLE t1;
 
31864
#------------------------------------------------------------------------
 
31865
#  5   ALTER ... REPAIR PARTITION
 
31866
#------------------------------------------------------------------------
 
31867
#  5.1 ALTER ... REBUILD PARTITION part_1;
 
31868
DROP TABLE IF EXISTS t1;
 
31869
CREATE TABLE t1 (
 
31870
f_int1 INTEGER,
 
31871
f_int2 INTEGER,
 
31872
f_char1 CHAR(20),
 
31873
f_char2 CHAR(20),
 
31874
f_charbig VARCHAR(1000)
 
31875
 
 
31876
)
 
31877
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
31878
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31879
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31880
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
31881
ALTER TABLE t1 REBUILD PARTITION part_1;
 
31882
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
31883
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
31884
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
31885
# Start usability test (inc/partition_check.inc)
 
31886
create_command
 
31887
SHOW CREATE TABLE t1;
 
31888
Table   Create Table
 
31889
t1      CREATE TABLE `t1` (
 
31890
  `f_int1` int(11) DEFAULT NULL,
 
31891
  `f_int2` int(11) DEFAULT NULL,
 
31892
  `f_char1` char(20) DEFAULT NULL,
 
31893
  `f_char2` char(20) DEFAULT NULL,
 
31894
  `f_charbig` varchar(1000) DEFAULT NULL
 
31895
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */
 
31896
 
 
31897
unified filelist
 
31898
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
31899
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
31900
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
31901
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
31902
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
31903
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
31904
 
 
31905
# check prerequisites-1 success:    1
 
31906
# check COUNT(*) success:    1
 
31907
# check MIN/MAX(f_int1) success:    1
 
31908
# check MIN/MAX(f_int2) success:    1
 
31909
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
31910
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
31911
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
31912
WHERE f_int1 IN (2,3);
 
31913
# check prerequisites-3 success:    1
 
31914
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
31915
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
31916
# check read via f_int1 success: 1
 
31917
# check read via f_int2 success: 1
 
31918
        
 
31919
# check multiple-1 success:     1
 
31920
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
31921
        
 
31922
# check multiple-2 success:     1
 
31923
INSERT INTO t1 SELECT * FROM t0_template
 
31924
WHERE MOD(f_int1,3) = 0;
 
31925
        
 
31926
# check multiple-3 success:     1
 
31927
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
31928
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
31929
AND @max_row_div2 + @max_row_div4;
 
31930
        
 
31931
# check multiple-4 success:     1
 
31932
DELETE FROM t1
 
31933
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
31934
AND @max_row_div2 + @max_row_div4 + @max_row;
 
31935
        
 
31936
# check multiple-5 success:     1
 
31937
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
31938
INSERT INTO t1
 
31939
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31940
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31941
f_charbig = '#SINGLE#';
 
31942
        
 
31943
# check single-1 success:       1
 
31944
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
31945
INSERT INTO t1
 
31946
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
31947
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
31948
f_charbig = '#SINGLE#';
 
31949
        
 
31950
# check single-2 success:       1
 
31951
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
31952
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
31953
UPDATE t1 SET f_int1 = @cur_value2
 
31954
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
31955
        
 
31956
# check single-3 success:       1
 
31957
SET @cur_value1= -1;
 
31958
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
31959
UPDATE t1 SET f_int1 = @cur_value1
 
31960
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
31961
        
 
31962
# check single-4 success:       1
 
31963
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
31964
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
31965
        
 
31966
# check single-5 success:       1
 
31967
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
31968
        
 
31969
# check single-6 success:       1
 
31970
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
31971
        
 
31972
# check single-7 success:       1
 
31973
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
31974
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
31975
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
31976
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
31977
f_charbig = '#NULL#';
 
31978
INSERT INTO t1
 
31979
SET f_int1 = NULL , f_int2 = -@max_row,
 
31980
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
31981
f_charbig = '#NULL#';
 
31982
# check null success:    1
 
31983
        
 
31984
# check null-1 success:         1
 
31985
UPDATE t1 SET f_int1 = -@max_row
 
31986
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31987
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31988
        
 
31989
# check null-2 success:         1
 
31990
UPDATE t1 SET f_int1 = NULL
 
31991
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31992
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31993
        
 
31994
# check null-3 success:         1
 
31995
DELETE FROM t1
 
31996
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
31997
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
31998
        
 
31999
# check null-4 success:         1
 
32000
DELETE FROM t1
 
32001
WHERE f_int1 = 0 AND f_int2 = 0
 
32002
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
32003
AND f_charbig = '#NULL#';
 
32004
SET AUTOCOMMIT= 0;
 
32005
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32006
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32007
FROM t0_template source_tab
 
32008
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32009
        
 
32010
# check transactions-1 success:         1
 
32011
COMMIT WORK;
 
32012
        
 
32013
# check transactions-2 success:         1
 
32014
ROLLBACK WORK;
 
32015
        
 
32016
# check transactions-3 success:         1
 
32017
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32018
COMMIT WORK;
 
32019
ROLLBACK WORK;
 
32020
        
 
32021
# check transactions-4 success:         1
 
32022
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32023
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32024
FROM t0_template source_tab
 
32025
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32026
        
 
32027
# check transactions-5 success:         1
 
32028
ROLLBACK WORK;
 
32029
Warnings:
 
32030
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
32031
        
 
32032
# check transactions-6 success:         1
 
32033
# INFO: Storage engine used for t1 seems to be not transactional.
 
32034
COMMIT;
 
32035
        
 
32036
# check transactions-7 success:         1
 
32037
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32038
COMMIT WORK;
 
32039
SET @@session.sql_mode = 'traditional';
 
32040
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
32041
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32042
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
32043
'', '', 'was inserted' FROM t0_template
 
32044
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32045
ERROR 22012: Division by 0
 
32046
COMMIT;
 
32047
        
 
32048
# check transactions-8 success:         1
 
32049
# INFO: Storage engine used for t1 seems to be unable to revert
 
32050
#       changes made by the failing statement.
 
32051
SET @@session.sql_mode = '';
 
32052
SET AUTOCOMMIT= 1;
 
32053
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32054
COMMIT WORK;
 
32055
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
32056
        
 
32057
# check special-1 success:      1
 
32058
UPDATE t1 SET f_charbig = '';
 
32059
        
 
32060
# check special-2 success:      1
 
32061
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
32062
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32063
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
32064
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32065
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32066
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32067
'just inserted' FROM t0_template
 
32068
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32069
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
32070
BEGIN
 
32071
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32072
f_charbig = 'updated by trigger'
 
32073
      WHERE f_int1 = new.f_int1;
 
32074
END|
 
32075
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32076
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32077
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32078
        
 
32079
# check trigger-1 success:      1
 
32080
DROP TRIGGER trg_1;
 
32081
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32082
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32083
f_charbig = 'just inserted'
 
32084
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32085
DELETE FROM t0_aux
 
32086
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32087
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32088
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32089
'just inserted' FROM t0_template
 
32090
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32091
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
32092
BEGIN
 
32093
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32094
f_charbig = 'updated by trigger'
 
32095
      WHERE f_int1 = new.f_int1;
 
32096
END|
 
32097
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32098
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32099
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32100
        
 
32101
# check trigger-2 success:      1
 
32102
DROP TRIGGER trg_1;
 
32103
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32104
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32105
f_charbig = 'just inserted'
 
32106
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32107
DELETE FROM t0_aux
 
32108
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32109
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32110
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32111
'just inserted' FROM t0_template
 
32112
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32113
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32114
BEGIN
 
32115
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32116
f_charbig = 'updated by trigger'
 
32117
      WHERE f_int1 = new.f_int1;
 
32118
END|
 
32119
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32120
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32121
        
 
32122
# check trigger-3 success:      1
 
32123
DROP TRIGGER trg_1;
 
32124
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32125
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32126
f_charbig = 'just inserted'
 
32127
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32128
DELETE FROM t0_aux
 
32129
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32130
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32131
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32132
'just inserted' FROM t0_template
 
32133
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32134
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32135
BEGIN
 
32136
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32137
f_charbig = 'updated by trigger'
 
32138
      WHERE f_int1 = - old.f_int1;
 
32139
END|
 
32140
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32141
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32142
        
 
32143
# check trigger-4 success:      1
 
32144
DROP TRIGGER trg_1;
 
32145
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32146
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32147
f_charbig = 'just inserted'
 
32148
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32149
DELETE FROM t0_aux
 
32150
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32151
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32152
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32153
'just inserted' FROM t0_template
 
32154
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32155
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32156
BEGIN
 
32157
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32158
f_charbig = 'updated by trigger'
 
32159
      WHERE f_int1 = new.f_int1;
 
32160
END|
 
32161
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32162
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32163
        
 
32164
# check trigger-5 success:      1
 
32165
DROP TRIGGER trg_1;
 
32166
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32167
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32168
f_charbig = 'just inserted'
 
32169
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32170
DELETE FROM t0_aux
 
32171
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32172
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32173
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32174
'just inserted' FROM t0_template
 
32175
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32176
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32177
BEGIN
 
32178
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32179
f_charbig = 'updated by trigger'
 
32180
      WHERE f_int1 = - old.f_int1;
 
32181
END|
 
32182
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32183
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32184
        
 
32185
# check trigger-6 success:      1
 
32186
DROP TRIGGER trg_1;
 
32187
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32188
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32189
f_charbig = 'just inserted'
 
32190
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32191
DELETE FROM t0_aux
 
32192
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32193
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32194
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32195
'just inserted' FROM t0_template
 
32196
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32197
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
32198
BEGIN
 
32199
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32200
f_charbig = 'updated by trigger'
 
32201
      WHERE f_int1 = - old.f_int1;
 
32202
END|
 
32203
DELETE FROM t0_aux
 
32204
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32205
        
 
32206
# check trigger-7 success:      1
 
32207
DROP TRIGGER trg_1;
 
32208
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32209
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32210
f_charbig = 'just inserted'
 
32211
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32212
DELETE FROM t0_aux
 
32213
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32214
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32215
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32216
'just inserted' FROM t0_template
 
32217
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32218
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
32219
BEGIN
 
32220
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32221
f_charbig = 'updated by trigger'
 
32222
      WHERE f_int1 = - old.f_int1;
 
32223
END|
 
32224
DELETE FROM t0_aux
 
32225
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32226
        
 
32227
# check trigger-8 success:      1
 
32228
DROP TRIGGER trg_1;
 
32229
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32230
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32231
f_charbig = 'just inserted'
 
32232
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32233
DELETE FROM t0_aux
 
32234
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32235
DELETE FROM t1
 
32236
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32237
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32238
BEGIN
 
32239
SET new.f_int1 = old.f_int1 + @max_row,
 
32240
new.f_int2 = old.f_int2 - @max_row,
 
32241
new.f_charbig = '####updated per update trigger####';
 
32242
END|
 
32243
UPDATE t1
 
32244
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32245
f_charbig = '####updated per update statement itself####';
 
32246
        
 
32247
# check trigger-9 success:      1
 
32248
DROP TRIGGER trg_2;
 
32249
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32250
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32251
f_charbig = CONCAT('===',f_char1,'===');
 
32252
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32253
BEGIN
 
32254
SET new.f_int1 = new.f_int1 + @max_row,
 
32255
new.f_int2 = new.f_int2 - @max_row,
 
32256
new.f_charbig = '####updated per update trigger####';
 
32257
END|
 
32258
UPDATE t1
 
32259
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32260
f_charbig = '####updated per update statement itself####';
 
32261
        
 
32262
# check trigger-10 success:     1
 
32263
DROP TRIGGER trg_2;
 
32264
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32265
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32266
f_charbig = CONCAT('===',f_char1,'===');
 
32267
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32268
BEGIN
 
32269
SET new.f_int1 = @my_max1 + @counter,
 
32270
new.f_int2 = @my_min2 - @counter,
 
32271
new.f_charbig = '####updated per insert trigger####';
 
32272
SET @counter = @counter + 1;
 
32273
END|
 
32274
SET @counter = 1;
 
32275
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32276
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32277
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32278
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32279
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32280
ORDER BY f_int1;
 
32281
DROP TRIGGER trg_3;
 
32282
        
 
32283
# check trigger-11 success:     1
 
32284
DELETE FROM t1
 
32285
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32286
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32287
AND f_charbig = '####updated per insert trigger####';
 
32288
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32289
BEGIN
 
32290
SET new.f_int1 = @my_max1 + @counter,
 
32291
new.f_int2 = @my_min2 - @counter,
 
32292
new.f_charbig = '####updated per insert trigger####';
 
32293
SET @counter = @counter + 1;
 
32294
END|
 
32295
SET @counter = 1;
 
32296
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32297
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
32298
SELECT CAST(f_int1 AS CHAR),
 
32299
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32300
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32301
ORDER BY f_int1;
 
32302
DROP TRIGGER trg_3;
 
32303
        
 
32304
# check trigger-12 success:     1
 
32305
DELETE FROM t1
 
32306
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32307
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32308
AND f_charbig = '####updated per insert trigger####';
 
32309
ANALYZE  TABLE t1;
 
32310
Table   Op      Msg_type        Msg_text
 
32311
test.t1 analyze status  OK
 
32312
CHECK    TABLE t1 EXTENDED;
 
32313
Table   Op      Msg_type        Msg_text
 
32314
test.t1 check   status  OK
 
32315
CHECKSUM TABLE t1 EXTENDED;
 
32316
Table   Checksum
 
32317
test.t1 <some_value>
 
32318
OPTIMIZE TABLE t1;
 
32319
Table   Op      Msg_type        Msg_text
 
32320
test.t1 optimize        status  OK
 
32321
# check layout success:    1
 
32322
REPAIR   TABLE t1 EXTENDED;
 
32323
Table   Op      Msg_type        Msg_text
 
32324
test.t1 repair  status  OK
 
32325
# check layout success:    1
 
32326
TRUNCATE t1;
 
32327
        
 
32328
# check TRUNCATE success:       1
 
32329
# check layout success:    1
 
32330
# End usability test (inc/partition_check.inc)
 
32331
DROP TABLE t1;
 
32332
CREATE TABLE t1 (
 
32333
f_int1 INTEGER,
 
32334
f_int2 INTEGER,
 
32335
f_char1 CHAR(20),
 
32336
f_char2 CHAR(20),
 
32337
f_charbig VARCHAR(1000)
 
32338
 
 
32339
)
 
32340
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
32341
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32342
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
32343
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
32344
ALTER TABLE t1 REBUILD PARTITION part_1;
 
32345
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32346
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
32347
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
32348
# Start usability test (inc/partition_check.inc)
 
32349
create_command
 
32350
SHOW CREATE TABLE t1;
 
32351
Table   Create Table
 
32352
t1      CREATE TABLE `t1` (
 
32353
  `f_int1` int(11) DEFAULT NULL,
 
32354
  `f_int2` int(11) DEFAULT NULL,
 
32355
  `f_char1` char(20) DEFAULT NULL,
 
32356
  `f_char2` char(20) DEFAULT NULL,
 
32357
  `f_charbig` varchar(1000) DEFAULT NULL
 
32358
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */
 
32359
 
 
32360
unified filelist
 
32361
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
32362
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
32363
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
32364
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
32365
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
32366
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
32367
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
32368
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
32369
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
32370
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
32371
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
32372
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
32373
 
 
32374
# check prerequisites-1 success:    1
 
32375
# check COUNT(*) success:    1
 
32376
# check MIN/MAX(f_int1) success:    1
 
32377
# check MIN/MAX(f_int2) success:    1
 
32378
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32379
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32380
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
32381
WHERE f_int1 IN (2,3);
 
32382
# check prerequisites-3 success:    1
 
32383
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
32384
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
32385
# check read via f_int1 success: 1
 
32386
# check read via f_int2 success: 1
 
32387
        
 
32388
# check multiple-1 success:     1
 
32389
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
32390
        
 
32391
# check multiple-2 success:     1
 
32392
INSERT INTO t1 SELECT * FROM t0_template
 
32393
WHERE MOD(f_int1,3) = 0;
 
32394
        
 
32395
# check multiple-3 success:     1
 
32396
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
32397
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
32398
AND @max_row_div2 + @max_row_div4;
 
32399
        
 
32400
# check multiple-4 success:     1
 
32401
DELETE FROM t1
 
32402
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
32403
AND @max_row_div2 + @max_row_div4 + @max_row;
 
32404
        
 
32405
# check multiple-5 success:     1
 
32406
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
32407
INSERT INTO t1
 
32408
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32409
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32410
f_charbig = '#SINGLE#';
 
32411
        
 
32412
# check single-1 success:       1
 
32413
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
32414
INSERT INTO t1
 
32415
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32416
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32417
f_charbig = '#SINGLE#';
 
32418
        
 
32419
# check single-2 success:       1
 
32420
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
32421
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
32422
UPDATE t1 SET f_int1 = @cur_value2
 
32423
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
32424
        
 
32425
# check single-3 success:       1
 
32426
SET @cur_value1= -1;
 
32427
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
32428
UPDATE t1 SET f_int1 = @cur_value1
 
32429
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
32430
        
 
32431
# check single-4 success:       1
 
32432
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
32433
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
32434
        
 
32435
# check single-5 success:       1
 
32436
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
32437
        
 
32438
# check single-6 success:       1
 
32439
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
32440
        
 
32441
# check single-7 success:       1
 
32442
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
32443
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
32444
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
32445
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
32446
f_charbig = '#NULL#';
 
32447
INSERT INTO t1
 
32448
SET f_int1 = NULL , f_int2 = -@max_row,
 
32449
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
32450
f_charbig = '#NULL#';
 
32451
# check null success:    1
 
32452
        
 
32453
# check null-1 success:         1
 
32454
UPDATE t1 SET f_int1 = -@max_row
 
32455
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32456
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32457
        
 
32458
# check null-2 success:         1
 
32459
UPDATE t1 SET f_int1 = NULL
 
32460
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32461
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32462
        
 
32463
# check null-3 success:         1
 
32464
DELETE FROM t1
 
32465
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32466
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32467
        
 
32468
# check null-4 success:         1
 
32469
DELETE FROM t1
 
32470
WHERE f_int1 = 0 AND f_int2 = 0
 
32471
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
32472
AND f_charbig = '#NULL#';
 
32473
SET AUTOCOMMIT= 0;
 
32474
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32475
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32476
FROM t0_template source_tab
 
32477
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32478
        
 
32479
# check transactions-1 success:         1
 
32480
COMMIT WORK;
 
32481
        
 
32482
# check transactions-2 success:         1
 
32483
ROLLBACK WORK;
 
32484
        
 
32485
# check transactions-3 success:         1
 
32486
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32487
COMMIT WORK;
 
32488
ROLLBACK WORK;
 
32489
        
 
32490
# check transactions-4 success:         1
 
32491
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32492
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32493
FROM t0_template source_tab
 
32494
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32495
        
 
32496
# check transactions-5 success:         1
 
32497
ROLLBACK WORK;
 
32498
Warnings:
 
32499
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
32500
        
 
32501
# check transactions-6 success:         1
 
32502
# INFO: Storage engine used for t1 seems to be not transactional.
 
32503
COMMIT;
 
32504
        
 
32505
# check transactions-7 success:         1
 
32506
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32507
COMMIT WORK;
 
32508
SET @@session.sql_mode = 'traditional';
 
32509
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
32510
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32511
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
32512
'', '', 'was inserted' FROM t0_template
 
32513
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32514
ERROR 22012: Division by 0
 
32515
COMMIT;
 
32516
        
 
32517
# check transactions-8 success:         1
 
32518
# INFO: Storage engine used for t1 seems to be unable to revert
 
32519
#       changes made by the failing statement.
 
32520
SET @@session.sql_mode = '';
 
32521
SET AUTOCOMMIT= 1;
 
32522
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32523
COMMIT WORK;
 
32524
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
32525
        
 
32526
# check special-1 success:      1
 
32527
UPDATE t1 SET f_charbig = '';
 
32528
        
 
32529
# check special-2 success:      1
 
32530
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
32531
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32532
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
32533
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32534
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32535
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32536
'just inserted' FROM t0_template
 
32537
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32538
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
32539
BEGIN
 
32540
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32541
f_charbig = 'updated by trigger'
 
32542
      WHERE f_int1 = new.f_int1;
 
32543
END|
 
32544
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32545
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32546
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32547
        
 
32548
# check trigger-1 success:      1
 
32549
DROP TRIGGER trg_1;
 
32550
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32551
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32552
f_charbig = 'just inserted'
 
32553
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32554
DELETE FROM t0_aux
 
32555
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32556
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32557
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32558
'just inserted' FROM t0_template
 
32559
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32560
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
32561
BEGIN
 
32562
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32563
f_charbig = 'updated by trigger'
 
32564
      WHERE f_int1 = new.f_int1;
 
32565
END|
 
32566
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32567
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
32568
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32569
        
 
32570
# check trigger-2 success:      1
 
32571
DROP TRIGGER trg_1;
 
32572
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32573
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32574
f_charbig = 'just inserted'
 
32575
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32576
DELETE FROM t0_aux
 
32577
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32578
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32579
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32580
'just inserted' FROM t0_template
 
32581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32582
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32583
BEGIN
 
32584
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32585
f_charbig = 'updated by trigger'
 
32586
      WHERE f_int1 = new.f_int1;
 
32587
END|
 
32588
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32589
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32590
        
 
32591
# check trigger-3 success:      1
 
32592
DROP TRIGGER trg_1;
 
32593
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32594
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32595
f_charbig = 'just inserted'
 
32596
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32597
DELETE FROM t0_aux
 
32598
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32599
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32600
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32601
'just inserted' FROM t0_template
 
32602
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32603
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
32604
BEGIN
 
32605
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32606
f_charbig = 'updated by trigger'
 
32607
      WHERE f_int1 = - old.f_int1;
 
32608
END|
 
32609
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32610
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32611
        
 
32612
# check trigger-4 success:      1
 
32613
DROP TRIGGER trg_1;
 
32614
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32615
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32616
f_charbig = 'just inserted'
 
32617
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32618
DELETE FROM t0_aux
 
32619
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32620
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32621
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32622
'just inserted' FROM t0_template
 
32623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32624
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32625
BEGIN
 
32626
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32627
f_charbig = 'updated by trigger'
 
32628
      WHERE f_int1 = new.f_int1;
 
32629
END|
 
32630
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32631
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32632
        
 
32633
# check trigger-5 success:      1
 
32634
DROP TRIGGER trg_1;
 
32635
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32636
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32637
f_charbig = 'just inserted'
 
32638
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32639
DELETE FROM t0_aux
 
32640
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32641
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32642
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32643
'just inserted' FROM t0_template
 
32644
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32645
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
32646
BEGIN
 
32647
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32648
f_charbig = 'updated by trigger'
 
32649
      WHERE f_int1 = - old.f_int1;
 
32650
END|
 
32651
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
32652
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32653
        
 
32654
# check trigger-6 success:      1
 
32655
DROP TRIGGER trg_1;
 
32656
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32657
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32658
f_charbig = 'just inserted'
 
32659
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32660
DELETE FROM t0_aux
 
32661
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32662
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32663
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32664
'just inserted' FROM t0_template
 
32665
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32666
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
32667
BEGIN
 
32668
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32669
f_charbig = 'updated by trigger'
 
32670
      WHERE f_int1 = - old.f_int1;
 
32671
END|
 
32672
DELETE FROM t0_aux
 
32673
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32674
        
 
32675
# check trigger-7 success:      1
 
32676
DROP TRIGGER trg_1;
 
32677
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32678
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32679
f_charbig = 'just inserted'
 
32680
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32681
DELETE FROM t0_aux
 
32682
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32683
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32684
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
32685
'just inserted' FROM t0_template
 
32686
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32687
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
32688
BEGIN
 
32689
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
32690
f_charbig = 'updated by trigger'
 
32691
      WHERE f_int1 = - old.f_int1;
 
32692
END|
 
32693
DELETE FROM t0_aux
 
32694
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
32695
        
 
32696
# check trigger-8 success:      1
 
32697
DROP TRIGGER trg_1;
 
32698
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32699
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32700
f_charbig = 'just inserted'
 
32701
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
32702
DELETE FROM t0_aux
 
32703
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32704
DELETE FROM t1
 
32705
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
32706
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32707
BEGIN
 
32708
SET new.f_int1 = old.f_int1 + @max_row,
 
32709
new.f_int2 = old.f_int2 - @max_row,
 
32710
new.f_charbig = '####updated per update trigger####';
 
32711
END|
 
32712
UPDATE t1
 
32713
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32714
f_charbig = '####updated per update statement itself####';
 
32715
        
 
32716
# check trigger-9 success:      1
 
32717
DROP TRIGGER trg_2;
 
32718
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32719
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32720
f_charbig = CONCAT('===',f_char1,'===');
 
32721
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
32722
BEGIN
 
32723
SET new.f_int1 = new.f_int1 + @max_row,
 
32724
new.f_int2 = new.f_int2 - @max_row,
 
32725
new.f_charbig = '####updated per update trigger####';
 
32726
END|
 
32727
UPDATE t1
 
32728
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
32729
f_charbig = '####updated per update statement itself####';
 
32730
        
 
32731
# check trigger-10 success:     1
 
32732
DROP TRIGGER trg_2;
 
32733
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
32734
f_int2 = CAST(f_char1 AS SIGNED INT),
 
32735
f_charbig = CONCAT('===',f_char1,'===');
 
32736
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32737
BEGIN
 
32738
SET new.f_int1 = @my_max1 + @counter,
 
32739
new.f_int2 = @my_min2 - @counter,
 
32740
new.f_charbig = '####updated per insert trigger####';
 
32741
SET @counter = @counter + 1;
 
32742
END|
 
32743
SET @counter = 1;
 
32744
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32745
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32746
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32747
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32748
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32749
ORDER BY f_int1;
 
32750
DROP TRIGGER trg_3;
 
32751
        
 
32752
# check trigger-11 success:     1
 
32753
DELETE FROM t1
 
32754
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32755
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32756
AND f_charbig = '####updated per insert trigger####';
 
32757
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
32758
BEGIN
 
32759
SET new.f_int1 = @my_max1 + @counter,
 
32760
new.f_int2 = @my_min2 - @counter,
 
32761
new.f_charbig = '####updated per insert trigger####';
 
32762
SET @counter = @counter + 1;
 
32763
END|
 
32764
SET @counter = 1;
 
32765
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
32766
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
32767
SELECT CAST(f_int1 AS CHAR),
 
32768
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
32769
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
32770
ORDER BY f_int1;
 
32771
DROP TRIGGER trg_3;
 
32772
        
 
32773
# check trigger-12 success:     1
 
32774
DELETE FROM t1
 
32775
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
32776
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
32777
AND f_charbig = '####updated per insert trigger####';
 
32778
ANALYZE  TABLE t1;
 
32779
Table   Op      Msg_type        Msg_text
 
32780
test.t1 analyze status  OK
 
32781
CHECK    TABLE t1 EXTENDED;
 
32782
Table   Op      Msg_type        Msg_text
 
32783
test.t1 check   status  OK
 
32784
CHECKSUM TABLE t1 EXTENDED;
 
32785
Table   Checksum
 
32786
test.t1 <some_value>
 
32787
OPTIMIZE TABLE t1;
 
32788
Table   Op      Msg_type        Msg_text
 
32789
test.t1 optimize        status  OK
 
32790
# check layout success:    1
 
32791
REPAIR   TABLE t1 EXTENDED;
 
32792
Table   Op      Msg_type        Msg_text
 
32793
test.t1 repair  status  OK
 
32794
# check layout success:    1
 
32795
TRUNCATE t1;
 
32796
        
 
32797
# check TRUNCATE success:       1
 
32798
# check layout success:    1
 
32799
# End usability test (inc/partition_check.inc)
 
32800
DROP TABLE t1;
 
32801
CREATE TABLE t1 (
 
32802
f_int1 INTEGER,
 
32803
f_int2 INTEGER,
 
32804
f_char1 CHAR(20),
 
32805
f_char2 CHAR(20),
 
32806
f_charbig VARCHAR(1000)
 
32807
 
 
32808
)
 
32809
PARTITION BY LIST(MOD(f_int1,4))
 
32810
(PARTITION part_3 VALUES IN (-3),
 
32811
PARTITION part_2 VALUES IN (-2),
 
32812
PARTITION part_1 VALUES IN (-1),
 
32813
PARTITION part_N VALUES IN (NULL),
 
32814
PARTITION part0 VALUES IN (0),
 
32815
PARTITION part1 VALUES IN (1),
 
32816
PARTITION part2 VALUES IN (2),
 
32817
PARTITION part3 VALUES IN (3));
 
32818
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32819
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
32820
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
32821
ALTER TABLE t1 REBUILD PARTITION part_1;
 
32822
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
32823
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
32824
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
32825
# Start usability test (inc/partition_check.inc)
 
32826
create_command
 
32827
SHOW CREATE TABLE t1;
 
32828
Table   Create Table
 
32829
t1      CREATE TABLE `t1` (
 
32830
  `f_int1` int(11) DEFAULT NULL,
 
32831
  `f_int2` int(11) DEFAULT NULL,
 
32832
  `f_char1` char(20) DEFAULT NULL,
 
32833
  `f_char2` char(20) DEFAULT NULL,
 
32834
  `f_charbig` varchar(1000) DEFAULT NULL
 
32835
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
32836
 
 
32837
unified filelist
 
32838
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
32839
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
32840
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
32841
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
32842
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
32843
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
32844
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
32845
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
32846
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
32847
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
32848
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
32849
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
32850
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
32851
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
32852
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
32853
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
32854
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
32855
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
32856
 
 
32857
# check prerequisites-1 success:    1
 
32858
# check COUNT(*) success:    1
 
32859
# check MIN/MAX(f_int1) success:    1
 
32860
# check MIN/MAX(f_int2) success:    1
 
32861
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32862
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
32863
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
32864
WHERE f_int1 IN (2,3);
 
32865
# check prerequisites-3 success:    1
 
32866
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
32867
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
32868
# check read via f_int1 success: 1
 
32869
# check read via f_int2 success: 1
 
32870
        
 
32871
# check multiple-1 success:     1
 
32872
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
32873
        
 
32874
# check multiple-2 success:     1
 
32875
INSERT INTO t1 SELECT * FROM t0_template
 
32876
WHERE MOD(f_int1,3) = 0;
 
32877
        
 
32878
# check multiple-3 success:     1
 
32879
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
32880
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
32881
AND @max_row_div2 + @max_row_div4;
 
32882
        
 
32883
# check multiple-4 success:     1
 
32884
DELETE FROM t1
 
32885
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
32886
AND @max_row_div2 + @max_row_div4 + @max_row;
 
32887
        
 
32888
# check multiple-5 success:     1
 
32889
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
32890
INSERT INTO t1
 
32891
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32892
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32893
f_charbig = '#SINGLE#';
 
32894
        
 
32895
# check single-1 success:       1
 
32896
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
32897
INSERT INTO t1
 
32898
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
32899
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
32900
f_charbig = '#SINGLE#';
 
32901
        
 
32902
# check single-2 success:       1
 
32903
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
32904
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
32905
UPDATE t1 SET f_int1 = @cur_value2
 
32906
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
32907
        
 
32908
# check single-3 success:       1
 
32909
SET @cur_value1= -1;
 
32910
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
32911
UPDATE t1 SET f_int1 = @cur_value1
 
32912
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
32913
        
 
32914
# check single-4 success:       1
 
32915
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
32916
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
32917
        
 
32918
# check single-5 success:       1
 
32919
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
32920
        
 
32921
# check single-6 success:       1
 
32922
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
32923
        
 
32924
# check single-7 success:       1
 
32925
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
32926
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
32927
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
32928
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
32929
f_charbig = '#NULL#';
 
32930
INSERT INTO t1
 
32931
SET f_int1 = NULL , f_int2 = -@max_row,
 
32932
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
32933
f_charbig = '#NULL#';
 
32934
# check null success:    1
 
32935
        
 
32936
# check null-1 success:         1
 
32937
UPDATE t1 SET f_int1 = -@max_row
 
32938
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32939
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32940
        
 
32941
# check null-2 success:         1
 
32942
UPDATE t1 SET f_int1 = NULL
 
32943
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32944
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32945
        
 
32946
# check null-3 success:         1
 
32947
DELETE FROM t1
 
32948
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
32949
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
32950
        
 
32951
# check null-4 success:         1
 
32952
DELETE FROM t1
 
32953
WHERE f_int1 = 0 AND f_int2 = 0
 
32954
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
32955
AND f_charbig = '#NULL#';
 
32956
SET AUTOCOMMIT= 0;
 
32957
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32958
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32959
FROM t0_template source_tab
 
32960
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32961
        
 
32962
# check transactions-1 success:         1
 
32963
COMMIT WORK;
 
32964
        
 
32965
# check transactions-2 success:         1
 
32966
ROLLBACK WORK;
 
32967
        
 
32968
# check transactions-3 success:         1
 
32969
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32970
COMMIT WORK;
 
32971
ROLLBACK WORK;
 
32972
        
 
32973
# check transactions-4 success:         1
 
32974
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32975
SELECT f_int1, f_int1, '', '', 'was inserted'
 
32976
FROM t0_template source_tab
 
32977
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32978
        
 
32979
# check transactions-5 success:         1
 
32980
ROLLBACK WORK;
 
32981
Warnings:
 
32982
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
32983
        
 
32984
# check transactions-6 success:         1
 
32985
# INFO: Storage engine used for t1 seems to be not transactional.
 
32986
COMMIT;
 
32987
        
 
32988
# check transactions-7 success:         1
 
32989
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
32990
COMMIT WORK;
 
32991
SET @@session.sql_mode = 'traditional';
 
32992
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
32993
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
32994
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
32995
'', '', 'was inserted' FROM t0_template
 
32996
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
32997
ERROR 22012: Division by 0
 
32998
COMMIT;
 
32999
        
 
33000
# check transactions-8 success:         1
 
33001
# INFO: Storage engine used for t1 seems to be unable to revert
 
33002
#       changes made by the failing statement.
 
33003
SET @@session.sql_mode = '';
 
33004
SET AUTOCOMMIT= 1;
 
33005
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33006
COMMIT WORK;
 
33007
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
33008
        
 
33009
# check special-1 success:      1
 
33010
UPDATE t1 SET f_charbig = '';
 
33011
        
 
33012
# check special-2 success:      1
 
33013
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
33014
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33015
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
33016
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33017
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33018
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33019
'just inserted' FROM t0_template
 
33020
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33021
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
33022
BEGIN
 
33023
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33024
f_charbig = 'updated by trigger'
 
33025
      WHERE f_int1 = new.f_int1;
 
33026
END|
 
33027
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33028
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33029
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33030
        
 
33031
# check trigger-1 success:      1
 
33032
DROP TRIGGER trg_1;
 
33033
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33034
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33035
f_charbig = 'just inserted'
 
33036
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33037
DELETE FROM t0_aux
 
33038
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33039
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33040
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33041
'just inserted' FROM t0_template
 
33042
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33043
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
33044
BEGIN
 
33045
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33046
f_charbig = 'updated by trigger'
 
33047
      WHERE f_int1 = new.f_int1;
 
33048
END|
 
33049
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33050
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33051
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33052
        
 
33053
# check trigger-2 success:      1
 
33054
DROP TRIGGER trg_1;
 
33055
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33056
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33057
f_charbig = 'just inserted'
 
33058
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33059
DELETE FROM t0_aux
 
33060
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33061
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33062
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33063
'just inserted' FROM t0_template
 
33064
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33065
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33066
BEGIN
 
33067
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33068
f_charbig = 'updated by trigger'
 
33069
      WHERE f_int1 = new.f_int1;
 
33070
END|
 
33071
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33072
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33073
        
 
33074
# check trigger-3 success:      1
 
33075
DROP TRIGGER trg_1;
 
33076
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33077
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33078
f_charbig = 'just inserted'
 
33079
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33080
DELETE FROM t0_aux
 
33081
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33082
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33083
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33084
'just inserted' FROM t0_template
 
33085
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33086
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33087
BEGIN
 
33088
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33089
f_charbig = 'updated by trigger'
 
33090
      WHERE f_int1 = - old.f_int1;
 
33091
END|
 
33092
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33093
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33094
        
 
33095
# check trigger-4 success:      1
 
33096
DROP TRIGGER trg_1;
 
33097
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33098
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33099
f_charbig = 'just inserted'
 
33100
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33101
DELETE FROM t0_aux
 
33102
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33103
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33104
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33105
'just inserted' FROM t0_template
 
33106
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33107
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
33108
BEGIN
 
33109
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33110
f_charbig = 'updated by trigger'
 
33111
      WHERE f_int1 = new.f_int1;
 
33112
END|
 
33113
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33114
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33115
        
 
33116
# check trigger-5 success:      1
 
33117
DROP TRIGGER trg_1;
 
33118
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33119
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33120
f_charbig = 'just inserted'
 
33121
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33122
DELETE FROM t0_aux
 
33123
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33124
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33125
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33126
'just inserted' FROM t0_template
 
33127
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33128
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
33129
BEGIN
 
33130
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33131
f_charbig = 'updated by trigger'
 
33132
      WHERE f_int1 = - old.f_int1;
 
33133
END|
 
33134
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33135
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33136
        
 
33137
# check trigger-6 success:      1
 
33138
DROP TRIGGER trg_1;
 
33139
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33140
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33141
f_charbig = 'just inserted'
 
33142
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33143
DELETE FROM t0_aux
 
33144
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33145
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33146
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33147
'just inserted' FROM t0_template
 
33148
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33149
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
33150
BEGIN
 
33151
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33152
f_charbig = 'updated by trigger'
 
33153
      WHERE f_int1 = - old.f_int1;
 
33154
END|
 
33155
DELETE FROM t0_aux
 
33156
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33157
        
 
33158
# check trigger-7 success:      1
 
33159
DROP TRIGGER trg_1;
 
33160
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33161
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33162
f_charbig = 'just inserted'
 
33163
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33164
DELETE FROM t0_aux
 
33165
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33166
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33167
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33168
'just inserted' FROM t0_template
 
33169
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33170
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
33171
BEGIN
 
33172
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33173
f_charbig = 'updated by trigger'
 
33174
      WHERE f_int1 = - old.f_int1;
 
33175
END|
 
33176
DELETE FROM t0_aux
 
33177
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33178
        
 
33179
# check trigger-8 success:      1
 
33180
DROP TRIGGER trg_1;
 
33181
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33182
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33183
f_charbig = 'just inserted'
 
33184
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33185
DELETE FROM t0_aux
 
33186
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33187
DELETE FROM t1
 
33188
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33189
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33190
BEGIN
 
33191
SET new.f_int1 = old.f_int1 + @max_row,
 
33192
new.f_int2 = old.f_int2 - @max_row,
 
33193
new.f_charbig = '####updated per update trigger####';
 
33194
END|
 
33195
UPDATE t1
 
33196
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33197
f_charbig = '####updated per update statement itself####';
 
33198
        
 
33199
# check trigger-9 success:      1
 
33200
DROP TRIGGER trg_2;
 
33201
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33202
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33203
f_charbig = CONCAT('===',f_char1,'===');
 
33204
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33205
BEGIN
 
33206
SET new.f_int1 = new.f_int1 + @max_row,
 
33207
new.f_int2 = new.f_int2 - @max_row,
 
33208
new.f_charbig = '####updated per update trigger####';
 
33209
END|
 
33210
UPDATE t1
 
33211
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33212
f_charbig = '####updated per update statement itself####';
 
33213
        
 
33214
# check trigger-10 success:     1
 
33215
DROP TRIGGER trg_2;
 
33216
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33217
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33218
f_charbig = CONCAT('===',f_char1,'===');
 
33219
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33220
BEGIN
 
33221
SET new.f_int1 = @my_max1 + @counter,
 
33222
new.f_int2 = @my_min2 - @counter,
 
33223
new.f_charbig = '####updated per insert trigger####';
 
33224
SET @counter = @counter + 1;
 
33225
END|
 
33226
SET @counter = 1;
 
33227
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33228
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33229
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33230
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33231
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33232
ORDER BY f_int1;
 
33233
DROP TRIGGER trg_3;
 
33234
        
 
33235
# check trigger-11 success:     1
 
33236
DELETE FROM t1
 
33237
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33238
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33239
AND f_charbig = '####updated per insert trigger####';
 
33240
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33241
BEGIN
 
33242
SET new.f_int1 = @my_max1 + @counter,
 
33243
new.f_int2 = @my_min2 - @counter,
 
33244
new.f_charbig = '####updated per insert trigger####';
 
33245
SET @counter = @counter + 1;
 
33246
END|
 
33247
SET @counter = 1;
 
33248
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33249
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
33250
SELECT CAST(f_int1 AS CHAR),
 
33251
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33252
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33253
ORDER BY f_int1;
 
33254
DROP TRIGGER trg_3;
 
33255
        
 
33256
# check trigger-12 success:     1
 
33257
DELETE FROM t1
 
33258
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33259
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33260
AND f_charbig = '####updated per insert trigger####';
 
33261
ANALYZE  TABLE t1;
 
33262
Table   Op      Msg_type        Msg_text
 
33263
test.t1 analyze status  OK
 
33264
CHECK    TABLE t1 EXTENDED;
 
33265
Table   Op      Msg_type        Msg_text
 
33266
test.t1 check   status  OK
 
33267
CHECKSUM TABLE t1 EXTENDED;
 
33268
Table   Checksum
 
33269
test.t1 <some_value>
 
33270
OPTIMIZE TABLE t1;
 
33271
Table   Op      Msg_type        Msg_text
 
33272
test.t1 optimize        status  OK
 
33273
# check layout success:    1
 
33274
REPAIR   TABLE t1 EXTENDED;
 
33275
Table   Op      Msg_type        Msg_text
 
33276
test.t1 repair  status  OK
 
33277
# check layout success:    1
 
33278
TRUNCATE t1;
 
33279
        
 
33280
# check TRUNCATE success:       1
 
33281
# check layout success:    1
 
33282
# End usability test (inc/partition_check.inc)
 
33283
DROP TABLE t1;
 
33284
CREATE TABLE t1 (
 
33285
f_int1 INTEGER,
 
33286
f_int2 INTEGER,
 
33287
f_char1 CHAR(20),
 
33288
f_char2 CHAR(20),
 
33289
f_charbig VARCHAR(1000)
 
33290
 
 
33291
)
 
33292
PARTITION BY RANGE(f_int1)
 
33293
(PARTITION parta VALUES LESS THAN (0),
 
33294
PARTITION part_1 VALUES LESS THAN (5),
 
33295
PARTITION part_2 VALUES LESS THAN (10),
 
33296
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
33297
PARTITION part_4 VALUES LESS THAN (20),
 
33298
PARTITION part_5 VALUES LESS THAN (2147483646));
 
33299
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33300
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
33301
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
33302
ALTER TABLE t1 REBUILD PARTITION part_1;
 
33303
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33304
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
33305
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
33306
# Start usability test (inc/partition_check.inc)
 
33307
create_command
 
33308
SHOW CREATE TABLE t1;
 
33309
Table   Create Table
 
33310
t1      CREATE TABLE `t1` (
 
33311
  `f_int1` int(11) DEFAULT NULL,
 
33312
  `f_int2` int(11) DEFAULT NULL,
 
33313
  `f_char1` char(20) DEFAULT NULL,
 
33314
  `f_char2` char(20) DEFAULT NULL,
 
33315
  `f_charbig` varchar(1000) DEFAULT NULL
 
33316
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
33317
 
 
33318
unified filelist
 
33319
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
33320
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
33321
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
33322
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
33323
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
33324
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
33325
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
33326
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
33327
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
33328
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
33329
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
33330
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
33331
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
33332
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
33333
 
 
33334
# check prerequisites-1 success:    1
 
33335
# check COUNT(*) success:    1
 
33336
# check MIN/MAX(f_int1) success:    1
 
33337
# check MIN/MAX(f_int2) success:    1
 
33338
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33339
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33340
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
33341
WHERE f_int1 IN (2,3);
 
33342
# check prerequisites-3 success:    1
 
33343
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
33344
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
33345
# check read via f_int1 success: 1
 
33346
# check read via f_int2 success: 1
 
33347
        
 
33348
# check multiple-1 success:     1
 
33349
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
33350
        
 
33351
# check multiple-2 success:     1
 
33352
INSERT INTO t1 SELECT * FROM t0_template
 
33353
WHERE MOD(f_int1,3) = 0;
 
33354
        
 
33355
# check multiple-3 success:     1
 
33356
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
33357
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
33358
AND @max_row_div2 + @max_row_div4;
 
33359
        
 
33360
# check multiple-4 success:     1
 
33361
DELETE FROM t1
 
33362
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
33363
AND @max_row_div2 + @max_row_div4 + @max_row;
 
33364
        
 
33365
# check multiple-5 success:     1
 
33366
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
33367
INSERT INTO t1
 
33368
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
33369
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
33370
f_charbig = '#SINGLE#';
 
33371
        
 
33372
# check single-1 success:       1
 
33373
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
33374
INSERT INTO t1
 
33375
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
33376
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
33377
f_charbig = '#SINGLE#';
 
33378
        
 
33379
# check single-2 success:       1
 
33380
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
33381
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
33382
UPDATE t1 SET f_int1 = @cur_value2
 
33383
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
33384
        
 
33385
# check single-3 success:       1
 
33386
SET @cur_value1= -1;
 
33387
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
33388
UPDATE t1 SET f_int1 = @cur_value1
 
33389
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
33390
        
 
33391
# check single-4 success:       1
 
33392
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
33393
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
33394
        
 
33395
# check single-5 success:       1
 
33396
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
33397
        
 
33398
# check single-6 success:       1
 
33399
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
33400
ERROR HY000: Table has no partition for value 2147483647
 
33401
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
33402
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
33403
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
33404
f_charbig = '#NULL#';
 
33405
INSERT INTO t1
 
33406
SET f_int1 = NULL , f_int2 = -@max_row,
 
33407
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
33408
f_charbig = '#NULL#';
 
33409
# check null success:    1
 
33410
        
 
33411
# check null-1 success:         1
 
33412
UPDATE t1 SET f_int1 = -@max_row
 
33413
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33414
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33415
        
 
33416
# check null-2 success:         1
 
33417
UPDATE t1 SET f_int1 = NULL
 
33418
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33419
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33420
        
 
33421
# check null-3 success:         1
 
33422
DELETE FROM t1
 
33423
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33424
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33425
        
 
33426
# check null-4 success:         1
 
33427
DELETE FROM t1
 
33428
WHERE f_int1 = 0 AND f_int2 = 0
 
33429
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
33430
AND f_charbig = '#NULL#';
 
33431
SET AUTOCOMMIT= 0;
 
33432
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33433
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33434
FROM t0_template source_tab
 
33435
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33436
        
 
33437
# check transactions-1 success:         1
 
33438
COMMIT WORK;
 
33439
        
 
33440
# check transactions-2 success:         1
 
33441
ROLLBACK WORK;
 
33442
        
 
33443
# check transactions-3 success:         1
 
33444
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33445
COMMIT WORK;
 
33446
ROLLBACK WORK;
 
33447
        
 
33448
# check transactions-4 success:         1
 
33449
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33450
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33451
FROM t0_template source_tab
 
33452
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33453
        
 
33454
# check transactions-5 success:         1
 
33455
ROLLBACK WORK;
 
33456
Warnings:
 
33457
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
33458
        
 
33459
# check transactions-6 success:         1
 
33460
# INFO: Storage engine used for t1 seems to be not transactional.
 
33461
COMMIT;
 
33462
        
 
33463
# check transactions-7 success:         1
 
33464
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33465
COMMIT WORK;
 
33466
SET @@session.sql_mode = 'traditional';
 
33467
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
33468
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33469
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
33470
'', '', 'was inserted' FROM t0_template
 
33471
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33472
ERROR 22012: Division by 0
 
33473
COMMIT;
 
33474
        
 
33475
# check transactions-8 success:         1
 
33476
# INFO: Storage engine used for t1 seems to be unable to revert
 
33477
#       changes made by the failing statement.
 
33478
SET @@session.sql_mode = '';
 
33479
SET AUTOCOMMIT= 1;
 
33480
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33481
COMMIT WORK;
 
33482
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
33483
        
 
33484
# check special-1 success:      1
 
33485
UPDATE t1 SET f_charbig = '';
 
33486
        
 
33487
# check special-2 success:      1
 
33488
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
33489
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33490
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
33491
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33492
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33493
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33494
'just inserted' FROM t0_template
 
33495
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33496
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
33497
BEGIN
 
33498
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33499
f_charbig = 'updated by trigger'
 
33500
      WHERE f_int1 = new.f_int1;
 
33501
END|
 
33502
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33503
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33504
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33505
        
 
33506
# check trigger-1 success:      1
 
33507
DROP TRIGGER trg_1;
 
33508
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33509
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33510
f_charbig = 'just inserted'
 
33511
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33512
DELETE FROM t0_aux
 
33513
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33514
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33515
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33516
'just inserted' FROM t0_template
 
33517
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33518
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
33519
BEGIN
 
33520
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33521
f_charbig = 'updated by trigger'
 
33522
      WHERE f_int1 = new.f_int1;
 
33523
END|
 
33524
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33525
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33526
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33527
        
 
33528
# check trigger-2 success:      1
 
33529
DROP TRIGGER trg_1;
 
33530
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33531
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33532
f_charbig = 'just inserted'
 
33533
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33534
DELETE FROM t0_aux
 
33535
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33536
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33537
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33538
'just inserted' FROM t0_template
 
33539
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33540
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33541
BEGIN
 
33542
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33543
f_charbig = 'updated by trigger'
 
33544
      WHERE f_int1 = new.f_int1;
 
33545
END|
 
33546
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33547
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33548
        
 
33549
# check trigger-3 success:      1
 
33550
DROP TRIGGER trg_1;
 
33551
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33552
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33553
f_charbig = 'just inserted'
 
33554
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33555
DELETE FROM t0_aux
 
33556
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33557
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33558
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33559
'just inserted' FROM t0_template
 
33560
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33561
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
33562
BEGIN
 
33563
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33564
f_charbig = 'updated by trigger'
 
33565
      WHERE f_int1 = - old.f_int1;
 
33566
END|
 
33567
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33568
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33569
        
 
33570
# check trigger-4 success:      1
 
33571
DROP TRIGGER trg_1;
 
33572
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33573
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33574
f_charbig = 'just inserted'
 
33575
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33576
DELETE FROM t0_aux
 
33577
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33578
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33579
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33580
'just inserted' FROM t0_template
 
33581
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33582
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
33583
BEGIN
 
33584
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33585
f_charbig = 'updated by trigger'
 
33586
      WHERE f_int1 = new.f_int1;
 
33587
END|
 
33588
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33589
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33590
        
 
33591
# check trigger-5 success:      1
 
33592
DROP TRIGGER trg_1;
 
33593
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33594
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33595
f_charbig = 'just inserted'
 
33596
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33597
DELETE FROM t0_aux
 
33598
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33599
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33600
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33601
'just inserted' FROM t0_template
 
33602
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33603
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
33604
BEGIN
 
33605
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33606
f_charbig = 'updated by trigger'
 
33607
      WHERE f_int1 = - old.f_int1;
 
33608
END|
 
33609
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
33610
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33611
        
 
33612
# check trigger-6 success:      1
 
33613
DROP TRIGGER trg_1;
 
33614
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33615
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33616
f_charbig = 'just inserted'
 
33617
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33618
DELETE FROM t0_aux
 
33619
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33620
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33621
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33622
'just inserted' FROM t0_template
 
33623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33624
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
33625
BEGIN
 
33626
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33627
f_charbig = 'updated by trigger'
 
33628
      WHERE f_int1 = - old.f_int1;
 
33629
END|
 
33630
DELETE FROM t0_aux
 
33631
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33632
        
 
33633
# check trigger-7 success:      1
 
33634
DROP TRIGGER trg_1;
 
33635
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33636
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33637
f_charbig = 'just inserted'
 
33638
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33639
DELETE FROM t0_aux
 
33640
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33641
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33642
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33643
'just inserted' FROM t0_template
 
33644
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33645
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
33646
BEGIN
 
33647
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33648
f_charbig = 'updated by trigger'
 
33649
      WHERE f_int1 = - old.f_int1;
 
33650
END|
 
33651
DELETE FROM t0_aux
 
33652
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
33653
        
 
33654
# check trigger-8 success:      1
 
33655
DROP TRIGGER trg_1;
 
33656
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33657
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33658
f_charbig = 'just inserted'
 
33659
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33660
DELETE FROM t0_aux
 
33661
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33662
DELETE FROM t1
 
33663
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33664
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33665
BEGIN
 
33666
SET new.f_int1 = old.f_int1 + @max_row,
 
33667
new.f_int2 = old.f_int2 - @max_row,
 
33668
new.f_charbig = '####updated per update trigger####';
 
33669
END|
 
33670
UPDATE t1
 
33671
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33672
f_charbig = '####updated per update statement itself####';
 
33673
        
 
33674
# check trigger-9 success:      1
 
33675
DROP TRIGGER trg_2;
 
33676
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33677
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33678
f_charbig = CONCAT('===',f_char1,'===');
 
33679
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
33680
BEGIN
 
33681
SET new.f_int1 = new.f_int1 + @max_row,
 
33682
new.f_int2 = new.f_int2 - @max_row,
 
33683
new.f_charbig = '####updated per update trigger####';
 
33684
END|
 
33685
UPDATE t1
 
33686
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
33687
f_charbig = '####updated per update statement itself####';
 
33688
        
 
33689
# check trigger-10 success:     1
 
33690
DROP TRIGGER trg_2;
 
33691
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33692
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33693
f_charbig = CONCAT('===',f_char1,'===');
 
33694
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33695
BEGIN
 
33696
SET new.f_int1 = @my_max1 + @counter,
 
33697
new.f_int2 = @my_min2 - @counter,
 
33698
new.f_charbig = '####updated per insert trigger####';
 
33699
SET @counter = @counter + 1;
 
33700
END|
 
33701
SET @counter = 1;
 
33702
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33703
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33704
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33705
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33706
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33707
ORDER BY f_int1;
 
33708
DROP TRIGGER trg_3;
 
33709
        
 
33710
# check trigger-11 success:     1
 
33711
DELETE FROM t1
 
33712
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33713
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33714
AND f_charbig = '####updated per insert trigger####';
 
33715
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
33716
BEGIN
 
33717
SET new.f_int1 = @my_max1 + @counter,
 
33718
new.f_int2 = @my_min2 - @counter,
 
33719
new.f_charbig = '####updated per insert trigger####';
 
33720
SET @counter = @counter + 1;
 
33721
END|
 
33722
SET @counter = 1;
 
33723
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
33724
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
33725
SELECT CAST(f_int1 AS CHAR),
 
33726
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
33727
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
33728
ORDER BY f_int1;
 
33729
DROP TRIGGER trg_3;
 
33730
        
 
33731
# check trigger-12 success:     1
 
33732
DELETE FROM t1
 
33733
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
33734
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
33735
AND f_charbig = '####updated per insert trigger####';
 
33736
ANALYZE  TABLE t1;
 
33737
Table   Op      Msg_type        Msg_text
 
33738
test.t1 analyze status  OK
 
33739
CHECK    TABLE t1 EXTENDED;
 
33740
Table   Op      Msg_type        Msg_text
 
33741
test.t1 check   status  OK
 
33742
CHECKSUM TABLE t1 EXTENDED;
 
33743
Table   Checksum
 
33744
test.t1 <some_value>
 
33745
OPTIMIZE TABLE t1;
 
33746
Table   Op      Msg_type        Msg_text
 
33747
test.t1 optimize        status  OK
 
33748
# check layout success:    1
 
33749
REPAIR   TABLE t1 EXTENDED;
 
33750
Table   Op      Msg_type        Msg_text
 
33751
test.t1 repair  status  OK
 
33752
# check layout success:    1
 
33753
TRUNCATE t1;
 
33754
        
 
33755
# check TRUNCATE success:       1
 
33756
# check layout success:    1
 
33757
# End usability test (inc/partition_check.inc)
 
33758
DROP TABLE t1;
 
33759
CREATE TABLE t1 (
 
33760
f_int1 INTEGER,
 
33761
f_int2 INTEGER,
 
33762
f_char1 CHAR(20),
 
33763
f_char2 CHAR(20),
 
33764
f_charbig VARCHAR(1000)
 
33765
 
 
33766
)
 
33767
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
33768
(PARTITION part_1 VALUES LESS THAN (0),
 
33769
PARTITION part_2 VALUES LESS THAN (5),
 
33770
PARTITION part_3 VALUES LESS THAN (10),
 
33771
PARTITION part_4 VALUES LESS THAN (2147483646));
 
33772
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33773
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
33774
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
33775
ALTER TABLE t1 REBUILD PARTITION part_1;
 
33776
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33777
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
33778
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
33779
# Start usability test (inc/partition_check.inc)
 
33780
create_command
 
33781
SHOW CREATE TABLE t1;
 
33782
Table   Create Table
 
33783
t1      CREATE TABLE `t1` (
 
33784
  `f_int1` int(11) DEFAULT NULL,
 
33785
  `f_int2` int(11) DEFAULT NULL,
 
33786
  `f_char1` char(20) DEFAULT NULL,
 
33787
  `f_char2` char(20) DEFAULT NULL,
 
33788
  `f_charbig` varchar(1000) DEFAULT NULL
 
33789
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
33790
 
 
33791
unified filelist
 
33792
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
33793
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
33794
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
33795
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
33796
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
33797
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
33798
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
33799
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
33800
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
33801
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
33802
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
33803
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
33804
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYD
 
33805
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYI
 
33806
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYD
 
33807
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYI
 
33808
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
33809
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
33810
 
 
33811
# check prerequisites-1 success:    1
 
33812
# check COUNT(*) success:    1
 
33813
# check MIN/MAX(f_int1) success:    1
 
33814
# check MIN/MAX(f_int2) success:    1
 
33815
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33816
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
33817
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
33818
WHERE f_int1 IN (2,3);
 
33819
# check prerequisites-3 success:    1
 
33820
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
33821
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
33822
# check read via f_int1 success: 1
 
33823
# check read via f_int2 success: 1
 
33824
        
 
33825
# check multiple-1 success:     1
 
33826
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
33827
        
 
33828
# check multiple-2 success:     1
 
33829
INSERT INTO t1 SELECT * FROM t0_template
 
33830
WHERE MOD(f_int1,3) = 0;
 
33831
        
 
33832
# check multiple-3 success:     1
 
33833
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
33834
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
33835
AND @max_row_div2 + @max_row_div4;
 
33836
        
 
33837
# check multiple-4 success:     1
 
33838
DELETE FROM t1
 
33839
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
33840
AND @max_row_div2 + @max_row_div4 + @max_row;
 
33841
        
 
33842
# check multiple-5 success:     1
 
33843
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
33844
INSERT INTO t1
 
33845
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
33846
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
33847
f_charbig = '#SINGLE#';
 
33848
        
 
33849
# check single-1 success:       1
 
33850
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
33851
INSERT INTO t1
 
33852
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
33853
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
33854
f_charbig = '#SINGLE#';
 
33855
        
 
33856
# check single-2 success:       1
 
33857
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
33858
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
33859
UPDATE t1 SET f_int1 = @cur_value2
 
33860
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
33861
        
 
33862
# check single-3 success:       1
 
33863
SET @cur_value1= -1;
 
33864
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
33865
UPDATE t1 SET f_int1 = @cur_value1
 
33866
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
33867
        
 
33868
# check single-4 success:       1
 
33869
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
33870
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
33871
        
 
33872
# check single-5 success:       1
 
33873
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
33874
        
 
33875
# check single-6 success:       1
 
33876
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
33877
        
 
33878
# check single-7 success:       1
 
33879
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
33880
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
33881
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
33882
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
33883
f_charbig = '#NULL#';
 
33884
INSERT INTO t1
 
33885
SET f_int1 = NULL , f_int2 = -@max_row,
 
33886
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
33887
f_charbig = '#NULL#';
 
33888
# check null success:    1
 
33889
        
 
33890
# check null-1 success:         1
 
33891
UPDATE t1 SET f_int1 = -@max_row
 
33892
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33893
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33894
        
 
33895
# check null-2 success:         1
 
33896
UPDATE t1 SET f_int1 = NULL
 
33897
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33898
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33899
        
 
33900
# check null-3 success:         1
 
33901
DELETE FROM t1
 
33902
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
33903
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
33904
        
 
33905
# check null-4 success:         1
 
33906
DELETE FROM t1
 
33907
WHERE f_int1 = 0 AND f_int2 = 0
 
33908
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
33909
AND f_charbig = '#NULL#';
 
33910
SET AUTOCOMMIT= 0;
 
33911
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33912
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33913
FROM t0_template source_tab
 
33914
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33915
        
 
33916
# check transactions-1 success:         1
 
33917
COMMIT WORK;
 
33918
        
 
33919
# check transactions-2 success:         1
 
33920
ROLLBACK WORK;
 
33921
        
 
33922
# check transactions-3 success:         1
 
33923
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33924
COMMIT WORK;
 
33925
ROLLBACK WORK;
 
33926
        
 
33927
# check transactions-4 success:         1
 
33928
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33929
SELECT f_int1, f_int1, '', '', 'was inserted'
 
33930
FROM t0_template source_tab
 
33931
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33932
        
 
33933
# check transactions-5 success:         1
 
33934
ROLLBACK WORK;
 
33935
Warnings:
 
33936
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
33937
        
 
33938
# check transactions-6 success:         1
 
33939
# INFO: Storage engine used for t1 seems to be not transactional.
 
33940
COMMIT;
 
33941
        
 
33942
# check transactions-7 success:         1
 
33943
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33944
COMMIT WORK;
 
33945
SET @@session.sql_mode = 'traditional';
 
33946
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
33947
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
33948
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
33949
'', '', 'was inserted' FROM t0_template
 
33950
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
33951
ERROR 22012: Division by 0
 
33952
COMMIT;
 
33953
        
 
33954
# check transactions-8 success:         1
 
33955
# INFO: Storage engine used for t1 seems to be unable to revert
 
33956
#       changes made by the failing statement.
 
33957
SET @@session.sql_mode = '';
 
33958
SET AUTOCOMMIT= 1;
 
33959
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
33960
COMMIT WORK;
 
33961
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
33962
        
 
33963
# check special-1 success:      1
 
33964
UPDATE t1 SET f_charbig = '';
 
33965
        
 
33966
# check special-2 success:      1
 
33967
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
33968
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33969
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
33970
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33971
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33972
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33973
'just inserted' FROM t0_template
 
33974
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33975
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
33976
BEGIN
 
33977
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
33978
f_charbig = 'updated by trigger'
 
33979
      WHERE f_int1 = new.f_int1;
 
33980
END|
 
33981
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33982
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
33983
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33984
        
 
33985
# check trigger-1 success:      1
 
33986
DROP TRIGGER trg_1;
 
33987
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
33988
f_int2 = CAST(f_char1 AS SIGNED INT),
 
33989
f_charbig = 'just inserted'
 
33990
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
33991
DELETE FROM t0_aux
 
33992
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33993
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
33994
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
33995
'just inserted' FROM t0_template
 
33996
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
33997
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
33998
BEGIN
 
33999
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34000
f_charbig = 'updated by trigger'
 
34001
      WHERE f_int1 = new.f_int1;
 
34002
END|
 
34003
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34004
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34005
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34006
        
 
34007
# check trigger-2 success:      1
 
34008
DROP TRIGGER trg_1;
 
34009
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34010
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34011
f_charbig = 'just inserted'
 
34012
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34013
DELETE FROM t0_aux
 
34014
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34015
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34016
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34017
'just inserted' FROM t0_template
 
34018
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34019
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34020
BEGIN
 
34021
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34022
f_charbig = 'updated by trigger'
 
34023
      WHERE f_int1 = new.f_int1;
 
34024
END|
 
34025
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34026
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34027
        
 
34028
# check trigger-3 success:      1
 
34029
DROP TRIGGER trg_1;
 
34030
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34031
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34032
f_charbig = 'just inserted'
 
34033
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34034
DELETE FROM t0_aux
 
34035
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34036
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34037
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34038
'just inserted' FROM t0_template
 
34039
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34040
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34041
BEGIN
 
34042
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34043
f_charbig = 'updated by trigger'
 
34044
      WHERE f_int1 = - old.f_int1;
 
34045
END|
 
34046
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34047
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34048
        
 
34049
# check trigger-4 success:      1
 
34050
DROP TRIGGER trg_1;
 
34051
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34052
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34053
f_charbig = 'just inserted'
 
34054
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34055
DELETE FROM t0_aux
 
34056
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34057
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34058
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34059
'just inserted' FROM t0_template
 
34060
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34061
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34062
BEGIN
 
34063
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34064
f_charbig = 'updated by trigger'
 
34065
      WHERE f_int1 = new.f_int1;
 
34066
END|
 
34067
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34068
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34069
        
 
34070
# check trigger-5 success:      1
 
34071
DROP TRIGGER trg_1;
 
34072
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34073
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34074
f_charbig = 'just inserted'
 
34075
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34076
DELETE FROM t0_aux
 
34077
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34078
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34079
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34080
'just inserted' FROM t0_template
 
34081
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34082
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34083
BEGIN
 
34084
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34085
f_charbig = 'updated by trigger'
 
34086
      WHERE f_int1 = - old.f_int1;
 
34087
END|
 
34088
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34089
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34090
        
 
34091
# check trigger-6 success:      1
 
34092
DROP TRIGGER trg_1;
 
34093
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34094
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34095
f_charbig = 'just inserted'
 
34096
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34097
DELETE FROM t0_aux
 
34098
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34099
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34100
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34101
'just inserted' FROM t0_template
 
34102
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34103
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
34104
BEGIN
 
34105
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34106
f_charbig = 'updated by trigger'
 
34107
      WHERE f_int1 = - old.f_int1;
 
34108
END|
 
34109
DELETE FROM t0_aux
 
34110
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34111
        
 
34112
# check trigger-7 success:      1
 
34113
DROP TRIGGER trg_1;
 
34114
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34115
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34116
f_charbig = 'just inserted'
 
34117
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34118
DELETE FROM t0_aux
 
34119
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34120
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34121
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34122
'just inserted' FROM t0_template
 
34123
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34124
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
34125
BEGIN
 
34126
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34127
f_charbig = 'updated by trigger'
 
34128
      WHERE f_int1 = - old.f_int1;
 
34129
END|
 
34130
DELETE FROM t0_aux
 
34131
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34132
        
 
34133
# check trigger-8 success:      1
 
34134
DROP TRIGGER trg_1;
 
34135
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34136
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34137
f_charbig = 'just inserted'
 
34138
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34139
DELETE FROM t0_aux
 
34140
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34141
DELETE FROM t1
 
34142
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34143
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
34144
BEGIN
 
34145
SET new.f_int1 = old.f_int1 + @max_row,
 
34146
new.f_int2 = old.f_int2 - @max_row,
 
34147
new.f_charbig = '####updated per update trigger####';
 
34148
END|
 
34149
UPDATE t1
 
34150
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
34151
f_charbig = '####updated per update statement itself####';
 
34152
        
 
34153
# check trigger-9 success:      1
 
34154
DROP TRIGGER trg_2;
 
34155
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34156
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34157
f_charbig = CONCAT('===',f_char1,'===');
 
34158
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
34159
BEGIN
 
34160
SET new.f_int1 = new.f_int1 + @max_row,
 
34161
new.f_int2 = new.f_int2 - @max_row,
 
34162
new.f_charbig = '####updated per update trigger####';
 
34163
END|
 
34164
UPDATE t1
 
34165
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
34166
f_charbig = '####updated per update statement itself####';
 
34167
        
 
34168
# check trigger-10 success:     1
 
34169
DROP TRIGGER trg_2;
 
34170
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34171
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34172
f_charbig = CONCAT('===',f_char1,'===');
 
34173
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
34174
BEGIN
 
34175
SET new.f_int1 = @my_max1 + @counter,
 
34176
new.f_int2 = @my_min2 - @counter,
 
34177
new.f_charbig = '####updated per insert trigger####';
 
34178
SET @counter = @counter + 1;
 
34179
END|
 
34180
SET @counter = 1;
 
34181
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
34182
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34183
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
34184
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
34185
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
34186
ORDER BY f_int1;
 
34187
DROP TRIGGER trg_3;
 
34188
        
 
34189
# check trigger-11 success:     1
 
34190
DELETE FROM t1
 
34191
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
34192
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
34193
AND f_charbig = '####updated per insert trigger####';
 
34194
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
34195
BEGIN
 
34196
SET new.f_int1 = @my_max1 + @counter,
 
34197
new.f_int2 = @my_min2 - @counter,
 
34198
new.f_charbig = '####updated per insert trigger####';
 
34199
SET @counter = @counter + 1;
 
34200
END|
 
34201
SET @counter = 1;
 
34202
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
34203
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
34204
SELECT CAST(f_int1 AS CHAR),
 
34205
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
34206
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
34207
ORDER BY f_int1;
 
34208
DROP TRIGGER trg_3;
 
34209
        
 
34210
# check trigger-12 success:     1
 
34211
DELETE FROM t1
 
34212
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
34213
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
34214
AND f_charbig = '####updated per insert trigger####';
 
34215
ANALYZE  TABLE t1;
 
34216
Table   Op      Msg_type        Msg_text
 
34217
test.t1 analyze status  OK
 
34218
CHECK    TABLE t1 EXTENDED;
 
34219
Table   Op      Msg_type        Msg_text
 
34220
test.t1 check   status  OK
 
34221
CHECKSUM TABLE t1 EXTENDED;
 
34222
Table   Checksum
 
34223
test.t1 <some_value>
 
34224
OPTIMIZE TABLE t1;
 
34225
Table   Op      Msg_type        Msg_text
 
34226
test.t1 optimize        status  OK
 
34227
# check layout success:    1
 
34228
REPAIR   TABLE t1 EXTENDED;
 
34229
Table   Op      Msg_type        Msg_text
 
34230
test.t1 repair  status  OK
 
34231
# check layout success:    1
 
34232
TRUNCATE t1;
 
34233
        
 
34234
# check TRUNCATE success:       1
 
34235
# check layout success:    1
 
34236
# End usability test (inc/partition_check.inc)
 
34237
DROP TABLE t1;
 
34238
CREATE TABLE t1 (
 
34239
f_int1 INTEGER,
 
34240
f_int2 INTEGER,
 
34241
f_char1 CHAR(20),
 
34242
f_char2 CHAR(20),
 
34243
f_charbig VARCHAR(1000)
 
34244
 
 
34245
)
 
34246
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
34247
(PARTITION part_1 VALUES LESS THAN (0)
 
34248
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
34249
PARTITION part_2 VALUES LESS THAN (5)
 
34250
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
34251
PARTITION part_3 VALUES LESS THAN (10)
 
34252
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
34253
PARTITION part_4 VALUES LESS THAN (2147483646)
 
34254
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
34255
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34256
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
34257
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
34258
ALTER TABLE t1 REBUILD PARTITION part_1;
 
34259
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34260
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
34261
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
34262
# Start usability test (inc/partition_check.inc)
 
34263
create_command
 
34264
SHOW CREATE TABLE t1;
 
34265
Table   Create Table
 
34266
t1      CREATE TABLE `t1` (
 
34267
  `f_int1` int(11) DEFAULT NULL,
 
34268
  `f_int2` int(11) DEFAULT NULL,
 
34269
  `f_char1` char(20) DEFAULT NULL,
 
34270
  `f_char2` char(20) DEFAULT NULL,
 
34271
  `f_charbig` varchar(1000) DEFAULT NULL
 
34272
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
34273
 
 
34274
unified filelist
 
34275
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYD
 
34276
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYI
 
34277
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYD
 
34278
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYI
 
34279
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYD
 
34280
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYI
 
34281
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYD
 
34282
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYI
 
34283
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYD
 
34284
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYI
 
34285
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYD
 
34286
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYI
 
34287
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYD
 
34288
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYI
 
34289
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYD
 
34290
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYI
 
34291
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
34292
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
34293
 
 
34294
# check prerequisites-1 success:    1
 
34295
# check COUNT(*) success:    1
 
34296
# check MIN/MAX(f_int1) success:    1
 
34297
# check MIN/MAX(f_int2) success:    1
 
34298
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34299
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
34300
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
34301
WHERE f_int1 IN (2,3);
 
34302
# check prerequisites-3 success:    1
 
34303
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
34304
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
34305
# check read via f_int1 success: 1
 
34306
# check read via f_int2 success: 1
 
34307
        
 
34308
# check multiple-1 success:     1
 
34309
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
34310
        
 
34311
# check multiple-2 success:     1
 
34312
INSERT INTO t1 SELECT * FROM t0_template
 
34313
WHERE MOD(f_int1,3) = 0;
 
34314
        
 
34315
# check multiple-3 success:     1
 
34316
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
34317
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
34318
AND @max_row_div2 + @max_row_div4;
 
34319
        
 
34320
# check multiple-4 success:     1
 
34321
DELETE FROM t1
 
34322
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
34323
AND @max_row_div2 + @max_row_div4 + @max_row;
 
34324
        
 
34325
# check multiple-5 success:     1
 
34326
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
34327
INSERT INTO t1
 
34328
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
34329
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
34330
f_charbig = '#SINGLE#';
 
34331
        
 
34332
# check single-1 success:       1
 
34333
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
34334
INSERT INTO t1
 
34335
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
34336
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
34337
f_charbig = '#SINGLE#';
 
34338
        
 
34339
# check single-2 success:       1
 
34340
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
34341
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
34342
UPDATE t1 SET f_int1 = @cur_value2
 
34343
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
34344
        
 
34345
# check single-3 success:       1
 
34346
SET @cur_value1= -1;
 
34347
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
34348
UPDATE t1 SET f_int1 = @cur_value1
 
34349
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
34350
        
 
34351
# check single-4 success:       1
 
34352
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
34353
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
34354
        
 
34355
# check single-5 success:       1
 
34356
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
34357
        
 
34358
# check single-6 success:       1
 
34359
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
34360
ERROR HY000: Table has no partition for value 2147483647
 
34361
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
34362
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
34363
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
34364
f_charbig = '#NULL#';
 
34365
INSERT INTO t1
 
34366
SET f_int1 = NULL , f_int2 = -@max_row,
 
34367
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
34368
f_charbig = '#NULL#';
 
34369
# check null success:    1
 
34370
        
 
34371
# check null-1 success:         1
 
34372
UPDATE t1 SET f_int1 = -@max_row
 
34373
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34374
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34375
        
 
34376
# check null-2 success:         1
 
34377
UPDATE t1 SET f_int1 = NULL
 
34378
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34379
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34380
        
 
34381
# check null-3 success:         1
 
34382
DELETE FROM t1
 
34383
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34384
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34385
        
 
34386
# check null-4 success:         1
 
34387
DELETE FROM t1
 
34388
WHERE f_int1 = 0 AND f_int2 = 0
 
34389
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
34390
AND f_charbig = '#NULL#';
 
34391
SET AUTOCOMMIT= 0;
 
34392
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34393
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34394
FROM t0_template source_tab
 
34395
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34396
        
 
34397
# check transactions-1 success:         1
 
34398
COMMIT WORK;
 
34399
        
 
34400
# check transactions-2 success:         1
 
34401
ROLLBACK WORK;
 
34402
        
 
34403
# check transactions-3 success:         1
 
34404
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34405
COMMIT WORK;
 
34406
ROLLBACK WORK;
 
34407
        
 
34408
# check transactions-4 success:         1
 
34409
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34410
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34411
FROM t0_template source_tab
 
34412
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34413
        
 
34414
# check transactions-5 success:         1
 
34415
ROLLBACK WORK;
 
34416
Warnings:
 
34417
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
34418
        
 
34419
# check transactions-6 success:         1
 
34420
# INFO: Storage engine used for t1 seems to be not transactional.
 
34421
COMMIT;
 
34422
        
 
34423
# check transactions-7 success:         1
 
34424
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34425
COMMIT WORK;
 
34426
SET @@session.sql_mode = 'traditional';
 
34427
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
34428
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34429
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
34430
'', '', 'was inserted' FROM t0_template
 
34431
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34432
ERROR 22012: Division by 0
 
34433
COMMIT;
 
34434
        
 
34435
# check transactions-8 success:         1
 
34436
# INFO: Storage engine used for t1 seems to be unable to revert
 
34437
#       changes made by the failing statement.
 
34438
SET @@session.sql_mode = '';
 
34439
SET AUTOCOMMIT= 1;
 
34440
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34441
COMMIT WORK;
 
34442
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
34443
        
 
34444
# check special-1 success:      1
 
34445
UPDATE t1 SET f_charbig = '';
 
34446
        
 
34447
# check special-2 success:      1
 
34448
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
34449
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34450
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
34451
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34452
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34453
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34454
'just inserted' FROM t0_template
 
34455
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34456
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
34457
BEGIN
 
34458
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34459
f_charbig = 'updated by trigger'
 
34460
      WHERE f_int1 = new.f_int1;
 
34461
END|
 
34462
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34463
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34464
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34465
        
 
34466
# check trigger-1 success:      1
 
34467
DROP TRIGGER trg_1;
 
34468
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34469
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34470
f_charbig = 'just inserted'
 
34471
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34472
DELETE FROM t0_aux
 
34473
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34474
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34475
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34476
'just inserted' FROM t0_template
 
34477
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34478
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
34479
BEGIN
 
34480
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34481
f_charbig = 'updated by trigger'
 
34482
      WHERE f_int1 = new.f_int1;
 
34483
END|
 
34484
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34485
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34486
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34487
        
 
34488
# check trigger-2 success:      1
 
34489
DROP TRIGGER trg_1;
 
34490
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34491
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34492
f_charbig = 'just inserted'
 
34493
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34494
DELETE FROM t0_aux
 
34495
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34496
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34497
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34498
'just inserted' FROM t0_template
 
34499
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34500
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34501
BEGIN
 
34502
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34503
f_charbig = 'updated by trigger'
 
34504
      WHERE f_int1 = new.f_int1;
 
34505
END|
 
34506
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34507
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34508
        
 
34509
# check trigger-3 success:      1
 
34510
DROP TRIGGER trg_1;
 
34511
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34512
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34513
f_charbig = 'just inserted'
 
34514
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34515
DELETE FROM t0_aux
 
34516
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34517
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34518
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34519
'just inserted' FROM t0_template
 
34520
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34521
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34522
BEGIN
 
34523
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34524
f_charbig = 'updated by trigger'
 
34525
      WHERE f_int1 = - old.f_int1;
 
34526
END|
 
34527
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34528
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34529
        
 
34530
# check trigger-4 success:      1
 
34531
DROP TRIGGER trg_1;
 
34532
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34533
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34534
f_charbig = 'just inserted'
 
34535
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34536
DELETE FROM t0_aux
 
34537
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34538
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34539
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34540
'just inserted' FROM t0_template
 
34541
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34542
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34543
BEGIN
 
34544
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34545
f_charbig = 'updated by trigger'
 
34546
      WHERE f_int1 = new.f_int1;
 
34547
END|
 
34548
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34549
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34550
        
 
34551
# check trigger-5 success:      1
 
34552
DROP TRIGGER trg_1;
 
34553
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34554
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34555
f_charbig = 'just inserted'
 
34556
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34557
DELETE FROM t0_aux
 
34558
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34559
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34560
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34561
'just inserted' FROM t0_template
 
34562
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34563
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
34564
BEGIN
 
34565
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34566
f_charbig = 'updated by trigger'
 
34567
      WHERE f_int1 = - old.f_int1;
 
34568
END|
 
34569
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34570
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34571
        
 
34572
# check trigger-6 success:      1
 
34573
DROP TRIGGER trg_1;
 
34574
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34575
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34576
f_charbig = 'just inserted'
 
34577
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34578
DELETE FROM t0_aux
 
34579
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34580
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34581
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34582
'just inserted' FROM t0_template
 
34583
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34584
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
34585
BEGIN
 
34586
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34587
f_charbig = 'updated by trigger'
 
34588
      WHERE f_int1 = - old.f_int1;
 
34589
END|
 
34590
DELETE FROM t0_aux
 
34591
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34592
        
 
34593
# check trigger-7 success:      1
 
34594
DROP TRIGGER trg_1;
 
34595
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34596
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34597
f_charbig = 'just inserted'
 
34598
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34599
DELETE FROM t0_aux
 
34600
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34601
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34602
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34603
'just inserted' FROM t0_template
 
34604
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34605
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
34606
BEGIN
 
34607
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34608
f_charbig = 'updated by trigger'
 
34609
      WHERE f_int1 = - old.f_int1;
 
34610
END|
 
34611
DELETE FROM t0_aux
 
34612
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34613
        
 
34614
# check trigger-8 success:      1
 
34615
DROP TRIGGER trg_1;
 
34616
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34617
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34618
f_charbig = 'just inserted'
 
34619
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34620
DELETE FROM t0_aux
 
34621
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34622
DELETE FROM t1
 
34623
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34624
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
34625
BEGIN
 
34626
SET new.f_int1 = old.f_int1 + @max_row,
 
34627
new.f_int2 = old.f_int2 - @max_row,
 
34628
new.f_charbig = '####updated per update trigger####';
 
34629
END|
 
34630
UPDATE t1
 
34631
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
34632
f_charbig = '####updated per update statement itself####';
 
34633
        
 
34634
# check trigger-9 success:      1
 
34635
DROP TRIGGER trg_2;
 
34636
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34637
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34638
f_charbig = CONCAT('===',f_char1,'===');
 
34639
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
34640
BEGIN
 
34641
SET new.f_int1 = new.f_int1 + @max_row,
 
34642
new.f_int2 = new.f_int2 - @max_row,
 
34643
new.f_charbig = '####updated per update trigger####';
 
34644
END|
 
34645
UPDATE t1
 
34646
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
34647
f_charbig = '####updated per update statement itself####';
 
34648
        
 
34649
# check trigger-10 success:     1
 
34650
DROP TRIGGER trg_2;
 
34651
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34652
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34653
f_charbig = CONCAT('===',f_char1,'===');
 
34654
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
34655
BEGIN
 
34656
SET new.f_int1 = @my_max1 + @counter,
 
34657
new.f_int2 = @my_min2 - @counter,
 
34658
new.f_charbig = '####updated per insert trigger####';
 
34659
SET @counter = @counter + 1;
 
34660
END|
 
34661
SET @counter = 1;
 
34662
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
34663
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34664
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
34665
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
34666
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
34667
ORDER BY f_int1;
 
34668
DROP TRIGGER trg_3;
 
34669
        
 
34670
# check trigger-11 success:     1
 
34671
DELETE FROM t1
 
34672
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
34673
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
34674
AND f_charbig = '####updated per insert trigger####';
 
34675
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
34676
BEGIN
 
34677
SET new.f_int1 = @my_max1 + @counter,
 
34678
new.f_int2 = @my_min2 - @counter,
 
34679
new.f_charbig = '####updated per insert trigger####';
 
34680
SET @counter = @counter + 1;
 
34681
END|
 
34682
SET @counter = 1;
 
34683
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
34684
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
34685
SELECT CAST(f_int1 AS CHAR),
 
34686
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
34687
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
34688
ORDER BY f_int1;
 
34689
DROP TRIGGER trg_3;
 
34690
        
 
34691
# check trigger-12 success:     1
 
34692
DELETE FROM t1
 
34693
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
34694
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
34695
AND f_charbig = '####updated per insert trigger####';
 
34696
ANALYZE  TABLE t1;
 
34697
Table   Op      Msg_type        Msg_text
 
34698
test.t1 analyze status  OK
 
34699
CHECK    TABLE t1 EXTENDED;
 
34700
Table   Op      Msg_type        Msg_text
 
34701
test.t1 check   status  OK
 
34702
CHECKSUM TABLE t1 EXTENDED;
 
34703
Table   Checksum
 
34704
test.t1 <some_value>
 
34705
OPTIMIZE TABLE t1;
 
34706
Table   Op      Msg_type        Msg_text
 
34707
test.t1 optimize        status  OK
 
34708
# check layout success:    1
 
34709
REPAIR   TABLE t1 EXTENDED;
 
34710
Table   Op      Msg_type        Msg_text
 
34711
test.t1 repair  status  OK
 
34712
# check layout success:    1
 
34713
TRUNCATE t1;
 
34714
        
 
34715
# check TRUNCATE success:       1
 
34716
# check layout success:    1
 
34717
# End usability test (inc/partition_check.inc)
 
34718
DROP TABLE t1;
 
34719
CREATE TABLE t1 (
 
34720
f_int1 INTEGER,
 
34721
f_int2 INTEGER,
 
34722
f_char1 CHAR(20),
 
34723
f_char2 CHAR(20),
 
34724
f_charbig VARCHAR(1000)
 
34725
 
 
34726
)
 
34727
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
34728
(PARTITION part_1 VALUES IN (0)
 
34729
(SUBPARTITION sp11, SUBPARTITION sp12),
 
34730
PARTITION part_2 VALUES IN (1)
 
34731
(SUBPARTITION sp21, SUBPARTITION sp22),
 
34732
PARTITION part_3 VALUES IN (2)
 
34733
(SUBPARTITION sp31, SUBPARTITION sp32),
 
34734
PARTITION part_4 VALUES IN (NULL)
 
34735
(SUBPARTITION sp41, SUBPARTITION sp42));
 
34736
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34737
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
34738
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
34739
ALTER TABLE t1 REBUILD PARTITION part_1;
 
34740
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34741
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
34742
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
34743
# Start usability test (inc/partition_check.inc)
 
34744
create_command
 
34745
SHOW CREATE TABLE t1;
 
34746
Table   Create Table
 
34747
t1      CREATE TABLE `t1` (
 
34748
  `f_int1` int(11) DEFAULT NULL,
 
34749
  `f_int2` int(11) DEFAULT NULL,
 
34750
  `f_char1` char(20) DEFAULT NULL,
 
34751
  `f_char2` char(20) DEFAULT NULL,
 
34752
  `f_charbig` varchar(1000) DEFAULT NULL
 
34753
) ENGINE=MyISAM 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 = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
34754
 
 
34755
unified filelist
 
34756
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYD
 
34757
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYI
 
34758
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYD
 
34759
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYI
 
34760
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYD
 
34761
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYI
 
34762
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYD
 
34763
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYI
 
34764
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYD
 
34765
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYI
 
34766
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYD
 
34767
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYI
 
34768
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYD
 
34769
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYI
 
34770
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYD
 
34771
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYI
 
34772
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
34773
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
34774
 
 
34775
# check prerequisites-1 success:    1
 
34776
# check COUNT(*) success:    1
 
34777
# check MIN/MAX(f_int1) success:    1
 
34778
# check MIN/MAX(f_int2) success:    1
 
34779
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34780
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
34781
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
34782
WHERE f_int1 IN (2,3);
 
34783
# check prerequisites-3 success:    1
 
34784
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
34785
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
34786
# check read via f_int1 success: 1
 
34787
# check read via f_int2 success: 1
 
34788
        
 
34789
# check multiple-1 success:     1
 
34790
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
34791
        
 
34792
# check multiple-2 success:     1
 
34793
INSERT INTO t1 SELECT * FROM t0_template
 
34794
WHERE MOD(f_int1,3) = 0;
 
34795
        
 
34796
# check multiple-3 success:     1
 
34797
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
34798
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
34799
AND @max_row_div2 + @max_row_div4;
 
34800
        
 
34801
# check multiple-4 success:     1
 
34802
DELETE FROM t1
 
34803
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
34804
AND @max_row_div2 + @max_row_div4 + @max_row;
 
34805
        
 
34806
# check multiple-5 success:     1
 
34807
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
34808
INSERT INTO t1
 
34809
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
34810
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
34811
f_charbig = '#SINGLE#';
 
34812
        
 
34813
# check single-1 success:       1
 
34814
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
34815
INSERT INTO t1
 
34816
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
34817
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
34818
f_charbig = '#SINGLE#';
 
34819
        
 
34820
# check single-2 success:       1
 
34821
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
34822
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
34823
UPDATE t1 SET f_int1 = @cur_value2
 
34824
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
34825
        
 
34826
# check single-3 success:       1
 
34827
SET @cur_value1= -1;
 
34828
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
34829
UPDATE t1 SET f_int1 = @cur_value1
 
34830
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
34831
        
 
34832
# check single-4 success:       1
 
34833
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
34834
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
34835
        
 
34836
# check single-5 success:       1
 
34837
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
34838
        
 
34839
# check single-6 success:       1
 
34840
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
34841
        
 
34842
# check single-7 success:       1
 
34843
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
34844
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
34845
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
34846
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
34847
f_charbig = '#NULL#';
 
34848
INSERT INTO t1
 
34849
SET f_int1 = NULL , f_int2 = -@max_row,
 
34850
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
34851
f_charbig = '#NULL#';
 
34852
# check null success:    1
 
34853
        
 
34854
# check null-1 success:         1
 
34855
UPDATE t1 SET f_int1 = -@max_row
 
34856
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34857
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34858
        
 
34859
# check null-2 success:         1
 
34860
UPDATE t1 SET f_int1 = NULL
 
34861
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34862
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34863
        
 
34864
# check null-3 success:         1
 
34865
DELETE FROM t1
 
34866
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
34867
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
34868
        
 
34869
# check null-4 success:         1
 
34870
DELETE FROM t1
 
34871
WHERE f_int1 = 0 AND f_int2 = 0
 
34872
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
34873
AND f_charbig = '#NULL#';
 
34874
SET AUTOCOMMIT= 0;
 
34875
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34876
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34877
FROM t0_template source_tab
 
34878
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34879
        
 
34880
# check transactions-1 success:         1
 
34881
COMMIT WORK;
 
34882
        
 
34883
# check transactions-2 success:         1
 
34884
ROLLBACK WORK;
 
34885
        
 
34886
# check transactions-3 success:         1
 
34887
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34888
COMMIT WORK;
 
34889
ROLLBACK WORK;
 
34890
        
 
34891
# check transactions-4 success:         1
 
34892
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34893
SELECT f_int1, f_int1, '', '', 'was inserted'
 
34894
FROM t0_template source_tab
 
34895
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34896
        
 
34897
# check transactions-5 success:         1
 
34898
ROLLBACK WORK;
 
34899
Warnings:
 
34900
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
34901
        
 
34902
# check transactions-6 success:         1
 
34903
# INFO: Storage engine used for t1 seems to be not transactional.
 
34904
COMMIT;
 
34905
        
 
34906
# check transactions-7 success:         1
 
34907
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34908
COMMIT WORK;
 
34909
SET @@session.sql_mode = 'traditional';
 
34910
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
34911
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
34912
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
34913
'', '', 'was inserted' FROM t0_template
 
34914
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
34915
ERROR 22012: Division by 0
 
34916
COMMIT;
 
34917
        
 
34918
# check transactions-8 success:         1
 
34919
# INFO: Storage engine used for t1 seems to be unable to revert
 
34920
#       changes made by the failing statement.
 
34921
SET @@session.sql_mode = '';
 
34922
SET AUTOCOMMIT= 1;
 
34923
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
34924
COMMIT WORK;
 
34925
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
34926
        
 
34927
# check special-1 success:      1
 
34928
UPDATE t1 SET f_charbig = '';
 
34929
        
 
34930
# check special-2 success:      1
 
34931
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
34932
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34933
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
34934
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34935
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34936
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34937
'just inserted' FROM t0_template
 
34938
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34939
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
34940
BEGIN
 
34941
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34942
f_charbig = 'updated by trigger'
 
34943
      WHERE f_int1 = new.f_int1;
 
34944
END|
 
34945
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34946
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34947
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34948
        
 
34949
# check trigger-1 success:      1
 
34950
DROP TRIGGER trg_1;
 
34951
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34952
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34953
f_charbig = 'just inserted'
 
34954
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34955
DELETE FROM t0_aux
 
34956
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34957
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34958
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34959
'just inserted' FROM t0_template
 
34960
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34961
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
34962
BEGIN
 
34963
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34964
f_charbig = 'updated by trigger'
 
34965
      WHERE f_int1 = new.f_int1;
 
34966
END|
 
34967
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34968
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
34969
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34970
        
 
34971
# check trigger-2 success:      1
 
34972
DROP TRIGGER trg_1;
 
34973
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34974
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34975
f_charbig = 'just inserted'
 
34976
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34977
DELETE FROM t0_aux
 
34978
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34979
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
34980
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
34981
'just inserted' FROM t0_template
 
34982
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
34983
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
34984
BEGIN
 
34985
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
34986
f_charbig = 'updated by trigger'
 
34987
      WHERE f_int1 = new.f_int1;
 
34988
END|
 
34989
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
34990
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
34991
        
 
34992
# check trigger-3 success:      1
 
34993
DROP TRIGGER trg_1;
 
34994
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
34995
f_int2 = CAST(f_char1 AS SIGNED INT),
 
34996
f_charbig = 'just inserted'
 
34997
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
34998
DELETE FROM t0_aux
 
34999
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35000
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35001
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35002
'just inserted' FROM t0_template
 
35003
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35004
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
35005
BEGIN
 
35006
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35007
f_charbig = 'updated by trigger'
 
35008
      WHERE f_int1 = - old.f_int1;
 
35009
END|
 
35010
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35011
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35012
        
 
35013
# check trigger-4 success:      1
 
35014
DROP TRIGGER trg_1;
 
35015
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35016
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35017
f_charbig = 'just inserted'
 
35018
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35019
DELETE FROM t0_aux
 
35020
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35021
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35022
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35023
'just inserted' FROM t0_template
 
35024
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35025
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
35026
BEGIN
 
35027
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35028
f_charbig = 'updated by trigger'
 
35029
      WHERE f_int1 = new.f_int1;
 
35030
END|
 
35031
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35032
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35033
        
 
35034
# check trigger-5 success:      1
 
35035
DROP TRIGGER trg_1;
 
35036
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35037
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35038
f_charbig = 'just inserted'
 
35039
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35040
DELETE FROM t0_aux
 
35041
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35042
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35043
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35044
'just inserted' FROM t0_template
 
35045
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35046
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
35047
BEGIN
 
35048
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35049
f_charbig = 'updated by trigger'
 
35050
      WHERE f_int1 = - old.f_int1;
 
35051
END|
 
35052
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35053
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35054
        
 
35055
# check trigger-6 success:      1
 
35056
DROP TRIGGER trg_1;
 
35057
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35058
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35059
f_charbig = 'just inserted'
 
35060
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35061
DELETE FROM t0_aux
 
35062
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35063
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35064
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35065
'just inserted' FROM t0_template
 
35066
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35067
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
35068
BEGIN
 
35069
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35070
f_charbig = 'updated by trigger'
 
35071
      WHERE f_int1 = - old.f_int1;
 
35072
END|
 
35073
DELETE FROM t0_aux
 
35074
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35075
        
 
35076
# check trigger-7 success:      1
 
35077
DROP TRIGGER trg_1;
 
35078
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35079
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35080
f_charbig = 'just inserted'
 
35081
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35082
DELETE FROM t0_aux
 
35083
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35084
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35085
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35086
'just inserted' FROM t0_template
 
35087
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35088
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
35089
BEGIN
 
35090
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35091
f_charbig = 'updated by trigger'
 
35092
      WHERE f_int1 = - old.f_int1;
 
35093
END|
 
35094
DELETE FROM t0_aux
 
35095
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35096
        
 
35097
# check trigger-8 success:      1
 
35098
DROP TRIGGER trg_1;
 
35099
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35100
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35101
f_charbig = 'just inserted'
 
35102
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35103
DELETE FROM t0_aux
 
35104
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35105
DELETE FROM t1
 
35106
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35107
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
35108
BEGIN
 
35109
SET new.f_int1 = old.f_int1 + @max_row,
 
35110
new.f_int2 = old.f_int2 - @max_row,
 
35111
new.f_charbig = '####updated per update trigger####';
 
35112
END|
 
35113
UPDATE t1
 
35114
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
35115
f_charbig = '####updated per update statement itself####';
 
35116
        
 
35117
# check trigger-9 success:      1
 
35118
DROP TRIGGER trg_2;
 
35119
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35120
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35121
f_charbig = CONCAT('===',f_char1,'===');
 
35122
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
35123
BEGIN
 
35124
SET new.f_int1 = new.f_int1 + @max_row,
 
35125
new.f_int2 = new.f_int2 - @max_row,
 
35126
new.f_charbig = '####updated per update trigger####';
 
35127
END|
 
35128
UPDATE t1
 
35129
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
35130
f_charbig = '####updated per update statement itself####';
 
35131
        
 
35132
# check trigger-10 success:     1
 
35133
DROP TRIGGER trg_2;
 
35134
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35135
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35136
f_charbig = CONCAT('===',f_char1,'===');
 
35137
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
35138
BEGIN
 
35139
SET new.f_int1 = @my_max1 + @counter,
 
35140
new.f_int2 = @my_min2 - @counter,
 
35141
new.f_charbig = '####updated per insert trigger####';
 
35142
SET @counter = @counter + 1;
 
35143
END|
 
35144
SET @counter = 1;
 
35145
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
35146
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35147
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
35148
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
35149
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
35150
ORDER BY f_int1;
 
35151
DROP TRIGGER trg_3;
 
35152
        
 
35153
# check trigger-11 success:     1
 
35154
DELETE FROM t1
 
35155
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
35156
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
35157
AND f_charbig = '####updated per insert trigger####';
 
35158
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
35159
BEGIN
 
35160
SET new.f_int1 = @my_max1 + @counter,
 
35161
new.f_int2 = @my_min2 - @counter,
 
35162
new.f_charbig = '####updated per insert trigger####';
 
35163
SET @counter = @counter + 1;
 
35164
END|
 
35165
SET @counter = 1;
 
35166
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
35167
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
35168
SELECT CAST(f_int1 AS CHAR),
 
35169
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
35170
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
35171
ORDER BY f_int1;
 
35172
DROP TRIGGER trg_3;
 
35173
        
 
35174
# check trigger-12 success:     1
 
35175
DELETE FROM t1
 
35176
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
35177
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
35178
AND f_charbig = '####updated per insert trigger####';
 
35179
ANALYZE  TABLE t1;
 
35180
Table   Op      Msg_type        Msg_text
 
35181
test.t1 analyze status  OK
 
35182
CHECK    TABLE t1 EXTENDED;
 
35183
Table   Op      Msg_type        Msg_text
 
35184
test.t1 check   status  OK
 
35185
CHECKSUM TABLE t1 EXTENDED;
 
35186
Table   Checksum
 
35187
test.t1 <some_value>
 
35188
OPTIMIZE TABLE t1;
 
35189
Table   Op      Msg_type        Msg_text
 
35190
test.t1 optimize        status  OK
 
35191
# check layout success:    1
 
35192
REPAIR   TABLE t1 EXTENDED;
 
35193
Table   Op      Msg_type        Msg_text
 
35194
test.t1 repair  status  OK
 
35195
# check layout success:    1
 
35196
TRUNCATE t1;
 
35197
        
 
35198
# check TRUNCATE success:       1
 
35199
# check layout success:    1
 
35200
# End usability test (inc/partition_check.inc)
 
35201
DROP TABLE t1;
 
35202
CREATE TABLE t1 (
 
35203
f_int1 INTEGER,
 
35204
f_int2 INTEGER,
 
35205
f_char1 CHAR(20),
 
35206
f_char2 CHAR(20),
 
35207
f_charbig VARCHAR(1000)
 
35208
 
 
35209
)
 
35210
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
35211
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
35212
(PARTITION part_1 VALUES IN (0),
 
35213
 PARTITION part_2 VALUES IN (1),
 
35214
 PARTITION part_3 VALUES IN (NULL));
 
35215
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35216
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
35217
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
35218
ALTER TABLE t1 REBUILD PARTITION part_1;
 
35219
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35220
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
35221
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
35222
# Start usability test (inc/partition_check.inc)
 
35223
create_command
 
35224
SHOW CREATE TABLE t1;
 
35225
Table   Create Table
 
35226
t1      CREATE TABLE `t1` (
 
35227
  `f_int1` int(11) DEFAULT NULL,
 
35228
  `f_int2` int(11) DEFAULT NULL,
 
35229
  `f_char1` char(20) DEFAULT NULL,
 
35230
  `f_char2` char(20) DEFAULT NULL,
 
35231
  `f_charbig` varchar(1000) DEFAULT NULL
 
35232
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */
 
35233
 
 
35234
unified filelist
 
35235
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
35236
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
35237
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
35238
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
35239
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYD
 
35240
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYI
 
35241
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
35242
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
35243
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
35244
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
35245
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYD
 
35246
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYI
 
35247
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
35248
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
35249
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
35250
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
35251
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYD
 
35252
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYI
 
35253
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
35254
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
35255
 
 
35256
# check prerequisites-1 success:    1
 
35257
# check COUNT(*) success:    1
 
35258
# check MIN/MAX(f_int1) success:    1
 
35259
# check MIN/MAX(f_int2) success:    1
 
35260
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35261
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
35262
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
35263
WHERE f_int1 IN (2,3);
 
35264
# check prerequisites-3 success:    1
 
35265
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
35266
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
35267
# check read via f_int1 success: 1
 
35268
# check read via f_int2 success: 1
 
35269
        
 
35270
# check multiple-1 success:     1
 
35271
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
35272
        
 
35273
# check multiple-2 success:     1
 
35274
INSERT INTO t1 SELECT * FROM t0_template
 
35275
WHERE MOD(f_int1,3) = 0;
 
35276
        
 
35277
# check multiple-3 success:     1
 
35278
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
35279
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
35280
AND @max_row_div2 + @max_row_div4;
 
35281
        
 
35282
# check multiple-4 success:     1
 
35283
DELETE FROM t1
 
35284
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
35285
AND @max_row_div2 + @max_row_div4 + @max_row;
 
35286
        
 
35287
# check multiple-5 success:     1
 
35288
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
35289
INSERT INTO t1
 
35290
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
35291
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
35292
f_charbig = '#SINGLE#';
 
35293
        
 
35294
# check single-1 success:       1
 
35295
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
35296
INSERT INTO t1
 
35297
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
35298
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
35299
f_charbig = '#SINGLE#';
 
35300
        
 
35301
# check single-2 success:       1
 
35302
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
35303
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
35304
UPDATE t1 SET f_int1 = @cur_value2
 
35305
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
35306
        
 
35307
# check single-3 success:       1
 
35308
SET @cur_value1= -1;
 
35309
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
35310
UPDATE t1 SET f_int1 = @cur_value1
 
35311
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
35312
        
 
35313
# check single-4 success:       1
 
35314
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
35315
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
35316
        
 
35317
# check single-5 success:       1
 
35318
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
35319
        
 
35320
# check single-6 success:       1
 
35321
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
35322
        
 
35323
# check single-7 success:       1
 
35324
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
35325
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
35326
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
35327
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
35328
f_charbig = '#NULL#';
 
35329
INSERT INTO t1
 
35330
SET f_int1 = NULL , f_int2 = -@max_row,
 
35331
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
35332
f_charbig = '#NULL#';
 
35333
# check null success:    1
 
35334
        
 
35335
# check null-1 success:         1
 
35336
UPDATE t1 SET f_int1 = -@max_row
 
35337
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
35338
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
35339
        
 
35340
# check null-2 success:         1
 
35341
UPDATE t1 SET f_int1 = NULL
 
35342
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
35343
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
35344
        
 
35345
# check null-3 success:         1
 
35346
DELETE FROM t1
 
35347
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
35348
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
35349
        
 
35350
# check null-4 success:         1
 
35351
DELETE FROM t1
 
35352
WHERE f_int1 = 0 AND f_int2 = 0
 
35353
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
35354
AND f_charbig = '#NULL#';
 
35355
SET AUTOCOMMIT= 0;
 
35356
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35357
SELECT f_int1, f_int1, '', '', 'was inserted'
 
35358
FROM t0_template source_tab
 
35359
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35360
        
 
35361
# check transactions-1 success:         1
 
35362
COMMIT WORK;
 
35363
        
 
35364
# check transactions-2 success:         1
 
35365
ROLLBACK WORK;
 
35366
        
 
35367
# check transactions-3 success:         1
 
35368
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35369
COMMIT WORK;
 
35370
ROLLBACK WORK;
 
35371
        
 
35372
# check transactions-4 success:         1
 
35373
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35374
SELECT f_int1, f_int1, '', '', 'was inserted'
 
35375
FROM t0_template source_tab
 
35376
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35377
        
 
35378
# check transactions-5 success:         1
 
35379
ROLLBACK WORK;
 
35380
Warnings:
 
35381
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
35382
        
 
35383
# check transactions-6 success:         1
 
35384
# INFO: Storage engine used for t1 seems to be not transactional.
 
35385
COMMIT;
 
35386
        
 
35387
# check transactions-7 success:         1
 
35388
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35389
COMMIT WORK;
 
35390
SET @@session.sql_mode = 'traditional';
 
35391
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
35392
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35393
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
35394
'', '', 'was inserted' FROM t0_template
 
35395
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35396
ERROR 22012: Division by 0
 
35397
COMMIT;
 
35398
        
 
35399
# check transactions-8 success:         1
 
35400
# INFO: Storage engine used for t1 seems to be unable to revert
 
35401
#       changes made by the failing statement.
 
35402
SET @@session.sql_mode = '';
 
35403
SET AUTOCOMMIT= 1;
 
35404
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35405
COMMIT WORK;
 
35406
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
35407
        
 
35408
# check special-1 success:      1
 
35409
UPDATE t1 SET f_charbig = '';
 
35410
        
 
35411
# check special-2 success:      1
 
35412
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
35413
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35414
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
35415
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35416
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35417
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35418
'just inserted' FROM t0_template
 
35419
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35420
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
35421
BEGIN
 
35422
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35423
f_charbig = 'updated by trigger'
 
35424
      WHERE f_int1 = new.f_int1;
 
35425
END|
 
35426
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35427
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
35428
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35429
        
 
35430
# check trigger-1 success:      1
 
35431
DROP TRIGGER trg_1;
 
35432
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35433
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35434
f_charbig = 'just inserted'
 
35435
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35436
DELETE FROM t0_aux
 
35437
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35438
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35439
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35440
'just inserted' FROM t0_template
 
35441
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35442
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
35443
BEGIN
 
35444
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35445
f_charbig = 'updated by trigger'
 
35446
      WHERE f_int1 = new.f_int1;
 
35447
END|
 
35448
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35449
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
35450
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35451
        
 
35452
# check trigger-2 success:      1
 
35453
DROP TRIGGER trg_1;
 
35454
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35455
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35456
f_charbig = 'just inserted'
 
35457
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35458
DELETE FROM t0_aux
 
35459
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35460
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35461
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35462
'just inserted' FROM t0_template
 
35463
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35464
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
35465
BEGIN
 
35466
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35467
f_charbig = 'updated by trigger'
 
35468
      WHERE f_int1 = new.f_int1;
 
35469
END|
 
35470
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35471
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35472
        
 
35473
# check trigger-3 success:      1
 
35474
DROP TRIGGER trg_1;
 
35475
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35476
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35477
f_charbig = 'just inserted'
 
35478
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35479
DELETE FROM t0_aux
 
35480
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35481
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35482
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35483
'just inserted' FROM t0_template
 
35484
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35485
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
35486
BEGIN
 
35487
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35488
f_charbig = 'updated by trigger'
 
35489
      WHERE f_int1 = - old.f_int1;
 
35490
END|
 
35491
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35492
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35493
        
 
35494
# check trigger-4 success:      1
 
35495
DROP TRIGGER trg_1;
 
35496
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35497
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35498
f_charbig = 'just inserted'
 
35499
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35500
DELETE FROM t0_aux
 
35501
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35502
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35503
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35504
'just inserted' FROM t0_template
 
35505
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35506
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
35507
BEGIN
 
35508
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35509
f_charbig = 'updated by trigger'
 
35510
      WHERE f_int1 = new.f_int1;
 
35511
END|
 
35512
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35513
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35514
        
 
35515
# check trigger-5 success:      1
 
35516
DROP TRIGGER trg_1;
 
35517
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35518
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35519
f_charbig = 'just inserted'
 
35520
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35521
DELETE FROM t0_aux
 
35522
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35523
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35524
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35525
'just inserted' FROM t0_template
 
35526
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35527
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
35528
BEGIN
 
35529
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35530
f_charbig = 'updated by trigger'
 
35531
      WHERE f_int1 = - old.f_int1;
 
35532
END|
 
35533
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35534
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35535
        
 
35536
# check trigger-6 success:      1
 
35537
DROP TRIGGER trg_1;
 
35538
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35539
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35540
f_charbig = 'just inserted'
 
35541
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35542
DELETE FROM t0_aux
 
35543
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35544
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35545
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35546
'just inserted' FROM t0_template
 
35547
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35548
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
35549
BEGIN
 
35550
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35551
f_charbig = 'updated by trigger'
 
35552
      WHERE f_int1 = - old.f_int1;
 
35553
END|
 
35554
DELETE FROM t0_aux
 
35555
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35556
        
 
35557
# check trigger-7 success:      1
 
35558
DROP TRIGGER trg_1;
 
35559
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35560
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35561
f_charbig = 'just inserted'
 
35562
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35563
DELETE FROM t0_aux
 
35564
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35565
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35566
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35567
'just inserted' FROM t0_template
 
35568
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35569
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
35570
BEGIN
 
35571
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35572
f_charbig = 'updated by trigger'
 
35573
      WHERE f_int1 = - old.f_int1;
 
35574
END|
 
35575
DELETE FROM t0_aux
 
35576
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35577
        
 
35578
# check trigger-8 success:      1
 
35579
DROP TRIGGER trg_1;
 
35580
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35581
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35582
f_charbig = 'just inserted'
 
35583
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35584
DELETE FROM t0_aux
 
35585
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35586
DELETE FROM t1
 
35587
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35588
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
35589
BEGIN
 
35590
SET new.f_int1 = old.f_int1 + @max_row,
 
35591
new.f_int2 = old.f_int2 - @max_row,
 
35592
new.f_charbig = '####updated per update trigger####';
 
35593
END|
 
35594
UPDATE t1
 
35595
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
35596
f_charbig = '####updated per update statement itself####';
 
35597
        
 
35598
# check trigger-9 success:      1
 
35599
DROP TRIGGER trg_2;
 
35600
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35601
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35602
f_charbig = CONCAT('===',f_char1,'===');
 
35603
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
35604
BEGIN
 
35605
SET new.f_int1 = new.f_int1 + @max_row,
 
35606
new.f_int2 = new.f_int2 - @max_row,
 
35607
new.f_charbig = '####updated per update trigger####';
 
35608
END|
 
35609
UPDATE t1
 
35610
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
35611
f_charbig = '####updated per update statement itself####';
 
35612
        
 
35613
# check trigger-10 success:     1
 
35614
DROP TRIGGER trg_2;
 
35615
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35616
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35617
f_charbig = CONCAT('===',f_char1,'===');
 
35618
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
35619
BEGIN
 
35620
SET new.f_int1 = @my_max1 + @counter,
 
35621
new.f_int2 = @my_min2 - @counter,
 
35622
new.f_charbig = '####updated per insert trigger####';
 
35623
SET @counter = @counter + 1;
 
35624
END|
 
35625
SET @counter = 1;
 
35626
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
35627
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35628
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
35629
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
35630
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
35631
ORDER BY f_int1;
 
35632
DROP TRIGGER trg_3;
 
35633
        
 
35634
# check trigger-11 success:     1
 
35635
DELETE FROM t1
 
35636
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
35637
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
35638
AND f_charbig = '####updated per insert trigger####';
 
35639
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
35640
BEGIN
 
35641
SET new.f_int1 = @my_max1 + @counter,
 
35642
new.f_int2 = @my_min2 - @counter,
 
35643
new.f_charbig = '####updated per insert trigger####';
 
35644
SET @counter = @counter + 1;
 
35645
END|
 
35646
SET @counter = 1;
 
35647
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
35648
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
35649
SELECT CAST(f_int1 AS CHAR),
 
35650
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
35651
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
35652
ORDER BY f_int1;
 
35653
DROP TRIGGER trg_3;
 
35654
        
 
35655
# check trigger-12 success:     1
 
35656
DELETE FROM t1
 
35657
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
35658
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
35659
AND f_charbig = '####updated per insert trigger####';
 
35660
ANALYZE  TABLE t1;
 
35661
Table   Op      Msg_type        Msg_text
 
35662
test.t1 analyze status  OK
 
35663
CHECK    TABLE t1 EXTENDED;
 
35664
Table   Op      Msg_type        Msg_text
 
35665
test.t1 check   status  OK
 
35666
CHECKSUM TABLE t1 EXTENDED;
 
35667
Table   Checksum
 
35668
test.t1 <some_value>
 
35669
OPTIMIZE TABLE t1;
 
35670
Table   Op      Msg_type        Msg_text
 
35671
test.t1 optimize        status  OK
 
35672
# check layout success:    1
 
35673
REPAIR   TABLE t1 EXTENDED;
 
35674
Table   Op      Msg_type        Msg_text
 
35675
test.t1 repair  status  OK
 
35676
# check layout success:    1
 
35677
TRUNCATE t1;
 
35678
        
 
35679
# check TRUNCATE success:       1
 
35680
# check layout success:    1
 
35681
# End usability test (inc/partition_check.inc)
 
35682
DROP TABLE t1;
 
35683
#  5.2 ALTER ... REBUILD PARTITION part_1,part_2;
 
35684
DROP TABLE IF EXISTS t1;
 
35685
CREATE TABLE t1 (
 
35686
f_int1 INTEGER,
 
35687
f_int2 INTEGER,
 
35688
f_char1 CHAR(20),
 
35689
f_char2 CHAR(20),
 
35690
f_charbig VARCHAR(1000)
 
35691
 
 
35692
)
 
35693
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
35694
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35695
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
35696
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
35697
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
35698
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35699
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
35700
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
35701
# Start usability test (inc/partition_check.inc)
 
35702
create_command
 
35703
SHOW CREATE TABLE t1;
 
35704
Table   Create Table
 
35705
t1      CREATE TABLE `t1` (
 
35706
  `f_int1` int(11) DEFAULT NULL,
 
35707
  `f_int2` int(11) DEFAULT NULL,
 
35708
  `f_char1` char(20) DEFAULT NULL,
 
35709
  `f_char2` char(20) DEFAULT NULL,
 
35710
  `f_charbig` varchar(1000) DEFAULT NULL
 
35711
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */
 
35712
 
 
35713
unified filelist
 
35714
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
35715
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
35716
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
35717
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
35718
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
35719
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
35720
 
 
35721
# check prerequisites-1 success:    1
 
35722
# check COUNT(*) success:    1
 
35723
# check MIN/MAX(f_int1) success:    1
 
35724
# check MIN/MAX(f_int2) success:    1
 
35725
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35726
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
35727
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
35728
WHERE f_int1 IN (2,3);
 
35729
# check prerequisites-3 success:    1
 
35730
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
35731
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
35732
# check read via f_int1 success: 1
 
35733
# check read via f_int2 success: 1
 
35734
        
 
35735
# check multiple-1 success:     1
 
35736
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
35737
        
 
35738
# check multiple-2 success:     1
 
35739
INSERT INTO t1 SELECT * FROM t0_template
 
35740
WHERE MOD(f_int1,3) = 0;
 
35741
        
 
35742
# check multiple-3 success:     1
 
35743
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
35744
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
35745
AND @max_row_div2 + @max_row_div4;
 
35746
        
 
35747
# check multiple-4 success:     1
 
35748
DELETE FROM t1
 
35749
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
35750
AND @max_row_div2 + @max_row_div4 + @max_row;
 
35751
        
 
35752
# check multiple-5 success:     1
 
35753
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
35754
INSERT INTO t1
 
35755
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
35756
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
35757
f_charbig = '#SINGLE#';
 
35758
        
 
35759
# check single-1 success:       1
 
35760
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
35761
INSERT INTO t1
 
35762
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
35763
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
35764
f_charbig = '#SINGLE#';
 
35765
        
 
35766
# check single-2 success:       1
 
35767
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
35768
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
35769
UPDATE t1 SET f_int1 = @cur_value2
 
35770
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
35771
        
 
35772
# check single-3 success:       1
 
35773
SET @cur_value1= -1;
 
35774
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
35775
UPDATE t1 SET f_int1 = @cur_value1
 
35776
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
35777
        
 
35778
# check single-4 success:       1
 
35779
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
35780
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
35781
        
 
35782
# check single-5 success:       1
 
35783
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
35784
        
 
35785
# check single-6 success:       1
 
35786
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
35787
        
 
35788
# check single-7 success:       1
 
35789
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
35790
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
35791
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
35792
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
35793
f_charbig = '#NULL#';
 
35794
INSERT INTO t1
 
35795
SET f_int1 = NULL , f_int2 = -@max_row,
 
35796
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
35797
f_charbig = '#NULL#';
 
35798
# check null success:    1
 
35799
        
 
35800
# check null-1 success:         1
 
35801
UPDATE t1 SET f_int1 = -@max_row
 
35802
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
35803
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
35804
        
 
35805
# check null-2 success:         1
 
35806
UPDATE t1 SET f_int1 = NULL
 
35807
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
35808
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
35809
        
 
35810
# check null-3 success:         1
 
35811
DELETE FROM t1
 
35812
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
35813
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
35814
        
 
35815
# check null-4 success:         1
 
35816
DELETE FROM t1
 
35817
WHERE f_int1 = 0 AND f_int2 = 0
 
35818
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
35819
AND f_charbig = '#NULL#';
 
35820
SET AUTOCOMMIT= 0;
 
35821
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35822
SELECT f_int1, f_int1, '', '', 'was inserted'
 
35823
FROM t0_template source_tab
 
35824
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35825
        
 
35826
# check transactions-1 success:         1
 
35827
COMMIT WORK;
 
35828
        
 
35829
# check transactions-2 success:         1
 
35830
ROLLBACK WORK;
 
35831
        
 
35832
# check transactions-3 success:         1
 
35833
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35834
COMMIT WORK;
 
35835
ROLLBACK WORK;
 
35836
        
 
35837
# check transactions-4 success:         1
 
35838
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35839
SELECT f_int1, f_int1, '', '', 'was inserted'
 
35840
FROM t0_template source_tab
 
35841
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35842
        
 
35843
# check transactions-5 success:         1
 
35844
ROLLBACK WORK;
 
35845
Warnings:
 
35846
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
35847
        
 
35848
# check transactions-6 success:         1
 
35849
# INFO: Storage engine used for t1 seems to be not transactional.
 
35850
COMMIT;
 
35851
        
 
35852
# check transactions-7 success:         1
 
35853
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35854
COMMIT WORK;
 
35855
SET @@session.sql_mode = 'traditional';
 
35856
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
35857
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
35858
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
35859
'', '', 'was inserted' FROM t0_template
 
35860
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
35861
ERROR 22012: Division by 0
 
35862
COMMIT;
 
35863
        
 
35864
# check transactions-8 success:         1
 
35865
# INFO: Storage engine used for t1 seems to be unable to revert
 
35866
#       changes made by the failing statement.
 
35867
SET @@session.sql_mode = '';
 
35868
SET AUTOCOMMIT= 1;
 
35869
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
35870
COMMIT WORK;
 
35871
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
35872
        
 
35873
# check special-1 success:      1
 
35874
UPDATE t1 SET f_charbig = '';
 
35875
        
 
35876
# check special-2 success:      1
 
35877
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
35878
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35879
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
35880
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35881
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35882
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35883
'just inserted' FROM t0_template
 
35884
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35885
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
35886
BEGIN
 
35887
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35888
f_charbig = 'updated by trigger'
 
35889
      WHERE f_int1 = new.f_int1;
 
35890
END|
 
35891
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35892
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
35893
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35894
        
 
35895
# check trigger-1 success:      1
 
35896
DROP TRIGGER trg_1;
 
35897
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35898
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35899
f_charbig = 'just inserted'
 
35900
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35901
DELETE FROM t0_aux
 
35902
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35903
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35904
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35905
'just inserted' FROM t0_template
 
35906
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35907
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
35908
BEGIN
 
35909
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35910
f_charbig = 'updated by trigger'
 
35911
      WHERE f_int1 = new.f_int1;
 
35912
END|
 
35913
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35914
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
35915
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35916
        
 
35917
# check trigger-2 success:      1
 
35918
DROP TRIGGER trg_1;
 
35919
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35920
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35921
f_charbig = 'just inserted'
 
35922
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35923
DELETE FROM t0_aux
 
35924
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35925
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35926
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35927
'just inserted' FROM t0_template
 
35928
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35929
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
35930
BEGIN
 
35931
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35932
f_charbig = 'updated by trigger'
 
35933
      WHERE f_int1 = new.f_int1;
 
35934
END|
 
35935
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35936
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35937
        
 
35938
# check trigger-3 success:      1
 
35939
DROP TRIGGER trg_1;
 
35940
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35941
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35942
f_charbig = 'just inserted'
 
35943
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35944
DELETE FROM t0_aux
 
35945
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35946
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35947
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35948
'just inserted' FROM t0_template
 
35949
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35950
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
35951
BEGIN
 
35952
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35953
f_charbig = 'updated by trigger'
 
35954
      WHERE f_int1 = - old.f_int1;
 
35955
END|
 
35956
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35957
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35958
        
 
35959
# check trigger-4 success:      1
 
35960
DROP TRIGGER trg_1;
 
35961
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35962
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35963
f_charbig = 'just inserted'
 
35964
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35965
DELETE FROM t0_aux
 
35966
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35967
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35968
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35969
'just inserted' FROM t0_template
 
35970
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35971
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
35972
BEGIN
 
35973
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35974
f_charbig = 'updated by trigger'
 
35975
      WHERE f_int1 = new.f_int1;
 
35976
END|
 
35977
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35978
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
35979
        
 
35980
# check trigger-5 success:      1
 
35981
DROP TRIGGER trg_1;
 
35982
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
35983
f_int2 = CAST(f_char1 AS SIGNED INT),
 
35984
f_charbig = 'just inserted'
 
35985
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
35986
DELETE FROM t0_aux
 
35987
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35988
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
35989
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
35990
'just inserted' FROM t0_template
 
35991
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
35992
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
35993
BEGIN
 
35994
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
35995
f_charbig = 'updated by trigger'
 
35996
      WHERE f_int1 = - old.f_int1;
 
35997
END|
 
35998
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
35999
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36000
        
 
36001
# check trigger-6 success:      1
 
36002
DROP TRIGGER trg_1;
 
36003
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36004
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36005
f_charbig = 'just inserted'
 
36006
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36007
DELETE FROM t0_aux
 
36008
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36009
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36010
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36011
'just inserted' FROM t0_template
 
36012
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36013
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
36014
BEGIN
 
36015
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36016
f_charbig = 'updated by trigger'
 
36017
      WHERE f_int1 = - old.f_int1;
 
36018
END|
 
36019
DELETE FROM t0_aux
 
36020
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36021
        
 
36022
# check trigger-7 success:      1
 
36023
DROP TRIGGER trg_1;
 
36024
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36025
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36026
f_charbig = 'just inserted'
 
36027
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36028
DELETE FROM t0_aux
 
36029
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36030
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36031
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36032
'just inserted' FROM t0_template
 
36033
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36034
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
36035
BEGIN
 
36036
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36037
f_charbig = 'updated by trigger'
 
36038
      WHERE f_int1 = - old.f_int1;
 
36039
END|
 
36040
DELETE FROM t0_aux
 
36041
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36042
        
 
36043
# check trigger-8 success:      1
 
36044
DROP TRIGGER trg_1;
 
36045
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36046
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36047
f_charbig = 'just inserted'
 
36048
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36049
DELETE FROM t0_aux
 
36050
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36051
DELETE FROM t1
 
36052
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36053
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
36054
BEGIN
 
36055
SET new.f_int1 = old.f_int1 + @max_row,
 
36056
new.f_int2 = old.f_int2 - @max_row,
 
36057
new.f_charbig = '####updated per update trigger####';
 
36058
END|
 
36059
UPDATE t1
 
36060
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
36061
f_charbig = '####updated per update statement itself####';
 
36062
        
 
36063
# check trigger-9 success:      1
 
36064
DROP TRIGGER trg_2;
 
36065
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36066
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36067
f_charbig = CONCAT('===',f_char1,'===');
 
36068
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
36069
BEGIN
 
36070
SET new.f_int1 = new.f_int1 + @max_row,
 
36071
new.f_int2 = new.f_int2 - @max_row,
 
36072
new.f_charbig = '####updated per update trigger####';
 
36073
END|
 
36074
UPDATE t1
 
36075
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
36076
f_charbig = '####updated per update statement itself####';
 
36077
        
 
36078
# check trigger-10 success:     1
 
36079
DROP TRIGGER trg_2;
 
36080
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36081
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36082
f_charbig = CONCAT('===',f_char1,'===');
 
36083
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
36084
BEGIN
 
36085
SET new.f_int1 = @my_max1 + @counter,
 
36086
new.f_int2 = @my_min2 - @counter,
 
36087
new.f_charbig = '####updated per insert trigger####';
 
36088
SET @counter = @counter + 1;
 
36089
END|
 
36090
SET @counter = 1;
 
36091
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
36092
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36093
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
36094
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
36095
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
36096
ORDER BY f_int1;
 
36097
DROP TRIGGER trg_3;
 
36098
        
 
36099
# check trigger-11 success:     1
 
36100
DELETE FROM t1
 
36101
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
36102
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
36103
AND f_charbig = '####updated per insert trigger####';
 
36104
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
36105
BEGIN
 
36106
SET new.f_int1 = @my_max1 + @counter,
 
36107
new.f_int2 = @my_min2 - @counter,
 
36108
new.f_charbig = '####updated per insert trigger####';
 
36109
SET @counter = @counter + 1;
 
36110
END|
 
36111
SET @counter = 1;
 
36112
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
36113
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
36114
SELECT CAST(f_int1 AS CHAR),
 
36115
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
36116
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
36117
ORDER BY f_int1;
 
36118
DROP TRIGGER trg_3;
 
36119
        
 
36120
# check trigger-12 success:     1
 
36121
DELETE FROM t1
 
36122
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
36123
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
36124
AND f_charbig = '####updated per insert trigger####';
 
36125
ANALYZE  TABLE t1;
 
36126
Table   Op      Msg_type        Msg_text
 
36127
test.t1 analyze status  OK
 
36128
CHECK    TABLE t1 EXTENDED;
 
36129
Table   Op      Msg_type        Msg_text
 
36130
test.t1 check   status  OK
 
36131
CHECKSUM TABLE t1 EXTENDED;
 
36132
Table   Checksum
 
36133
test.t1 <some_value>
 
36134
OPTIMIZE TABLE t1;
 
36135
Table   Op      Msg_type        Msg_text
 
36136
test.t1 optimize        status  OK
 
36137
# check layout success:    1
 
36138
REPAIR   TABLE t1 EXTENDED;
 
36139
Table   Op      Msg_type        Msg_text
 
36140
test.t1 repair  status  OK
 
36141
# check layout success:    1
 
36142
TRUNCATE t1;
 
36143
        
 
36144
# check TRUNCATE success:       1
 
36145
# check layout success:    1
 
36146
# End usability test (inc/partition_check.inc)
 
36147
DROP TABLE t1;
 
36148
CREATE TABLE t1 (
 
36149
f_int1 INTEGER,
 
36150
f_int2 INTEGER,
 
36151
f_char1 CHAR(20),
 
36152
f_char2 CHAR(20),
 
36153
f_charbig VARCHAR(1000)
 
36154
 
 
36155
)
 
36156
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
36157
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36158
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
36159
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
36160
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
36161
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36162
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
36163
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
36164
# Start usability test (inc/partition_check.inc)
 
36165
create_command
 
36166
SHOW CREATE TABLE t1;
 
36167
Table   Create Table
 
36168
t1      CREATE TABLE `t1` (
 
36169
  `f_int1` int(11) DEFAULT NULL,
 
36170
  `f_int2` int(11) DEFAULT NULL,
 
36171
  `f_char1` char(20) DEFAULT NULL,
 
36172
  `f_char2` char(20) DEFAULT NULL,
 
36173
  `f_charbig` varchar(1000) DEFAULT NULL
 
36174
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */
 
36175
 
 
36176
unified filelist
 
36177
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
36178
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
36179
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
36180
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
36181
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
36182
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
36183
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
36184
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
36185
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
36186
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
36187
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
36188
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
36189
 
 
36190
# check prerequisites-1 success:    1
 
36191
# check COUNT(*) success:    1
 
36192
# check MIN/MAX(f_int1) success:    1
 
36193
# check MIN/MAX(f_int2) success:    1
 
36194
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36195
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
36196
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
36197
WHERE f_int1 IN (2,3);
 
36198
# check prerequisites-3 success:    1
 
36199
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
36200
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
36201
# check read via f_int1 success: 1
 
36202
# check read via f_int2 success: 1
 
36203
        
 
36204
# check multiple-1 success:     1
 
36205
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
36206
        
 
36207
# check multiple-2 success:     1
 
36208
INSERT INTO t1 SELECT * FROM t0_template
 
36209
WHERE MOD(f_int1,3) = 0;
 
36210
        
 
36211
# check multiple-3 success:     1
 
36212
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
36213
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
36214
AND @max_row_div2 + @max_row_div4;
 
36215
        
 
36216
# check multiple-4 success:     1
 
36217
DELETE FROM t1
 
36218
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
36219
AND @max_row_div2 + @max_row_div4 + @max_row;
 
36220
        
 
36221
# check multiple-5 success:     1
 
36222
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
36223
INSERT INTO t1
 
36224
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
36225
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
36226
f_charbig = '#SINGLE#';
 
36227
        
 
36228
# check single-1 success:       1
 
36229
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
36230
INSERT INTO t1
 
36231
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
36232
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
36233
f_charbig = '#SINGLE#';
 
36234
        
 
36235
# check single-2 success:       1
 
36236
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
36237
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
36238
UPDATE t1 SET f_int1 = @cur_value2
 
36239
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
36240
        
 
36241
# check single-3 success:       1
 
36242
SET @cur_value1= -1;
 
36243
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
36244
UPDATE t1 SET f_int1 = @cur_value1
 
36245
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
36246
        
 
36247
# check single-4 success:       1
 
36248
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
36249
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
36250
        
 
36251
# check single-5 success:       1
 
36252
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
36253
        
 
36254
# check single-6 success:       1
 
36255
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
36256
        
 
36257
# check single-7 success:       1
 
36258
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
36259
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
36260
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
36261
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
36262
f_charbig = '#NULL#';
 
36263
INSERT INTO t1
 
36264
SET f_int1 = NULL , f_int2 = -@max_row,
 
36265
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
36266
f_charbig = '#NULL#';
 
36267
# check null success:    1
 
36268
        
 
36269
# check null-1 success:         1
 
36270
UPDATE t1 SET f_int1 = -@max_row
 
36271
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
36272
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
36273
        
 
36274
# check null-2 success:         1
 
36275
UPDATE t1 SET f_int1 = NULL
 
36276
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
36277
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
36278
        
 
36279
# check null-3 success:         1
 
36280
DELETE FROM t1
 
36281
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
36282
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
36283
        
 
36284
# check null-4 success:         1
 
36285
DELETE FROM t1
 
36286
WHERE f_int1 = 0 AND f_int2 = 0
 
36287
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
36288
AND f_charbig = '#NULL#';
 
36289
SET AUTOCOMMIT= 0;
 
36290
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36291
SELECT f_int1, f_int1, '', '', 'was inserted'
 
36292
FROM t0_template source_tab
 
36293
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
36294
        
 
36295
# check transactions-1 success:         1
 
36296
COMMIT WORK;
 
36297
        
 
36298
# check transactions-2 success:         1
 
36299
ROLLBACK WORK;
 
36300
        
 
36301
# check transactions-3 success:         1
 
36302
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36303
COMMIT WORK;
 
36304
ROLLBACK WORK;
 
36305
        
 
36306
# check transactions-4 success:         1
 
36307
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36308
SELECT f_int1, f_int1, '', '', 'was inserted'
 
36309
FROM t0_template source_tab
 
36310
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
36311
        
 
36312
# check transactions-5 success:         1
 
36313
ROLLBACK WORK;
 
36314
Warnings:
 
36315
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
36316
        
 
36317
# check transactions-6 success:         1
 
36318
# INFO: Storage engine used for t1 seems to be not transactional.
 
36319
COMMIT;
 
36320
        
 
36321
# check transactions-7 success:         1
 
36322
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36323
COMMIT WORK;
 
36324
SET @@session.sql_mode = 'traditional';
 
36325
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
36326
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36327
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
36328
'', '', 'was inserted' FROM t0_template
 
36329
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
36330
ERROR 22012: Division by 0
 
36331
COMMIT;
 
36332
        
 
36333
# check transactions-8 success:         1
 
36334
# INFO: Storage engine used for t1 seems to be unable to revert
 
36335
#       changes made by the failing statement.
 
36336
SET @@session.sql_mode = '';
 
36337
SET AUTOCOMMIT= 1;
 
36338
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36339
COMMIT WORK;
 
36340
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
36341
        
 
36342
# check special-1 success:      1
 
36343
UPDATE t1 SET f_charbig = '';
 
36344
        
 
36345
# check special-2 success:      1
 
36346
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
36347
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36348
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
36349
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36350
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36351
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36352
'just inserted' FROM t0_template
 
36353
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36354
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
36355
BEGIN
 
36356
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36357
f_charbig = 'updated by trigger'
 
36358
      WHERE f_int1 = new.f_int1;
 
36359
END|
 
36360
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36361
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
36362
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36363
        
 
36364
# check trigger-1 success:      1
 
36365
DROP TRIGGER trg_1;
 
36366
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36367
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36368
f_charbig = 'just inserted'
 
36369
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36370
DELETE FROM t0_aux
 
36371
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36372
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36373
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36374
'just inserted' FROM t0_template
 
36375
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36376
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
36377
BEGIN
 
36378
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36379
f_charbig = 'updated by trigger'
 
36380
      WHERE f_int1 = new.f_int1;
 
36381
END|
 
36382
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36383
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
36384
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36385
        
 
36386
# check trigger-2 success:      1
 
36387
DROP TRIGGER trg_1;
 
36388
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36389
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36390
f_charbig = 'just inserted'
 
36391
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36392
DELETE FROM t0_aux
 
36393
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36394
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36395
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36396
'just inserted' FROM t0_template
 
36397
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36398
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
36399
BEGIN
 
36400
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36401
f_charbig = 'updated by trigger'
 
36402
      WHERE f_int1 = new.f_int1;
 
36403
END|
 
36404
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36405
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36406
        
 
36407
# check trigger-3 success:      1
 
36408
DROP TRIGGER trg_1;
 
36409
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36410
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36411
f_charbig = 'just inserted'
 
36412
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36413
DELETE FROM t0_aux
 
36414
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36415
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36416
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36417
'just inserted' FROM t0_template
 
36418
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36419
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
36420
BEGIN
 
36421
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36422
f_charbig = 'updated by trigger'
 
36423
      WHERE f_int1 = - old.f_int1;
 
36424
END|
 
36425
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36426
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36427
        
 
36428
# check trigger-4 success:      1
 
36429
DROP TRIGGER trg_1;
 
36430
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36431
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36432
f_charbig = 'just inserted'
 
36433
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36434
DELETE FROM t0_aux
 
36435
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36436
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36437
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36438
'just inserted' FROM t0_template
 
36439
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36440
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
36441
BEGIN
 
36442
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36443
f_charbig = 'updated by trigger'
 
36444
      WHERE f_int1 = new.f_int1;
 
36445
END|
 
36446
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36447
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36448
        
 
36449
# check trigger-5 success:      1
 
36450
DROP TRIGGER trg_1;
 
36451
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36452
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36453
f_charbig = 'just inserted'
 
36454
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36455
DELETE FROM t0_aux
 
36456
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36457
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36458
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36459
'just inserted' FROM t0_template
 
36460
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36461
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
36462
BEGIN
 
36463
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36464
f_charbig = 'updated by trigger'
 
36465
      WHERE f_int1 = - old.f_int1;
 
36466
END|
 
36467
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36468
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36469
        
 
36470
# check trigger-6 success:      1
 
36471
DROP TRIGGER trg_1;
 
36472
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36473
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36474
f_charbig = 'just inserted'
 
36475
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36476
DELETE FROM t0_aux
 
36477
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36478
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36479
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36480
'just inserted' FROM t0_template
 
36481
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36482
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
36483
BEGIN
 
36484
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36485
f_charbig = 'updated by trigger'
 
36486
      WHERE f_int1 = - old.f_int1;
 
36487
END|
 
36488
DELETE FROM t0_aux
 
36489
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36490
        
 
36491
# check trigger-7 success:      1
 
36492
DROP TRIGGER trg_1;
 
36493
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36494
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36495
f_charbig = 'just inserted'
 
36496
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36497
DELETE FROM t0_aux
 
36498
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36499
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36500
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36501
'just inserted' FROM t0_template
 
36502
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36503
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
36504
BEGIN
 
36505
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36506
f_charbig = 'updated by trigger'
 
36507
      WHERE f_int1 = - old.f_int1;
 
36508
END|
 
36509
DELETE FROM t0_aux
 
36510
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36511
        
 
36512
# check trigger-8 success:      1
 
36513
DROP TRIGGER trg_1;
 
36514
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36515
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36516
f_charbig = 'just inserted'
 
36517
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36518
DELETE FROM t0_aux
 
36519
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36520
DELETE FROM t1
 
36521
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36522
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
36523
BEGIN
 
36524
SET new.f_int1 = old.f_int1 + @max_row,
 
36525
new.f_int2 = old.f_int2 - @max_row,
 
36526
new.f_charbig = '####updated per update trigger####';
 
36527
END|
 
36528
UPDATE t1
 
36529
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
36530
f_charbig = '####updated per update statement itself####';
 
36531
        
 
36532
# check trigger-9 success:      1
 
36533
DROP TRIGGER trg_2;
 
36534
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36535
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36536
f_charbig = CONCAT('===',f_char1,'===');
 
36537
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
36538
BEGIN
 
36539
SET new.f_int1 = new.f_int1 + @max_row,
 
36540
new.f_int2 = new.f_int2 - @max_row,
 
36541
new.f_charbig = '####updated per update trigger####';
 
36542
END|
 
36543
UPDATE t1
 
36544
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
36545
f_charbig = '####updated per update statement itself####';
 
36546
        
 
36547
# check trigger-10 success:     1
 
36548
DROP TRIGGER trg_2;
 
36549
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36550
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36551
f_charbig = CONCAT('===',f_char1,'===');
 
36552
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
36553
BEGIN
 
36554
SET new.f_int1 = @my_max1 + @counter,
 
36555
new.f_int2 = @my_min2 - @counter,
 
36556
new.f_charbig = '####updated per insert trigger####';
 
36557
SET @counter = @counter + 1;
 
36558
END|
 
36559
SET @counter = 1;
 
36560
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
36561
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36562
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
36563
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
36564
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
36565
ORDER BY f_int1;
 
36566
DROP TRIGGER trg_3;
 
36567
        
 
36568
# check trigger-11 success:     1
 
36569
DELETE FROM t1
 
36570
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
36571
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
36572
AND f_charbig = '####updated per insert trigger####';
 
36573
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
36574
BEGIN
 
36575
SET new.f_int1 = @my_max1 + @counter,
 
36576
new.f_int2 = @my_min2 - @counter,
 
36577
new.f_charbig = '####updated per insert trigger####';
 
36578
SET @counter = @counter + 1;
 
36579
END|
 
36580
SET @counter = 1;
 
36581
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
36582
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
36583
SELECT CAST(f_int1 AS CHAR),
 
36584
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
36585
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
36586
ORDER BY f_int1;
 
36587
DROP TRIGGER trg_3;
 
36588
        
 
36589
# check trigger-12 success:     1
 
36590
DELETE FROM t1
 
36591
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
36592
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
36593
AND f_charbig = '####updated per insert trigger####';
 
36594
ANALYZE  TABLE t1;
 
36595
Table   Op      Msg_type        Msg_text
 
36596
test.t1 analyze status  OK
 
36597
CHECK    TABLE t1 EXTENDED;
 
36598
Table   Op      Msg_type        Msg_text
 
36599
test.t1 check   status  OK
 
36600
CHECKSUM TABLE t1 EXTENDED;
 
36601
Table   Checksum
 
36602
test.t1 <some_value>
 
36603
OPTIMIZE TABLE t1;
 
36604
Table   Op      Msg_type        Msg_text
 
36605
test.t1 optimize        status  OK
 
36606
# check layout success:    1
 
36607
REPAIR   TABLE t1 EXTENDED;
 
36608
Table   Op      Msg_type        Msg_text
 
36609
test.t1 repair  status  OK
 
36610
# check layout success:    1
 
36611
TRUNCATE t1;
 
36612
        
 
36613
# check TRUNCATE success:       1
 
36614
# check layout success:    1
 
36615
# End usability test (inc/partition_check.inc)
 
36616
DROP TABLE t1;
 
36617
CREATE TABLE t1 (
 
36618
f_int1 INTEGER,
 
36619
f_int2 INTEGER,
 
36620
f_char1 CHAR(20),
 
36621
f_char2 CHAR(20),
 
36622
f_charbig VARCHAR(1000)
 
36623
 
 
36624
)
 
36625
PARTITION BY LIST(MOD(f_int1,4))
 
36626
(PARTITION part_3 VALUES IN (-3),
 
36627
PARTITION part_2 VALUES IN (-2),
 
36628
PARTITION part_1 VALUES IN (-1),
 
36629
PARTITION part_N VALUES IN (NULL),
 
36630
PARTITION part0 VALUES IN (0),
 
36631
PARTITION part1 VALUES IN (1),
 
36632
PARTITION part2 VALUES IN (2),
 
36633
PARTITION part3 VALUES IN (3));
 
36634
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36635
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
36636
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
36637
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
36638
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36639
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
36640
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
36641
# Start usability test (inc/partition_check.inc)
 
36642
create_command
 
36643
SHOW CREATE TABLE t1;
 
36644
Table   Create Table
 
36645
t1      CREATE TABLE `t1` (
 
36646
  `f_int1` int(11) DEFAULT NULL,
 
36647
  `f_int2` int(11) DEFAULT NULL,
 
36648
  `f_char1` char(20) DEFAULT NULL,
 
36649
  `f_char2` char(20) DEFAULT NULL,
 
36650
  `f_charbig` varchar(1000) DEFAULT NULL
 
36651
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */
 
36652
 
 
36653
unified filelist
 
36654
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
 
36655
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI
 
36656
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD
 
36657
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI
 
36658
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD
 
36659
$MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI
 
36660
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD
 
36661
$MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI
 
36662
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
36663
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
36664
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
36665
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
36666
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
36667
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
36668
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD
 
36669
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI
 
36670
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
36671
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
36672
 
 
36673
# check prerequisites-1 success:    1
 
36674
# check COUNT(*) success:    1
 
36675
# check MIN/MAX(f_int1) success:    1
 
36676
# check MIN/MAX(f_int2) success:    1
 
36677
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36678
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
36679
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
36680
WHERE f_int1 IN (2,3);
 
36681
# check prerequisites-3 success:    1
 
36682
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
36683
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
36684
# check read via f_int1 success: 1
 
36685
# check read via f_int2 success: 1
 
36686
        
 
36687
# check multiple-1 success:     1
 
36688
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
36689
        
 
36690
# check multiple-2 success:     1
 
36691
INSERT INTO t1 SELECT * FROM t0_template
 
36692
WHERE MOD(f_int1,3) = 0;
 
36693
        
 
36694
# check multiple-3 success:     1
 
36695
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
36696
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
36697
AND @max_row_div2 + @max_row_div4;
 
36698
        
 
36699
# check multiple-4 success:     1
 
36700
DELETE FROM t1
 
36701
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
36702
AND @max_row_div2 + @max_row_div4 + @max_row;
 
36703
        
 
36704
# check multiple-5 success:     1
 
36705
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
36706
INSERT INTO t1
 
36707
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
36708
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
36709
f_charbig = '#SINGLE#';
 
36710
        
 
36711
# check single-1 success:       1
 
36712
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
36713
INSERT INTO t1
 
36714
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
36715
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
36716
f_charbig = '#SINGLE#';
 
36717
        
 
36718
# check single-2 success:       1
 
36719
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
36720
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
36721
UPDATE t1 SET f_int1 = @cur_value2
 
36722
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
36723
        
 
36724
# check single-3 success:       1
 
36725
SET @cur_value1= -1;
 
36726
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
36727
UPDATE t1 SET f_int1 = @cur_value1
 
36728
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
36729
        
 
36730
# check single-4 success:       1
 
36731
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
36732
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
36733
        
 
36734
# check single-5 success:       1
 
36735
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
36736
        
 
36737
# check single-6 success:       1
 
36738
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
36739
        
 
36740
# check single-7 success:       1
 
36741
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
36742
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
36743
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
36744
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
36745
f_charbig = '#NULL#';
 
36746
INSERT INTO t1
 
36747
SET f_int1 = NULL , f_int2 = -@max_row,
 
36748
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
36749
f_charbig = '#NULL#';
 
36750
# check null success:    1
 
36751
        
 
36752
# check null-1 success:         1
 
36753
UPDATE t1 SET f_int1 = -@max_row
 
36754
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
36755
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
36756
        
 
36757
# check null-2 success:         1
 
36758
UPDATE t1 SET f_int1 = NULL
 
36759
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
36760
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
36761
        
 
36762
# check null-3 success:         1
 
36763
DELETE FROM t1
 
36764
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
36765
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
36766
        
 
36767
# check null-4 success:         1
 
36768
DELETE FROM t1
 
36769
WHERE f_int1 = 0 AND f_int2 = 0
 
36770
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
36771
AND f_charbig = '#NULL#';
 
36772
SET AUTOCOMMIT= 0;
 
36773
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36774
SELECT f_int1, f_int1, '', '', 'was inserted'
 
36775
FROM t0_template source_tab
 
36776
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
36777
        
 
36778
# check transactions-1 success:         1
 
36779
COMMIT WORK;
 
36780
        
 
36781
# check transactions-2 success:         1
 
36782
ROLLBACK WORK;
 
36783
        
 
36784
# check transactions-3 success:         1
 
36785
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36786
COMMIT WORK;
 
36787
ROLLBACK WORK;
 
36788
        
 
36789
# check transactions-4 success:         1
 
36790
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36791
SELECT f_int1, f_int1, '', '', 'was inserted'
 
36792
FROM t0_template source_tab
 
36793
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
36794
        
 
36795
# check transactions-5 success:         1
 
36796
ROLLBACK WORK;
 
36797
Warnings:
 
36798
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
36799
        
 
36800
# check transactions-6 success:         1
 
36801
# INFO: Storage engine used for t1 seems to be not transactional.
 
36802
COMMIT;
 
36803
        
 
36804
# check transactions-7 success:         1
 
36805
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36806
COMMIT WORK;
 
36807
SET @@session.sql_mode = 'traditional';
 
36808
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
36809
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
36810
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
36811
'', '', 'was inserted' FROM t0_template
 
36812
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
36813
ERROR 22012: Division by 0
 
36814
COMMIT;
 
36815
        
 
36816
# check transactions-8 success:         1
 
36817
# INFO: Storage engine used for t1 seems to be unable to revert
 
36818
#       changes made by the failing statement.
 
36819
SET @@session.sql_mode = '';
 
36820
SET AUTOCOMMIT= 1;
 
36821
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
36822
COMMIT WORK;
 
36823
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
36824
        
 
36825
# check special-1 success:      1
 
36826
UPDATE t1 SET f_charbig = '';
 
36827
        
 
36828
# check special-2 success:      1
 
36829
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
36830
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36831
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
36832
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36833
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36834
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36835
'just inserted' FROM t0_template
 
36836
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36837
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
36838
BEGIN
 
36839
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36840
f_charbig = 'updated by trigger'
 
36841
      WHERE f_int1 = new.f_int1;
 
36842
END|
 
36843
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36844
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
36845
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36846
        
 
36847
# check trigger-1 success:      1
 
36848
DROP TRIGGER trg_1;
 
36849
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36850
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36851
f_charbig = 'just inserted'
 
36852
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36853
DELETE FROM t0_aux
 
36854
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36855
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36856
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36857
'just inserted' FROM t0_template
 
36858
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36859
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
36860
BEGIN
 
36861
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36862
f_charbig = 'updated by trigger'
 
36863
      WHERE f_int1 = new.f_int1;
 
36864
END|
 
36865
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36866
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
36867
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36868
        
 
36869
# check trigger-2 success:      1
 
36870
DROP TRIGGER trg_1;
 
36871
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36872
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36873
f_charbig = 'just inserted'
 
36874
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36875
DELETE FROM t0_aux
 
36876
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36877
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36878
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36879
'just inserted' FROM t0_template
 
36880
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36881
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
36882
BEGIN
 
36883
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36884
f_charbig = 'updated by trigger'
 
36885
      WHERE f_int1 = new.f_int1;
 
36886
END|
 
36887
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36888
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36889
        
 
36890
# check trigger-3 success:      1
 
36891
DROP TRIGGER trg_1;
 
36892
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36893
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36894
f_charbig = 'just inserted'
 
36895
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36896
DELETE FROM t0_aux
 
36897
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36898
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36899
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36900
'just inserted' FROM t0_template
 
36901
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36902
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
36903
BEGIN
 
36904
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36905
f_charbig = 'updated by trigger'
 
36906
      WHERE f_int1 = - old.f_int1;
 
36907
END|
 
36908
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36909
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36910
        
 
36911
# check trigger-4 success:      1
 
36912
DROP TRIGGER trg_1;
 
36913
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36914
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36915
f_charbig = 'just inserted'
 
36916
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36917
DELETE FROM t0_aux
 
36918
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36919
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36920
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36921
'just inserted' FROM t0_template
 
36922
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36923
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
36924
BEGIN
 
36925
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36926
f_charbig = 'updated by trigger'
 
36927
      WHERE f_int1 = new.f_int1;
 
36928
END|
 
36929
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36930
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36931
        
 
36932
# check trigger-5 success:      1
 
36933
DROP TRIGGER trg_1;
 
36934
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36935
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36936
f_charbig = 'just inserted'
 
36937
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36938
DELETE FROM t0_aux
 
36939
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36940
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36941
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36942
'just inserted' FROM t0_template
 
36943
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36944
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
36945
BEGIN
 
36946
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36947
f_charbig = 'updated by trigger'
 
36948
      WHERE f_int1 = - old.f_int1;
 
36949
END|
 
36950
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
36951
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36952
        
 
36953
# check trigger-6 success:      1
 
36954
DROP TRIGGER trg_1;
 
36955
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36956
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36957
f_charbig = 'just inserted'
 
36958
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36959
DELETE FROM t0_aux
 
36960
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36961
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36962
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36963
'just inserted' FROM t0_template
 
36964
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36965
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
36966
BEGIN
 
36967
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36968
f_charbig = 'updated by trigger'
 
36969
      WHERE f_int1 = - old.f_int1;
 
36970
END|
 
36971
DELETE FROM t0_aux
 
36972
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36973
        
 
36974
# check trigger-7 success:      1
 
36975
DROP TRIGGER trg_1;
 
36976
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36977
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36978
f_charbig = 'just inserted'
 
36979
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
36980
DELETE FROM t0_aux
 
36981
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36982
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
36983
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
36984
'just inserted' FROM t0_template
 
36985
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
36986
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
36987
BEGIN
 
36988
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
36989
f_charbig = 'updated by trigger'
 
36990
      WHERE f_int1 = - old.f_int1;
 
36991
END|
 
36992
DELETE FROM t0_aux
 
36993
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
36994
        
 
36995
# check trigger-8 success:      1
 
36996
DROP TRIGGER trg_1;
 
36997
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
36998
f_int2 = CAST(f_char1 AS SIGNED INT),
 
36999
f_charbig = 'just inserted'
 
37000
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37001
DELETE FROM t0_aux
 
37002
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37003
DELETE FROM t1
 
37004
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37005
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
37006
BEGIN
 
37007
SET new.f_int1 = old.f_int1 + @max_row,
 
37008
new.f_int2 = old.f_int2 - @max_row,
 
37009
new.f_charbig = '####updated per update trigger####';
 
37010
END|
 
37011
UPDATE t1
 
37012
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
37013
f_charbig = '####updated per update statement itself####';
 
37014
        
 
37015
# check trigger-9 success:      1
 
37016
DROP TRIGGER trg_2;
 
37017
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37018
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37019
f_charbig = CONCAT('===',f_char1,'===');
 
37020
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
37021
BEGIN
 
37022
SET new.f_int1 = new.f_int1 + @max_row,
 
37023
new.f_int2 = new.f_int2 - @max_row,
 
37024
new.f_charbig = '####updated per update trigger####';
 
37025
END|
 
37026
UPDATE t1
 
37027
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
37028
f_charbig = '####updated per update statement itself####';
 
37029
        
 
37030
# check trigger-10 success:     1
 
37031
DROP TRIGGER trg_2;
 
37032
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37033
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37034
f_charbig = CONCAT('===',f_char1,'===');
 
37035
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
37036
BEGIN
 
37037
SET new.f_int1 = @my_max1 + @counter,
 
37038
new.f_int2 = @my_min2 - @counter,
 
37039
new.f_charbig = '####updated per insert trigger####';
 
37040
SET @counter = @counter + 1;
 
37041
END|
 
37042
SET @counter = 1;
 
37043
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
37044
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37045
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
37046
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
37047
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
37048
ORDER BY f_int1;
 
37049
DROP TRIGGER trg_3;
 
37050
        
 
37051
# check trigger-11 success:     1
 
37052
DELETE FROM t1
 
37053
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
37054
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
37055
AND f_charbig = '####updated per insert trigger####';
 
37056
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
37057
BEGIN
 
37058
SET new.f_int1 = @my_max1 + @counter,
 
37059
new.f_int2 = @my_min2 - @counter,
 
37060
new.f_charbig = '####updated per insert trigger####';
 
37061
SET @counter = @counter + 1;
 
37062
END|
 
37063
SET @counter = 1;
 
37064
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
37065
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
37066
SELECT CAST(f_int1 AS CHAR),
 
37067
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
37068
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
37069
ORDER BY f_int1;
 
37070
DROP TRIGGER trg_3;
 
37071
        
 
37072
# check trigger-12 success:     1
 
37073
DELETE FROM t1
 
37074
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
37075
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
37076
AND f_charbig = '####updated per insert trigger####';
 
37077
ANALYZE  TABLE t1;
 
37078
Table   Op      Msg_type        Msg_text
 
37079
test.t1 analyze status  OK
 
37080
CHECK    TABLE t1 EXTENDED;
 
37081
Table   Op      Msg_type        Msg_text
 
37082
test.t1 check   status  OK
 
37083
CHECKSUM TABLE t1 EXTENDED;
 
37084
Table   Checksum
 
37085
test.t1 <some_value>
 
37086
OPTIMIZE TABLE t1;
 
37087
Table   Op      Msg_type        Msg_text
 
37088
test.t1 optimize        status  OK
 
37089
# check layout success:    1
 
37090
REPAIR   TABLE t1 EXTENDED;
 
37091
Table   Op      Msg_type        Msg_text
 
37092
test.t1 repair  status  OK
 
37093
# check layout success:    1
 
37094
TRUNCATE t1;
 
37095
        
 
37096
# check TRUNCATE success:       1
 
37097
# check layout success:    1
 
37098
# End usability test (inc/partition_check.inc)
 
37099
DROP TABLE t1;
 
37100
CREATE TABLE t1 (
 
37101
f_int1 INTEGER,
 
37102
f_int2 INTEGER,
 
37103
f_char1 CHAR(20),
 
37104
f_char2 CHAR(20),
 
37105
f_charbig VARCHAR(1000)
 
37106
 
 
37107
)
 
37108
PARTITION BY RANGE(f_int1)
 
37109
(PARTITION parta VALUES LESS THAN (0),
 
37110
PARTITION part_1 VALUES LESS THAN (5),
 
37111
PARTITION part_2 VALUES LESS THAN (10),
 
37112
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
37113
PARTITION part_4 VALUES LESS THAN (20),
 
37114
PARTITION part_5 VALUES LESS THAN (2147483646));
 
37115
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37116
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
37117
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
37118
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
37119
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37120
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
37121
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
37122
# Start usability test (inc/partition_check.inc)
 
37123
create_command
 
37124
SHOW CREATE TABLE t1;
 
37125
Table   Create Table
 
37126
t1      CREATE TABLE `t1` (
 
37127
  `f_int1` int(11) DEFAULT NULL,
 
37128
  `f_int2` int(11) DEFAULT NULL,
 
37129
  `f_char1` char(20) DEFAULT NULL,
 
37130
  `f_char2` char(20) DEFAULT NULL,
 
37131
  `f_charbig` varchar(1000) DEFAULT NULL
 
37132
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
37133
 
 
37134
unified filelist
 
37135
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD
 
37136
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI
 
37137
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD
 
37138
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI
 
37139
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD
 
37140
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI
 
37141
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYD
 
37142
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4.MYI
 
37143
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYD
 
37144
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_5.MYI
 
37145
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
 
37146
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI
 
37147
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
37148
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
37149
 
 
37150
# check prerequisites-1 success:    1
 
37151
# check COUNT(*) success:    1
 
37152
# check MIN/MAX(f_int1) success:    1
 
37153
# check MIN/MAX(f_int2) success:    1
 
37154
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37155
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
37156
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
37157
WHERE f_int1 IN (2,3);
 
37158
# check prerequisites-3 success:    1
 
37159
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
37160
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
37161
# check read via f_int1 success: 1
 
37162
# check read via f_int2 success: 1
 
37163
        
 
37164
# check multiple-1 success:     1
 
37165
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
37166
        
 
37167
# check multiple-2 success:     1
 
37168
INSERT INTO t1 SELECT * FROM t0_template
 
37169
WHERE MOD(f_int1,3) = 0;
 
37170
        
 
37171
# check multiple-3 success:     1
 
37172
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
37173
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
37174
AND @max_row_div2 + @max_row_div4;
 
37175
        
 
37176
# check multiple-4 success:     1
 
37177
DELETE FROM t1
 
37178
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
37179
AND @max_row_div2 + @max_row_div4 + @max_row;
 
37180
        
 
37181
# check multiple-5 success:     1
 
37182
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
37183
INSERT INTO t1
 
37184
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
37185
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
37186
f_charbig = '#SINGLE#';
 
37187
        
 
37188
# check single-1 success:       1
 
37189
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
37190
INSERT INTO t1
 
37191
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
37192
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
37193
f_charbig = '#SINGLE#';
 
37194
        
 
37195
# check single-2 success:       1
 
37196
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
37197
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
37198
UPDATE t1 SET f_int1 = @cur_value2
 
37199
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
37200
        
 
37201
# check single-3 success:       1
 
37202
SET @cur_value1= -1;
 
37203
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
37204
UPDATE t1 SET f_int1 = @cur_value1
 
37205
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
37206
        
 
37207
# check single-4 success:       1
 
37208
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
37209
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
37210
        
 
37211
# check single-5 success:       1
 
37212
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
37213
        
 
37214
# check single-6 success:       1
 
37215
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
37216
ERROR HY000: Table has no partition for value 2147483647
 
37217
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
37218
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
37219
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
37220
f_charbig = '#NULL#';
 
37221
INSERT INTO t1
 
37222
SET f_int1 = NULL , f_int2 = -@max_row,
 
37223
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
37224
f_charbig = '#NULL#';
 
37225
# check null success:    1
 
37226
        
 
37227
# check null-1 success:         1
 
37228
UPDATE t1 SET f_int1 = -@max_row
 
37229
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
37230
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
37231
        
 
37232
# check null-2 success:         1
 
37233
UPDATE t1 SET f_int1 = NULL
 
37234
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
37235
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
37236
        
 
37237
# check null-3 success:         1
 
37238
DELETE FROM t1
 
37239
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
37240
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
37241
        
 
37242
# check null-4 success:         1
 
37243
DELETE FROM t1
 
37244
WHERE f_int1 = 0 AND f_int2 = 0
 
37245
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
37246
AND f_charbig = '#NULL#';
 
37247
SET AUTOCOMMIT= 0;
 
37248
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37249
SELECT f_int1, f_int1, '', '', 'was inserted'
 
37250
FROM t0_template source_tab
 
37251
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
37252
        
 
37253
# check transactions-1 success:         1
 
37254
COMMIT WORK;
 
37255
        
 
37256
# check transactions-2 success:         1
 
37257
ROLLBACK WORK;
 
37258
        
 
37259
# check transactions-3 success:         1
 
37260
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
37261
COMMIT WORK;
 
37262
ROLLBACK WORK;
 
37263
        
 
37264
# check transactions-4 success:         1
 
37265
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37266
SELECT f_int1, f_int1, '', '', 'was inserted'
 
37267
FROM t0_template source_tab
 
37268
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
37269
        
 
37270
# check transactions-5 success:         1
 
37271
ROLLBACK WORK;
 
37272
Warnings:
 
37273
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
37274
        
 
37275
# check transactions-6 success:         1
 
37276
# INFO: Storage engine used for t1 seems to be not transactional.
 
37277
COMMIT;
 
37278
        
 
37279
# check transactions-7 success:         1
 
37280
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
37281
COMMIT WORK;
 
37282
SET @@session.sql_mode = 'traditional';
 
37283
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
37284
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37285
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
37286
'', '', 'was inserted' FROM t0_template
 
37287
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
37288
ERROR 22012: Division by 0
 
37289
COMMIT;
 
37290
        
 
37291
# check transactions-8 success:         1
 
37292
# INFO: Storage engine used for t1 seems to be unable to revert
 
37293
#       changes made by the failing statement.
 
37294
SET @@session.sql_mode = '';
 
37295
SET AUTOCOMMIT= 1;
 
37296
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
37297
COMMIT WORK;
 
37298
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
37299
        
 
37300
# check special-1 success:      1
 
37301
UPDATE t1 SET f_charbig = '';
 
37302
        
 
37303
# check special-2 success:      1
 
37304
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
37305
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37306
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
37307
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37308
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37309
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37310
'just inserted' FROM t0_template
 
37311
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37312
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
37313
BEGIN
 
37314
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37315
f_charbig = 'updated by trigger'
 
37316
      WHERE f_int1 = new.f_int1;
 
37317
END|
 
37318
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37319
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
37320
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37321
        
 
37322
# check trigger-1 success:      1
 
37323
DROP TRIGGER trg_1;
 
37324
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37325
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37326
f_charbig = 'just inserted'
 
37327
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37328
DELETE FROM t0_aux
 
37329
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37330
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37331
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37332
'just inserted' FROM t0_template
 
37333
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37334
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
37335
BEGIN
 
37336
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37337
f_charbig = 'updated by trigger'
 
37338
      WHERE f_int1 = new.f_int1;
 
37339
END|
 
37340
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37341
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
37342
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37343
        
 
37344
# check trigger-2 success:      1
 
37345
DROP TRIGGER trg_1;
 
37346
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37347
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37348
f_charbig = 'just inserted'
 
37349
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37350
DELETE FROM t0_aux
 
37351
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37352
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37353
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37354
'just inserted' FROM t0_template
 
37355
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37356
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
37357
BEGIN
 
37358
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37359
f_charbig = 'updated by trigger'
 
37360
      WHERE f_int1 = new.f_int1;
 
37361
END|
 
37362
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
37363
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37364
        
 
37365
# check trigger-3 success:      1
 
37366
DROP TRIGGER trg_1;
 
37367
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37368
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37369
f_charbig = 'just inserted'
 
37370
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37371
DELETE FROM t0_aux
 
37372
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37373
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37374
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37375
'just inserted' FROM t0_template
 
37376
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37377
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
37378
BEGIN
 
37379
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37380
f_charbig = 'updated by trigger'
 
37381
      WHERE f_int1 = - old.f_int1;
 
37382
END|
 
37383
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
37384
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37385
        
 
37386
# check trigger-4 success:      1
 
37387
DROP TRIGGER trg_1;
 
37388
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37389
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37390
f_charbig = 'just inserted'
 
37391
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37392
DELETE FROM t0_aux
 
37393
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37394
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37395
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37396
'just inserted' FROM t0_template
 
37397
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37398
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
37399
BEGIN
 
37400
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37401
f_charbig = 'updated by trigger'
 
37402
      WHERE f_int1 = new.f_int1;
 
37403
END|
 
37404
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
37405
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37406
        
 
37407
# check trigger-5 success:      1
 
37408
DROP TRIGGER trg_1;
 
37409
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37410
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37411
f_charbig = 'just inserted'
 
37412
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37413
DELETE FROM t0_aux
 
37414
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37415
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37416
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37417
'just inserted' FROM t0_template
 
37418
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37419
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
37420
BEGIN
 
37421
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37422
f_charbig = 'updated by trigger'
 
37423
      WHERE f_int1 = - old.f_int1;
 
37424
END|
 
37425
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
37426
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37427
        
 
37428
# check trigger-6 success:      1
 
37429
DROP TRIGGER trg_1;
 
37430
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37431
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37432
f_charbig = 'just inserted'
 
37433
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37434
DELETE FROM t0_aux
 
37435
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37436
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37437
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37438
'just inserted' FROM t0_template
 
37439
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37440
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
37441
BEGIN
 
37442
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37443
f_charbig = 'updated by trigger'
 
37444
      WHERE f_int1 = - old.f_int1;
 
37445
END|
 
37446
DELETE FROM t0_aux
 
37447
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37448
        
 
37449
# check trigger-7 success:      1
 
37450
DROP TRIGGER trg_1;
 
37451
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37452
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37453
f_charbig = 'just inserted'
 
37454
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37455
DELETE FROM t0_aux
 
37456
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37457
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37458
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37459
'just inserted' FROM t0_template
 
37460
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37461
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
37462
BEGIN
 
37463
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37464
f_charbig = 'updated by trigger'
 
37465
      WHERE f_int1 = - old.f_int1;
 
37466
END|
 
37467
DELETE FROM t0_aux
 
37468
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37469
        
 
37470
# check trigger-8 success:      1
 
37471
DROP TRIGGER trg_1;
 
37472
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37473
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37474
f_charbig = 'just inserted'
 
37475
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37476
DELETE FROM t0_aux
 
37477
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37478
DELETE FROM t1
 
37479
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37480
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
37481
BEGIN
 
37482
SET new.f_int1 = old.f_int1 + @max_row,
 
37483
new.f_int2 = old.f_int2 - @max_row,
 
37484
new.f_charbig = '####updated per update trigger####';
 
37485
END|
 
37486
UPDATE t1
 
37487
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
37488
f_charbig = '####updated per update statement itself####';
 
37489
        
 
37490
# check trigger-9 success:      1
 
37491
DROP TRIGGER trg_2;
 
37492
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37493
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37494
f_charbig = CONCAT('===',f_char1,'===');
 
37495
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
37496
BEGIN
 
37497
SET new.f_int1 = new.f_int1 + @max_row,
 
37498
new.f_int2 = new.f_int2 - @max_row,
 
37499
new.f_charbig = '####updated per update trigger####';
 
37500
END|
 
37501
UPDATE t1
 
37502
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
37503
f_charbig = '####updated per update statement itself####';
 
37504
        
 
37505
# check trigger-10 success:     1
 
37506
DROP TRIGGER trg_2;
 
37507
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37508
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37509
f_charbig = CONCAT('===',f_char1,'===');
 
37510
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
37511
BEGIN
 
37512
SET new.f_int1 = @my_max1 + @counter,
 
37513
new.f_int2 = @my_min2 - @counter,
 
37514
new.f_charbig = '####updated per insert trigger####';
 
37515
SET @counter = @counter + 1;
 
37516
END|
 
37517
SET @counter = 1;
 
37518
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
37519
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37520
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
37521
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
37522
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
37523
ORDER BY f_int1;
 
37524
DROP TRIGGER trg_3;
 
37525
        
 
37526
# check trigger-11 success:     1
 
37527
DELETE FROM t1
 
37528
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
37529
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
37530
AND f_charbig = '####updated per insert trigger####';
 
37531
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
37532
BEGIN
 
37533
SET new.f_int1 = @my_max1 + @counter,
 
37534
new.f_int2 = @my_min2 - @counter,
 
37535
new.f_charbig = '####updated per insert trigger####';
 
37536
SET @counter = @counter + 1;
 
37537
END|
 
37538
SET @counter = 1;
 
37539
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
37540
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
37541
SELECT CAST(f_int1 AS CHAR),
 
37542
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
37543
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
37544
ORDER BY f_int1;
 
37545
DROP TRIGGER trg_3;
 
37546
        
 
37547
# check trigger-12 success:     1
 
37548
DELETE FROM t1
 
37549
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
37550
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
37551
AND f_charbig = '####updated per insert trigger####';
 
37552
ANALYZE  TABLE t1;
 
37553
Table   Op      Msg_type        Msg_text
 
37554
test.t1 analyze status  OK
 
37555
CHECK    TABLE t1 EXTENDED;
 
37556
Table   Op      Msg_type        Msg_text
 
37557
test.t1 check   status  OK
 
37558
CHECKSUM TABLE t1 EXTENDED;
 
37559
Table   Checksum
 
37560
test.t1 <some_value>
 
37561
OPTIMIZE TABLE t1;
 
37562
Table   Op      Msg_type        Msg_text
 
37563
test.t1 optimize        status  OK
 
37564
# check layout success:    1
 
37565
REPAIR   TABLE t1 EXTENDED;
 
37566
Table   Op      Msg_type        Msg_text
 
37567
test.t1 repair  status  OK
 
37568
# check layout success:    1
 
37569
TRUNCATE t1;
 
37570
        
 
37571
# check TRUNCATE success:       1
 
37572
# check layout success:    1
 
37573
# End usability test (inc/partition_check.inc)
 
37574
DROP TABLE t1;
 
37575
CREATE TABLE t1 (
 
37576
f_int1 INTEGER,
 
37577
f_int2 INTEGER,
 
37578
f_char1 CHAR(20),
 
37579
f_char2 CHAR(20),
 
37580
f_charbig VARCHAR(1000)
 
37581
 
 
37582
)
 
37583
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
37584
(PARTITION part_1 VALUES LESS THAN (0),
 
37585
PARTITION part_2 VALUES LESS THAN (5),
 
37586
PARTITION part_3 VALUES LESS THAN (10),
 
37587
PARTITION part_4 VALUES LESS THAN (2147483646));
 
37588
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37589
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
37590
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
37591
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
37592
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37593
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
37594
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
37595
# Start usability test (inc/partition_check.inc)
 
37596
create_command
 
37597
SHOW CREATE TABLE t1;
 
37598
Table   Create Table
 
37599
t1      CREATE TABLE `t1` (
 
37600
  `f_int1` int(11) DEFAULT NULL,
 
37601
  `f_int2` int(11) DEFAULT NULL,
 
37602
  `f_char1` char(20) DEFAULT NULL,
 
37603
  `f_char2` char(20) DEFAULT NULL,
 
37604
  `f_charbig` varchar(1000) DEFAULT NULL
 
37605
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */
 
37606
 
 
37607
unified filelist
 
37608
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
37609
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
37610
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
37611
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
37612
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
37613
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
37614
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
37615
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
37616
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
37617
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
37618
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
37619
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
37620
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYD
 
37621
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp0.MYI
 
37622
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYD
 
37623
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#part_4sp1.MYI
 
37624
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
37625
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
37626
 
 
37627
# check prerequisites-1 success:    1
 
37628
# check COUNT(*) success:    1
 
37629
# check MIN/MAX(f_int1) success:    1
 
37630
# check MIN/MAX(f_int2) success:    1
 
37631
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37632
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
37633
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
37634
WHERE f_int1 IN (2,3);
 
37635
# check prerequisites-3 success:    1
 
37636
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
37637
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
37638
# check read via f_int1 success: 1
 
37639
# check read via f_int2 success: 1
 
37640
        
 
37641
# check multiple-1 success:     1
 
37642
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
37643
        
 
37644
# check multiple-2 success:     1
 
37645
INSERT INTO t1 SELECT * FROM t0_template
 
37646
WHERE MOD(f_int1,3) = 0;
 
37647
        
 
37648
# check multiple-3 success:     1
 
37649
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
37650
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
37651
AND @max_row_div2 + @max_row_div4;
 
37652
        
 
37653
# check multiple-4 success:     1
 
37654
DELETE FROM t1
 
37655
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
37656
AND @max_row_div2 + @max_row_div4 + @max_row;
 
37657
        
 
37658
# check multiple-5 success:     1
 
37659
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
37660
INSERT INTO t1
 
37661
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
37662
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
37663
f_charbig = '#SINGLE#';
 
37664
        
 
37665
# check single-1 success:       1
 
37666
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
37667
INSERT INTO t1
 
37668
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
37669
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
37670
f_charbig = '#SINGLE#';
 
37671
        
 
37672
# check single-2 success:       1
 
37673
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
37674
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
37675
UPDATE t1 SET f_int1 = @cur_value2
 
37676
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
37677
        
 
37678
# check single-3 success:       1
 
37679
SET @cur_value1= -1;
 
37680
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
37681
UPDATE t1 SET f_int1 = @cur_value1
 
37682
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
37683
        
 
37684
# check single-4 success:       1
 
37685
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
37686
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
37687
        
 
37688
# check single-5 success:       1
 
37689
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
37690
        
 
37691
# check single-6 success:       1
 
37692
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
37693
        
 
37694
# check single-7 success:       1
 
37695
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
37696
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
37697
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
37698
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
37699
f_charbig = '#NULL#';
 
37700
INSERT INTO t1
 
37701
SET f_int1 = NULL , f_int2 = -@max_row,
 
37702
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
37703
f_charbig = '#NULL#';
 
37704
# check null success:    1
 
37705
        
 
37706
# check null-1 success:         1
 
37707
UPDATE t1 SET f_int1 = -@max_row
 
37708
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
37709
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
37710
        
 
37711
# check null-2 success:         1
 
37712
UPDATE t1 SET f_int1 = NULL
 
37713
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
37714
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
37715
        
 
37716
# check null-3 success:         1
 
37717
DELETE FROM t1
 
37718
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
37719
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
37720
        
 
37721
# check null-4 success:         1
 
37722
DELETE FROM t1
 
37723
WHERE f_int1 = 0 AND f_int2 = 0
 
37724
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
37725
AND f_charbig = '#NULL#';
 
37726
SET AUTOCOMMIT= 0;
 
37727
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37728
SELECT f_int1, f_int1, '', '', 'was inserted'
 
37729
FROM t0_template source_tab
 
37730
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
37731
        
 
37732
# check transactions-1 success:         1
 
37733
COMMIT WORK;
 
37734
        
 
37735
# check transactions-2 success:         1
 
37736
ROLLBACK WORK;
 
37737
        
 
37738
# check transactions-3 success:         1
 
37739
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
37740
COMMIT WORK;
 
37741
ROLLBACK WORK;
 
37742
        
 
37743
# check transactions-4 success:         1
 
37744
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37745
SELECT f_int1, f_int1, '', '', 'was inserted'
 
37746
FROM t0_template source_tab
 
37747
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
37748
        
 
37749
# check transactions-5 success:         1
 
37750
ROLLBACK WORK;
 
37751
Warnings:
 
37752
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
37753
        
 
37754
# check transactions-6 success:         1
 
37755
# INFO: Storage engine used for t1 seems to be not transactional.
 
37756
COMMIT;
 
37757
        
 
37758
# check transactions-7 success:         1
 
37759
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
37760
COMMIT WORK;
 
37761
SET @@session.sql_mode = 'traditional';
 
37762
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
37763
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37764
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
37765
'', '', 'was inserted' FROM t0_template
 
37766
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
37767
ERROR 22012: Division by 0
 
37768
COMMIT;
 
37769
        
 
37770
# check transactions-8 success:         1
 
37771
# INFO: Storage engine used for t1 seems to be unable to revert
 
37772
#       changes made by the failing statement.
 
37773
SET @@session.sql_mode = '';
 
37774
SET AUTOCOMMIT= 1;
 
37775
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
37776
COMMIT WORK;
 
37777
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
37778
        
 
37779
# check special-1 success:      1
 
37780
UPDATE t1 SET f_charbig = '';
 
37781
        
 
37782
# check special-2 success:      1
 
37783
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
37784
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37785
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
37786
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37787
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37788
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37789
'just inserted' FROM t0_template
 
37790
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37791
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
37792
BEGIN
 
37793
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37794
f_charbig = 'updated by trigger'
 
37795
      WHERE f_int1 = new.f_int1;
 
37796
END|
 
37797
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37798
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
37799
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37800
        
 
37801
# check trigger-1 success:      1
 
37802
DROP TRIGGER trg_1;
 
37803
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37804
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37805
f_charbig = 'just inserted'
 
37806
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37807
DELETE FROM t0_aux
 
37808
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37809
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37810
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37811
'just inserted' FROM t0_template
 
37812
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37813
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
37814
BEGIN
 
37815
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37816
f_charbig = 'updated by trigger'
 
37817
      WHERE f_int1 = new.f_int1;
 
37818
END|
 
37819
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37820
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
37821
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37822
        
 
37823
# check trigger-2 success:      1
 
37824
DROP TRIGGER trg_1;
 
37825
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37826
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37827
f_charbig = 'just inserted'
 
37828
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37829
DELETE FROM t0_aux
 
37830
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37831
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37832
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37833
'just inserted' FROM t0_template
 
37834
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37835
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
37836
BEGIN
 
37837
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37838
f_charbig = 'updated by trigger'
 
37839
      WHERE f_int1 = new.f_int1;
 
37840
END|
 
37841
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
37842
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37843
        
 
37844
# check trigger-3 success:      1
 
37845
DROP TRIGGER trg_1;
 
37846
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37847
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37848
f_charbig = 'just inserted'
 
37849
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37850
DELETE FROM t0_aux
 
37851
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37852
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37853
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37854
'just inserted' FROM t0_template
 
37855
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37856
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
37857
BEGIN
 
37858
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37859
f_charbig = 'updated by trigger'
 
37860
      WHERE f_int1 = - old.f_int1;
 
37861
END|
 
37862
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
37863
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37864
        
 
37865
# check trigger-4 success:      1
 
37866
DROP TRIGGER trg_1;
 
37867
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37868
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37869
f_charbig = 'just inserted'
 
37870
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37871
DELETE FROM t0_aux
 
37872
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37873
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37874
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37875
'just inserted' FROM t0_template
 
37876
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37877
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
37878
BEGIN
 
37879
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37880
f_charbig = 'updated by trigger'
 
37881
      WHERE f_int1 = new.f_int1;
 
37882
END|
 
37883
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
37884
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37885
        
 
37886
# check trigger-5 success:      1
 
37887
DROP TRIGGER trg_1;
 
37888
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37889
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37890
f_charbig = 'just inserted'
 
37891
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37892
DELETE FROM t0_aux
 
37893
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37894
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37895
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37896
'just inserted' FROM t0_template
 
37897
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37898
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
37899
BEGIN
 
37900
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37901
f_charbig = 'updated by trigger'
 
37902
      WHERE f_int1 = - old.f_int1;
 
37903
END|
 
37904
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
37905
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37906
        
 
37907
# check trigger-6 success:      1
 
37908
DROP TRIGGER trg_1;
 
37909
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37910
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37911
f_charbig = 'just inserted'
 
37912
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37913
DELETE FROM t0_aux
 
37914
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37915
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37916
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37917
'just inserted' FROM t0_template
 
37918
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37919
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
37920
BEGIN
 
37921
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37922
f_charbig = 'updated by trigger'
 
37923
      WHERE f_int1 = - old.f_int1;
 
37924
END|
 
37925
DELETE FROM t0_aux
 
37926
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37927
        
 
37928
# check trigger-7 success:      1
 
37929
DROP TRIGGER trg_1;
 
37930
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37931
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37932
f_charbig = 'just inserted'
 
37933
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37934
DELETE FROM t0_aux
 
37935
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37936
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
37937
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
37938
'just inserted' FROM t0_template
 
37939
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37940
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
37941
BEGIN
 
37942
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
37943
f_charbig = 'updated by trigger'
 
37944
      WHERE f_int1 = - old.f_int1;
 
37945
END|
 
37946
DELETE FROM t0_aux
 
37947
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
37948
        
 
37949
# check trigger-8 success:      1
 
37950
DROP TRIGGER trg_1;
 
37951
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37952
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37953
f_charbig = 'just inserted'
 
37954
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
37955
DELETE FROM t0_aux
 
37956
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37957
DELETE FROM t1
 
37958
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
37959
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
37960
BEGIN
 
37961
SET new.f_int1 = old.f_int1 + @max_row,
 
37962
new.f_int2 = old.f_int2 - @max_row,
 
37963
new.f_charbig = '####updated per update trigger####';
 
37964
END|
 
37965
UPDATE t1
 
37966
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
37967
f_charbig = '####updated per update statement itself####';
 
37968
        
 
37969
# check trigger-9 success:      1
 
37970
DROP TRIGGER trg_2;
 
37971
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37972
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37973
f_charbig = CONCAT('===',f_char1,'===');
 
37974
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
37975
BEGIN
 
37976
SET new.f_int1 = new.f_int1 + @max_row,
 
37977
new.f_int2 = new.f_int2 - @max_row,
 
37978
new.f_charbig = '####updated per update trigger####';
 
37979
END|
 
37980
UPDATE t1
 
37981
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
37982
f_charbig = '####updated per update statement itself####';
 
37983
        
 
37984
# check trigger-10 success:     1
 
37985
DROP TRIGGER trg_2;
 
37986
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
37987
f_int2 = CAST(f_char1 AS SIGNED INT),
 
37988
f_charbig = CONCAT('===',f_char1,'===');
 
37989
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
37990
BEGIN
 
37991
SET new.f_int1 = @my_max1 + @counter,
 
37992
new.f_int2 = @my_min2 - @counter,
 
37993
new.f_charbig = '####updated per insert trigger####';
 
37994
SET @counter = @counter + 1;
 
37995
END|
 
37996
SET @counter = 1;
 
37997
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
37998
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
37999
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
38000
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
38001
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
38002
ORDER BY f_int1;
 
38003
DROP TRIGGER trg_3;
 
38004
        
 
38005
# check trigger-11 success:     1
 
38006
DELETE FROM t1
 
38007
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
38008
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
38009
AND f_charbig = '####updated per insert trigger####';
 
38010
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
38011
BEGIN
 
38012
SET new.f_int1 = @my_max1 + @counter,
 
38013
new.f_int2 = @my_min2 - @counter,
 
38014
new.f_charbig = '####updated per insert trigger####';
 
38015
SET @counter = @counter + 1;
 
38016
END|
 
38017
SET @counter = 1;
 
38018
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
38019
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
38020
SELECT CAST(f_int1 AS CHAR),
 
38021
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
38022
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
38023
ORDER BY f_int1;
 
38024
DROP TRIGGER trg_3;
 
38025
        
 
38026
# check trigger-12 success:     1
 
38027
DELETE FROM t1
 
38028
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
38029
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
38030
AND f_charbig = '####updated per insert trigger####';
 
38031
ANALYZE  TABLE t1;
 
38032
Table   Op      Msg_type        Msg_text
 
38033
test.t1 analyze status  OK
 
38034
CHECK    TABLE t1 EXTENDED;
 
38035
Table   Op      Msg_type        Msg_text
 
38036
test.t1 check   status  OK
 
38037
CHECKSUM TABLE t1 EXTENDED;
 
38038
Table   Checksum
 
38039
test.t1 <some_value>
 
38040
OPTIMIZE TABLE t1;
 
38041
Table   Op      Msg_type        Msg_text
 
38042
test.t1 optimize        status  OK
 
38043
# check layout success:    1
 
38044
REPAIR   TABLE t1 EXTENDED;
 
38045
Table   Op      Msg_type        Msg_text
 
38046
test.t1 repair  status  OK
 
38047
# check layout success:    1
 
38048
TRUNCATE t1;
 
38049
        
 
38050
# check TRUNCATE success:       1
 
38051
# check layout success:    1
 
38052
# End usability test (inc/partition_check.inc)
 
38053
DROP TABLE t1;
 
38054
CREATE TABLE t1 (
 
38055
f_int1 INTEGER,
 
38056
f_int2 INTEGER,
 
38057
f_char1 CHAR(20),
 
38058
f_char2 CHAR(20),
 
38059
f_charbig VARCHAR(1000)
 
38060
 
 
38061
)
 
38062
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
38063
(PARTITION part_1 VALUES LESS THAN (0)
 
38064
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
38065
PARTITION part_2 VALUES LESS THAN (5)
 
38066
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
38067
PARTITION part_3 VALUES LESS THAN (10)
 
38068
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
38069
PARTITION part_4 VALUES LESS THAN (2147483646)
 
38070
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
38071
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38072
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
38073
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
38074
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
38075
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38076
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
38077
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
38078
# Start usability test (inc/partition_check.inc)
 
38079
create_command
 
38080
SHOW CREATE TABLE t1;
 
38081
Table   Create Table
 
38082
t1      CREATE TABLE `t1` (
 
38083
  `f_int1` int(11) DEFAULT NULL,
 
38084
  `f_int2` int(11) DEFAULT NULL,
 
38085
  `f_char1` char(20) DEFAULT NULL,
 
38086
  `f_char2` char(20) DEFAULT NULL,
 
38087
  `f_charbig` varchar(1000) DEFAULT NULL
 
38088
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
 
38089
 
 
38090
unified filelist
 
38091
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYD
 
38092
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart11.MYI
 
38093
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYD
 
38094
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#subpart12.MYI
 
38095
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYD
 
38096
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart21.MYI
 
38097
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYD
 
38098
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#subpart22.MYI
 
38099
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYD
 
38100
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart31.MYI
 
38101
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYD
 
38102
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#subpart32.MYI
 
38103
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYD
 
38104
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart41.MYI
 
38105
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYD
 
38106
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#subpart42.MYI
 
38107
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
38108
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
38109
 
 
38110
# check prerequisites-1 success:    1
 
38111
# check COUNT(*) success:    1
 
38112
# check MIN/MAX(f_int1) success:    1
 
38113
# check MIN/MAX(f_int2) success:    1
 
38114
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38115
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
38116
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
38117
WHERE f_int1 IN (2,3);
 
38118
# check prerequisites-3 success:    1
 
38119
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
38120
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
38121
# check read via f_int1 success: 1
 
38122
# check read via f_int2 success: 1
 
38123
        
 
38124
# check multiple-1 success:     1
 
38125
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
38126
        
 
38127
# check multiple-2 success:     1
 
38128
INSERT INTO t1 SELECT * FROM t0_template
 
38129
WHERE MOD(f_int1,3) = 0;
 
38130
        
 
38131
# check multiple-3 success:     1
 
38132
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
38133
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
38134
AND @max_row_div2 + @max_row_div4;
 
38135
        
 
38136
# check multiple-4 success:     1
 
38137
DELETE FROM t1
 
38138
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
38139
AND @max_row_div2 + @max_row_div4 + @max_row;
 
38140
        
 
38141
# check multiple-5 success:     1
 
38142
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
38143
INSERT INTO t1
 
38144
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
38145
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
38146
f_charbig = '#SINGLE#';
 
38147
        
 
38148
# check single-1 success:       1
 
38149
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
38150
INSERT INTO t1
 
38151
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
38152
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
38153
f_charbig = '#SINGLE#';
 
38154
        
 
38155
# check single-2 success:       1
 
38156
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
38157
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
38158
UPDATE t1 SET f_int1 = @cur_value2
 
38159
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
38160
        
 
38161
# check single-3 success:       1
 
38162
SET @cur_value1= -1;
 
38163
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
38164
UPDATE t1 SET f_int1 = @cur_value1
 
38165
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
38166
        
 
38167
# check single-4 success:       1
 
38168
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
38169
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
38170
        
 
38171
# check single-5 success:       1
 
38172
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
38173
        
 
38174
# check single-6 success:       1
 
38175
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
38176
ERROR HY000: Table has no partition for value 2147483647
 
38177
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
38178
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
38179
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
38180
f_charbig = '#NULL#';
 
38181
INSERT INTO t1
 
38182
SET f_int1 = NULL , f_int2 = -@max_row,
 
38183
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
38184
f_charbig = '#NULL#';
 
38185
# check null success:    1
 
38186
        
 
38187
# check null-1 success:         1
 
38188
UPDATE t1 SET f_int1 = -@max_row
 
38189
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
38190
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
38191
        
 
38192
# check null-2 success:         1
 
38193
UPDATE t1 SET f_int1 = NULL
 
38194
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
38195
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
38196
        
 
38197
# check null-3 success:         1
 
38198
DELETE FROM t1
 
38199
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
38200
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
38201
        
 
38202
# check null-4 success:         1
 
38203
DELETE FROM t1
 
38204
WHERE f_int1 = 0 AND f_int2 = 0
 
38205
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
38206
AND f_charbig = '#NULL#';
 
38207
SET AUTOCOMMIT= 0;
 
38208
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38209
SELECT f_int1, f_int1, '', '', 'was inserted'
 
38210
FROM t0_template source_tab
 
38211
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
38212
        
 
38213
# check transactions-1 success:         1
 
38214
COMMIT WORK;
 
38215
        
 
38216
# check transactions-2 success:         1
 
38217
ROLLBACK WORK;
 
38218
        
 
38219
# check transactions-3 success:         1
 
38220
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
38221
COMMIT WORK;
 
38222
ROLLBACK WORK;
 
38223
        
 
38224
# check transactions-4 success:         1
 
38225
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38226
SELECT f_int1, f_int1, '', '', 'was inserted'
 
38227
FROM t0_template source_tab
 
38228
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
38229
        
 
38230
# check transactions-5 success:         1
 
38231
ROLLBACK WORK;
 
38232
Warnings:
 
38233
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
38234
        
 
38235
# check transactions-6 success:         1
 
38236
# INFO: Storage engine used for t1 seems to be not transactional.
 
38237
COMMIT;
 
38238
        
 
38239
# check transactions-7 success:         1
 
38240
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
38241
COMMIT WORK;
 
38242
SET @@session.sql_mode = 'traditional';
 
38243
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
38244
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38245
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
38246
'', '', 'was inserted' FROM t0_template
 
38247
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
38248
ERROR 22012: Division by 0
 
38249
COMMIT;
 
38250
        
 
38251
# check transactions-8 success:         1
 
38252
# INFO: Storage engine used for t1 seems to be unable to revert
 
38253
#       changes made by the failing statement.
 
38254
SET @@session.sql_mode = '';
 
38255
SET AUTOCOMMIT= 1;
 
38256
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
38257
COMMIT WORK;
 
38258
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
38259
        
 
38260
# check special-1 success:      1
 
38261
UPDATE t1 SET f_charbig = '';
 
38262
        
 
38263
# check special-2 success:      1
 
38264
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
38265
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38266
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
38267
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38268
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38269
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38270
'just inserted' FROM t0_template
 
38271
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38272
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
38273
BEGIN
 
38274
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38275
f_charbig = 'updated by trigger'
 
38276
      WHERE f_int1 = new.f_int1;
 
38277
END|
 
38278
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38279
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
38280
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38281
        
 
38282
# check trigger-1 success:      1
 
38283
DROP TRIGGER trg_1;
 
38284
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38285
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38286
f_charbig = 'just inserted'
 
38287
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38288
DELETE FROM t0_aux
 
38289
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38290
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38291
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38292
'just inserted' FROM t0_template
 
38293
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38294
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
38295
BEGIN
 
38296
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38297
f_charbig = 'updated by trigger'
 
38298
      WHERE f_int1 = new.f_int1;
 
38299
END|
 
38300
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38301
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
38302
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38303
        
 
38304
# check trigger-2 success:      1
 
38305
DROP TRIGGER trg_1;
 
38306
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38307
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38308
f_charbig = 'just inserted'
 
38309
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38310
DELETE FROM t0_aux
 
38311
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38312
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38313
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38314
'just inserted' FROM t0_template
 
38315
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38316
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
38317
BEGIN
 
38318
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38319
f_charbig = 'updated by trigger'
 
38320
      WHERE f_int1 = new.f_int1;
 
38321
END|
 
38322
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
38323
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38324
        
 
38325
# check trigger-3 success:      1
 
38326
DROP TRIGGER trg_1;
 
38327
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38328
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38329
f_charbig = 'just inserted'
 
38330
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38331
DELETE FROM t0_aux
 
38332
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38333
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38334
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38335
'just inserted' FROM t0_template
 
38336
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38337
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
38338
BEGIN
 
38339
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38340
f_charbig = 'updated by trigger'
 
38341
      WHERE f_int1 = - old.f_int1;
 
38342
END|
 
38343
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
38344
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38345
        
 
38346
# check trigger-4 success:      1
 
38347
DROP TRIGGER trg_1;
 
38348
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38349
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38350
f_charbig = 'just inserted'
 
38351
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38352
DELETE FROM t0_aux
 
38353
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38354
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38355
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38356
'just inserted' FROM t0_template
 
38357
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38358
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
38359
BEGIN
 
38360
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38361
f_charbig = 'updated by trigger'
 
38362
      WHERE f_int1 = new.f_int1;
 
38363
END|
 
38364
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
38365
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38366
        
 
38367
# check trigger-5 success:      1
 
38368
DROP TRIGGER trg_1;
 
38369
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38370
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38371
f_charbig = 'just inserted'
 
38372
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38373
DELETE FROM t0_aux
 
38374
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38375
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38376
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38377
'just inserted' FROM t0_template
 
38378
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38379
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
38380
BEGIN
 
38381
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38382
f_charbig = 'updated by trigger'
 
38383
      WHERE f_int1 = - old.f_int1;
 
38384
END|
 
38385
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
38386
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38387
        
 
38388
# check trigger-6 success:      1
 
38389
DROP TRIGGER trg_1;
 
38390
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38391
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38392
f_charbig = 'just inserted'
 
38393
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38394
DELETE FROM t0_aux
 
38395
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38396
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38397
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38398
'just inserted' FROM t0_template
 
38399
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38400
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
38401
BEGIN
 
38402
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38403
f_charbig = 'updated by trigger'
 
38404
      WHERE f_int1 = - old.f_int1;
 
38405
END|
 
38406
DELETE FROM t0_aux
 
38407
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38408
        
 
38409
# check trigger-7 success:      1
 
38410
DROP TRIGGER trg_1;
 
38411
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38412
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38413
f_charbig = 'just inserted'
 
38414
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38415
DELETE FROM t0_aux
 
38416
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38417
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38418
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38419
'just inserted' FROM t0_template
 
38420
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38421
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
38422
BEGIN
 
38423
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38424
f_charbig = 'updated by trigger'
 
38425
      WHERE f_int1 = - old.f_int1;
 
38426
END|
 
38427
DELETE FROM t0_aux
 
38428
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38429
        
 
38430
# check trigger-8 success:      1
 
38431
DROP TRIGGER trg_1;
 
38432
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38433
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38434
f_charbig = 'just inserted'
 
38435
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38436
DELETE FROM t0_aux
 
38437
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38438
DELETE FROM t1
 
38439
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38440
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
38441
BEGIN
 
38442
SET new.f_int1 = old.f_int1 + @max_row,
 
38443
new.f_int2 = old.f_int2 - @max_row,
 
38444
new.f_charbig = '####updated per update trigger####';
 
38445
END|
 
38446
UPDATE t1
 
38447
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
38448
f_charbig = '####updated per update statement itself####';
 
38449
        
 
38450
# check trigger-9 success:      1
 
38451
DROP TRIGGER trg_2;
 
38452
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38453
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38454
f_charbig = CONCAT('===',f_char1,'===');
 
38455
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
38456
BEGIN
 
38457
SET new.f_int1 = new.f_int1 + @max_row,
 
38458
new.f_int2 = new.f_int2 - @max_row,
 
38459
new.f_charbig = '####updated per update trigger####';
 
38460
END|
 
38461
UPDATE t1
 
38462
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
38463
f_charbig = '####updated per update statement itself####';
 
38464
        
 
38465
# check trigger-10 success:     1
 
38466
DROP TRIGGER trg_2;
 
38467
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38468
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38469
f_charbig = CONCAT('===',f_char1,'===');
 
38470
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
38471
BEGIN
 
38472
SET new.f_int1 = @my_max1 + @counter,
 
38473
new.f_int2 = @my_min2 - @counter,
 
38474
new.f_charbig = '####updated per insert trigger####';
 
38475
SET @counter = @counter + 1;
 
38476
END|
 
38477
SET @counter = 1;
 
38478
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
38479
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38480
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
38481
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
38482
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
38483
ORDER BY f_int1;
 
38484
DROP TRIGGER trg_3;
 
38485
        
 
38486
# check trigger-11 success:     1
 
38487
DELETE FROM t1
 
38488
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
38489
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
38490
AND f_charbig = '####updated per insert trigger####';
 
38491
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
38492
BEGIN
 
38493
SET new.f_int1 = @my_max1 + @counter,
 
38494
new.f_int2 = @my_min2 - @counter,
 
38495
new.f_charbig = '####updated per insert trigger####';
 
38496
SET @counter = @counter + 1;
 
38497
END|
 
38498
SET @counter = 1;
 
38499
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
38500
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
38501
SELECT CAST(f_int1 AS CHAR),
 
38502
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
38503
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
38504
ORDER BY f_int1;
 
38505
DROP TRIGGER trg_3;
 
38506
        
 
38507
# check trigger-12 success:     1
 
38508
DELETE FROM t1
 
38509
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
38510
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
38511
AND f_charbig = '####updated per insert trigger####';
 
38512
ANALYZE  TABLE t1;
 
38513
Table   Op      Msg_type        Msg_text
 
38514
test.t1 analyze status  OK
 
38515
CHECK    TABLE t1 EXTENDED;
 
38516
Table   Op      Msg_type        Msg_text
 
38517
test.t1 check   status  OK
 
38518
CHECKSUM TABLE t1 EXTENDED;
 
38519
Table   Checksum
 
38520
test.t1 <some_value>
 
38521
OPTIMIZE TABLE t1;
 
38522
Table   Op      Msg_type        Msg_text
 
38523
test.t1 optimize        status  OK
 
38524
# check layout success:    1
 
38525
REPAIR   TABLE t1 EXTENDED;
 
38526
Table   Op      Msg_type        Msg_text
 
38527
test.t1 repair  status  OK
 
38528
# check layout success:    1
 
38529
TRUNCATE t1;
 
38530
        
 
38531
# check TRUNCATE success:       1
 
38532
# check layout success:    1
 
38533
# End usability test (inc/partition_check.inc)
 
38534
DROP TABLE t1;
 
38535
CREATE TABLE t1 (
 
38536
f_int1 INTEGER,
 
38537
f_int2 INTEGER,
 
38538
f_char1 CHAR(20),
 
38539
f_char2 CHAR(20),
 
38540
f_charbig VARCHAR(1000)
 
38541
 
 
38542
)
 
38543
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
38544
(PARTITION part_1 VALUES IN (0)
 
38545
(SUBPARTITION sp11, SUBPARTITION sp12),
 
38546
PARTITION part_2 VALUES IN (1)
 
38547
(SUBPARTITION sp21, SUBPARTITION sp22),
 
38548
PARTITION part_3 VALUES IN (2)
 
38549
(SUBPARTITION sp31, SUBPARTITION sp32),
 
38550
PARTITION part_4 VALUES IN (NULL)
 
38551
(SUBPARTITION sp41, SUBPARTITION sp42));
 
38552
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38553
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
38554
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
38555
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
38556
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38557
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
38558
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
38559
# Start usability test (inc/partition_check.inc)
 
38560
create_command
 
38561
SHOW CREATE TABLE t1;
 
38562
Table   Create Table
 
38563
t1      CREATE TABLE `t1` (
 
38564
  `f_int1` int(11) DEFAULT NULL,
 
38565
  `f_int2` int(11) DEFAULT NULL,
 
38566
  `f_char1` char(20) DEFAULT NULL,
 
38567
  `f_char2` char(20) DEFAULT NULL,
 
38568
  `f_charbig` varchar(1000) DEFAULT NULL
 
38569
) ENGINE=MyISAM 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 = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */
 
38570
 
 
38571
unified filelist
 
38572
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYD
 
38573
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp11.MYI
 
38574
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYD
 
38575
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#sp12.MYI
 
38576
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYD
 
38577
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp21.MYI
 
38578
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYD
 
38579
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#sp22.MYI
 
38580
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYD
 
38581
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp31.MYI
 
38582
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYD
 
38583
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#sp32.MYI
 
38584
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYD
 
38585
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp41.MYI
 
38586
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYD
 
38587
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_4#SP#sp42.MYI
 
38588
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
38589
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
38590
 
 
38591
# check prerequisites-1 success:    1
 
38592
# check COUNT(*) success:    1
 
38593
# check MIN/MAX(f_int1) success:    1
 
38594
# check MIN/MAX(f_int2) success:    1
 
38595
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38596
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
38597
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
38598
WHERE f_int1 IN (2,3);
 
38599
# check prerequisites-3 success:    1
 
38600
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
38601
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
38602
# check read via f_int1 success: 1
 
38603
# check read via f_int2 success: 1
 
38604
        
 
38605
# check multiple-1 success:     1
 
38606
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
38607
        
 
38608
# check multiple-2 success:     1
 
38609
INSERT INTO t1 SELECT * FROM t0_template
 
38610
WHERE MOD(f_int1,3) = 0;
 
38611
        
 
38612
# check multiple-3 success:     1
 
38613
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
38614
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
38615
AND @max_row_div2 + @max_row_div4;
 
38616
        
 
38617
# check multiple-4 success:     1
 
38618
DELETE FROM t1
 
38619
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
38620
AND @max_row_div2 + @max_row_div4 + @max_row;
 
38621
        
 
38622
# check multiple-5 success:     1
 
38623
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
38624
INSERT INTO t1
 
38625
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
38626
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
38627
f_charbig = '#SINGLE#';
 
38628
        
 
38629
# check single-1 success:       1
 
38630
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
38631
INSERT INTO t1
 
38632
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
38633
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
38634
f_charbig = '#SINGLE#';
 
38635
        
 
38636
# check single-2 success:       1
 
38637
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
38638
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
38639
UPDATE t1 SET f_int1 = @cur_value2
 
38640
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
38641
        
 
38642
# check single-3 success:       1
 
38643
SET @cur_value1= -1;
 
38644
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
38645
UPDATE t1 SET f_int1 = @cur_value1
 
38646
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
38647
        
 
38648
# check single-4 success:       1
 
38649
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
38650
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
38651
        
 
38652
# check single-5 success:       1
 
38653
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
38654
        
 
38655
# check single-6 success:       1
 
38656
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
38657
        
 
38658
# check single-7 success:       1
 
38659
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
38660
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
38661
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
38662
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
38663
f_charbig = '#NULL#';
 
38664
INSERT INTO t1
 
38665
SET f_int1 = NULL , f_int2 = -@max_row,
 
38666
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
38667
f_charbig = '#NULL#';
 
38668
# check null success:    1
 
38669
        
 
38670
# check null-1 success:         1
 
38671
UPDATE t1 SET f_int1 = -@max_row
 
38672
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
38673
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
38674
        
 
38675
# check null-2 success:         1
 
38676
UPDATE t1 SET f_int1 = NULL
 
38677
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
38678
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
38679
        
 
38680
# check null-3 success:         1
 
38681
DELETE FROM t1
 
38682
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
38683
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
38684
        
 
38685
# check null-4 success:         1
 
38686
DELETE FROM t1
 
38687
WHERE f_int1 = 0 AND f_int2 = 0
 
38688
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
38689
AND f_charbig = '#NULL#';
 
38690
SET AUTOCOMMIT= 0;
 
38691
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38692
SELECT f_int1, f_int1, '', '', 'was inserted'
 
38693
FROM t0_template source_tab
 
38694
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
38695
        
 
38696
# check transactions-1 success:         1
 
38697
COMMIT WORK;
 
38698
        
 
38699
# check transactions-2 success:         1
 
38700
ROLLBACK WORK;
 
38701
        
 
38702
# check transactions-3 success:         1
 
38703
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
38704
COMMIT WORK;
 
38705
ROLLBACK WORK;
 
38706
        
 
38707
# check transactions-4 success:         1
 
38708
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38709
SELECT f_int1, f_int1, '', '', 'was inserted'
 
38710
FROM t0_template source_tab
 
38711
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
38712
        
 
38713
# check transactions-5 success:         1
 
38714
ROLLBACK WORK;
 
38715
Warnings:
 
38716
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
38717
        
 
38718
# check transactions-6 success:         1
 
38719
# INFO: Storage engine used for t1 seems to be not transactional.
 
38720
COMMIT;
 
38721
        
 
38722
# check transactions-7 success:         1
 
38723
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
38724
COMMIT WORK;
 
38725
SET @@session.sql_mode = 'traditional';
 
38726
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
38727
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38728
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
38729
'', '', 'was inserted' FROM t0_template
 
38730
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
38731
ERROR 22012: Division by 0
 
38732
COMMIT;
 
38733
        
 
38734
# check transactions-8 success:         1
 
38735
# INFO: Storage engine used for t1 seems to be unable to revert
 
38736
#       changes made by the failing statement.
 
38737
SET @@session.sql_mode = '';
 
38738
SET AUTOCOMMIT= 1;
 
38739
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
38740
COMMIT WORK;
 
38741
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
38742
        
 
38743
# check special-1 success:      1
 
38744
UPDATE t1 SET f_charbig = '';
 
38745
        
 
38746
# check special-2 success:      1
 
38747
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
38748
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38749
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
38750
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38751
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38752
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38753
'just inserted' FROM t0_template
 
38754
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38755
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
38756
BEGIN
 
38757
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38758
f_charbig = 'updated by trigger'
 
38759
      WHERE f_int1 = new.f_int1;
 
38760
END|
 
38761
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38762
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
38763
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38764
        
 
38765
# check trigger-1 success:      1
 
38766
DROP TRIGGER trg_1;
 
38767
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38768
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38769
f_charbig = 'just inserted'
 
38770
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38771
DELETE FROM t0_aux
 
38772
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38773
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38774
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38775
'just inserted' FROM t0_template
 
38776
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38777
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
38778
BEGIN
 
38779
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38780
f_charbig = 'updated by trigger'
 
38781
      WHERE f_int1 = new.f_int1;
 
38782
END|
 
38783
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38784
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
38785
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38786
        
 
38787
# check trigger-2 success:      1
 
38788
DROP TRIGGER trg_1;
 
38789
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38790
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38791
f_charbig = 'just inserted'
 
38792
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38793
DELETE FROM t0_aux
 
38794
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38795
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38796
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38797
'just inserted' FROM t0_template
 
38798
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38799
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
38800
BEGIN
 
38801
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38802
f_charbig = 'updated by trigger'
 
38803
      WHERE f_int1 = new.f_int1;
 
38804
END|
 
38805
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
38806
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38807
        
 
38808
# check trigger-3 success:      1
 
38809
DROP TRIGGER trg_1;
 
38810
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38811
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38812
f_charbig = 'just inserted'
 
38813
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38814
DELETE FROM t0_aux
 
38815
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38816
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38817
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38818
'just inserted' FROM t0_template
 
38819
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38820
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
38821
BEGIN
 
38822
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38823
f_charbig = 'updated by trigger'
 
38824
      WHERE f_int1 = - old.f_int1;
 
38825
END|
 
38826
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
38827
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38828
        
 
38829
# check trigger-4 success:      1
 
38830
DROP TRIGGER trg_1;
 
38831
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38832
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38833
f_charbig = 'just inserted'
 
38834
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38835
DELETE FROM t0_aux
 
38836
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38837
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38838
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38839
'just inserted' FROM t0_template
 
38840
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38841
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
38842
BEGIN
 
38843
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38844
f_charbig = 'updated by trigger'
 
38845
      WHERE f_int1 = new.f_int1;
 
38846
END|
 
38847
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
38848
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38849
        
 
38850
# check trigger-5 success:      1
 
38851
DROP TRIGGER trg_1;
 
38852
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38853
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38854
f_charbig = 'just inserted'
 
38855
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38856
DELETE FROM t0_aux
 
38857
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38858
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38859
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38860
'just inserted' FROM t0_template
 
38861
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38862
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
38863
BEGIN
 
38864
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38865
f_charbig = 'updated by trigger'
 
38866
      WHERE f_int1 = - old.f_int1;
 
38867
END|
 
38868
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
38869
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38870
        
 
38871
# check trigger-6 success:      1
 
38872
DROP TRIGGER trg_1;
 
38873
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38874
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38875
f_charbig = 'just inserted'
 
38876
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38877
DELETE FROM t0_aux
 
38878
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38879
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38880
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38881
'just inserted' FROM t0_template
 
38882
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38883
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
38884
BEGIN
 
38885
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38886
f_charbig = 'updated by trigger'
 
38887
      WHERE f_int1 = - old.f_int1;
 
38888
END|
 
38889
DELETE FROM t0_aux
 
38890
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38891
        
 
38892
# check trigger-7 success:      1
 
38893
DROP TRIGGER trg_1;
 
38894
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38895
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38896
f_charbig = 'just inserted'
 
38897
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38898
DELETE FROM t0_aux
 
38899
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38900
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
38901
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
38902
'just inserted' FROM t0_template
 
38903
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38904
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
38905
BEGIN
 
38906
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
38907
f_charbig = 'updated by trigger'
 
38908
      WHERE f_int1 = - old.f_int1;
 
38909
END|
 
38910
DELETE FROM t0_aux
 
38911
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
38912
        
 
38913
# check trigger-8 success:      1
 
38914
DROP TRIGGER trg_1;
 
38915
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38916
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38917
f_charbig = 'just inserted'
 
38918
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
38919
DELETE FROM t0_aux
 
38920
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38921
DELETE FROM t1
 
38922
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
38923
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
38924
BEGIN
 
38925
SET new.f_int1 = old.f_int1 + @max_row,
 
38926
new.f_int2 = old.f_int2 - @max_row,
 
38927
new.f_charbig = '####updated per update trigger####';
 
38928
END|
 
38929
UPDATE t1
 
38930
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
38931
f_charbig = '####updated per update statement itself####';
 
38932
        
 
38933
# check trigger-9 success:      1
 
38934
DROP TRIGGER trg_2;
 
38935
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38936
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38937
f_charbig = CONCAT('===',f_char1,'===');
 
38938
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
38939
BEGIN
 
38940
SET new.f_int1 = new.f_int1 + @max_row,
 
38941
new.f_int2 = new.f_int2 - @max_row,
 
38942
new.f_charbig = '####updated per update trigger####';
 
38943
END|
 
38944
UPDATE t1
 
38945
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
38946
f_charbig = '####updated per update statement itself####';
 
38947
        
 
38948
# check trigger-10 success:     1
 
38949
DROP TRIGGER trg_2;
 
38950
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
38951
f_int2 = CAST(f_char1 AS SIGNED INT),
 
38952
f_charbig = CONCAT('===',f_char1,'===');
 
38953
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
38954
BEGIN
 
38955
SET new.f_int1 = @my_max1 + @counter,
 
38956
new.f_int2 = @my_min2 - @counter,
 
38957
new.f_charbig = '####updated per insert trigger####';
 
38958
SET @counter = @counter + 1;
 
38959
END|
 
38960
SET @counter = 1;
 
38961
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
38962
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
38963
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
38964
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
38965
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
38966
ORDER BY f_int1;
 
38967
DROP TRIGGER trg_3;
 
38968
        
 
38969
# check trigger-11 success:     1
 
38970
DELETE FROM t1
 
38971
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
38972
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
38973
AND f_charbig = '####updated per insert trigger####';
 
38974
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
38975
BEGIN
 
38976
SET new.f_int1 = @my_max1 + @counter,
 
38977
new.f_int2 = @my_min2 - @counter,
 
38978
new.f_charbig = '####updated per insert trigger####';
 
38979
SET @counter = @counter + 1;
 
38980
END|
 
38981
SET @counter = 1;
 
38982
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
38983
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
38984
SELECT CAST(f_int1 AS CHAR),
 
38985
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
38986
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
38987
ORDER BY f_int1;
 
38988
DROP TRIGGER trg_3;
 
38989
        
 
38990
# check trigger-12 success:     1
 
38991
DELETE FROM t1
 
38992
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
38993
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
38994
AND f_charbig = '####updated per insert trigger####';
 
38995
ANALYZE  TABLE t1;
 
38996
Table   Op      Msg_type        Msg_text
 
38997
test.t1 analyze status  OK
 
38998
CHECK    TABLE t1 EXTENDED;
 
38999
Table   Op      Msg_type        Msg_text
 
39000
test.t1 check   status  OK
 
39001
CHECKSUM TABLE t1 EXTENDED;
 
39002
Table   Checksum
 
39003
test.t1 <some_value>
 
39004
OPTIMIZE TABLE t1;
 
39005
Table   Op      Msg_type        Msg_text
 
39006
test.t1 optimize        status  OK
 
39007
# check layout success:    1
 
39008
REPAIR   TABLE t1 EXTENDED;
 
39009
Table   Op      Msg_type        Msg_text
 
39010
test.t1 repair  status  OK
 
39011
# check layout success:    1
 
39012
TRUNCATE t1;
 
39013
        
 
39014
# check TRUNCATE success:       1
 
39015
# check layout success:    1
 
39016
# End usability test (inc/partition_check.inc)
 
39017
DROP TABLE t1;
 
39018
CREATE TABLE t1 (
 
39019
f_int1 INTEGER,
 
39020
f_int2 INTEGER,
 
39021
f_char1 CHAR(20),
 
39022
f_char2 CHAR(20),
 
39023
f_charbig VARCHAR(1000)
 
39024
 
 
39025
)
 
39026
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
39027
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
39028
(PARTITION part_1 VALUES IN (0),
 
39029
 PARTITION part_2 VALUES IN (1),
 
39030
 PARTITION part_3 VALUES IN (NULL));
 
39031
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39032
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39033
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39034
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
 
39035
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39036
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39037
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
39038
# Start usability test (inc/partition_check.inc)
 
39039
create_command
 
39040
SHOW CREATE TABLE t1;
 
39041
Table   Create Table
 
39042
t1      CREATE TABLE `t1` (
 
39043
  `f_int1` int(11) DEFAULT NULL,
 
39044
  `f_int2` int(11) DEFAULT NULL,
 
39045
  `f_char1` char(20) DEFAULT NULL,
 
39046
  `f_char2` char(20) DEFAULT NULL,
 
39047
  `f_charbig` varchar(1000) DEFAULT NULL
 
39048
) ENGINE=MyISAM 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 = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */
 
39049
 
 
39050
unified filelist
 
39051
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYD
 
39052
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp0.MYI
 
39053
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYD
 
39054
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp1.MYI
 
39055
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYD
 
39056
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_1#SP#part_1sp2.MYI
 
39057
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYD
 
39058
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp0.MYI
 
39059
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYD
 
39060
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp1.MYI
 
39061
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYD
 
39062
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_2#SP#part_2sp2.MYI
 
39063
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYD
 
39064
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp0.MYI
 
39065
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYD
 
39066
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp1.MYI
 
39067
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYD
 
39068
$MYSQLTEST_VARDIR/master-data/test/t1#P#part_3#SP#part_3sp2.MYI
 
39069
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
39070
$MYSQLTEST_VARDIR/master-data/test/t1.par
 
39071
 
 
39072
# check prerequisites-1 success:    1
 
39073
# check COUNT(*) success:    1
 
39074
# check MIN/MAX(f_int1) success:    1
 
39075
# check MIN/MAX(f_int2) success:    1
 
39076
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39077
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
39078
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
39079
WHERE f_int1 IN (2,3);
 
39080
# check prerequisites-3 success:    1
 
39081
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
39082
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
39083
# check read via f_int1 success: 1
 
39084
# check read via f_int2 success: 1
 
39085
        
 
39086
# check multiple-1 success:     1
 
39087
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
39088
        
 
39089
# check multiple-2 success:     1
 
39090
INSERT INTO t1 SELECT * FROM t0_template
 
39091
WHERE MOD(f_int1,3) = 0;
 
39092
        
 
39093
# check multiple-3 success:     1
 
39094
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
39095
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
39096
AND @max_row_div2 + @max_row_div4;
 
39097
        
 
39098
# check multiple-4 success:     1
 
39099
DELETE FROM t1
 
39100
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
39101
AND @max_row_div2 + @max_row_div4 + @max_row;
 
39102
        
 
39103
# check multiple-5 success:     1
 
39104
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
39105
INSERT INTO t1
 
39106
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
39107
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
39108
f_charbig = '#SINGLE#';
 
39109
        
 
39110
# check single-1 success:       1
 
39111
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
39112
INSERT INTO t1
 
39113
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
39114
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
39115
f_charbig = '#SINGLE#';
 
39116
        
 
39117
# check single-2 success:       1
 
39118
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
39119
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
39120
UPDATE t1 SET f_int1 = @cur_value2
 
39121
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
39122
        
 
39123
# check single-3 success:       1
 
39124
SET @cur_value1= -1;
 
39125
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
39126
UPDATE t1 SET f_int1 = @cur_value1
 
39127
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
39128
        
 
39129
# check single-4 success:       1
 
39130
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
39131
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
39132
        
 
39133
# check single-5 success:       1
 
39134
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
39135
        
 
39136
# check single-6 success:       1
 
39137
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
39138
        
 
39139
# check single-7 success:       1
 
39140
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
39141
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
39142
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
39143
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
39144
f_charbig = '#NULL#';
 
39145
INSERT INTO t1
 
39146
SET f_int1 = NULL , f_int2 = -@max_row,
 
39147
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
39148
f_charbig = '#NULL#';
 
39149
# check null success:    1
 
39150
        
 
39151
# check null-1 success:         1
 
39152
UPDATE t1 SET f_int1 = -@max_row
 
39153
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
39154
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
39155
        
 
39156
# check null-2 success:         1
 
39157
UPDATE t1 SET f_int1 = NULL
 
39158
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
39159
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
39160
        
 
39161
# check null-3 success:         1
 
39162
DELETE FROM t1
 
39163
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
39164
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
39165
        
 
39166
# check null-4 success:         1
 
39167
DELETE FROM t1
 
39168
WHERE f_int1 = 0 AND f_int2 = 0
 
39169
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
39170
AND f_charbig = '#NULL#';
 
39171
SET AUTOCOMMIT= 0;
 
39172
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39173
SELECT f_int1, f_int1, '', '', 'was inserted'
 
39174
FROM t0_template source_tab
 
39175
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
39176
        
 
39177
# check transactions-1 success:         1
 
39178
COMMIT WORK;
 
39179
        
 
39180
# check transactions-2 success:         1
 
39181
ROLLBACK WORK;
 
39182
        
 
39183
# check transactions-3 success:         1
 
39184
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
39185
COMMIT WORK;
 
39186
ROLLBACK WORK;
 
39187
        
 
39188
# check transactions-4 success:         1
 
39189
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39190
SELECT f_int1, f_int1, '', '', 'was inserted'
 
39191
FROM t0_template source_tab
 
39192
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
39193
        
 
39194
# check transactions-5 success:         1
 
39195
ROLLBACK WORK;
 
39196
Warnings:
 
39197
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
39198
        
 
39199
# check transactions-6 success:         1
 
39200
# INFO: Storage engine used for t1 seems to be not transactional.
 
39201
COMMIT;
 
39202
        
 
39203
# check transactions-7 success:         1
 
39204
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
39205
COMMIT WORK;
 
39206
SET @@session.sql_mode = 'traditional';
 
39207
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
39208
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39209
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
39210
'', '', 'was inserted' FROM t0_template
 
39211
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
39212
ERROR 22012: Division by 0
 
39213
COMMIT;
 
39214
        
 
39215
# check transactions-8 success:         1
 
39216
# INFO: Storage engine used for t1 seems to be unable to revert
 
39217
#       changes made by the failing statement.
 
39218
SET @@session.sql_mode = '';
 
39219
SET AUTOCOMMIT= 1;
 
39220
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
39221
COMMIT WORK;
 
39222
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
39223
        
 
39224
# check special-1 success:      1
 
39225
UPDATE t1 SET f_charbig = '';
 
39226
        
 
39227
# check special-2 success:      1
 
39228
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
39229
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39230
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
39231
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39232
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39233
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39234
'just inserted' FROM t0_template
 
39235
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39236
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
39237
BEGIN
 
39238
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39239
f_charbig = 'updated by trigger'
 
39240
      WHERE f_int1 = new.f_int1;
 
39241
END|
 
39242
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39243
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
39244
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39245
        
 
39246
# check trigger-1 success:      1
 
39247
DROP TRIGGER trg_1;
 
39248
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39249
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39250
f_charbig = 'just inserted'
 
39251
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39252
DELETE FROM t0_aux
 
39253
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39254
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39255
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39256
'just inserted' FROM t0_template
 
39257
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39258
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
39259
BEGIN
 
39260
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39261
f_charbig = 'updated by trigger'
 
39262
      WHERE f_int1 = new.f_int1;
 
39263
END|
 
39264
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39265
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
39266
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39267
        
 
39268
# check trigger-2 success:      1
 
39269
DROP TRIGGER trg_1;
 
39270
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39271
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39272
f_charbig = 'just inserted'
 
39273
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39274
DELETE FROM t0_aux
 
39275
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39276
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39277
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39278
'just inserted' FROM t0_template
 
39279
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39280
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
39281
BEGIN
 
39282
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39283
f_charbig = 'updated by trigger'
 
39284
      WHERE f_int1 = new.f_int1;
 
39285
END|
 
39286
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
39287
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39288
        
 
39289
# check trigger-3 success:      1
 
39290
DROP TRIGGER trg_1;
 
39291
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39292
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39293
f_charbig = 'just inserted'
 
39294
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39295
DELETE FROM t0_aux
 
39296
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39297
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39298
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39299
'just inserted' FROM t0_template
 
39300
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39301
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
39302
BEGIN
 
39303
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39304
f_charbig = 'updated by trigger'
 
39305
      WHERE f_int1 = - old.f_int1;
 
39306
END|
 
39307
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
39308
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39309
        
 
39310
# check trigger-4 success:      1
 
39311
DROP TRIGGER trg_1;
 
39312
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39313
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39314
f_charbig = 'just inserted'
 
39315
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39316
DELETE FROM t0_aux
 
39317
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39318
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39319
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39320
'just inserted' FROM t0_template
 
39321
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39322
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
39323
BEGIN
 
39324
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39325
f_charbig = 'updated by trigger'
 
39326
      WHERE f_int1 = new.f_int1;
 
39327
END|
 
39328
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
39329
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39330
        
 
39331
# check trigger-5 success:      1
 
39332
DROP TRIGGER trg_1;
 
39333
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39334
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39335
f_charbig = 'just inserted'
 
39336
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39337
DELETE FROM t0_aux
 
39338
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39339
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39340
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39341
'just inserted' FROM t0_template
 
39342
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39343
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
39344
BEGIN
 
39345
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39346
f_charbig = 'updated by trigger'
 
39347
      WHERE f_int1 = - old.f_int1;
 
39348
END|
 
39349
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
39350
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39351
        
 
39352
# check trigger-6 success:      1
 
39353
DROP TRIGGER trg_1;
 
39354
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39355
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39356
f_charbig = 'just inserted'
 
39357
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39358
DELETE FROM t0_aux
 
39359
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39360
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39361
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39362
'just inserted' FROM t0_template
 
39363
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39364
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
39365
BEGIN
 
39366
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39367
f_charbig = 'updated by trigger'
 
39368
      WHERE f_int1 = - old.f_int1;
 
39369
END|
 
39370
DELETE FROM t0_aux
 
39371
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39372
        
 
39373
# check trigger-7 success:      1
 
39374
DROP TRIGGER trg_1;
 
39375
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39376
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39377
f_charbig = 'just inserted'
 
39378
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39379
DELETE FROM t0_aux
 
39380
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39381
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39382
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
39383
'just inserted' FROM t0_template
 
39384
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39385
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
39386
BEGIN
 
39387
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
39388
f_charbig = 'updated by trigger'
 
39389
      WHERE f_int1 = - old.f_int1;
 
39390
END|
 
39391
DELETE FROM t0_aux
 
39392
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
39393
        
 
39394
# check trigger-8 success:      1
 
39395
DROP TRIGGER trg_1;
 
39396
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39397
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39398
f_charbig = 'just inserted'
 
39399
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
39400
DELETE FROM t0_aux
 
39401
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39402
DELETE FROM t1
 
39403
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
39404
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
39405
BEGIN
 
39406
SET new.f_int1 = old.f_int1 + @max_row,
 
39407
new.f_int2 = old.f_int2 - @max_row,
 
39408
new.f_charbig = '####updated per update trigger####';
 
39409
END|
 
39410
UPDATE t1
 
39411
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
39412
f_charbig = '####updated per update statement itself####';
 
39413
        
 
39414
# check trigger-9 success:      1
 
39415
DROP TRIGGER trg_2;
 
39416
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39417
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39418
f_charbig = CONCAT('===',f_char1,'===');
 
39419
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
39420
BEGIN
 
39421
SET new.f_int1 = new.f_int1 + @max_row,
 
39422
new.f_int2 = new.f_int2 - @max_row,
 
39423
new.f_charbig = '####updated per update trigger####';
 
39424
END|
 
39425
UPDATE t1
 
39426
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
39427
f_charbig = '####updated per update statement itself####';
 
39428
        
 
39429
# check trigger-10 success:     1
 
39430
DROP TRIGGER trg_2;
 
39431
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
39432
f_int2 = CAST(f_char1 AS SIGNED INT),
 
39433
f_charbig = CONCAT('===',f_char1,'===');
 
39434
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
39435
BEGIN
 
39436
SET new.f_int1 = @my_max1 + @counter,
 
39437
new.f_int2 = @my_min2 - @counter,
 
39438
new.f_charbig = '####updated per insert trigger####';
 
39439
SET @counter = @counter + 1;
 
39440
END|
 
39441
SET @counter = 1;
 
39442
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
39443
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39444
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
39445
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
39446
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
39447
ORDER BY f_int1;
 
39448
DROP TRIGGER trg_3;
 
39449
        
 
39450
# check trigger-11 success:     1
 
39451
DELETE FROM t1
 
39452
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
39453
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
39454
AND f_charbig = '####updated per insert trigger####';
 
39455
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
39456
BEGIN
 
39457
SET new.f_int1 = @my_max1 + @counter,
 
39458
new.f_int2 = @my_min2 - @counter,
 
39459
new.f_charbig = '####updated per insert trigger####';
 
39460
SET @counter = @counter + 1;
 
39461
END|
 
39462
SET @counter = 1;
 
39463
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
39464
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
39465
SELECT CAST(f_int1 AS CHAR),
 
39466
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
39467
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
39468
ORDER BY f_int1;
 
39469
DROP TRIGGER trg_3;
 
39470
        
 
39471
# check trigger-12 success:     1
 
39472
DELETE FROM t1
 
39473
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
39474
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
39475
AND f_charbig = '####updated per insert trigger####';
 
39476
ANALYZE  TABLE t1;
 
39477
Table   Op      Msg_type        Msg_text
 
39478
test.t1 analyze status  OK
 
39479
CHECK    TABLE t1 EXTENDED;
 
39480
Table   Op      Msg_type        Msg_text
 
39481
test.t1 check   status  OK
 
39482
CHECKSUM TABLE t1 EXTENDED;
 
39483
Table   Checksum
 
39484
test.t1 <some_value>
 
39485
OPTIMIZE TABLE t1;
 
39486
Table   Op      Msg_type        Msg_text
 
39487
test.t1 optimize        status  OK
 
39488
# check layout success:    1
 
39489
REPAIR   TABLE t1 EXTENDED;
 
39490
Table   Op      Msg_type        Msg_text
 
39491
test.t1 repair  status  OK
 
39492
# check layout success:    1
 
39493
TRUNCATE t1;
 
39494
        
 
39495
# check TRUNCATE success:       1
 
39496
# check layout success:    1
 
39497
# End usability test (inc/partition_check.inc)
 
39498
DROP TABLE t1;
 
39499
#  5.3 ALTER ... REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
39500
DROP TABLE IF EXISTS t1;
 
39501
CREATE TABLE t1 (
 
39502
f_int1 INTEGER,
 
39503
f_int2 INTEGER,
 
39504
f_char1 CHAR(20),
 
39505
f_char2 CHAR(20),
 
39506
f_charbig VARCHAR(1000)
 
39507
 
 
39508
)
 
39509
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
39510
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39511
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39512
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39513
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
39514
ERROR HY000: Error in list of partitions to REBUILD
 
39515
DROP TABLE t1;
 
39516
CREATE TABLE t1 (
 
39517
f_int1 INTEGER,
 
39518
f_int2 INTEGER,
 
39519
f_char1 CHAR(20),
 
39520
f_char2 CHAR(20),
 
39521
f_charbig VARCHAR(1000)
 
39522
 
 
39523
)
 
39524
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
39525
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39526
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39527
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39528
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
39529
ERROR HY000: Error in list of partitions to REBUILD
 
39530
DROP TABLE t1;
 
39531
CREATE TABLE t1 (
 
39532
f_int1 INTEGER,
 
39533
f_int2 INTEGER,
 
39534
f_char1 CHAR(20),
 
39535
f_char2 CHAR(20),
 
39536
f_charbig VARCHAR(1000)
 
39537
 
 
39538
)
 
39539
PARTITION BY LIST(MOD(f_int1,4))
 
39540
(PARTITION part_3 VALUES IN (-3),
 
39541
PARTITION part_2 VALUES IN (-2),
 
39542
PARTITION part_1 VALUES IN (-1),
 
39543
PARTITION part_N VALUES IN (NULL),
 
39544
PARTITION part0 VALUES IN (0),
 
39545
PARTITION part1 VALUES IN (1),
 
39546
PARTITION part2 VALUES IN (2),
 
39547
PARTITION part3 VALUES IN (3));
 
39548
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39549
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39550
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39551
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
39552
ERROR HY000: Error in list of partitions to REBUILD
 
39553
DROP TABLE t1;
 
39554
CREATE TABLE t1 (
 
39555
f_int1 INTEGER,
 
39556
f_int2 INTEGER,
 
39557
f_char1 CHAR(20),
 
39558
f_char2 CHAR(20),
 
39559
f_charbig VARCHAR(1000)
 
39560
 
 
39561
)
 
39562
PARTITION BY RANGE(f_int1)
 
39563
(PARTITION parta VALUES LESS THAN (0),
 
39564
PARTITION part_1 VALUES LESS THAN (5),
 
39565
PARTITION part_2 VALUES LESS THAN (10),
 
39566
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
39567
PARTITION part_4 VALUES LESS THAN (20),
 
39568
PARTITION part_5 VALUES LESS THAN (2147483646));
 
39569
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39570
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39571
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39572
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
39573
ERROR HY000: Error in list of partitions to REBUILD
 
39574
DROP TABLE t1;
 
39575
CREATE TABLE t1 (
 
39576
f_int1 INTEGER,
 
39577
f_int2 INTEGER,
 
39578
f_char1 CHAR(20),
 
39579
f_char2 CHAR(20),
 
39580
f_charbig VARCHAR(1000)
 
39581
 
 
39582
)
 
39583
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
39584
(PARTITION part_1 VALUES LESS THAN (0),
 
39585
PARTITION part_2 VALUES LESS THAN (5),
 
39586
PARTITION part_3 VALUES LESS THAN (10),
 
39587
PARTITION part_4 VALUES LESS THAN (2147483646));
 
39588
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39589
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39590
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39591
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
39592
ERROR HY000: Error in list of partitions to REBUILD
 
39593
DROP TABLE t1;
 
39594
CREATE TABLE t1 (
 
39595
f_int1 INTEGER,
 
39596
f_int2 INTEGER,
 
39597
f_char1 CHAR(20),
 
39598
f_char2 CHAR(20),
 
39599
f_charbig VARCHAR(1000)
 
39600
 
 
39601
)
 
39602
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
39603
(PARTITION part_1 VALUES LESS THAN (0)
 
39604
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
39605
PARTITION part_2 VALUES LESS THAN (5)
 
39606
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
39607
PARTITION part_3 VALUES LESS THAN (10)
 
39608
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
39609
PARTITION part_4 VALUES LESS THAN (2147483646)
 
39610
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
39611
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39612
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39613
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39614
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
39615
ERROR HY000: Error in list of partitions to REBUILD
 
39616
DROP TABLE t1;
 
39617
CREATE TABLE t1 (
 
39618
f_int1 INTEGER,
 
39619
f_int2 INTEGER,
 
39620
f_char1 CHAR(20),
 
39621
f_char2 CHAR(20),
 
39622
f_charbig VARCHAR(1000)
 
39623
 
 
39624
)
 
39625
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
39626
(PARTITION part_1 VALUES IN (0)
 
39627
(SUBPARTITION sp11, SUBPARTITION sp12),
 
39628
PARTITION part_2 VALUES IN (1)
 
39629
(SUBPARTITION sp21, SUBPARTITION sp22),
 
39630
PARTITION part_3 VALUES IN (2)
 
39631
(SUBPARTITION sp31, SUBPARTITION sp32),
 
39632
PARTITION part_4 VALUES IN (NULL)
 
39633
(SUBPARTITION sp41, SUBPARTITION sp42));
 
39634
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39635
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39636
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39637
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
39638
ERROR HY000: Error in list of partitions to REBUILD
 
39639
DROP TABLE t1;
 
39640
CREATE TABLE t1 (
 
39641
f_int1 INTEGER,
 
39642
f_int2 INTEGER,
 
39643
f_char1 CHAR(20),
 
39644
f_char2 CHAR(20),
 
39645
f_charbig VARCHAR(1000)
 
39646
 
 
39647
)
 
39648
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
39649
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
39650
(PARTITION part_1 VALUES IN (0),
 
39651
 PARTITION part_2 VALUES IN (1),
 
39652
 PARTITION part_3 VALUES IN (NULL));
 
39653
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39654
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39655
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39656
ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
 
39657
ERROR HY000: Error in list of partitions to REBUILD
 
39658
DROP TABLE t1;
 
39659
#  5.4 ALTER ... REBUILD PARTITION part_1,part_1,part_1;
 
39660
DROP TABLE IF EXISTS t1;
 
39661
CREATE TABLE t1 (
 
39662
f_int1 INTEGER,
 
39663
f_int2 INTEGER,
 
39664
f_char1 CHAR(20),
 
39665
f_char2 CHAR(20),
 
39666
f_charbig VARCHAR(1000)
 
39667
 
 
39668
)
 
39669
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
39670
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39671
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39672
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39673
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
39674
ERROR HY000: Error in list of partitions to REBUILD
 
39675
DROP TABLE t1;
 
39676
CREATE TABLE t1 (
 
39677
f_int1 INTEGER,
 
39678
f_int2 INTEGER,
 
39679
f_char1 CHAR(20),
 
39680
f_char2 CHAR(20),
 
39681
f_charbig VARCHAR(1000)
 
39682
 
 
39683
)
 
39684
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
39685
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39686
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39687
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39688
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
39689
ERROR HY000: Error in list of partitions to REBUILD
 
39690
DROP TABLE t1;
 
39691
CREATE TABLE t1 (
 
39692
f_int1 INTEGER,
 
39693
f_int2 INTEGER,
 
39694
f_char1 CHAR(20),
 
39695
f_char2 CHAR(20),
 
39696
f_charbig VARCHAR(1000)
 
39697
 
 
39698
)
 
39699
PARTITION BY LIST(MOD(f_int1,4))
 
39700
(PARTITION part_3 VALUES IN (-3),
 
39701
PARTITION part_2 VALUES IN (-2),
 
39702
PARTITION part_1 VALUES IN (-1),
 
39703
PARTITION part_N VALUES IN (NULL),
 
39704
PARTITION part0 VALUES IN (0),
 
39705
PARTITION part1 VALUES IN (1),
 
39706
PARTITION part2 VALUES IN (2),
 
39707
PARTITION part3 VALUES IN (3));
 
39708
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39709
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39710
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39711
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
39712
ERROR HY000: Error in list of partitions to REBUILD
 
39713
DROP TABLE t1;
 
39714
CREATE TABLE t1 (
 
39715
f_int1 INTEGER,
 
39716
f_int2 INTEGER,
 
39717
f_char1 CHAR(20),
 
39718
f_char2 CHAR(20),
 
39719
f_charbig VARCHAR(1000)
 
39720
 
 
39721
)
 
39722
PARTITION BY RANGE(f_int1)
 
39723
(PARTITION parta VALUES LESS THAN (0),
 
39724
PARTITION part_1 VALUES LESS THAN (5),
 
39725
PARTITION part_2 VALUES LESS THAN (10),
 
39726
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
39727
PARTITION part_4 VALUES LESS THAN (20),
 
39728
PARTITION part_5 VALUES LESS THAN (2147483646));
 
39729
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39730
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39731
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39732
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
39733
ERROR HY000: Error in list of partitions to REBUILD
 
39734
DROP TABLE t1;
 
39735
CREATE TABLE t1 (
 
39736
f_int1 INTEGER,
 
39737
f_int2 INTEGER,
 
39738
f_char1 CHAR(20),
 
39739
f_char2 CHAR(20),
 
39740
f_charbig VARCHAR(1000)
 
39741
 
 
39742
)
 
39743
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
39744
(PARTITION part_1 VALUES LESS THAN (0),
 
39745
PARTITION part_2 VALUES LESS THAN (5),
 
39746
PARTITION part_3 VALUES LESS THAN (10),
 
39747
PARTITION part_4 VALUES LESS THAN (2147483646));
 
39748
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39749
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39750
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39751
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
39752
ERROR HY000: Error in list of partitions to REBUILD
 
39753
DROP TABLE t1;
 
39754
CREATE TABLE t1 (
 
39755
f_int1 INTEGER,
 
39756
f_int2 INTEGER,
 
39757
f_char1 CHAR(20),
 
39758
f_char2 CHAR(20),
 
39759
f_charbig VARCHAR(1000)
 
39760
 
 
39761
)
 
39762
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
39763
(PARTITION part_1 VALUES LESS THAN (0)
 
39764
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
39765
PARTITION part_2 VALUES LESS THAN (5)
 
39766
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
39767
PARTITION part_3 VALUES LESS THAN (10)
 
39768
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
39769
PARTITION part_4 VALUES LESS THAN (2147483646)
 
39770
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
39771
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39772
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39773
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39774
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
39775
ERROR HY000: Error in list of partitions to REBUILD
 
39776
DROP TABLE t1;
 
39777
CREATE TABLE t1 (
 
39778
f_int1 INTEGER,
 
39779
f_int2 INTEGER,
 
39780
f_char1 CHAR(20),
 
39781
f_char2 CHAR(20),
 
39782
f_charbig VARCHAR(1000)
 
39783
 
 
39784
)
 
39785
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
39786
(PARTITION part_1 VALUES IN (0)
 
39787
(SUBPARTITION sp11, SUBPARTITION sp12),
 
39788
PARTITION part_2 VALUES IN (1)
 
39789
(SUBPARTITION sp21, SUBPARTITION sp22),
 
39790
PARTITION part_3 VALUES IN (2)
 
39791
(SUBPARTITION sp31, SUBPARTITION sp32),
 
39792
PARTITION part_4 VALUES IN (NULL)
 
39793
(SUBPARTITION sp41, SUBPARTITION sp42));
 
39794
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39795
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39796
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39797
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
39798
ERROR HY000: Error in list of partitions to REBUILD
 
39799
DROP TABLE t1;
 
39800
CREATE TABLE t1 (
 
39801
f_int1 INTEGER,
 
39802
f_int2 INTEGER,
 
39803
f_char1 CHAR(20),
 
39804
f_char2 CHAR(20),
 
39805
f_charbig VARCHAR(1000)
 
39806
 
 
39807
)
 
39808
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
39809
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
39810
(PARTITION part_1 VALUES IN (0),
 
39811
 PARTITION part_2 VALUES IN (1),
 
39812
 PARTITION part_3 VALUES IN (NULL));
 
39813
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39814
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39815
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39816
ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
 
39817
ERROR HY000: Error in list of partitions to REBUILD
 
39818
DROP TABLE t1;
 
39819
#------------------------------------------------------------------------
 
39820
#  6   ALTER ... REMOVE PARTITIONING
 
39821
#------------------------------------------------------------------------
 
39822
#  6.1 ALTER ... REMOVE PARTITIONING;
 
39823
DROP TABLE IF EXISTS t1;
 
39824
CREATE TABLE t1 (
 
39825
f_int1 INTEGER,
 
39826
f_int2 INTEGER,
 
39827
f_char1 CHAR(20),
 
39828
f_char2 CHAR(20),
 
39829
f_charbig VARCHAR(1000)
 
39830
 
 
39831
)
 
39832
PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
 
39833
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39834
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39835
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
39836
ALTER TABLE t1 REMOVE PARTITIONING;
 
39837
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
39838
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
39839
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
39840
# Start usability test (inc/partition_check.inc)
 
39841
create_command
 
39842
SHOW CREATE TABLE t1;
 
39843
Table   Create Table
 
39844
t1      CREATE TABLE `t1` (
 
39845
  `f_int1` int(11) DEFAULT NULL,
 
39846
  `f_int2` int(11) DEFAULT NULL,
 
39847
  `f_char1` char(20) DEFAULT NULL,
 
39848
  `f_char2` char(20) DEFAULT NULL,
 
39849
  `f_charbig` varchar(1000) DEFAULT NULL
 
39850
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
39851
 
 
39852
unified filelist
 
39853
$MYSQLTEST_VARDIR/master-data/test/t1.MYD
 
39854
$MYSQLTEST_VARDIR/master-data/test/t1.MYI
 
39855
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
39856
 
 
39857
# check prerequisites-1 success:    1
 
39858
# check COUNT(*) success:    1
 
39859
# check MIN/MAX(f_int1) success:    1
 
39860
# check MIN/MAX(f_int2) success:    1
 
39861
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39862
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
39863
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
39864
WHERE f_int1 IN (2,3);
 
39865
# check prerequisites-3 success:    1
 
39866
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
39867
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
39868
# check read via f_int1 success: 1
 
39869
# check read via f_int2 success: 1
 
39870
        
 
39871
# check multiple-1 success:     1
 
39872
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
39873
        
 
39874
# check multiple-2 success:     1
 
39875
INSERT INTO t1 SELECT * FROM t0_template
 
39876
WHERE MOD(f_int1,3) = 0;
 
39877
        
 
39878
# check multiple-3 success:     1
 
39879
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
39880
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
39881
AND @max_row_div2 + @max_row_div4;
 
39882
        
 
39883
# check multiple-4 success:     1
 
39884
DELETE FROM t1
 
39885
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
39886
AND @max_row_div2 + @max_row_div4 + @max_row;
 
39887
        
 
39888
# check multiple-5 success:     1
 
39889
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
39890
INSERT INTO t1
 
39891
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
39892
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
39893
f_charbig = '#SINGLE#';
 
39894
        
 
39895
# check single-1 success:       1
 
39896
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
39897
INSERT INTO t1
 
39898
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
39899
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
39900
f_charbig = '#SINGLE#';
 
39901
        
 
39902
# check single-2 success:       1
 
39903
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
39904
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
39905
UPDATE t1 SET f_int1 = @cur_value2
 
39906
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
39907
        
 
39908
# check single-3 success:       1
 
39909
SET @cur_value1= -1;
 
39910
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
39911
UPDATE t1 SET f_int1 = @cur_value1
 
39912
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
39913
        
 
39914
# check single-4 success:       1
 
39915
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
39916
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
39917
        
 
39918
# check single-5 success:       1
 
39919
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
39920
        
 
39921
# check single-6 success:       1
 
39922
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
39923
        
 
39924
# check single-7 success:       1
 
39925
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
39926
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
39927
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
39928
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
39929
f_charbig = '#NULL#';
 
39930
INSERT INTO t1
 
39931
SET f_int1 = NULL , f_int2 = -@max_row,
 
39932
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
39933
f_charbig = '#NULL#';
 
39934
# check null success:    1
 
39935
        
 
39936
# check null-1 success:         1
 
39937
UPDATE t1 SET f_int1 = -@max_row
 
39938
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
39939
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
39940
        
 
39941
# check null-2 success:         1
 
39942
UPDATE t1 SET f_int1 = NULL
 
39943
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
39944
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
39945
        
 
39946
# check null-3 success:         1
 
39947
DELETE FROM t1
 
39948
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
39949
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
39950
        
 
39951
# check null-4 success:         1
 
39952
DELETE FROM t1
 
39953
WHERE f_int1 = 0 AND f_int2 = 0
 
39954
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
39955
AND f_charbig = '#NULL#';
 
39956
SET AUTOCOMMIT= 0;
 
39957
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39958
SELECT f_int1, f_int1, '', '', 'was inserted'
 
39959
FROM t0_template source_tab
 
39960
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
39961
        
 
39962
# check transactions-1 success:         1
 
39963
COMMIT WORK;
 
39964
        
 
39965
# check transactions-2 success:         1
 
39966
ROLLBACK WORK;
 
39967
        
 
39968
# check transactions-3 success:         1
 
39969
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
39970
COMMIT WORK;
 
39971
ROLLBACK WORK;
 
39972
        
 
39973
# check transactions-4 success:         1
 
39974
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39975
SELECT f_int1, f_int1, '', '', 'was inserted'
 
39976
FROM t0_template source_tab
 
39977
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
39978
        
 
39979
# check transactions-5 success:         1
 
39980
ROLLBACK WORK;
 
39981
Warnings:
 
39982
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
39983
        
 
39984
# check transactions-6 success:         1
 
39985
# INFO: Storage engine used for t1 seems to be not transactional.
 
39986
COMMIT;
 
39987
        
 
39988
# check transactions-7 success:         1
 
39989
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
39990
COMMIT WORK;
 
39991
SET @@session.sql_mode = 'traditional';
 
39992
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
39993
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
39994
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
39995
'', '', 'was inserted' FROM t0_template
 
39996
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
39997
ERROR 22012: Division by 0
 
39998
COMMIT;
 
39999
        
 
40000
# check transactions-8 success:         1
 
40001
# INFO: Storage engine used for t1 seems to be unable to revert
 
40002
#       changes made by the failing statement.
 
40003
SET @@session.sql_mode = '';
 
40004
SET AUTOCOMMIT= 1;
 
40005
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
40006
COMMIT WORK;
 
40007
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
40008
        
 
40009
# check special-1 success:      1
 
40010
UPDATE t1 SET f_charbig = '';
 
40011
        
 
40012
# check special-2 success:      1
 
40013
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
40014
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40015
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
40016
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40017
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40018
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40019
'just inserted' FROM t0_template
 
40020
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40021
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
40022
BEGIN
 
40023
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40024
f_charbig = 'updated by trigger'
 
40025
      WHERE f_int1 = new.f_int1;
 
40026
END|
 
40027
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40028
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
40029
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40030
        
 
40031
# check trigger-1 success:      1
 
40032
DROP TRIGGER trg_1;
 
40033
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40034
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40035
f_charbig = 'just inserted'
 
40036
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40037
DELETE FROM t0_aux
 
40038
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40039
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40040
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40041
'just inserted' FROM t0_template
 
40042
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40043
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
40044
BEGIN
 
40045
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40046
f_charbig = 'updated by trigger'
 
40047
      WHERE f_int1 = new.f_int1;
 
40048
END|
 
40049
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40050
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
40051
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40052
        
 
40053
# check trigger-2 success:      1
 
40054
DROP TRIGGER trg_1;
 
40055
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40056
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40057
f_charbig = 'just inserted'
 
40058
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40059
DELETE FROM t0_aux
 
40060
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40061
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40062
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40063
'just inserted' FROM t0_template
 
40064
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40065
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
40066
BEGIN
 
40067
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40068
f_charbig = 'updated by trigger'
 
40069
      WHERE f_int1 = new.f_int1;
 
40070
END|
 
40071
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
40072
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40073
        
 
40074
# check trigger-3 success:      1
 
40075
DROP TRIGGER trg_1;
 
40076
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40077
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40078
f_charbig = 'just inserted'
 
40079
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40080
DELETE FROM t0_aux
 
40081
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40082
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40083
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40084
'just inserted' FROM t0_template
 
40085
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40086
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
40087
BEGIN
 
40088
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40089
f_charbig = 'updated by trigger'
 
40090
      WHERE f_int1 = - old.f_int1;
 
40091
END|
 
40092
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
40093
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40094
        
 
40095
# check trigger-4 success:      1
 
40096
DROP TRIGGER trg_1;
 
40097
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40098
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40099
f_charbig = 'just inserted'
 
40100
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40101
DELETE FROM t0_aux
 
40102
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40103
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40104
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40105
'just inserted' FROM t0_template
 
40106
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40107
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
40108
BEGIN
 
40109
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40110
f_charbig = 'updated by trigger'
 
40111
      WHERE f_int1 = new.f_int1;
 
40112
END|
 
40113
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
40114
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40115
        
 
40116
# check trigger-5 success:      1
 
40117
DROP TRIGGER trg_1;
 
40118
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40119
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40120
f_charbig = 'just inserted'
 
40121
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40122
DELETE FROM t0_aux
 
40123
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40124
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40125
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40126
'just inserted' FROM t0_template
 
40127
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40128
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
40129
BEGIN
 
40130
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40131
f_charbig = 'updated by trigger'
 
40132
      WHERE f_int1 = - old.f_int1;
 
40133
END|
 
40134
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
40135
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40136
        
 
40137
# check trigger-6 success:      1
 
40138
DROP TRIGGER trg_1;
 
40139
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40140
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40141
f_charbig = 'just inserted'
 
40142
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40143
DELETE FROM t0_aux
 
40144
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40145
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40146
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40147
'just inserted' FROM t0_template
 
40148
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40149
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
40150
BEGIN
 
40151
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40152
f_charbig = 'updated by trigger'
 
40153
      WHERE f_int1 = - old.f_int1;
 
40154
END|
 
40155
DELETE FROM t0_aux
 
40156
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40157
        
 
40158
# check trigger-7 success:      1
 
40159
DROP TRIGGER trg_1;
 
40160
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40161
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40162
f_charbig = 'just inserted'
 
40163
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40164
DELETE FROM t0_aux
 
40165
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40166
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40167
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40168
'just inserted' FROM t0_template
 
40169
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40170
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
40171
BEGIN
 
40172
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40173
f_charbig = 'updated by trigger'
 
40174
      WHERE f_int1 = - old.f_int1;
 
40175
END|
 
40176
DELETE FROM t0_aux
 
40177
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40178
        
 
40179
# check trigger-8 success:      1
 
40180
DROP TRIGGER trg_1;
 
40181
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40182
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40183
f_charbig = 'just inserted'
 
40184
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40185
DELETE FROM t0_aux
 
40186
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40187
DELETE FROM t1
 
40188
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40189
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
40190
BEGIN
 
40191
SET new.f_int1 = old.f_int1 + @max_row,
 
40192
new.f_int2 = old.f_int2 - @max_row,
 
40193
new.f_charbig = '####updated per update trigger####';
 
40194
END|
 
40195
UPDATE t1
 
40196
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
40197
f_charbig = '####updated per update statement itself####';
 
40198
        
 
40199
# check trigger-9 success:      1
 
40200
DROP TRIGGER trg_2;
 
40201
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40202
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40203
f_charbig = CONCAT('===',f_char1,'===');
 
40204
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
40205
BEGIN
 
40206
SET new.f_int1 = new.f_int1 + @max_row,
 
40207
new.f_int2 = new.f_int2 - @max_row,
 
40208
new.f_charbig = '####updated per update trigger####';
 
40209
END|
 
40210
UPDATE t1
 
40211
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
40212
f_charbig = '####updated per update statement itself####';
 
40213
        
 
40214
# check trigger-10 success:     1
 
40215
DROP TRIGGER trg_2;
 
40216
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40217
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40218
f_charbig = CONCAT('===',f_char1,'===');
 
40219
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
40220
BEGIN
 
40221
SET new.f_int1 = @my_max1 + @counter,
 
40222
new.f_int2 = @my_min2 - @counter,
 
40223
new.f_charbig = '####updated per insert trigger####';
 
40224
SET @counter = @counter + 1;
 
40225
END|
 
40226
SET @counter = 1;
 
40227
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
40228
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40229
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
40230
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
40231
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
40232
ORDER BY f_int1;
 
40233
DROP TRIGGER trg_3;
 
40234
        
 
40235
# check trigger-11 success:     1
 
40236
DELETE FROM t1
 
40237
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
40238
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
40239
AND f_charbig = '####updated per insert trigger####';
 
40240
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
40241
BEGIN
 
40242
SET new.f_int1 = @my_max1 + @counter,
 
40243
new.f_int2 = @my_min2 - @counter,
 
40244
new.f_charbig = '####updated per insert trigger####';
 
40245
SET @counter = @counter + 1;
 
40246
END|
 
40247
SET @counter = 1;
 
40248
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
40249
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
40250
SELECT CAST(f_int1 AS CHAR),
 
40251
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
40252
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
40253
ORDER BY f_int1;
 
40254
DROP TRIGGER trg_3;
 
40255
        
 
40256
# check trigger-12 success:     1
 
40257
DELETE FROM t1
 
40258
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
40259
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
40260
AND f_charbig = '####updated per insert trigger####';
 
40261
ANALYZE  TABLE t1;
 
40262
Table   Op      Msg_type        Msg_text
 
40263
test.t1 analyze status  OK
 
40264
CHECK    TABLE t1 EXTENDED;
 
40265
Table   Op      Msg_type        Msg_text
 
40266
test.t1 check   status  OK
 
40267
CHECKSUM TABLE t1 EXTENDED;
 
40268
Table   Checksum
 
40269
test.t1 <some_value>
 
40270
OPTIMIZE TABLE t1;
 
40271
Table   Op      Msg_type        Msg_text
 
40272
test.t1 optimize        status  OK
 
40273
# check layout success:    1
 
40274
REPAIR   TABLE t1 EXTENDED;
 
40275
Table   Op      Msg_type        Msg_text
 
40276
test.t1 repair  status  OK
 
40277
# check layout success:    1
 
40278
TRUNCATE t1;
 
40279
        
 
40280
# check TRUNCATE success:       1
 
40281
# check layout success:    1
 
40282
# End usability test (inc/partition_check.inc)
 
40283
DROP TABLE t1;
 
40284
CREATE TABLE t1 (
 
40285
f_int1 INTEGER,
 
40286
f_int2 INTEGER,
 
40287
f_char1 CHAR(20),
 
40288
f_char2 CHAR(20),
 
40289
f_charbig VARCHAR(1000)
 
40290
 
 
40291
)
 
40292
PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
 
40293
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40294
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
40295
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
40296
ALTER TABLE t1 REMOVE PARTITIONING;
 
40297
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40298
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
40299
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
40300
# Start usability test (inc/partition_check.inc)
 
40301
create_command
 
40302
SHOW CREATE TABLE t1;
 
40303
Table   Create Table
 
40304
t1      CREATE TABLE `t1` (
 
40305
  `f_int1` int(11) DEFAULT NULL,
 
40306
  `f_int2` int(11) DEFAULT NULL,
 
40307
  `f_char1` char(20) DEFAULT NULL,
 
40308
  `f_char2` char(20) DEFAULT NULL,
 
40309
  `f_charbig` varchar(1000) DEFAULT NULL
 
40310
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
40311
 
 
40312
unified filelist
 
40313
$MYSQLTEST_VARDIR/master-data/test/t1.MYD
 
40314
$MYSQLTEST_VARDIR/master-data/test/t1.MYI
 
40315
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
40316
 
 
40317
# check prerequisites-1 success:    1
 
40318
# check COUNT(*) success:    1
 
40319
# check MIN/MAX(f_int1) success:    1
 
40320
# check MIN/MAX(f_int2) success:    1
 
40321
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40322
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
40323
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
40324
WHERE f_int1 IN (2,3);
 
40325
# check prerequisites-3 success:    1
 
40326
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
40327
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
40328
# check read via f_int1 success: 1
 
40329
# check read via f_int2 success: 1
 
40330
        
 
40331
# check multiple-1 success:     1
 
40332
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
40333
        
 
40334
# check multiple-2 success:     1
 
40335
INSERT INTO t1 SELECT * FROM t0_template
 
40336
WHERE MOD(f_int1,3) = 0;
 
40337
        
 
40338
# check multiple-3 success:     1
 
40339
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
40340
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
40341
AND @max_row_div2 + @max_row_div4;
 
40342
        
 
40343
# check multiple-4 success:     1
 
40344
DELETE FROM t1
 
40345
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
40346
AND @max_row_div2 + @max_row_div4 + @max_row;
 
40347
        
 
40348
# check multiple-5 success:     1
 
40349
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
40350
INSERT INTO t1
 
40351
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
40352
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
40353
f_charbig = '#SINGLE#';
 
40354
        
 
40355
# check single-1 success:       1
 
40356
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
40357
INSERT INTO t1
 
40358
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
40359
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
40360
f_charbig = '#SINGLE#';
 
40361
        
 
40362
# check single-2 success:       1
 
40363
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
40364
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
40365
UPDATE t1 SET f_int1 = @cur_value2
 
40366
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
40367
        
 
40368
# check single-3 success:       1
 
40369
SET @cur_value1= -1;
 
40370
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
40371
UPDATE t1 SET f_int1 = @cur_value1
 
40372
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
40373
        
 
40374
# check single-4 success:       1
 
40375
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
40376
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
40377
        
 
40378
# check single-5 success:       1
 
40379
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
40380
        
 
40381
# check single-6 success:       1
 
40382
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
40383
        
 
40384
# check single-7 success:       1
 
40385
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
40386
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
40387
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
40388
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
40389
f_charbig = '#NULL#';
 
40390
INSERT INTO t1
 
40391
SET f_int1 = NULL , f_int2 = -@max_row,
 
40392
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
40393
f_charbig = '#NULL#';
 
40394
# check null success:    1
 
40395
        
 
40396
# check null-1 success:         1
 
40397
UPDATE t1 SET f_int1 = -@max_row
 
40398
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
40399
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
40400
        
 
40401
# check null-2 success:         1
 
40402
UPDATE t1 SET f_int1 = NULL
 
40403
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
40404
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
40405
        
 
40406
# check null-3 success:         1
 
40407
DELETE FROM t1
 
40408
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
40409
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
40410
        
 
40411
# check null-4 success:         1
 
40412
DELETE FROM t1
 
40413
WHERE f_int1 = 0 AND f_int2 = 0
 
40414
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
40415
AND f_charbig = '#NULL#';
 
40416
SET AUTOCOMMIT= 0;
 
40417
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40418
SELECT f_int1, f_int1, '', '', 'was inserted'
 
40419
FROM t0_template source_tab
 
40420
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
40421
        
 
40422
# check transactions-1 success:         1
 
40423
COMMIT WORK;
 
40424
        
 
40425
# check transactions-2 success:         1
 
40426
ROLLBACK WORK;
 
40427
        
 
40428
# check transactions-3 success:         1
 
40429
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
40430
COMMIT WORK;
 
40431
ROLLBACK WORK;
 
40432
        
 
40433
# check transactions-4 success:         1
 
40434
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40435
SELECT f_int1, f_int1, '', '', 'was inserted'
 
40436
FROM t0_template source_tab
 
40437
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
40438
        
 
40439
# check transactions-5 success:         1
 
40440
ROLLBACK WORK;
 
40441
Warnings:
 
40442
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
40443
        
 
40444
# check transactions-6 success:         1
 
40445
# INFO: Storage engine used for t1 seems to be not transactional.
 
40446
COMMIT;
 
40447
        
 
40448
# check transactions-7 success:         1
 
40449
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
40450
COMMIT WORK;
 
40451
SET @@session.sql_mode = 'traditional';
 
40452
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
40453
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40454
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
40455
'', '', 'was inserted' FROM t0_template
 
40456
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
40457
ERROR 22012: Division by 0
 
40458
COMMIT;
 
40459
        
 
40460
# check transactions-8 success:         1
 
40461
# INFO: Storage engine used for t1 seems to be unable to revert
 
40462
#       changes made by the failing statement.
 
40463
SET @@session.sql_mode = '';
 
40464
SET AUTOCOMMIT= 1;
 
40465
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
40466
COMMIT WORK;
 
40467
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
40468
        
 
40469
# check special-1 success:      1
 
40470
UPDATE t1 SET f_charbig = '';
 
40471
        
 
40472
# check special-2 success:      1
 
40473
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
40474
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40475
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
40476
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40477
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40478
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40479
'just inserted' FROM t0_template
 
40480
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40481
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
40482
BEGIN
 
40483
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40484
f_charbig = 'updated by trigger'
 
40485
      WHERE f_int1 = new.f_int1;
 
40486
END|
 
40487
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40488
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
40489
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40490
        
 
40491
# check trigger-1 success:      1
 
40492
DROP TRIGGER trg_1;
 
40493
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40494
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40495
f_charbig = 'just inserted'
 
40496
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40497
DELETE FROM t0_aux
 
40498
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40499
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40500
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40501
'just inserted' FROM t0_template
 
40502
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40503
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
40504
BEGIN
 
40505
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40506
f_charbig = 'updated by trigger'
 
40507
      WHERE f_int1 = new.f_int1;
 
40508
END|
 
40509
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40510
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
40511
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40512
        
 
40513
# check trigger-2 success:      1
 
40514
DROP TRIGGER trg_1;
 
40515
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40516
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40517
f_charbig = 'just inserted'
 
40518
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40519
DELETE FROM t0_aux
 
40520
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40521
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40522
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40523
'just inserted' FROM t0_template
 
40524
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40525
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
40526
BEGIN
 
40527
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40528
f_charbig = 'updated by trigger'
 
40529
      WHERE f_int1 = new.f_int1;
 
40530
END|
 
40531
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
40532
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40533
        
 
40534
# check trigger-3 success:      1
 
40535
DROP TRIGGER trg_1;
 
40536
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40537
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40538
f_charbig = 'just inserted'
 
40539
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40540
DELETE FROM t0_aux
 
40541
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40542
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40543
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40544
'just inserted' FROM t0_template
 
40545
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40546
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
40547
BEGIN
 
40548
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40549
f_charbig = 'updated by trigger'
 
40550
      WHERE f_int1 = - old.f_int1;
 
40551
END|
 
40552
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
40553
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40554
        
 
40555
# check trigger-4 success:      1
 
40556
DROP TRIGGER trg_1;
 
40557
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40558
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40559
f_charbig = 'just inserted'
 
40560
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40561
DELETE FROM t0_aux
 
40562
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40563
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40564
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40565
'just inserted' FROM t0_template
 
40566
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40567
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
40568
BEGIN
 
40569
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40570
f_charbig = 'updated by trigger'
 
40571
      WHERE f_int1 = new.f_int1;
 
40572
END|
 
40573
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
40574
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40575
        
 
40576
# check trigger-5 success:      1
 
40577
DROP TRIGGER trg_1;
 
40578
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40579
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40580
f_charbig = 'just inserted'
 
40581
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40582
DELETE FROM t0_aux
 
40583
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40584
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40585
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40586
'just inserted' FROM t0_template
 
40587
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40588
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
40589
BEGIN
 
40590
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40591
f_charbig = 'updated by trigger'
 
40592
      WHERE f_int1 = - old.f_int1;
 
40593
END|
 
40594
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
40595
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40596
        
 
40597
# check trigger-6 success:      1
 
40598
DROP TRIGGER trg_1;
 
40599
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40600
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40601
f_charbig = 'just inserted'
 
40602
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40603
DELETE FROM t0_aux
 
40604
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40605
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40606
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40607
'just inserted' FROM t0_template
 
40608
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40609
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
40610
BEGIN
 
40611
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40612
f_charbig = 'updated by trigger'
 
40613
      WHERE f_int1 = - old.f_int1;
 
40614
END|
 
40615
DELETE FROM t0_aux
 
40616
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40617
        
 
40618
# check trigger-7 success:      1
 
40619
DROP TRIGGER trg_1;
 
40620
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40621
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40622
f_charbig = 'just inserted'
 
40623
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40624
DELETE FROM t0_aux
 
40625
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40626
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40627
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40628
'just inserted' FROM t0_template
 
40629
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40630
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
40631
BEGIN
 
40632
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40633
f_charbig = 'updated by trigger'
 
40634
      WHERE f_int1 = - old.f_int1;
 
40635
END|
 
40636
DELETE FROM t0_aux
 
40637
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
40638
        
 
40639
# check trigger-8 success:      1
 
40640
DROP TRIGGER trg_1;
 
40641
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40642
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40643
f_charbig = 'just inserted'
 
40644
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40645
DELETE FROM t0_aux
 
40646
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40647
DELETE FROM t1
 
40648
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40649
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
40650
BEGIN
 
40651
SET new.f_int1 = old.f_int1 + @max_row,
 
40652
new.f_int2 = old.f_int2 - @max_row,
 
40653
new.f_charbig = '####updated per update trigger####';
 
40654
END|
 
40655
UPDATE t1
 
40656
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
40657
f_charbig = '####updated per update statement itself####';
 
40658
        
 
40659
# check trigger-9 success:      1
 
40660
DROP TRIGGER trg_2;
 
40661
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40662
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40663
f_charbig = CONCAT('===',f_char1,'===');
 
40664
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
40665
BEGIN
 
40666
SET new.f_int1 = new.f_int1 + @max_row,
 
40667
new.f_int2 = new.f_int2 - @max_row,
 
40668
new.f_charbig = '####updated per update trigger####';
 
40669
END|
 
40670
UPDATE t1
 
40671
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
40672
f_charbig = '####updated per update statement itself####';
 
40673
        
 
40674
# check trigger-10 success:     1
 
40675
DROP TRIGGER trg_2;
 
40676
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40677
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40678
f_charbig = CONCAT('===',f_char1,'===');
 
40679
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
40680
BEGIN
 
40681
SET new.f_int1 = @my_max1 + @counter,
 
40682
new.f_int2 = @my_min2 - @counter,
 
40683
new.f_charbig = '####updated per insert trigger####';
 
40684
SET @counter = @counter + 1;
 
40685
END|
 
40686
SET @counter = 1;
 
40687
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
40688
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40689
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
40690
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
40691
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
40692
ORDER BY f_int1;
 
40693
DROP TRIGGER trg_3;
 
40694
        
 
40695
# check trigger-11 success:     1
 
40696
DELETE FROM t1
 
40697
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
40698
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
40699
AND f_charbig = '####updated per insert trigger####';
 
40700
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
40701
BEGIN
 
40702
SET new.f_int1 = @my_max1 + @counter,
 
40703
new.f_int2 = @my_min2 - @counter,
 
40704
new.f_charbig = '####updated per insert trigger####';
 
40705
SET @counter = @counter + 1;
 
40706
END|
 
40707
SET @counter = 1;
 
40708
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
40709
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
40710
SELECT CAST(f_int1 AS CHAR),
 
40711
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
40712
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
40713
ORDER BY f_int1;
 
40714
DROP TRIGGER trg_3;
 
40715
        
 
40716
# check trigger-12 success:     1
 
40717
DELETE FROM t1
 
40718
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
40719
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
40720
AND f_charbig = '####updated per insert trigger####';
 
40721
ANALYZE  TABLE t1;
 
40722
Table   Op      Msg_type        Msg_text
 
40723
test.t1 analyze status  OK
 
40724
CHECK    TABLE t1 EXTENDED;
 
40725
Table   Op      Msg_type        Msg_text
 
40726
test.t1 check   status  OK
 
40727
CHECKSUM TABLE t1 EXTENDED;
 
40728
Table   Checksum
 
40729
test.t1 <some_value>
 
40730
OPTIMIZE TABLE t1;
 
40731
Table   Op      Msg_type        Msg_text
 
40732
test.t1 optimize        status  OK
 
40733
# check layout success:    1
 
40734
REPAIR   TABLE t1 EXTENDED;
 
40735
Table   Op      Msg_type        Msg_text
 
40736
test.t1 repair  status  OK
 
40737
# check layout success:    1
 
40738
TRUNCATE t1;
 
40739
        
 
40740
# check TRUNCATE success:       1
 
40741
# check layout success:    1
 
40742
# End usability test (inc/partition_check.inc)
 
40743
DROP TABLE t1;
 
40744
CREATE TABLE t1 (
 
40745
f_int1 INTEGER,
 
40746
f_int2 INTEGER,
 
40747
f_char1 CHAR(20),
 
40748
f_char2 CHAR(20),
 
40749
f_charbig VARCHAR(1000)
 
40750
 
 
40751
)
 
40752
PARTITION BY LIST(MOD(f_int1,4))
 
40753
(PARTITION part_3 VALUES IN (-3),
 
40754
PARTITION part_2 VALUES IN (-2),
 
40755
PARTITION part_1 VALUES IN (-1),
 
40756
PARTITION part_N VALUES IN (NULL),
 
40757
PARTITION part0 VALUES IN (0),
 
40758
PARTITION part1 VALUES IN (1),
 
40759
PARTITION part2 VALUES IN (2),
 
40760
PARTITION part3 VALUES IN (3));
 
40761
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40762
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
40763
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
40764
ALTER TABLE t1 REMOVE PARTITIONING;
 
40765
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40766
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
40767
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
40768
# Start usability test (inc/partition_check.inc)
 
40769
create_command
 
40770
SHOW CREATE TABLE t1;
 
40771
Table   Create Table
 
40772
t1      CREATE TABLE `t1` (
 
40773
  `f_int1` int(11) DEFAULT NULL,
 
40774
  `f_int2` int(11) DEFAULT NULL,
 
40775
  `f_char1` char(20) DEFAULT NULL,
 
40776
  `f_char2` char(20) DEFAULT NULL,
 
40777
  `f_charbig` varchar(1000) DEFAULT NULL
 
40778
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
40779
 
 
40780
unified filelist
 
40781
$MYSQLTEST_VARDIR/master-data/test/t1.MYD
 
40782
$MYSQLTEST_VARDIR/master-data/test/t1.MYI
 
40783
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
40784
 
 
40785
# check prerequisites-1 success:    1
 
40786
# check COUNT(*) success:    1
 
40787
# check MIN/MAX(f_int1) success:    1
 
40788
# check MIN/MAX(f_int2) success:    1
 
40789
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40790
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
40791
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
40792
WHERE f_int1 IN (2,3);
 
40793
# check prerequisites-3 success:    1
 
40794
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
40795
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
40796
# check read via f_int1 success: 1
 
40797
# check read via f_int2 success: 1
 
40798
        
 
40799
# check multiple-1 success:     1
 
40800
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
40801
        
 
40802
# check multiple-2 success:     1
 
40803
INSERT INTO t1 SELECT * FROM t0_template
 
40804
WHERE MOD(f_int1,3) = 0;
 
40805
        
 
40806
# check multiple-3 success:     1
 
40807
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
40808
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
40809
AND @max_row_div2 + @max_row_div4;
 
40810
        
 
40811
# check multiple-4 success:     1
 
40812
DELETE FROM t1
 
40813
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
40814
AND @max_row_div2 + @max_row_div4 + @max_row;
 
40815
        
 
40816
# check multiple-5 success:     1
 
40817
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
40818
INSERT INTO t1
 
40819
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
40820
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
40821
f_charbig = '#SINGLE#';
 
40822
        
 
40823
# check single-1 success:       1
 
40824
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
40825
INSERT INTO t1
 
40826
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
40827
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
40828
f_charbig = '#SINGLE#';
 
40829
        
 
40830
# check single-2 success:       1
 
40831
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
40832
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
40833
UPDATE t1 SET f_int1 = @cur_value2
 
40834
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
40835
        
 
40836
# check single-3 success:       1
 
40837
SET @cur_value1= -1;
 
40838
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
40839
UPDATE t1 SET f_int1 = @cur_value1
 
40840
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
40841
        
 
40842
# check single-4 success:       1
 
40843
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
40844
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
40845
        
 
40846
# check single-5 success:       1
 
40847
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
40848
        
 
40849
# check single-6 success:       1
 
40850
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
40851
        
 
40852
# check single-7 success:       1
 
40853
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
40854
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
40855
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
40856
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
40857
f_charbig = '#NULL#';
 
40858
INSERT INTO t1
 
40859
SET f_int1 = NULL , f_int2 = -@max_row,
 
40860
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
40861
f_charbig = '#NULL#';
 
40862
# check null success:    1
 
40863
        
 
40864
# check null-1 success:         1
 
40865
UPDATE t1 SET f_int1 = -@max_row
 
40866
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
40867
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
40868
        
 
40869
# check null-2 success:         1
 
40870
UPDATE t1 SET f_int1 = NULL
 
40871
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
40872
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
40873
        
 
40874
# check null-3 success:         1
 
40875
DELETE FROM t1
 
40876
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
40877
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
40878
        
 
40879
# check null-4 success:         1
 
40880
DELETE FROM t1
 
40881
WHERE f_int1 = 0 AND f_int2 = 0
 
40882
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
40883
AND f_charbig = '#NULL#';
 
40884
SET AUTOCOMMIT= 0;
 
40885
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40886
SELECT f_int1, f_int1, '', '', 'was inserted'
 
40887
FROM t0_template source_tab
 
40888
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
40889
        
 
40890
# check transactions-1 success:         1
 
40891
COMMIT WORK;
 
40892
        
 
40893
# check transactions-2 success:         1
 
40894
ROLLBACK WORK;
 
40895
        
 
40896
# check transactions-3 success:         1
 
40897
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
40898
COMMIT WORK;
 
40899
ROLLBACK WORK;
 
40900
        
 
40901
# check transactions-4 success:         1
 
40902
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40903
SELECT f_int1, f_int1, '', '', 'was inserted'
 
40904
FROM t0_template source_tab
 
40905
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
40906
        
 
40907
# check transactions-5 success:         1
 
40908
ROLLBACK WORK;
 
40909
Warnings:
 
40910
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
40911
        
 
40912
# check transactions-6 success:         1
 
40913
# INFO: Storage engine used for t1 seems to be not transactional.
 
40914
COMMIT;
 
40915
        
 
40916
# check transactions-7 success:         1
 
40917
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
40918
COMMIT WORK;
 
40919
SET @@session.sql_mode = 'traditional';
 
40920
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
40921
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
40922
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
40923
'', '', 'was inserted' FROM t0_template
 
40924
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
40925
ERROR 22012: Division by 0
 
40926
COMMIT;
 
40927
        
 
40928
# check transactions-8 success:         1
 
40929
# INFO: Storage engine used for t1 seems to be unable to revert
 
40930
#       changes made by the failing statement.
 
40931
SET @@session.sql_mode = '';
 
40932
SET AUTOCOMMIT= 1;
 
40933
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
40934
COMMIT WORK;
 
40935
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
40936
        
 
40937
# check special-1 success:      1
 
40938
UPDATE t1 SET f_charbig = '';
 
40939
        
 
40940
# check special-2 success:      1
 
40941
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
40942
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40943
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
40944
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40945
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40946
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40947
'just inserted' FROM t0_template
 
40948
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40949
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
40950
BEGIN
 
40951
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40952
f_charbig = 'updated by trigger'
 
40953
      WHERE f_int1 = new.f_int1;
 
40954
END|
 
40955
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40956
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
40957
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40958
        
 
40959
# check trigger-1 success:      1
 
40960
DROP TRIGGER trg_1;
 
40961
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40962
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40963
f_charbig = 'just inserted'
 
40964
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40965
DELETE FROM t0_aux
 
40966
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40967
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40968
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40969
'just inserted' FROM t0_template
 
40970
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40971
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
40972
BEGIN
 
40973
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40974
f_charbig = 'updated by trigger'
 
40975
      WHERE f_int1 = new.f_int1;
 
40976
END|
 
40977
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40978
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
40979
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40980
        
 
40981
# check trigger-2 success:      1
 
40982
DROP TRIGGER trg_1;
 
40983
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
40984
f_int2 = CAST(f_char1 AS SIGNED INT),
 
40985
f_charbig = 'just inserted'
 
40986
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
40987
DELETE FROM t0_aux
 
40988
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40989
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
40990
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
40991
'just inserted' FROM t0_template
 
40992
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
40993
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
40994
BEGIN
 
40995
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
40996
f_charbig = 'updated by trigger'
 
40997
      WHERE f_int1 = new.f_int1;
 
40998
END|
 
40999
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41000
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41001
        
 
41002
# check trigger-3 success:      1
 
41003
DROP TRIGGER trg_1;
 
41004
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41005
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41006
f_charbig = 'just inserted'
 
41007
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41008
DELETE FROM t0_aux
 
41009
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41010
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41011
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41012
'just inserted' FROM t0_template
 
41013
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41014
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
41015
BEGIN
 
41016
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41017
f_charbig = 'updated by trigger'
 
41018
      WHERE f_int1 = - old.f_int1;
 
41019
END|
 
41020
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41021
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41022
        
 
41023
# check trigger-4 success:      1
 
41024
DROP TRIGGER trg_1;
 
41025
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41026
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41027
f_charbig = 'just inserted'
 
41028
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41029
DELETE FROM t0_aux
 
41030
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41031
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41032
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41033
'just inserted' FROM t0_template
 
41034
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41035
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
41036
BEGIN
 
41037
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41038
f_charbig = 'updated by trigger'
 
41039
      WHERE f_int1 = new.f_int1;
 
41040
END|
 
41041
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41042
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41043
        
 
41044
# check trigger-5 success:      1
 
41045
DROP TRIGGER trg_1;
 
41046
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41047
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41048
f_charbig = 'just inserted'
 
41049
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41050
DELETE FROM t0_aux
 
41051
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41052
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41053
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41054
'just inserted' FROM t0_template
 
41055
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41056
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
41057
BEGIN
 
41058
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41059
f_charbig = 'updated by trigger'
 
41060
      WHERE f_int1 = - old.f_int1;
 
41061
END|
 
41062
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41063
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41064
        
 
41065
# check trigger-6 success:      1
 
41066
DROP TRIGGER trg_1;
 
41067
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41068
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41069
f_charbig = 'just inserted'
 
41070
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41071
DELETE FROM t0_aux
 
41072
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41073
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41074
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41075
'just inserted' FROM t0_template
 
41076
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41077
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
41078
BEGIN
 
41079
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41080
f_charbig = 'updated by trigger'
 
41081
      WHERE f_int1 = - old.f_int1;
 
41082
END|
 
41083
DELETE FROM t0_aux
 
41084
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41085
        
 
41086
# check trigger-7 success:      1
 
41087
DROP TRIGGER trg_1;
 
41088
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41089
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41090
f_charbig = 'just inserted'
 
41091
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41092
DELETE FROM t0_aux
 
41093
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41094
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41095
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41096
'just inserted' FROM t0_template
 
41097
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41098
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
41099
BEGIN
 
41100
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41101
f_charbig = 'updated by trigger'
 
41102
      WHERE f_int1 = - old.f_int1;
 
41103
END|
 
41104
DELETE FROM t0_aux
 
41105
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41106
        
 
41107
# check trigger-8 success:      1
 
41108
DROP TRIGGER trg_1;
 
41109
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41110
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41111
f_charbig = 'just inserted'
 
41112
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41113
DELETE FROM t0_aux
 
41114
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41115
DELETE FROM t1
 
41116
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41117
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
41118
BEGIN
 
41119
SET new.f_int1 = old.f_int1 + @max_row,
 
41120
new.f_int2 = old.f_int2 - @max_row,
 
41121
new.f_charbig = '####updated per update trigger####';
 
41122
END|
 
41123
UPDATE t1
 
41124
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
41125
f_charbig = '####updated per update statement itself####';
 
41126
        
 
41127
# check trigger-9 success:      1
 
41128
DROP TRIGGER trg_2;
 
41129
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41130
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41131
f_charbig = CONCAT('===',f_char1,'===');
 
41132
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
41133
BEGIN
 
41134
SET new.f_int1 = new.f_int1 + @max_row,
 
41135
new.f_int2 = new.f_int2 - @max_row,
 
41136
new.f_charbig = '####updated per update trigger####';
 
41137
END|
 
41138
UPDATE t1
 
41139
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
41140
f_charbig = '####updated per update statement itself####';
 
41141
        
 
41142
# check trigger-10 success:     1
 
41143
DROP TRIGGER trg_2;
 
41144
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41145
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41146
f_charbig = CONCAT('===',f_char1,'===');
 
41147
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
41148
BEGIN
 
41149
SET new.f_int1 = @my_max1 + @counter,
 
41150
new.f_int2 = @my_min2 - @counter,
 
41151
new.f_charbig = '####updated per insert trigger####';
 
41152
SET @counter = @counter + 1;
 
41153
END|
 
41154
SET @counter = 1;
 
41155
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
41156
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41157
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
41158
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
41159
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
41160
ORDER BY f_int1;
 
41161
DROP TRIGGER trg_3;
 
41162
        
 
41163
# check trigger-11 success:     1
 
41164
DELETE FROM t1
 
41165
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
41166
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
41167
AND f_charbig = '####updated per insert trigger####';
 
41168
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
41169
BEGIN
 
41170
SET new.f_int1 = @my_max1 + @counter,
 
41171
new.f_int2 = @my_min2 - @counter,
 
41172
new.f_charbig = '####updated per insert trigger####';
 
41173
SET @counter = @counter + 1;
 
41174
END|
 
41175
SET @counter = 1;
 
41176
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
41177
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
41178
SELECT CAST(f_int1 AS CHAR),
 
41179
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
41180
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
41181
ORDER BY f_int1;
 
41182
DROP TRIGGER trg_3;
 
41183
        
 
41184
# check trigger-12 success:     1
 
41185
DELETE FROM t1
 
41186
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
41187
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
41188
AND f_charbig = '####updated per insert trigger####';
 
41189
ANALYZE  TABLE t1;
 
41190
Table   Op      Msg_type        Msg_text
 
41191
test.t1 analyze status  OK
 
41192
CHECK    TABLE t1 EXTENDED;
 
41193
Table   Op      Msg_type        Msg_text
 
41194
test.t1 check   status  OK
 
41195
CHECKSUM TABLE t1 EXTENDED;
 
41196
Table   Checksum
 
41197
test.t1 <some_value>
 
41198
OPTIMIZE TABLE t1;
 
41199
Table   Op      Msg_type        Msg_text
 
41200
test.t1 optimize        status  OK
 
41201
# check layout success:    1
 
41202
REPAIR   TABLE t1 EXTENDED;
 
41203
Table   Op      Msg_type        Msg_text
 
41204
test.t1 repair  status  OK
 
41205
# check layout success:    1
 
41206
TRUNCATE t1;
 
41207
        
 
41208
# check TRUNCATE success:       1
 
41209
# check layout success:    1
 
41210
# End usability test (inc/partition_check.inc)
 
41211
DROP TABLE t1;
 
41212
CREATE TABLE t1 (
 
41213
f_int1 INTEGER,
 
41214
f_int2 INTEGER,
 
41215
f_char1 CHAR(20),
 
41216
f_char2 CHAR(20),
 
41217
f_charbig VARCHAR(1000)
 
41218
 
 
41219
)
 
41220
PARTITION BY RANGE(f_int1)
 
41221
(PARTITION parta VALUES LESS THAN (0),
 
41222
PARTITION part_1 VALUES LESS THAN (5),
 
41223
PARTITION part_2 VALUES LESS THAN (10),
 
41224
PARTITION part_3 VALUES LESS THAN (10 + 5),
 
41225
PARTITION part_4 VALUES LESS THAN (20),
 
41226
PARTITION part_5 VALUES LESS THAN (2147483646));
 
41227
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41228
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
41229
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
41230
ALTER TABLE t1 REMOVE PARTITIONING;
 
41231
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41232
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
41233
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
41234
# Start usability test (inc/partition_check.inc)
 
41235
create_command
 
41236
SHOW CREATE TABLE t1;
 
41237
Table   Create Table
 
41238
t1      CREATE TABLE `t1` (
 
41239
  `f_int1` int(11) DEFAULT NULL,
 
41240
  `f_int2` int(11) DEFAULT NULL,
 
41241
  `f_char1` char(20) DEFAULT NULL,
 
41242
  `f_char2` char(20) DEFAULT NULL,
 
41243
  `f_charbig` varchar(1000) DEFAULT NULL
 
41244
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
41245
 
 
41246
unified filelist
 
41247
$MYSQLTEST_VARDIR/master-data/test/t1.MYD
 
41248
$MYSQLTEST_VARDIR/master-data/test/t1.MYI
 
41249
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
41250
 
 
41251
# check prerequisites-1 success:    1
 
41252
# check COUNT(*) success:    1
 
41253
# check MIN/MAX(f_int1) success:    1
 
41254
# check MIN/MAX(f_int2) success:    1
 
41255
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41256
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
41257
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
41258
WHERE f_int1 IN (2,3);
 
41259
# check prerequisites-3 success:    1
 
41260
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
41261
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
41262
# check read via f_int1 success: 1
 
41263
# check read via f_int2 success: 1
 
41264
        
 
41265
# check multiple-1 success:     1
 
41266
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
41267
        
 
41268
# check multiple-2 success:     1
 
41269
INSERT INTO t1 SELECT * FROM t0_template
 
41270
WHERE MOD(f_int1,3) = 0;
 
41271
        
 
41272
# check multiple-3 success:     1
 
41273
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
41274
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
41275
AND @max_row_div2 + @max_row_div4;
 
41276
        
 
41277
# check multiple-4 success:     1
 
41278
DELETE FROM t1
 
41279
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
41280
AND @max_row_div2 + @max_row_div4 + @max_row;
 
41281
        
 
41282
# check multiple-5 success:     1
 
41283
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
41284
INSERT INTO t1
 
41285
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
41286
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
41287
f_charbig = '#SINGLE#';
 
41288
        
 
41289
# check single-1 success:       1
 
41290
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
41291
INSERT INTO t1
 
41292
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
41293
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
41294
f_charbig = '#SINGLE#';
 
41295
        
 
41296
# check single-2 success:       1
 
41297
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
41298
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
41299
UPDATE t1 SET f_int1 = @cur_value2
 
41300
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
41301
        
 
41302
# check single-3 success:       1
 
41303
SET @cur_value1= -1;
 
41304
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
41305
UPDATE t1 SET f_int1 = @cur_value1
 
41306
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
41307
        
 
41308
# check single-4 success:       1
 
41309
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
41310
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
41311
        
 
41312
# check single-5 success:       1
 
41313
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
41314
        
 
41315
# check single-6 success:       1
 
41316
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
41317
        
 
41318
# check single-7 success:       1
 
41319
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
41320
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
41321
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
41322
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
41323
f_charbig = '#NULL#';
 
41324
INSERT INTO t1
 
41325
SET f_int1 = NULL , f_int2 = -@max_row,
 
41326
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
41327
f_charbig = '#NULL#';
 
41328
# check null success:    1
 
41329
        
 
41330
# check null-1 success:         1
 
41331
UPDATE t1 SET f_int1 = -@max_row
 
41332
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
41333
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
41334
        
 
41335
# check null-2 success:         1
 
41336
UPDATE t1 SET f_int1 = NULL
 
41337
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
41338
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
41339
        
 
41340
# check null-3 success:         1
 
41341
DELETE FROM t1
 
41342
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
41343
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
41344
        
 
41345
# check null-4 success:         1
 
41346
DELETE FROM t1
 
41347
WHERE f_int1 = 0 AND f_int2 = 0
 
41348
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
41349
AND f_charbig = '#NULL#';
 
41350
SET AUTOCOMMIT= 0;
 
41351
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41352
SELECT f_int1, f_int1, '', '', 'was inserted'
 
41353
FROM t0_template source_tab
 
41354
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
41355
        
 
41356
# check transactions-1 success:         1
 
41357
COMMIT WORK;
 
41358
        
 
41359
# check transactions-2 success:         1
 
41360
ROLLBACK WORK;
 
41361
        
 
41362
# check transactions-3 success:         1
 
41363
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
41364
COMMIT WORK;
 
41365
ROLLBACK WORK;
 
41366
        
 
41367
# check transactions-4 success:         1
 
41368
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41369
SELECT f_int1, f_int1, '', '', 'was inserted'
 
41370
FROM t0_template source_tab
 
41371
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
41372
        
 
41373
# check transactions-5 success:         1
 
41374
ROLLBACK WORK;
 
41375
Warnings:
 
41376
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
41377
        
 
41378
# check transactions-6 success:         1
 
41379
# INFO: Storage engine used for t1 seems to be not transactional.
 
41380
COMMIT;
 
41381
        
 
41382
# check transactions-7 success:         1
 
41383
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
41384
COMMIT WORK;
 
41385
SET @@session.sql_mode = 'traditional';
 
41386
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
41387
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41388
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
41389
'', '', 'was inserted' FROM t0_template
 
41390
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
41391
ERROR 22012: Division by 0
 
41392
COMMIT;
 
41393
        
 
41394
# check transactions-8 success:         1
 
41395
# INFO: Storage engine used for t1 seems to be unable to revert
 
41396
#       changes made by the failing statement.
 
41397
SET @@session.sql_mode = '';
 
41398
SET AUTOCOMMIT= 1;
 
41399
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
41400
COMMIT WORK;
 
41401
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
41402
        
 
41403
# check special-1 success:      1
 
41404
UPDATE t1 SET f_charbig = '';
 
41405
        
 
41406
# check special-2 success:      1
 
41407
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
41408
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41409
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
41410
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41411
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41412
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41413
'just inserted' FROM t0_template
 
41414
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41415
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
41416
BEGIN
 
41417
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41418
f_charbig = 'updated by trigger'
 
41419
      WHERE f_int1 = new.f_int1;
 
41420
END|
 
41421
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41422
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
41423
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41424
        
 
41425
# check trigger-1 success:      1
 
41426
DROP TRIGGER trg_1;
 
41427
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41428
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41429
f_charbig = 'just inserted'
 
41430
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41431
DELETE FROM t0_aux
 
41432
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41433
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41434
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41435
'just inserted' FROM t0_template
 
41436
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41437
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
41438
BEGIN
 
41439
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41440
f_charbig = 'updated by trigger'
 
41441
      WHERE f_int1 = new.f_int1;
 
41442
END|
 
41443
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41444
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
41445
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41446
        
 
41447
# check trigger-2 success:      1
 
41448
DROP TRIGGER trg_1;
 
41449
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41450
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41451
f_charbig = 'just inserted'
 
41452
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41453
DELETE FROM t0_aux
 
41454
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41455
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41456
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41457
'just inserted' FROM t0_template
 
41458
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41459
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
41460
BEGIN
 
41461
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41462
f_charbig = 'updated by trigger'
 
41463
      WHERE f_int1 = new.f_int1;
 
41464
END|
 
41465
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41466
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41467
        
 
41468
# check trigger-3 success:      1
 
41469
DROP TRIGGER trg_1;
 
41470
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41471
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41472
f_charbig = 'just inserted'
 
41473
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41474
DELETE FROM t0_aux
 
41475
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41476
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41477
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41478
'just inserted' FROM t0_template
 
41479
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41480
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
41481
BEGIN
 
41482
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41483
f_charbig = 'updated by trigger'
 
41484
      WHERE f_int1 = - old.f_int1;
 
41485
END|
 
41486
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41487
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41488
        
 
41489
# check trigger-4 success:      1
 
41490
DROP TRIGGER trg_1;
 
41491
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41492
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41493
f_charbig = 'just inserted'
 
41494
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41495
DELETE FROM t0_aux
 
41496
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41497
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41498
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41499
'just inserted' FROM t0_template
 
41500
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41501
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
41502
BEGIN
 
41503
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41504
f_charbig = 'updated by trigger'
 
41505
      WHERE f_int1 = new.f_int1;
 
41506
END|
 
41507
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41508
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41509
        
 
41510
# check trigger-5 success:      1
 
41511
DROP TRIGGER trg_1;
 
41512
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41513
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41514
f_charbig = 'just inserted'
 
41515
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41516
DELETE FROM t0_aux
 
41517
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41518
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41519
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41520
'just inserted' FROM t0_template
 
41521
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41522
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
41523
BEGIN
 
41524
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41525
f_charbig = 'updated by trigger'
 
41526
      WHERE f_int1 = - old.f_int1;
 
41527
END|
 
41528
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41529
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41530
        
 
41531
# check trigger-6 success:      1
 
41532
DROP TRIGGER trg_1;
 
41533
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41534
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41535
f_charbig = 'just inserted'
 
41536
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41537
DELETE FROM t0_aux
 
41538
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41539
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41540
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41541
'just inserted' FROM t0_template
 
41542
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41543
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
41544
BEGIN
 
41545
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41546
f_charbig = 'updated by trigger'
 
41547
      WHERE f_int1 = - old.f_int1;
 
41548
END|
 
41549
DELETE FROM t0_aux
 
41550
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41551
        
 
41552
# check trigger-7 success:      1
 
41553
DROP TRIGGER trg_1;
 
41554
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41555
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41556
f_charbig = 'just inserted'
 
41557
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41558
DELETE FROM t0_aux
 
41559
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41560
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41561
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41562
'just inserted' FROM t0_template
 
41563
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41564
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
41565
BEGIN
 
41566
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41567
f_charbig = 'updated by trigger'
 
41568
      WHERE f_int1 = - old.f_int1;
 
41569
END|
 
41570
DELETE FROM t0_aux
 
41571
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41572
        
 
41573
# check trigger-8 success:      1
 
41574
DROP TRIGGER trg_1;
 
41575
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41576
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41577
f_charbig = 'just inserted'
 
41578
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41579
DELETE FROM t0_aux
 
41580
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41581
DELETE FROM t1
 
41582
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41583
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
41584
BEGIN
 
41585
SET new.f_int1 = old.f_int1 + @max_row,
 
41586
new.f_int2 = old.f_int2 - @max_row,
 
41587
new.f_charbig = '####updated per update trigger####';
 
41588
END|
 
41589
UPDATE t1
 
41590
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
41591
f_charbig = '####updated per update statement itself####';
 
41592
        
 
41593
# check trigger-9 success:      1
 
41594
DROP TRIGGER trg_2;
 
41595
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41596
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41597
f_charbig = CONCAT('===',f_char1,'===');
 
41598
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
41599
BEGIN
 
41600
SET new.f_int1 = new.f_int1 + @max_row,
 
41601
new.f_int2 = new.f_int2 - @max_row,
 
41602
new.f_charbig = '####updated per update trigger####';
 
41603
END|
 
41604
UPDATE t1
 
41605
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
41606
f_charbig = '####updated per update statement itself####';
 
41607
        
 
41608
# check trigger-10 success:     1
 
41609
DROP TRIGGER trg_2;
 
41610
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41611
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41612
f_charbig = CONCAT('===',f_char1,'===');
 
41613
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
41614
BEGIN
 
41615
SET new.f_int1 = @my_max1 + @counter,
 
41616
new.f_int2 = @my_min2 - @counter,
 
41617
new.f_charbig = '####updated per insert trigger####';
 
41618
SET @counter = @counter + 1;
 
41619
END|
 
41620
SET @counter = 1;
 
41621
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
41622
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41623
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
41624
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
41625
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
41626
ORDER BY f_int1;
 
41627
DROP TRIGGER trg_3;
 
41628
        
 
41629
# check trigger-11 success:     1
 
41630
DELETE FROM t1
 
41631
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
41632
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
41633
AND f_charbig = '####updated per insert trigger####';
 
41634
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
41635
BEGIN
 
41636
SET new.f_int1 = @my_max1 + @counter,
 
41637
new.f_int2 = @my_min2 - @counter,
 
41638
new.f_charbig = '####updated per insert trigger####';
 
41639
SET @counter = @counter + 1;
 
41640
END|
 
41641
SET @counter = 1;
 
41642
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
41643
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
41644
SELECT CAST(f_int1 AS CHAR),
 
41645
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
41646
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
41647
ORDER BY f_int1;
 
41648
DROP TRIGGER trg_3;
 
41649
        
 
41650
# check trigger-12 success:     1
 
41651
DELETE FROM t1
 
41652
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
41653
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
41654
AND f_charbig = '####updated per insert trigger####';
 
41655
ANALYZE  TABLE t1;
 
41656
Table   Op      Msg_type        Msg_text
 
41657
test.t1 analyze status  OK
 
41658
CHECK    TABLE t1 EXTENDED;
 
41659
Table   Op      Msg_type        Msg_text
 
41660
test.t1 check   status  OK
 
41661
CHECKSUM TABLE t1 EXTENDED;
 
41662
Table   Checksum
 
41663
test.t1 <some_value>
 
41664
OPTIMIZE TABLE t1;
 
41665
Table   Op      Msg_type        Msg_text
 
41666
test.t1 optimize        status  OK
 
41667
# check layout success:    1
 
41668
REPAIR   TABLE t1 EXTENDED;
 
41669
Table   Op      Msg_type        Msg_text
 
41670
test.t1 repair  status  OK
 
41671
# check layout success:    1
 
41672
TRUNCATE t1;
 
41673
        
 
41674
# check TRUNCATE success:       1
 
41675
# check layout success:    1
 
41676
# End usability test (inc/partition_check.inc)
 
41677
DROP TABLE t1;
 
41678
CREATE TABLE t1 (
 
41679
f_int1 INTEGER,
 
41680
f_int2 INTEGER,
 
41681
f_char1 CHAR(20),
 
41682
f_char2 CHAR(20),
 
41683
f_charbig VARCHAR(1000)
 
41684
 
 
41685
)
 
41686
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
 
41687
(PARTITION part_1 VALUES LESS THAN (0),
 
41688
PARTITION part_2 VALUES LESS THAN (5),
 
41689
PARTITION part_3 VALUES LESS THAN (10),
 
41690
PARTITION part_4 VALUES LESS THAN (2147483646));
 
41691
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41692
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
41693
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
41694
ALTER TABLE t1 REMOVE PARTITIONING;
 
41695
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41696
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
41697
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
41698
# Start usability test (inc/partition_check.inc)
 
41699
create_command
 
41700
SHOW CREATE TABLE t1;
 
41701
Table   Create Table
 
41702
t1      CREATE TABLE `t1` (
 
41703
  `f_int1` int(11) DEFAULT NULL,
 
41704
  `f_int2` int(11) DEFAULT NULL,
 
41705
  `f_char1` char(20) DEFAULT NULL,
 
41706
  `f_char2` char(20) DEFAULT NULL,
 
41707
  `f_charbig` varchar(1000) DEFAULT NULL
 
41708
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
41709
 
 
41710
unified filelist
 
41711
$MYSQLTEST_VARDIR/master-data/test/t1.MYD
 
41712
$MYSQLTEST_VARDIR/master-data/test/t1.MYI
 
41713
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
41714
 
 
41715
# check prerequisites-1 success:    1
 
41716
# check COUNT(*) success:    1
 
41717
# check MIN/MAX(f_int1) success:    1
 
41718
# check MIN/MAX(f_int2) success:    1
 
41719
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41720
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
41721
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
41722
WHERE f_int1 IN (2,3);
 
41723
# check prerequisites-3 success:    1
 
41724
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
41725
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
41726
# check read via f_int1 success: 1
 
41727
# check read via f_int2 success: 1
 
41728
        
 
41729
# check multiple-1 success:     1
 
41730
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
41731
        
 
41732
# check multiple-2 success:     1
 
41733
INSERT INTO t1 SELECT * FROM t0_template
 
41734
WHERE MOD(f_int1,3) = 0;
 
41735
        
 
41736
# check multiple-3 success:     1
 
41737
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
41738
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
41739
AND @max_row_div2 + @max_row_div4;
 
41740
        
 
41741
# check multiple-4 success:     1
 
41742
DELETE FROM t1
 
41743
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
41744
AND @max_row_div2 + @max_row_div4 + @max_row;
 
41745
        
 
41746
# check multiple-5 success:     1
 
41747
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
41748
INSERT INTO t1
 
41749
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
41750
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
41751
f_charbig = '#SINGLE#';
 
41752
        
 
41753
# check single-1 success:       1
 
41754
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
41755
INSERT INTO t1
 
41756
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
41757
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
41758
f_charbig = '#SINGLE#';
 
41759
        
 
41760
# check single-2 success:       1
 
41761
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
41762
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
41763
UPDATE t1 SET f_int1 = @cur_value2
 
41764
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
41765
        
 
41766
# check single-3 success:       1
 
41767
SET @cur_value1= -1;
 
41768
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
41769
UPDATE t1 SET f_int1 = @cur_value1
 
41770
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
41771
        
 
41772
# check single-4 success:       1
 
41773
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
41774
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
41775
        
 
41776
# check single-5 success:       1
 
41777
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
41778
        
 
41779
# check single-6 success:       1
 
41780
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
41781
        
 
41782
# check single-7 success:       1
 
41783
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
41784
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
41785
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
41786
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
41787
f_charbig = '#NULL#';
 
41788
INSERT INTO t1
 
41789
SET f_int1 = NULL , f_int2 = -@max_row,
 
41790
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
41791
f_charbig = '#NULL#';
 
41792
# check null success:    1
 
41793
        
 
41794
# check null-1 success:         1
 
41795
UPDATE t1 SET f_int1 = -@max_row
 
41796
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
41797
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
41798
        
 
41799
# check null-2 success:         1
 
41800
UPDATE t1 SET f_int1 = NULL
 
41801
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
41802
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
41803
        
 
41804
# check null-3 success:         1
 
41805
DELETE FROM t1
 
41806
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
41807
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
41808
        
 
41809
# check null-4 success:         1
 
41810
DELETE FROM t1
 
41811
WHERE f_int1 = 0 AND f_int2 = 0
 
41812
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
41813
AND f_charbig = '#NULL#';
 
41814
SET AUTOCOMMIT= 0;
 
41815
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41816
SELECT f_int1, f_int1, '', '', 'was inserted'
 
41817
FROM t0_template source_tab
 
41818
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
41819
        
 
41820
# check transactions-1 success:         1
 
41821
COMMIT WORK;
 
41822
        
 
41823
# check transactions-2 success:         1
 
41824
ROLLBACK WORK;
 
41825
        
 
41826
# check transactions-3 success:         1
 
41827
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
41828
COMMIT WORK;
 
41829
ROLLBACK WORK;
 
41830
        
 
41831
# check transactions-4 success:         1
 
41832
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41833
SELECT f_int1, f_int1, '', '', 'was inserted'
 
41834
FROM t0_template source_tab
 
41835
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
41836
        
 
41837
# check transactions-5 success:         1
 
41838
ROLLBACK WORK;
 
41839
Warnings:
 
41840
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
41841
        
 
41842
# check transactions-6 success:         1
 
41843
# INFO: Storage engine used for t1 seems to be not transactional.
 
41844
COMMIT;
 
41845
        
 
41846
# check transactions-7 success:         1
 
41847
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
41848
COMMIT WORK;
 
41849
SET @@session.sql_mode = 'traditional';
 
41850
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
41851
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
41852
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
41853
'', '', 'was inserted' FROM t0_template
 
41854
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
41855
ERROR 22012: Division by 0
 
41856
COMMIT;
 
41857
        
 
41858
# check transactions-8 success:         1
 
41859
# INFO: Storage engine used for t1 seems to be unable to revert
 
41860
#       changes made by the failing statement.
 
41861
SET @@session.sql_mode = '';
 
41862
SET AUTOCOMMIT= 1;
 
41863
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
41864
COMMIT WORK;
 
41865
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
41866
        
 
41867
# check special-1 success:      1
 
41868
UPDATE t1 SET f_charbig = '';
 
41869
        
 
41870
# check special-2 success:      1
 
41871
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
41872
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41873
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
41874
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41875
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41876
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41877
'just inserted' FROM t0_template
 
41878
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41879
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
41880
BEGIN
 
41881
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41882
f_charbig = 'updated by trigger'
 
41883
      WHERE f_int1 = new.f_int1;
 
41884
END|
 
41885
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41886
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
41887
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41888
        
 
41889
# check trigger-1 success:      1
 
41890
DROP TRIGGER trg_1;
 
41891
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41892
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41893
f_charbig = 'just inserted'
 
41894
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41895
DELETE FROM t0_aux
 
41896
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41897
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41898
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41899
'just inserted' FROM t0_template
 
41900
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41901
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
41902
BEGIN
 
41903
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41904
f_charbig = 'updated by trigger'
 
41905
      WHERE f_int1 = new.f_int1;
 
41906
END|
 
41907
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41908
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
41909
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41910
        
 
41911
# check trigger-2 success:      1
 
41912
DROP TRIGGER trg_1;
 
41913
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41914
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41915
f_charbig = 'just inserted'
 
41916
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41917
DELETE FROM t0_aux
 
41918
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41919
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41920
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41921
'just inserted' FROM t0_template
 
41922
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41923
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
41924
BEGIN
 
41925
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41926
f_charbig = 'updated by trigger'
 
41927
      WHERE f_int1 = new.f_int1;
 
41928
END|
 
41929
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41930
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41931
        
 
41932
# check trigger-3 success:      1
 
41933
DROP TRIGGER trg_1;
 
41934
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41935
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41936
f_charbig = 'just inserted'
 
41937
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41938
DELETE FROM t0_aux
 
41939
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41940
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41941
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41942
'just inserted' FROM t0_template
 
41943
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41944
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
41945
BEGIN
 
41946
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41947
f_charbig = 'updated by trigger'
 
41948
      WHERE f_int1 = - old.f_int1;
 
41949
END|
 
41950
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41951
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41952
        
 
41953
# check trigger-4 success:      1
 
41954
DROP TRIGGER trg_1;
 
41955
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41956
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41957
f_charbig = 'just inserted'
 
41958
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41959
DELETE FROM t0_aux
 
41960
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41961
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41962
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41963
'just inserted' FROM t0_template
 
41964
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41965
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
41966
BEGIN
 
41967
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41968
f_charbig = 'updated by trigger'
 
41969
      WHERE f_int1 = new.f_int1;
 
41970
END|
 
41971
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41972
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41973
        
 
41974
# check trigger-5 success:      1
 
41975
DROP TRIGGER trg_1;
 
41976
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41977
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41978
f_charbig = 'just inserted'
 
41979
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
41980
DELETE FROM t0_aux
 
41981
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41982
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
41983
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
41984
'just inserted' FROM t0_template
 
41985
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
41986
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
41987
BEGIN
 
41988
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
41989
f_charbig = 'updated by trigger'
 
41990
      WHERE f_int1 = - old.f_int1;
 
41991
END|
 
41992
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
41993
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
41994
        
 
41995
# check trigger-6 success:      1
 
41996
DROP TRIGGER trg_1;
 
41997
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
41998
f_int2 = CAST(f_char1 AS SIGNED INT),
 
41999
f_charbig = 'just inserted'
 
42000
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42001
DELETE FROM t0_aux
 
42002
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42003
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42004
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42005
'just inserted' FROM t0_template
 
42006
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42007
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
42008
BEGIN
 
42009
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42010
f_charbig = 'updated by trigger'
 
42011
      WHERE f_int1 = - old.f_int1;
 
42012
END|
 
42013
DELETE FROM t0_aux
 
42014
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42015
        
 
42016
# check trigger-7 success:      1
 
42017
DROP TRIGGER trg_1;
 
42018
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42019
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42020
f_charbig = 'just inserted'
 
42021
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42022
DELETE FROM t0_aux
 
42023
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42024
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42025
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42026
'just inserted' FROM t0_template
 
42027
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42028
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
42029
BEGIN
 
42030
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42031
f_charbig = 'updated by trigger'
 
42032
      WHERE f_int1 = - old.f_int1;
 
42033
END|
 
42034
DELETE FROM t0_aux
 
42035
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42036
        
 
42037
# check trigger-8 success:      1
 
42038
DROP TRIGGER trg_1;
 
42039
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42040
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42041
f_charbig = 'just inserted'
 
42042
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42043
DELETE FROM t0_aux
 
42044
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42045
DELETE FROM t1
 
42046
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42047
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
42048
BEGIN
 
42049
SET new.f_int1 = old.f_int1 + @max_row,
 
42050
new.f_int2 = old.f_int2 - @max_row,
 
42051
new.f_charbig = '####updated per update trigger####';
 
42052
END|
 
42053
UPDATE t1
 
42054
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
42055
f_charbig = '####updated per update statement itself####';
 
42056
        
 
42057
# check trigger-9 success:      1
 
42058
DROP TRIGGER trg_2;
 
42059
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42060
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42061
f_charbig = CONCAT('===',f_char1,'===');
 
42062
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
42063
BEGIN
 
42064
SET new.f_int1 = new.f_int1 + @max_row,
 
42065
new.f_int2 = new.f_int2 - @max_row,
 
42066
new.f_charbig = '####updated per update trigger####';
 
42067
END|
 
42068
UPDATE t1
 
42069
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
42070
f_charbig = '####updated per update statement itself####';
 
42071
        
 
42072
# check trigger-10 success:     1
 
42073
DROP TRIGGER trg_2;
 
42074
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42075
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42076
f_charbig = CONCAT('===',f_char1,'===');
 
42077
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
42078
BEGIN
 
42079
SET new.f_int1 = @my_max1 + @counter,
 
42080
new.f_int2 = @my_min2 - @counter,
 
42081
new.f_charbig = '####updated per insert trigger####';
 
42082
SET @counter = @counter + 1;
 
42083
END|
 
42084
SET @counter = 1;
 
42085
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
42086
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42087
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
42088
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
42089
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
42090
ORDER BY f_int1;
 
42091
DROP TRIGGER trg_3;
 
42092
        
 
42093
# check trigger-11 success:     1
 
42094
DELETE FROM t1
 
42095
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
42096
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
42097
AND f_charbig = '####updated per insert trigger####';
 
42098
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
42099
BEGIN
 
42100
SET new.f_int1 = @my_max1 + @counter,
 
42101
new.f_int2 = @my_min2 - @counter,
 
42102
new.f_charbig = '####updated per insert trigger####';
 
42103
SET @counter = @counter + 1;
 
42104
END|
 
42105
SET @counter = 1;
 
42106
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
42107
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
42108
SELECT CAST(f_int1 AS CHAR),
 
42109
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
42110
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
42111
ORDER BY f_int1;
 
42112
DROP TRIGGER trg_3;
 
42113
        
 
42114
# check trigger-12 success:     1
 
42115
DELETE FROM t1
 
42116
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
42117
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
42118
AND f_charbig = '####updated per insert trigger####';
 
42119
ANALYZE  TABLE t1;
 
42120
Table   Op      Msg_type        Msg_text
 
42121
test.t1 analyze status  OK
 
42122
CHECK    TABLE t1 EXTENDED;
 
42123
Table   Op      Msg_type        Msg_text
 
42124
test.t1 check   status  OK
 
42125
CHECKSUM TABLE t1 EXTENDED;
 
42126
Table   Checksum
 
42127
test.t1 <some_value>
 
42128
OPTIMIZE TABLE t1;
 
42129
Table   Op      Msg_type        Msg_text
 
42130
test.t1 optimize        status  OK
 
42131
# check layout success:    1
 
42132
REPAIR   TABLE t1 EXTENDED;
 
42133
Table   Op      Msg_type        Msg_text
 
42134
test.t1 repair  status  OK
 
42135
# check layout success:    1
 
42136
TRUNCATE t1;
 
42137
        
 
42138
# check TRUNCATE success:       1
 
42139
# check layout success:    1
 
42140
# End usability test (inc/partition_check.inc)
 
42141
DROP TABLE t1;
 
42142
CREATE TABLE t1 (
 
42143
f_int1 INTEGER,
 
42144
f_int2 INTEGER,
 
42145
f_char1 CHAR(20),
 
42146
f_char2 CHAR(20),
 
42147
f_charbig VARCHAR(1000)
 
42148
 
 
42149
)
 
42150
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
 
42151
(PARTITION part_1 VALUES LESS THAN (0)
 
42152
(SUBPARTITION subpart11, SUBPARTITION subpart12),
 
42153
PARTITION part_2 VALUES LESS THAN (5)
 
42154
(SUBPARTITION subpart21, SUBPARTITION subpart22),
 
42155
PARTITION part_3 VALUES LESS THAN (10)
 
42156
(SUBPARTITION subpart31, SUBPARTITION subpart32),
 
42157
PARTITION part_4 VALUES LESS THAN (2147483646)
 
42158
(SUBPARTITION subpart41, SUBPARTITION subpart42));
 
42159
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42160
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
42161
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
42162
ALTER TABLE t1 REMOVE PARTITIONING;
 
42163
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42164
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
42165
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
42166
# Start usability test (inc/partition_check.inc)
 
42167
create_command
 
42168
SHOW CREATE TABLE t1;
 
42169
Table   Create Table
 
42170
t1      CREATE TABLE `t1` (
 
42171
  `f_int1` int(11) DEFAULT NULL,
 
42172
  `f_int2` int(11) DEFAULT NULL,
 
42173
  `f_char1` char(20) DEFAULT NULL,
 
42174
  `f_char2` char(20) DEFAULT NULL,
 
42175
  `f_charbig` varchar(1000) DEFAULT NULL
 
42176
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
42177
 
 
42178
unified filelist
 
42179
$MYSQLTEST_VARDIR/master-data/test/t1.MYD
 
42180
$MYSQLTEST_VARDIR/master-data/test/t1.MYI
 
42181
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
42182
 
 
42183
# check prerequisites-1 success:    1
 
42184
# check COUNT(*) success:    1
 
42185
# check MIN/MAX(f_int1) success:    1
 
42186
# check MIN/MAX(f_int2) success:    1
 
42187
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42188
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
42189
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
42190
WHERE f_int1 IN (2,3);
 
42191
# check prerequisites-3 success:    1
 
42192
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
42193
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
42194
# check read via f_int1 success: 1
 
42195
# check read via f_int2 success: 1
 
42196
        
 
42197
# check multiple-1 success:     1
 
42198
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
42199
        
 
42200
# check multiple-2 success:     1
 
42201
INSERT INTO t1 SELECT * FROM t0_template
 
42202
WHERE MOD(f_int1,3) = 0;
 
42203
        
 
42204
# check multiple-3 success:     1
 
42205
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
42206
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
42207
AND @max_row_div2 + @max_row_div4;
 
42208
        
 
42209
# check multiple-4 success:     1
 
42210
DELETE FROM t1
 
42211
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
42212
AND @max_row_div2 + @max_row_div4 + @max_row;
 
42213
        
 
42214
# check multiple-5 success:     1
 
42215
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
42216
INSERT INTO t1
 
42217
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
42218
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
42219
f_charbig = '#SINGLE#';
 
42220
        
 
42221
# check single-1 success:       1
 
42222
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
42223
INSERT INTO t1
 
42224
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
42225
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
42226
f_charbig = '#SINGLE#';
 
42227
        
 
42228
# check single-2 success:       1
 
42229
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
42230
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
42231
UPDATE t1 SET f_int1 = @cur_value2
 
42232
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
42233
        
 
42234
# check single-3 success:       1
 
42235
SET @cur_value1= -1;
 
42236
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
42237
UPDATE t1 SET f_int1 = @cur_value1
 
42238
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
42239
        
 
42240
# check single-4 success:       1
 
42241
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
42242
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
42243
        
 
42244
# check single-5 success:       1
 
42245
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
42246
        
 
42247
# check single-6 success:       1
 
42248
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
42249
        
 
42250
# check single-7 success:       1
 
42251
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
42252
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
42253
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
42254
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
42255
f_charbig = '#NULL#';
 
42256
INSERT INTO t1
 
42257
SET f_int1 = NULL , f_int2 = -@max_row,
 
42258
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
42259
f_charbig = '#NULL#';
 
42260
# check null success:    1
 
42261
        
 
42262
# check null-1 success:         1
 
42263
UPDATE t1 SET f_int1 = -@max_row
 
42264
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
42265
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
42266
        
 
42267
# check null-2 success:         1
 
42268
UPDATE t1 SET f_int1 = NULL
 
42269
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
42270
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
42271
        
 
42272
# check null-3 success:         1
 
42273
DELETE FROM t1
 
42274
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
42275
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
42276
        
 
42277
# check null-4 success:         1
 
42278
DELETE FROM t1
 
42279
WHERE f_int1 = 0 AND f_int2 = 0
 
42280
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
42281
AND f_charbig = '#NULL#';
 
42282
SET AUTOCOMMIT= 0;
 
42283
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42284
SELECT f_int1, f_int1, '', '', 'was inserted'
 
42285
FROM t0_template source_tab
 
42286
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
42287
        
 
42288
# check transactions-1 success:         1
 
42289
COMMIT WORK;
 
42290
        
 
42291
# check transactions-2 success:         1
 
42292
ROLLBACK WORK;
 
42293
        
 
42294
# check transactions-3 success:         1
 
42295
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
42296
COMMIT WORK;
 
42297
ROLLBACK WORK;
 
42298
        
 
42299
# check transactions-4 success:         1
 
42300
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42301
SELECT f_int1, f_int1, '', '', 'was inserted'
 
42302
FROM t0_template source_tab
 
42303
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
42304
        
 
42305
# check transactions-5 success:         1
 
42306
ROLLBACK WORK;
 
42307
Warnings:
 
42308
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
42309
        
 
42310
# check transactions-6 success:         1
 
42311
# INFO: Storage engine used for t1 seems to be not transactional.
 
42312
COMMIT;
 
42313
        
 
42314
# check transactions-7 success:         1
 
42315
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
42316
COMMIT WORK;
 
42317
SET @@session.sql_mode = 'traditional';
 
42318
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
42319
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42320
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
42321
'', '', 'was inserted' FROM t0_template
 
42322
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
42323
ERROR 22012: Division by 0
 
42324
COMMIT;
 
42325
        
 
42326
# check transactions-8 success:         1
 
42327
# INFO: Storage engine used for t1 seems to be unable to revert
 
42328
#       changes made by the failing statement.
 
42329
SET @@session.sql_mode = '';
 
42330
SET AUTOCOMMIT= 1;
 
42331
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
42332
COMMIT WORK;
 
42333
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
42334
        
 
42335
# check special-1 success:      1
 
42336
UPDATE t1 SET f_charbig = '';
 
42337
        
 
42338
# check special-2 success:      1
 
42339
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
42340
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42341
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
42342
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42343
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42344
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42345
'just inserted' FROM t0_template
 
42346
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42347
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
42348
BEGIN
 
42349
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42350
f_charbig = 'updated by trigger'
 
42351
      WHERE f_int1 = new.f_int1;
 
42352
END|
 
42353
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42354
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
42355
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42356
        
 
42357
# check trigger-1 success:      1
 
42358
DROP TRIGGER trg_1;
 
42359
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42360
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42361
f_charbig = 'just inserted'
 
42362
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42363
DELETE FROM t0_aux
 
42364
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42365
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42366
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42367
'just inserted' FROM t0_template
 
42368
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42369
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
42370
BEGIN
 
42371
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42372
f_charbig = 'updated by trigger'
 
42373
      WHERE f_int1 = new.f_int1;
 
42374
END|
 
42375
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42376
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
42377
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42378
        
 
42379
# check trigger-2 success:      1
 
42380
DROP TRIGGER trg_1;
 
42381
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42382
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42383
f_charbig = 'just inserted'
 
42384
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42385
DELETE FROM t0_aux
 
42386
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42387
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42388
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42389
'just inserted' FROM t0_template
 
42390
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42391
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
42392
BEGIN
 
42393
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42394
f_charbig = 'updated by trigger'
 
42395
      WHERE f_int1 = new.f_int1;
 
42396
END|
 
42397
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
42398
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42399
        
 
42400
# check trigger-3 success:      1
 
42401
DROP TRIGGER trg_1;
 
42402
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42403
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42404
f_charbig = 'just inserted'
 
42405
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42406
DELETE FROM t0_aux
 
42407
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42408
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42409
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42410
'just inserted' FROM t0_template
 
42411
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42412
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
42413
BEGIN
 
42414
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42415
f_charbig = 'updated by trigger'
 
42416
      WHERE f_int1 = - old.f_int1;
 
42417
END|
 
42418
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
42419
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42420
        
 
42421
# check trigger-4 success:      1
 
42422
DROP TRIGGER trg_1;
 
42423
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42424
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42425
f_charbig = 'just inserted'
 
42426
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42427
DELETE FROM t0_aux
 
42428
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42429
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42430
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42431
'just inserted' FROM t0_template
 
42432
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42433
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
42434
BEGIN
 
42435
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42436
f_charbig = 'updated by trigger'
 
42437
      WHERE f_int1 = new.f_int1;
 
42438
END|
 
42439
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
42440
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42441
        
 
42442
# check trigger-5 success:      1
 
42443
DROP TRIGGER trg_1;
 
42444
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42445
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42446
f_charbig = 'just inserted'
 
42447
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42448
DELETE FROM t0_aux
 
42449
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42450
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42451
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42452
'just inserted' FROM t0_template
 
42453
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42454
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
42455
BEGIN
 
42456
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42457
f_charbig = 'updated by trigger'
 
42458
      WHERE f_int1 = - old.f_int1;
 
42459
END|
 
42460
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
42461
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42462
        
 
42463
# check trigger-6 success:      1
 
42464
DROP TRIGGER trg_1;
 
42465
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42466
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42467
f_charbig = 'just inserted'
 
42468
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42469
DELETE FROM t0_aux
 
42470
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42471
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42472
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42473
'just inserted' FROM t0_template
 
42474
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42475
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
42476
BEGIN
 
42477
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42478
f_charbig = 'updated by trigger'
 
42479
      WHERE f_int1 = - old.f_int1;
 
42480
END|
 
42481
DELETE FROM t0_aux
 
42482
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42483
        
 
42484
# check trigger-7 success:      1
 
42485
DROP TRIGGER trg_1;
 
42486
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42487
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42488
f_charbig = 'just inserted'
 
42489
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42490
DELETE FROM t0_aux
 
42491
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42492
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42493
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42494
'just inserted' FROM t0_template
 
42495
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42496
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
42497
BEGIN
 
42498
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42499
f_charbig = 'updated by trigger'
 
42500
      WHERE f_int1 = - old.f_int1;
 
42501
END|
 
42502
DELETE FROM t0_aux
 
42503
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42504
        
 
42505
# check trigger-8 success:      1
 
42506
DROP TRIGGER trg_1;
 
42507
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42508
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42509
f_charbig = 'just inserted'
 
42510
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42511
DELETE FROM t0_aux
 
42512
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42513
DELETE FROM t1
 
42514
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42515
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
42516
BEGIN
 
42517
SET new.f_int1 = old.f_int1 + @max_row,
 
42518
new.f_int2 = old.f_int2 - @max_row,
 
42519
new.f_charbig = '####updated per update trigger####';
 
42520
END|
 
42521
UPDATE t1
 
42522
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
42523
f_charbig = '####updated per update statement itself####';
 
42524
        
 
42525
# check trigger-9 success:      1
 
42526
DROP TRIGGER trg_2;
 
42527
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42528
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42529
f_charbig = CONCAT('===',f_char1,'===');
 
42530
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
42531
BEGIN
 
42532
SET new.f_int1 = new.f_int1 + @max_row,
 
42533
new.f_int2 = new.f_int2 - @max_row,
 
42534
new.f_charbig = '####updated per update trigger####';
 
42535
END|
 
42536
UPDATE t1
 
42537
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
42538
f_charbig = '####updated per update statement itself####';
 
42539
        
 
42540
# check trigger-10 success:     1
 
42541
DROP TRIGGER trg_2;
 
42542
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42543
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42544
f_charbig = CONCAT('===',f_char1,'===');
 
42545
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
42546
BEGIN
 
42547
SET new.f_int1 = @my_max1 + @counter,
 
42548
new.f_int2 = @my_min2 - @counter,
 
42549
new.f_charbig = '####updated per insert trigger####';
 
42550
SET @counter = @counter + 1;
 
42551
END|
 
42552
SET @counter = 1;
 
42553
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
42554
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42555
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
42556
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
42557
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
42558
ORDER BY f_int1;
 
42559
DROP TRIGGER trg_3;
 
42560
        
 
42561
# check trigger-11 success:     1
 
42562
DELETE FROM t1
 
42563
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
42564
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
42565
AND f_charbig = '####updated per insert trigger####';
 
42566
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
42567
BEGIN
 
42568
SET new.f_int1 = @my_max1 + @counter,
 
42569
new.f_int2 = @my_min2 - @counter,
 
42570
new.f_charbig = '####updated per insert trigger####';
 
42571
SET @counter = @counter + 1;
 
42572
END|
 
42573
SET @counter = 1;
 
42574
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
42575
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
42576
SELECT CAST(f_int1 AS CHAR),
 
42577
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
42578
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
42579
ORDER BY f_int1;
 
42580
DROP TRIGGER trg_3;
 
42581
        
 
42582
# check trigger-12 success:     1
 
42583
DELETE FROM t1
 
42584
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
42585
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
42586
AND f_charbig = '####updated per insert trigger####';
 
42587
ANALYZE  TABLE t1;
 
42588
Table   Op      Msg_type        Msg_text
 
42589
test.t1 analyze status  OK
 
42590
CHECK    TABLE t1 EXTENDED;
 
42591
Table   Op      Msg_type        Msg_text
 
42592
test.t1 check   status  OK
 
42593
CHECKSUM TABLE t1 EXTENDED;
 
42594
Table   Checksum
 
42595
test.t1 <some_value>
 
42596
OPTIMIZE TABLE t1;
 
42597
Table   Op      Msg_type        Msg_text
 
42598
test.t1 optimize        status  OK
 
42599
# check layout success:    1
 
42600
REPAIR   TABLE t1 EXTENDED;
 
42601
Table   Op      Msg_type        Msg_text
 
42602
test.t1 repair  status  OK
 
42603
# check layout success:    1
 
42604
TRUNCATE t1;
 
42605
        
 
42606
# check TRUNCATE success:       1
 
42607
# check layout success:    1
 
42608
# End usability test (inc/partition_check.inc)
 
42609
DROP TABLE t1;
 
42610
CREATE TABLE t1 (
 
42611
f_int1 INTEGER,
 
42612
f_int2 INTEGER,
 
42613
f_char1 CHAR(20),
 
42614
f_char2 CHAR(20),
 
42615
f_charbig VARCHAR(1000)
 
42616
 
 
42617
)
 
42618
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
 
42619
(PARTITION part_1 VALUES IN (0)
 
42620
(SUBPARTITION sp11, SUBPARTITION sp12),
 
42621
PARTITION part_2 VALUES IN (1)
 
42622
(SUBPARTITION sp21, SUBPARTITION sp22),
 
42623
PARTITION part_3 VALUES IN (2)
 
42624
(SUBPARTITION sp31, SUBPARTITION sp32),
 
42625
PARTITION part_4 VALUES IN (NULL)
 
42626
(SUBPARTITION sp41, SUBPARTITION sp42));
 
42627
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42628
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
42629
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
42630
ALTER TABLE t1 REMOVE PARTITIONING;
 
42631
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42632
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
42633
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
42634
# Start usability test (inc/partition_check.inc)
 
42635
create_command
 
42636
SHOW CREATE TABLE t1;
 
42637
Table   Create Table
 
42638
t1      CREATE TABLE `t1` (
 
42639
  `f_int1` int(11) DEFAULT NULL,
 
42640
  `f_int2` int(11) DEFAULT NULL,
 
42641
  `f_char1` char(20) DEFAULT NULL,
 
42642
  `f_char2` char(20) DEFAULT NULL,
 
42643
  `f_charbig` varchar(1000) DEFAULT NULL
 
42644
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
42645
 
 
42646
unified filelist
 
42647
$MYSQLTEST_VARDIR/master-data/test/t1.MYD
 
42648
$MYSQLTEST_VARDIR/master-data/test/t1.MYI
 
42649
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
42650
 
 
42651
# check prerequisites-1 success:    1
 
42652
# check COUNT(*) success:    1
 
42653
# check MIN/MAX(f_int1) success:    1
 
42654
# check MIN/MAX(f_int2) success:    1
 
42655
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42656
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
42657
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
42658
WHERE f_int1 IN (2,3);
 
42659
# check prerequisites-3 success:    1
 
42660
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
42661
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
42662
# check read via f_int1 success: 1
 
42663
# check read via f_int2 success: 1
 
42664
        
 
42665
# check multiple-1 success:     1
 
42666
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
42667
        
 
42668
# check multiple-2 success:     1
 
42669
INSERT INTO t1 SELECT * FROM t0_template
 
42670
WHERE MOD(f_int1,3) = 0;
 
42671
        
 
42672
# check multiple-3 success:     1
 
42673
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
42674
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
42675
AND @max_row_div2 + @max_row_div4;
 
42676
        
 
42677
# check multiple-4 success:     1
 
42678
DELETE FROM t1
 
42679
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
42680
AND @max_row_div2 + @max_row_div4 + @max_row;
 
42681
        
 
42682
# check multiple-5 success:     1
 
42683
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
42684
INSERT INTO t1
 
42685
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
42686
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
42687
f_charbig = '#SINGLE#';
 
42688
        
 
42689
# check single-1 success:       1
 
42690
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
42691
INSERT INTO t1
 
42692
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
42693
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
42694
f_charbig = '#SINGLE#';
 
42695
        
 
42696
# check single-2 success:       1
 
42697
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
42698
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
42699
UPDATE t1 SET f_int1 = @cur_value2
 
42700
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
42701
        
 
42702
# check single-3 success:       1
 
42703
SET @cur_value1= -1;
 
42704
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
42705
UPDATE t1 SET f_int1 = @cur_value1
 
42706
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
42707
        
 
42708
# check single-4 success:       1
 
42709
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
42710
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
42711
        
 
42712
# check single-5 success:       1
 
42713
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
42714
        
 
42715
# check single-6 success:       1
 
42716
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
42717
        
 
42718
# check single-7 success:       1
 
42719
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
42720
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
42721
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
42722
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
42723
f_charbig = '#NULL#';
 
42724
INSERT INTO t1
 
42725
SET f_int1 = NULL , f_int2 = -@max_row,
 
42726
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
42727
f_charbig = '#NULL#';
 
42728
# check null success:    1
 
42729
        
 
42730
# check null-1 success:         1
 
42731
UPDATE t1 SET f_int1 = -@max_row
 
42732
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
42733
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
42734
        
 
42735
# check null-2 success:         1
 
42736
UPDATE t1 SET f_int1 = NULL
 
42737
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
42738
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
42739
        
 
42740
# check null-3 success:         1
 
42741
DELETE FROM t1
 
42742
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
42743
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
42744
        
 
42745
# check null-4 success:         1
 
42746
DELETE FROM t1
 
42747
WHERE f_int1 = 0 AND f_int2 = 0
 
42748
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
42749
AND f_charbig = '#NULL#';
 
42750
SET AUTOCOMMIT= 0;
 
42751
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42752
SELECT f_int1, f_int1, '', '', 'was inserted'
 
42753
FROM t0_template source_tab
 
42754
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
42755
        
 
42756
# check transactions-1 success:         1
 
42757
COMMIT WORK;
 
42758
        
 
42759
# check transactions-2 success:         1
 
42760
ROLLBACK WORK;
 
42761
        
 
42762
# check transactions-3 success:         1
 
42763
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
42764
COMMIT WORK;
 
42765
ROLLBACK WORK;
 
42766
        
 
42767
# check transactions-4 success:         1
 
42768
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42769
SELECT f_int1, f_int1, '', '', 'was inserted'
 
42770
FROM t0_template source_tab
 
42771
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
42772
        
 
42773
# check transactions-5 success:         1
 
42774
ROLLBACK WORK;
 
42775
Warnings:
 
42776
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
42777
        
 
42778
# check transactions-6 success:         1
 
42779
# INFO: Storage engine used for t1 seems to be not transactional.
 
42780
COMMIT;
 
42781
        
 
42782
# check transactions-7 success:         1
 
42783
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
42784
COMMIT WORK;
 
42785
SET @@session.sql_mode = 'traditional';
 
42786
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
42787
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
42788
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
42789
'', '', 'was inserted' FROM t0_template
 
42790
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
42791
ERROR 22012: Division by 0
 
42792
COMMIT;
 
42793
        
 
42794
# check transactions-8 success:         1
 
42795
# INFO: Storage engine used for t1 seems to be unable to revert
 
42796
#       changes made by the failing statement.
 
42797
SET @@session.sql_mode = '';
 
42798
SET AUTOCOMMIT= 1;
 
42799
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
42800
COMMIT WORK;
 
42801
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
42802
        
 
42803
# check special-1 success:      1
 
42804
UPDATE t1 SET f_charbig = '';
 
42805
        
 
42806
# check special-2 success:      1
 
42807
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
42808
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42809
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
42810
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42811
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42812
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42813
'just inserted' FROM t0_template
 
42814
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42815
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
42816
BEGIN
 
42817
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42818
f_charbig = 'updated by trigger'
 
42819
      WHERE f_int1 = new.f_int1;
 
42820
END|
 
42821
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42822
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
42823
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42824
        
 
42825
# check trigger-1 success:      1
 
42826
DROP TRIGGER trg_1;
 
42827
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42828
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42829
f_charbig = 'just inserted'
 
42830
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42831
DELETE FROM t0_aux
 
42832
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42833
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42834
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42835
'just inserted' FROM t0_template
 
42836
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42837
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
42838
BEGIN
 
42839
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42840
f_charbig = 'updated by trigger'
 
42841
      WHERE f_int1 = new.f_int1;
 
42842
END|
 
42843
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42844
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
42845
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42846
        
 
42847
# check trigger-2 success:      1
 
42848
DROP TRIGGER trg_1;
 
42849
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42850
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42851
f_charbig = 'just inserted'
 
42852
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42853
DELETE FROM t0_aux
 
42854
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42855
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42856
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42857
'just inserted' FROM t0_template
 
42858
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42859
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
42860
BEGIN
 
42861
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42862
f_charbig = 'updated by trigger'
 
42863
      WHERE f_int1 = new.f_int1;
 
42864
END|
 
42865
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
42866
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42867
        
 
42868
# check trigger-3 success:      1
 
42869
DROP TRIGGER trg_1;
 
42870
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42871
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42872
f_charbig = 'just inserted'
 
42873
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42874
DELETE FROM t0_aux
 
42875
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42876
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42877
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42878
'just inserted' FROM t0_template
 
42879
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42880
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
42881
BEGIN
 
42882
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42883
f_charbig = 'updated by trigger'
 
42884
      WHERE f_int1 = - old.f_int1;
 
42885
END|
 
42886
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
42887
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42888
        
 
42889
# check trigger-4 success:      1
 
42890
DROP TRIGGER trg_1;
 
42891
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42892
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42893
f_charbig = 'just inserted'
 
42894
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42895
DELETE FROM t0_aux
 
42896
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42897
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42898
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42899
'just inserted' FROM t0_template
 
42900
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42901
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
42902
BEGIN
 
42903
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42904
f_charbig = 'updated by trigger'
 
42905
      WHERE f_int1 = new.f_int1;
 
42906
END|
 
42907
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
42908
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42909
        
 
42910
# check trigger-5 success:      1
 
42911
DROP TRIGGER trg_1;
 
42912
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42913
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42914
f_charbig = 'just inserted'
 
42915
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42916
DELETE FROM t0_aux
 
42917
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42918
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42919
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42920
'just inserted' FROM t0_template
 
42921
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42922
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
42923
BEGIN
 
42924
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42925
f_charbig = 'updated by trigger'
 
42926
      WHERE f_int1 = - old.f_int1;
 
42927
END|
 
42928
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
42929
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42930
        
 
42931
# check trigger-6 success:      1
 
42932
DROP TRIGGER trg_1;
 
42933
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42934
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42935
f_charbig = 'just inserted'
 
42936
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42937
DELETE FROM t0_aux
 
42938
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42939
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42940
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42941
'just inserted' FROM t0_template
 
42942
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42943
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
42944
BEGIN
 
42945
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42946
f_charbig = 'updated by trigger'
 
42947
      WHERE f_int1 = - old.f_int1;
 
42948
END|
 
42949
DELETE FROM t0_aux
 
42950
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42951
        
 
42952
# check trigger-7 success:      1
 
42953
DROP TRIGGER trg_1;
 
42954
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42955
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42956
f_charbig = 'just inserted'
 
42957
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42958
DELETE FROM t0_aux
 
42959
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42960
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
42961
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
42962
'just inserted' FROM t0_template
 
42963
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42964
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
42965
BEGIN
 
42966
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
42967
f_charbig = 'updated by trigger'
 
42968
      WHERE f_int1 = - old.f_int1;
 
42969
END|
 
42970
DELETE FROM t0_aux
 
42971
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
42972
        
 
42973
# check trigger-8 success:      1
 
42974
DROP TRIGGER trg_1;
 
42975
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42976
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42977
f_charbig = 'just inserted'
 
42978
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
42979
DELETE FROM t0_aux
 
42980
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42981
DELETE FROM t1
 
42982
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
42983
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
42984
BEGIN
 
42985
SET new.f_int1 = old.f_int1 + @max_row,
 
42986
new.f_int2 = old.f_int2 - @max_row,
 
42987
new.f_charbig = '####updated per update trigger####';
 
42988
END|
 
42989
UPDATE t1
 
42990
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
42991
f_charbig = '####updated per update statement itself####';
 
42992
        
 
42993
# check trigger-9 success:      1
 
42994
DROP TRIGGER trg_2;
 
42995
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
42996
f_int2 = CAST(f_char1 AS SIGNED INT),
 
42997
f_charbig = CONCAT('===',f_char1,'===');
 
42998
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
42999
BEGIN
 
43000
SET new.f_int1 = new.f_int1 + @max_row,
 
43001
new.f_int2 = new.f_int2 - @max_row,
 
43002
new.f_charbig = '####updated per update trigger####';
 
43003
END|
 
43004
UPDATE t1
 
43005
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
43006
f_charbig = '####updated per update statement itself####';
 
43007
        
 
43008
# check trigger-10 success:     1
 
43009
DROP TRIGGER trg_2;
 
43010
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43011
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43012
f_charbig = CONCAT('===',f_char1,'===');
 
43013
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
43014
BEGIN
 
43015
SET new.f_int1 = @my_max1 + @counter,
 
43016
new.f_int2 = @my_min2 - @counter,
 
43017
new.f_charbig = '####updated per insert trigger####';
 
43018
SET @counter = @counter + 1;
 
43019
END|
 
43020
SET @counter = 1;
 
43021
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
43022
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43023
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
43024
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
43025
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
43026
ORDER BY f_int1;
 
43027
DROP TRIGGER trg_3;
 
43028
        
 
43029
# check trigger-11 success:     1
 
43030
DELETE FROM t1
 
43031
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
43032
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
43033
AND f_charbig = '####updated per insert trigger####';
 
43034
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
43035
BEGIN
 
43036
SET new.f_int1 = @my_max1 + @counter,
 
43037
new.f_int2 = @my_min2 - @counter,
 
43038
new.f_charbig = '####updated per insert trigger####';
 
43039
SET @counter = @counter + 1;
 
43040
END|
 
43041
SET @counter = 1;
 
43042
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
43043
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
43044
SELECT CAST(f_int1 AS CHAR),
 
43045
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
43046
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
43047
ORDER BY f_int1;
 
43048
DROP TRIGGER trg_3;
 
43049
        
 
43050
# check trigger-12 success:     1
 
43051
DELETE FROM t1
 
43052
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
43053
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
43054
AND f_charbig = '####updated per insert trigger####';
 
43055
ANALYZE  TABLE t1;
 
43056
Table   Op      Msg_type        Msg_text
 
43057
test.t1 analyze status  OK
 
43058
CHECK    TABLE t1 EXTENDED;
 
43059
Table   Op      Msg_type        Msg_text
 
43060
test.t1 check   status  OK
 
43061
CHECKSUM TABLE t1 EXTENDED;
 
43062
Table   Checksum
 
43063
test.t1 <some_value>
 
43064
OPTIMIZE TABLE t1;
 
43065
Table   Op      Msg_type        Msg_text
 
43066
test.t1 optimize        status  OK
 
43067
# check layout success:    1
 
43068
REPAIR   TABLE t1 EXTENDED;
 
43069
Table   Op      Msg_type        Msg_text
 
43070
test.t1 repair  status  OK
 
43071
# check layout success:    1
 
43072
TRUNCATE t1;
 
43073
        
 
43074
# check TRUNCATE success:       1
 
43075
# check layout success:    1
 
43076
# End usability test (inc/partition_check.inc)
 
43077
DROP TABLE t1;
 
43078
CREATE TABLE t1 (
 
43079
f_int1 INTEGER,
 
43080
f_int2 INTEGER,
 
43081
f_char1 CHAR(20),
 
43082
f_char2 CHAR(20),
 
43083
f_charbig VARCHAR(1000)
 
43084
 
 
43085
)
 
43086
PARTITION BY LIST(ABS(MOD(f_int1,2)))
 
43087
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
 
43088
(PARTITION part_1 VALUES IN (0),
 
43089
 PARTITION part_2 VALUES IN (1),
 
43090
 PARTITION part_3 VALUES IN (NULL));
 
43091
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43092
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
43093
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
 
43094
ALTER TABLE t1 REMOVE PARTITIONING;
 
43095
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43096
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
 
43097
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
 
43098
# Start usability test (inc/partition_check.inc)
 
43099
create_command
 
43100
SHOW CREATE TABLE t1;
 
43101
Table   Create Table
 
43102
t1      CREATE TABLE `t1` (
 
43103
  `f_int1` int(11) DEFAULT NULL,
 
43104
  `f_int2` int(11) DEFAULT NULL,
 
43105
  `f_char1` char(20) DEFAULT NULL,
 
43106
  `f_char2` char(20) DEFAULT NULL,
 
43107
  `f_charbig` varchar(1000) DEFAULT NULL
 
43108
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
43109
 
 
43110
unified filelist
 
43111
$MYSQLTEST_VARDIR/master-data/test/t1.MYD
 
43112
$MYSQLTEST_VARDIR/master-data/test/t1.MYI
 
43113
$MYSQLTEST_VARDIR/master-data/test/t1.frm
 
43114
 
 
43115
# check prerequisites-1 success:    1
 
43116
# check COUNT(*) success:    1
 
43117
# check MIN/MAX(f_int1) success:    1
 
43118
# check MIN/MAX(f_int2) success:    1
 
43119
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43120
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
43121
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
43122
WHERE f_int1 IN (2,3);
 
43123
# check prerequisites-3 success:    1
 
43124
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
43125
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
43126
# check read via f_int1 success: 1
 
43127
# check read via f_int2 success: 1
 
43128
        
 
43129
# check multiple-1 success:     1
 
43130
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
43131
        
 
43132
# check multiple-2 success:     1
 
43133
INSERT INTO t1 SELECT * FROM t0_template
 
43134
WHERE MOD(f_int1,3) = 0;
 
43135
        
 
43136
# check multiple-3 success:     1
 
43137
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
43138
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
43139
AND @max_row_div2 + @max_row_div4;
 
43140
        
 
43141
# check multiple-4 success:     1
 
43142
DELETE FROM t1
 
43143
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
43144
AND @max_row_div2 + @max_row_div4 + @max_row;
 
43145
        
 
43146
# check multiple-5 success:     1
 
43147
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
43148
INSERT INTO t1
 
43149
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
43150
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
43151
f_charbig = '#SINGLE#';
 
43152
        
 
43153
# check single-1 success:       1
 
43154
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
43155
INSERT INTO t1
 
43156
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
43157
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
43158
f_charbig = '#SINGLE#';
 
43159
        
 
43160
# check single-2 success:       1
 
43161
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
43162
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
43163
UPDATE t1 SET f_int1 = @cur_value2
 
43164
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
43165
        
 
43166
# check single-3 success:       1
 
43167
SET @cur_value1= -1;
 
43168
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
43169
UPDATE t1 SET f_int1 = @cur_value1
 
43170
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
43171
        
 
43172
# check single-4 success:       1
 
43173
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
43174
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
43175
        
 
43176
# check single-5 success:       1
 
43177
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
43178
        
 
43179
# check single-6 success:       1
 
43180
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
43181
        
 
43182
# check single-7 success:       1
 
43183
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
43184
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
43185
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
43186
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
43187
f_charbig = '#NULL#';
 
43188
INSERT INTO t1
 
43189
SET f_int1 = NULL , f_int2 = -@max_row,
 
43190
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
43191
f_charbig = '#NULL#';
 
43192
# check null success:    1
 
43193
        
 
43194
# check null-1 success:         1
 
43195
UPDATE t1 SET f_int1 = -@max_row
 
43196
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
43197
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
43198
        
 
43199
# check null-2 success:         1
 
43200
UPDATE t1 SET f_int1 = NULL
 
43201
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
43202
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
43203
        
 
43204
# check null-3 success:         1
 
43205
DELETE FROM t1
 
43206
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
43207
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
43208
        
 
43209
# check null-4 success:         1
 
43210
DELETE FROM t1
 
43211
WHERE f_int1 = 0 AND f_int2 = 0
 
43212
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
43213
AND f_charbig = '#NULL#';
 
43214
SET AUTOCOMMIT= 0;
 
43215
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43216
SELECT f_int1, f_int1, '', '', 'was inserted'
 
43217
FROM t0_template source_tab
 
43218
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
43219
        
 
43220
# check transactions-1 success:         1
 
43221
COMMIT WORK;
 
43222
        
 
43223
# check transactions-2 success:         1
 
43224
ROLLBACK WORK;
 
43225
        
 
43226
# check transactions-3 success:         1
 
43227
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
43228
COMMIT WORK;
 
43229
ROLLBACK WORK;
 
43230
        
 
43231
# check transactions-4 success:         1
 
43232
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43233
SELECT f_int1, f_int1, '', '', 'was inserted'
 
43234
FROM t0_template source_tab
 
43235
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
43236
        
 
43237
# check transactions-5 success:         1
 
43238
ROLLBACK WORK;
 
43239
Warnings:
 
43240
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
43241
        
 
43242
# check transactions-6 success:         1
 
43243
# INFO: Storage engine used for t1 seems to be not transactional.
 
43244
COMMIT;
 
43245
        
 
43246
# check transactions-7 success:         1
 
43247
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
43248
COMMIT WORK;
 
43249
SET @@session.sql_mode = 'traditional';
 
43250
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
43251
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43252
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
43253
'', '', 'was inserted' FROM t0_template
 
43254
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
43255
ERROR 22012: Division by 0
 
43256
COMMIT;
 
43257
        
 
43258
# check transactions-8 success:         1
 
43259
# INFO: Storage engine used for t1 seems to be unable to revert
 
43260
#       changes made by the failing statement.
 
43261
SET @@session.sql_mode = '';
 
43262
SET AUTOCOMMIT= 1;
 
43263
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
43264
COMMIT WORK;
 
43265
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
43266
        
 
43267
# check special-1 success:      1
 
43268
UPDATE t1 SET f_charbig = '';
 
43269
        
 
43270
# check special-2 success:      1
 
43271
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
43272
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43273
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
43274
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43275
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43276
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43277
'just inserted' FROM t0_template
 
43278
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43279
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
43280
BEGIN
 
43281
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43282
f_charbig = 'updated by trigger'
 
43283
      WHERE f_int1 = new.f_int1;
 
43284
END|
 
43285
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43286
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
43287
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43288
        
 
43289
# check trigger-1 success:      1
 
43290
DROP TRIGGER trg_1;
 
43291
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43292
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43293
f_charbig = 'just inserted'
 
43294
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43295
DELETE FROM t0_aux
 
43296
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43297
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43298
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43299
'just inserted' FROM t0_template
 
43300
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43301
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
43302
BEGIN
 
43303
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43304
f_charbig = 'updated by trigger'
 
43305
      WHERE f_int1 = new.f_int1;
 
43306
END|
 
43307
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43308
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
43309
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43310
        
 
43311
# check trigger-2 success:      1
 
43312
DROP TRIGGER trg_1;
 
43313
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43314
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43315
f_charbig = 'just inserted'
 
43316
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43317
DELETE FROM t0_aux
 
43318
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43319
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43320
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43321
'just inserted' FROM t0_template
 
43322
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43323
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
43324
BEGIN
 
43325
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43326
f_charbig = 'updated by trigger'
 
43327
      WHERE f_int1 = new.f_int1;
 
43328
END|
 
43329
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
43330
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43331
        
 
43332
# check trigger-3 success:      1
 
43333
DROP TRIGGER trg_1;
 
43334
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43335
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43336
f_charbig = 'just inserted'
 
43337
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43338
DELETE FROM t0_aux
 
43339
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43340
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43341
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43342
'just inserted' FROM t0_template
 
43343
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43344
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
43345
BEGIN
 
43346
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43347
f_charbig = 'updated by trigger'
 
43348
      WHERE f_int1 = - old.f_int1;
 
43349
END|
 
43350
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
43351
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43352
        
 
43353
# check trigger-4 success:      1
 
43354
DROP TRIGGER trg_1;
 
43355
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43356
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43357
f_charbig = 'just inserted'
 
43358
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43359
DELETE FROM t0_aux
 
43360
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43361
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43362
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43363
'just inserted' FROM t0_template
 
43364
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43365
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
43366
BEGIN
 
43367
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43368
f_charbig = 'updated by trigger'
 
43369
      WHERE f_int1 = new.f_int1;
 
43370
END|
 
43371
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
43372
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43373
        
 
43374
# check trigger-5 success:      1
 
43375
DROP TRIGGER trg_1;
 
43376
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43377
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43378
f_charbig = 'just inserted'
 
43379
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43380
DELETE FROM t0_aux
 
43381
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43382
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43383
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43384
'just inserted' FROM t0_template
 
43385
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43386
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
43387
BEGIN
 
43388
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43389
f_charbig = 'updated by trigger'
 
43390
      WHERE f_int1 = - old.f_int1;
 
43391
END|
 
43392
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
43393
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43394
        
 
43395
# check trigger-6 success:      1
 
43396
DROP TRIGGER trg_1;
 
43397
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43398
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43399
f_charbig = 'just inserted'
 
43400
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43401
DELETE FROM t0_aux
 
43402
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43403
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43404
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43405
'just inserted' FROM t0_template
 
43406
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43407
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
43408
BEGIN
 
43409
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43410
f_charbig = 'updated by trigger'
 
43411
      WHERE f_int1 = - old.f_int1;
 
43412
END|
 
43413
DELETE FROM t0_aux
 
43414
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43415
        
 
43416
# check trigger-7 success:      1
 
43417
DROP TRIGGER trg_1;
 
43418
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43419
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43420
f_charbig = 'just inserted'
 
43421
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43422
DELETE FROM t0_aux
 
43423
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43424
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
43425
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
43426
'just inserted' FROM t0_template
 
43427
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43428
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
43429
BEGIN
 
43430
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
43431
f_charbig = 'updated by trigger'
 
43432
      WHERE f_int1 = - old.f_int1;
 
43433
END|
 
43434
DELETE FROM t0_aux
 
43435
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
43436
        
 
43437
# check trigger-8 success:      1
 
43438
DROP TRIGGER trg_1;
 
43439
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43440
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43441
f_charbig = 'just inserted'
 
43442
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
43443
DELETE FROM t0_aux
 
43444
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43445
DELETE FROM t1
 
43446
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
43447
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
43448
BEGIN
 
43449
SET new.f_int1 = old.f_int1 + @max_row,
 
43450
new.f_int2 = old.f_int2 - @max_row,
 
43451
new.f_charbig = '####updated per update trigger####';
 
43452
END|
 
43453
UPDATE t1
 
43454
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
43455
f_charbig = '####updated per update statement itself####';
 
43456
        
 
43457
# check trigger-9 success:      1
 
43458
DROP TRIGGER trg_2;
 
43459
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43460
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43461
f_charbig = CONCAT('===',f_char1,'===');
 
43462
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
43463
BEGIN
 
43464
SET new.f_int1 = new.f_int1 + @max_row,
 
43465
new.f_int2 = new.f_int2 - @max_row,
 
43466
new.f_charbig = '####updated per update trigger####';
 
43467
END|
 
43468
UPDATE t1
 
43469
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
43470
f_charbig = '####updated per update statement itself####';
 
43471
        
 
43472
# check trigger-10 success:     1
 
43473
DROP TRIGGER trg_2;
 
43474
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
43475
f_int2 = CAST(f_char1 AS SIGNED INT),
 
43476
f_charbig = CONCAT('===',f_char1,'===');
 
43477
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
43478
BEGIN
 
43479
SET new.f_int1 = @my_max1 + @counter,
 
43480
new.f_int2 = @my_min2 - @counter,
 
43481
new.f_charbig = '####updated per insert trigger####';
 
43482
SET @counter = @counter + 1;
 
43483
END|
 
43484
SET @counter = 1;
 
43485
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
43486
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
43487
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
43488
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
43489
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
43490
ORDER BY f_int1;
 
43491
DROP TRIGGER trg_3;
 
43492
        
 
43493
# check trigger-11 success:     1
 
43494
DELETE FROM t1
 
43495
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
43496
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
43497
AND f_charbig = '####updated per insert trigger####';
 
43498
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
43499
BEGIN
 
43500
SET new.f_int1 = @my_max1 + @counter,
 
43501
new.f_int2 = @my_min2 - @counter,
 
43502
new.f_charbig = '####updated per insert trigger####';
 
43503
SET @counter = @counter + 1;
 
43504
END|
 
43505
SET @counter = 1;
 
43506
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
43507
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
43508
SELECT CAST(f_int1 AS CHAR),
 
43509
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
43510
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
43511
ORDER BY f_int1;
 
43512
DROP TRIGGER trg_3;
 
43513
        
 
43514
# check trigger-12 success:     1
 
43515
DELETE FROM t1
 
43516
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
43517
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
43518
AND f_charbig = '####updated per insert trigger####';
 
43519
ANALYZE  TABLE t1;
 
43520
Table   Op      Msg_type        Msg_text
 
43521
test.t1 analyze status  OK
 
43522
CHECK    TABLE t1 EXTENDED;
 
43523
Table   Op      Msg_type        Msg_text
 
43524
test.t1 check   status  OK
 
43525
CHECKSUM TABLE t1 EXTENDED;
 
43526
Table   Checksum
 
43527
test.t1 <some_value>
 
43528
OPTIMIZE TABLE t1;
 
43529
Table   Op      Msg_type        Msg_text
 
43530
test.t1 optimize        status  OK
 
43531
# check layout success:    1
 
43532
REPAIR   TABLE t1 EXTENDED;
 
43533
Table   Op      Msg_type        Msg_text
 
43534
test.t1 repair  status  OK
 
43535
# check layout success:    1
 
43536
TRUNCATE t1;
 
43537
        
 
43538
# check TRUNCATE success:       1
 
43539
# check layout success:    1
 
43540
# End usability test (inc/partition_check.inc)
 
43541
DROP TABLE t1;
 
43542
DROP VIEW  IF EXISTS v1;
 
43543
DROP TABLE IF EXISTS t1;
 
43544
DROP TABLE IF EXISTS t0_aux;
 
43545
DROP TABLE IF EXISTS t0_definition;
 
43546
DROP TABLE IF EXISTS t0_template;