~skinny.moey/drizzle/branch-rev

« back to all changes in this revision

Viewing changes to mysql-test/suite/parts/r/partition_engine_ndb.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 = 'ndbcluster';
 
3
 
 
4
#------------------------------------------------------------------------
 
5
# There are several testcases disabled because of the open bugs
 
6
# #15890
 
7
# #18730, Bug#18735
 
8
# The expected results suffer from the following bugs
 
9
# harmless #17455, #19305
 
10
# which cannot be suppressed because of technical reasons.
 
11
#------------------------------------------------------------------------
 
12
 
 
13
#------------------------------------------------------------------------
 
14
#  0. Setting of auxiliary variables + Creation of an auxiliary tables
 
15
#     needed in many testcases
 
16
#------------------------------------------------------------------------
 
17
SELECT @max_row DIV 2 INTO @max_row_div2;
 
18
SELECT @max_row DIV 3 INTO @max_row_div3;
 
19
SELECT @max_row DIV 4 INTO @max_row_div4;
 
20
SET @max_int_4 = 2147483647;
 
21
DROP TABLE IF EXISTS t0_template;
 
22
CREATE TABLE t0_template (
 
23
f_int1 INTEGER,
 
24
f_int2 INTEGER,
 
25
f_char1 CHAR(20),
 
26
f_char2 CHAR(20),
 
27
f_charbig VARCHAR(1000) ,
 
28
PRIMARY KEY(f_int1))
 
29
ENGINE = MEMORY;
 
30
#     Logging of <max_row> INSERTs into t0_template suppressed
 
31
DROP TABLE IF EXISTS t0_definition;
 
32
CREATE TABLE t0_definition (
 
33
state CHAR(3),
 
34
create_command VARBINARY(5000),
 
35
file_list      VARBINARY(5000),
 
36
PRIMARY KEY (state)
 
37
) ENGINE = MEMORY;
 
38
DROP TABLE IF EXISTS t0_aux;
 
39
CREATE TABLE t0_aux ( f_int1 INTEGER,
 
40
f_int2 INTEGER,
 
41
f_char1 CHAR(20),
 
42
f_char2 CHAR(20),
 
43
f_charbig VARCHAR(1000) )
 
44
ENGINE = MEMORY;
 
45
SET AUTOCOMMIT= 1;
 
46
SET @@session.sql_mode= '';
 
47
# End of basic preparations needed for all tests
 
48
#-----------------------------------------------
 
49
 
 
50
#========================================================================
 
51
# Checks where the engine is assigned on all supported (CREATE TABLE
 
52
# statement) positions + basic operations on the tables
 
53
#        Storage engine mixups are currently (2005-12-23) not supported
 
54
#========================================================================
 
55
DROP TABLE IF EXISTS t1;
 
56
#------------------------------------------------------------------------
 
57
# 1 Assignment of storage engine just after column list only
 
58
#------------------------------------------------------------------------
 
59
CREATE TABLE t1 (
 
60
f_int1 INTEGER,
 
61
f_int2 INTEGER,
 
62
f_char1 CHAR(20),
 
63
f_char2 CHAR(20),
 
64
f_charbig VARCHAR(1000)
 
65
) ENGINE = 'ndbcluster'
 
66
PARTITION BY HASH(f_int1) PARTITIONS 2;
 
67
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
68
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
69
# Start usability test (include/partition_check.inc)
 
70
create_command
 
71
SHOW CREATE TABLE t1;
 
72
Table   Create Table
 
73
t1      CREATE TABLE `t1` (
 
74
  `f_int1` int(11) DEFAULT NULL,
 
75
  `f_int2` int(11) DEFAULT NULL,
 
76
  `f_char1` char(20) DEFAULT NULL,
 
77
  `f_char2` char(20) DEFAULT NULL,
 
78
  `f_charbig` varchar(1000) DEFAULT NULL
 
79
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY HASH (f_int1) PARTITIONS 2 
 
80
 
 
81
# check prerequisites-1 success:    1
 
82
# check COUNT(*) success:    1
 
83
# check MIN/MAX(f_int1) success:    1
 
84
# check MIN/MAX(f_int2) success:    1
 
85
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
86
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
87
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
88
WHERE f_int1 IN (2,3);
 
89
# check prerequisites-3 success:    1
 
90
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
91
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
92
# check read via f_int1 success: 1
 
93
# check read via f_int2 success: 1
 
94
        
 
95
# check multiple-1 success:     1
 
96
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
97
        
 
98
# check multiple-2 success:     1
 
99
INSERT INTO t1 SELECT * FROM t0_template
 
100
WHERE MOD(f_int1,3) = 0;
 
101
        
 
102
# check multiple-3 success:     1
 
103
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
104
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
105
AND @max_row_div2 + @max_row_div4;
 
106
        
 
107
# check multiple-4 success:     1
 
108
DELETE FROM t1
 
109
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
110
AND @max_row_div2 + @max_row_div4 + @max_row;
 
111
        
 
112
# check multiple-5 success:     1
 
113
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
114
INSERT INTO t1
 
115
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
116
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
117
f_charbig = '#SINGLE#';
 
118
        
 
119
# check single-1 success:       1
 
120
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
121
INSERT INTO t1
 
122
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
123
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
124
f_charbig = '#SINGLE#';
 
125
        
 
126
# check single-2 success:       1
 
127
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
128
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
129
UPDATE t1 SET f_int1 = @cur_value2
 
130
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
131
        
 
132
# check single-3 success:       1
 
133
SET @cur_value1= -1;
 
134
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
135
UPDATE t1 SET f_int1 = @cur_value1
 
136
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
137
        
 
138
# check single-4 success:       1
 
139
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
140
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
141
        
 
142
# check single-5 success:       1
 
143
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
144
        
 
145
# check single-6 success:       1
 
146
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
147
        
 
148
# check single-7 success:       1
 
149
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
150
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
151
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
152
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
153
f_charbig = '#NULL#';
 
154
INSERT INTO t1
 
155
SET f_int1 = NULL , f_int2 = -@max_row,
 
156
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
157
f_charbig = '#NULL#';
 
158
# check null success:    1
 
159
        
 
160
# check null-1 success:         1
 
161
UPDATE t1 SET f_int1 = -@max_row
 
162
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
163
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
164
        
 
165
# check null-2 success:         1
 
166
UPDATE t1 SET f_int1 = NULL
 
167
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
168
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
169
        
 
170
# check null-3 success:         1
 
171
DELETE FROM t1
 
172
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
173
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
174
        
 
175
# check null-4 success:         1
 
176
DELETE FROM t1
 
177
WHERE f_int1 = 0 AND f_int2 = 0
 
178
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
179
AND f_charbig = '#NULL#';
 
180
SET AUTOCOMMIT= 0;
 
181
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
182
SELECT f_int1, f_int1, '', '', 'was inserted'
 
183
FROM t0_template source_tab
 
184
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
185
        
 
186
# check transactions-1 success:         1
 
187
COMMIT WORK;
 
188
        
 
189
# check transactions-2 success:         1
 
190
ROLLBACK WORK;
 
191
        
 
192
# check transactions-3 success:         1
 
193
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
194
COMMIT WORK;
 
195
ROLLBACK WORK;
 
196
        
 
197
# check transactions-4 success:         1
 
198
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
199
SELECT f_int1, f_int1, '', '', 'was inserted'
 
200
FROM t0_template source_tab
 
201
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
202
        
 
203
# check transactions-5 success:         1
 
204
ROLLBACK WORK;
 
205
        
 
206
# check transactions-6 success:         1
 
207
# INFO: Storage engine used for t1 seems to be transactional.
 
208
COMMIT;
 
209
        
 
210
# check transactions-7 success:         1
 
211
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
212
COMMIT WORK;
 
213
SET @@session.sql_mode = 'traditional';
 
214
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
215
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
216
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
217
'', '', 'was inserted' FROM t0_template
 
218
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
219
ERROR 22012: Division by 0
 
220
COMMIT;
 
221
        
 
222
# check transactions-8 success:         1
 
223
# INFO: Storage engine used for t1 seems to be unable to revert
 
224
#       changes made by the failing statement.
 
225
SET @@session.sql_mode = '';
 
226
SET AUTOCOMMIT= 1;
 
227
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
228
COMMIT WORK;
 
229
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
230
        
 
231
# check special-1 success:      1
 
232
UPDATE t1 SET f_charbig = '';
 
233
        
 
234
# check special-2 success:      1
 
235
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
236
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
237
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
238
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
239
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
240
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
241
'just inserted' FROM t0_template
 
242
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
243
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
244
BEGIN
 
245
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
246
f_charbig = 'updated by trigger'
 
247
      WHERE f_int1 = new.f_int1;
 
248
END|
 
249
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
250
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
251
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
252
        
 
253
# check trigger-1 success:      1
 
254
DROP TRIGGER trg_1;
 
255
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
256
f_int2 = CAST(f_char1 AS SIGNED INT),
 
257
f_charbig = 'just inserted'
 
258
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
259
DELETE FROM t0_aux
 
260
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
261
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
262
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
263
'just inserted' FROM t0_template
 
264
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
265
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
266
BEGIN
 
267
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
268
f_charbig = 'updated by trigger'
 
269
      WHERE f_int1 = new.f_int1;
 
270
END|
 
271
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
272
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
273
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
274
        
 
275
# check trigger-2 success:      1
 
276
DROP TRIGGER trg_1;
 
277
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
278
f_int2 = CAST(f_char1 AS SIGNED INT),
 
279
f_charbig = 'just inserted'
 
280
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
281
DELETE FROM t0_aux
 
282
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
283
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
284
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
285
'just inserted' FROM t0_template
 
286
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
287
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
288
BEGIN
 
289
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
290
f_charbig = 'updated by trigger'
 
291
      WHERE f_int1 = new.f_int1;
 
292
END|
 
293
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
294
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
295
        
 
296
# check trigger-3 success:      1
 
297
DROP TRIGGER trg_1;
 
298
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
299
f_int2 = CAST(f_char1 AS SIGNED INT),
 
300
f_charbig = 'just inserted'
 
301
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
302
DELETE FROM t0_aux
 
303
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
304
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
305
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
306
'just inserted' FROM t0_template
 
307
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
308
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
309
BEGIN
 
310
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
311
f_charbig = 'updated by trigger'
 
312
      WHERE f_int1 = - old.f_int1;
 
313
END|
 
314
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
315
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
316
        
 
317
# check trigger-4 success:      1
 
318
DROP TRIGGER trg_1;
 
319
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
320
f_int2 = CAST(f_char1 AS SIGNED INT),
 
321
f_charbig = 'just inserted'
 
322
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
323
DELETE FROM t0_aux
 
324
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
325
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
326
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
327
'just inserted' FROM t0_template
 
328
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
329
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
330
BEGIN
 
331
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
332
f_charbig = 'updated by trigger'
 
333
      WHERE f_int1 = new.f_int1;
 
334
END|
 
335
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
336
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
337
        
 
338
# check trigger-5 success:      1
 
339
DROP TRIGGER trg_1;
 
340
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
341
f_int2 = CAST(f_char1 AS SIGNED INT),
 
342
f_charbig = 'just inserted'
 
343
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
344
DELETE FROM t0_aux
 
345
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
346
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
347
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
348
'just inserted' FROM t0_template
 
349
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
350
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
351
BEGIN
 
352
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
353
f_charbig = 'updated by trigger'
 
354
      WHERE f_int1 = - old.f_int1;
 
355
END|
 
356
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
357
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
358
        
 
359
# check trigger-6 success:      1
 
360
DROP TRIGGER trg_1;
 
361
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
362
f_int2 = CAST(f_char1 AS SIGNED INT),
 
363
f_charbig = 'just inserted'
 
364
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
365
DELETE FROM t0_aux
 
366
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
367
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
368
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
369
'just inserted' FROM t0_template
 
370
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
371
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
372
BEGIN
 
373
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
374
f_charbig = 'updated by trigger'
 
375
      WHERE f_int1 = - old.f_int1;
 
376
END|
 
377
DELETE FROM t0_aux
 
378
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
379
        
 
380
# check trigger-7 success:      1
 
381
DROP TRIGGER trg_1;
 
382
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
383
f_int2 = CAST(f_char1 AS SIGNED INT),
 
384
f_charbig = 'just inserted'
 
385
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
386
DELETE FROM t0_aux
 
387
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
388
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
389
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
390
'just inserted' FROM t0_template
 
391
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
392
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
393
BEGIN
 
394
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
395
f_charbig = 'updated by trigger'
 
396
      WHERE f_int1 = - old.f_int1;
 
397
END|
 
398
DELETE FROM t0_aux
 
399
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
400
        
 
401
# check trigger-8 success:      1
 
402
DROP TRIGGER trg_1;
 
403
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
404
f_int2 = CAST(f_char1 AS SIGNED INT),
 
405
f_charbig = 'just inserted'
 
406
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
407
DELETE FROM t0_aux
 
408
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
409
DELETE FROM t1
 
410
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
411
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
412
BEGIN
 
413
SET new.f_int1 = old.f_int1 + @max_row,
 
414
new.f_int2 = old.f_int2 - @max_row,
 
415
new.f_charbig = '####updated per update trigger####';
 
416
END|
 
417
UPDATE t1
 
418
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
419
f_charbig = '####updated per update statement itself####';
 
420
        
 
421
# check trigger-9 success:      1
 
422
DROP TRIGGER trg_2;
 
423
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
424
f_int2 = CAST(f_char1 AS SIGNED INT),
 
425
f_charbig = CONCAT('===',f_char1,'===');
 
426
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
427
BEGIN
 
428
SET new.f_int1 = new.f_int1 + @max_row,
 
429
new.f_int2 = new.f_int2 - @max_row,
 
430
new.f_charbig = '####updated per update trigger####';
 
431
END|
 
432
UPDATE t1
 
433
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
434
f_charbig = '####updated per update statement itself####';
 
435
        
 
436
# check trigger-10 success:     1
 
437
DROP TRIGGER trg_2;
 
438
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
439
f_int2 = CAST(f_char1 AS SIGNED INT),
 
440
f_charbig = CONCAT('===',f_char1,'===');
 
441
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
442
BEGIN
 
443
SET new.f_int1 = @my_max1 + @counter,
 
444
new.f_int2 = @my_min2 - @counter,
 
445
new.f_charbig = '####updated per insert trigger####';
 
446
SET @counter = @counter + 1;
 
447
END|
 
448
SET @counter = 1;
 
449
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
450
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
451
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
452
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
453
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
454
ORDER BY f_int1;
 
455
DROP TRIGGER trg_3;
 
456
        
 
457
# check trigger-11 success:     1
 
458
DELETE FROM t1
 
459
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
460
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
461
AND f_charbig = '####updated per insert trigger####';
 
462
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
463
BEGIN
 
464
SET new.f_int1 = @my_max1 + @counter,
 
465
new.f_int2 = @my_min2 - @counter,
 
466
new.f_charbig = '####updated per insert trigger####';
 
467
SET @counter = @counter + 1;
 
468
END|
 
469
SET @counter = 1;
 
470
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
471
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
472
SELECT CAST(f_int1 AS CHAR),
 
473
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
474
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
475
ORDER BY f_int1;
 
476
DROP TRIGGER trg_3;
 
477
        
 
478
# check trigger-12 success:     1
 
479
DELETE FROM t1
 
480
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
481
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
482
AND f_charbig = '####updated per insert trigger####';
 
483
ANALYZE  TABLE t1;
 
484
Table   Op      Msg_type        Msg_text
 
485
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
486
CHECK    TABLE t1 EXTENDED;
 
487
Table   Op      Msg_type        Msg_text
 
488
test.t1 check   note    The storage engine for the table doesn't support check
 
489
CHECKSUM TABLE t1 EXTENDED;
 
490
Table   Checksum
 
491
test.t1 <some_value>
 
492
OPTIMIZE TABLE t1;
 
493
Table   Op      Msg_type        Msg_text
 
494
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
495
# check layout success:    1
 
496
REPAIR   TABLE t1 EXTENDED;
 
497
Table   Op      Msg_type        Msg_text
 
498
test.t1 repair  note    The storage engine for the table doesn't support repair
 
499
# check layout success:    1
 
500
TRUNCATE t1;
 
501
        
 
502
# check TRUNCATE success:       1
 
503
# check layout success:    1
 
504
# End usability test (include/partition_check.inc)
 
505
DROP TABLE t1;
 
506
#------------------------------------------------------------------------
 
507
# 2 Assignment of storage engine just after partition or subpartition
 
508
#   name only
 
509
#------------------------------------------------------------------------
 
510
CREATE TABLE t1 (
 
511
f_int1 INTEGER,
 
512
f_int2 INTEGER,
 
513
f_char1 CHAR(20),
 
514
f_char2 CHAR(20),
 
515
f_charbig VARCHAR(1000)
 
516
)
 
517
PARTITION BY HASH(f_int1)
 
518
( PARTITION part1 STORAGE ENGINE = 'ndbcluster',
 
519
PARTITION part2 STORAGE ENGINE = 'ndbcluster'
 
520
);
 
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
# Start usability test (include/partition_check.inc)
 
524
create_command
 
525
SHOW CREATE TABLE t1;
 
526
Table   Create Table
 
527
t1      CREATE TABLE `t1` (
 
528
  `f_int1` int(11) DEFAULT NULL,
 
529
  `f_int2` int(11) DEFAULT NULL,
 
530
  `f_char1` char(20) DEFAULT NULL,
 
531
  `f_char2` char(20) DEFAULT NULL,
 
532
  `f_charbig` varchar(1000) DEFAULT NULL
 
533
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY HASH (f_int1) (PARTITION part1  ENGINE = ndbcluster, PARTITION part2  ENGINE = ndbcluster)
 
534
 
 
535
# check prerequisites-1 success:    1
 
536
# check COUNT(*) success:    1
 
537
# check MIN/MAX(f_int1) success:    1
 
538
# check MIN/MAX(f_int2) success:    1
 
539
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
540
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
541
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
542
WHERE f_int1 IN (2,3);
 
543
# check prerequisites-3 success:    1
 
544
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
545
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
546
# check read via f_int1 success: 1
 
547
# check read via f_int2 success: 1
 
548
        
 
549
# check multiple-1 success:     1
 
550
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
551
        
 
552
# check multiple-2 success:     1
 
553
INSERT INTO t1 SELECT * FROM t0_template
 
554
WHERE MOD(f_int1,3) = 0;
 
555
        
 
556
# check multiple-3 success:     1
 
557
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
558
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
559
AND @max_row_div2 + @max_row_div4;
 
560
        
 
561
# check multiple-4 success:     1
 
562
DELETE FROM t1
 
563
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
564
AND @max_row_div2 + @max_row_div4 + @max_row;
 
565
        
 
566
# check multiple-5 success:     1
 
567
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
568
INSERT INTO t1
 
569
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
570
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
571
f_charbig = '#SINGLE#';
 
572
        
 
573
# check single-1 success:       1
 
574
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
575
INSERT INTO t1
 
576
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
577
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
578
f_charbig = '#SINGLE#';
 
579
        
 
580
# check single-2 success:       1
 
581
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
582
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
583
UPDATE t1 SET f_int1 = @cur_value2
 
584
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
585
        
 
586
# check single-3 success:       1
 
587
SET @cur_value1= -1;
 
588
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
589
UPDATE t1 SET f_int1 = @cur_value1
 
590
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
591
        
 
592
# check single-4 success:       1
 
593
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
594
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
595
        
 
596
# check single-5 success:       1
 
597
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
598
        
 
599
# check single-6 success:       1
 
600
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
601
        
 
602
# check single-7 success:       1
 
603
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
604
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
605
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
606
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
607
f_charbig = '#NULL#';
 
608
INSERT INTO t1
 
609
SET f_int1 = NULL , f_int2 = -@max_row,
 
610
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
611
f_charbig = '#NULL#';
 
612
# check null success:    1
 
613
        
 
614
# check null-1 success:         1
 
615
UPDATE t1 SET f_int1 = -@max_row
 
616
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
617
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
618
        
 
619
# check null-2 success:         1
 
620
UPDATE t1 SET f_int1 = NULL
 
621
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
622
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
623
        
 
624
# check null-3 success:         1
 
625
DELETE FROM t1
 
626
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
627
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
628
        
 
629
# check null-4 success:         1
 
630
DELETE FROM t1
 
631
WHERE f_int1 = 0 AND f_int2 = 0
 
632
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
633
AND f_charbig = '#NULL#';
 
634
SET AUTOCOMMIT= 0;
 
635
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
636
SELECT f_int1, f_int1, '', '', 'was inserted'
 
637
FROM t0_template source_tab
 
638
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
639
        
 
640
# check transactions-1 success:         1
 
641
COMMIT WORK;
 
642
        
 
643
# check transactions-2 success:         1
 
644
ROLLBACK WORK;
 
645
        
 
646
# check transactions-3 success:         1
 
647
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
648
COMMIT WORK;
 
649
ROLLBACK WORK;
 
650
        
 
651
# check transactions-4 success:         1
 
652
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
653
SELECT f_int1, f_int1, '', '', 'was inserted'
 
654
FROM t0_template source_tab
 
655
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
656
        
 
657
# check transactions-5 success:         1
 
658
ROLLBACK WORK;
 
659
        
 
660
# check transactions-6 success:         1
 
661
# INFO: Storage engine used for t1 seems to be transactional.
 
662
COMMIT;
 
663
        
 
664
# check transactions-7 success:         1
 
665
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
666
COMMIT WORK;
 
667
SET @@session.sql_mode = 'traditional';
 
668
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
669
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
670
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
671
'', '', 'was inserted' FROM t0_template
 
672
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
673
ERROR 22012: Division by 0
 
674
COMMIT;
 
675
        
 
676
# check transactions-8 success:         1
 
677
# INFO: Storage engine used for t1 seems to be unable to revert
 
678
#       changes made by the failing statement.
 
679
SET @@session.sql_mode = '';
 
680
SET AUTOCOMMIT= 1;
 
681
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
682
COMMIT WORK;
 
683
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
684
        
 
685
# check special-1 success:      1
 
686
UPDATE t1 SET f_charbig = '';
 
687
        
 
688
# check special-2 success:      1
 
689
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
690
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
691
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
692
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
693
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
694
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
695
'just inserted' FROM t0_template
 
696
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
697
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
698
BEGIN
 
699
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
700
f_charbig = 'updated by trigger'
 
701
      WHERE f_int1 = new.f_int1;
 
702
END|
 
703
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
704
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
705
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
706
        
 
707
# check trigger-1 success:      1
 
708
DROP TRIGGER trg_1;
 
709
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
710
f_int2 = CAST(f_char1 AS SIGNED INT),
 
711
f_charbig = 'just inserted'
 
712
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
713
DELETE FROM t0_aux
 
714
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
715
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
716
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
717
'just inserted' FROM t0_template
 
718
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
719
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
720
BEGIN
 
721
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
722
f_charbig = 'updated by trigger'
 
723
      WHERE f_int1 = new.f_int1;
 
724
END|
 
725
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
726
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
727
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
728
        
 
729
# check trigger-2 success:      1
 
730
DROP TRIGGER trg_1;
 
731
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
732
f_int2 = CAST(f_char1 AS SIGNED INT),
 
733
f_charbig = 'just inserted'
 
734
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
735
DELETE FROM t0_aux
 
736
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
737
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
738
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
739
'just inserted' FROM t0_template
 
740
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
741
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
742
BEGIN
 
743
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
744
f_charbig = 'updated by trigger'
 
745
      WHERE f_int1 = new.f_int1;
 
746
END|
 
747
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
748
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
749
        
 
750
# check trigger-3 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 = - old.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-4 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 AFTER 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 = new.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-5 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 = - old.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-6 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 BEFORE DELETE 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
DELETE FROM t0_aux
 
832
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
833
        
 
834
# check trigger-7 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 AFTER 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-8 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
DELETE FROM t1
 
864
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
865
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
866
BEGIN
 
867
SET new.f_int1 = old.f_int1 + @max_row,
 
868
new.f_int2 = old.f_int2 - @max_row,
 
869
new.f_charbig = '####updated per update trigger####';
 
870
END|
 
871
UPDATE t1
 
872
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
873
f_charbig = '####updated per update statement itself####';
 
874
        
 
875
# check trigger-9 success:      1
 
876
DROP TRIGGER trg_2;
 
877
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
878
f_int2 = CAST(f_char1 AS SIGNED INT),
 
879
f_charbig = CONCAT('===',f_char1,'===');
 
880
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
881
BEGIN
 
882
SET new.f_int1 = new.f_int1 + @max_row,
 
883
new.f_int2 = new.f_int2 - @max_row,
 
884
new.f_charbig = '####updated per update trigger####';
 
885
END|
 
886
UPDATE t1
 
887
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
888
f_charbig = '####updated per update statement itself####';
 
889
        
 
890
# check trigger-10 success:     1
 
891
DROP TRIGGER trg_2;
 
892
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
893
f_int2 = CAST(f_char1 AS SIGNED INT),
 
894
f_charbig = CONCAT('===',f_char1,'===');
 
895
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
896
BEGIN
 
897
SET new.f_int1 = @my_max1 + @counter,
 
898
new.f_int2 = @my_min2 - @counter,
 
899
new.f_charbig = '####updated per insert trigger####';
 
900
SET @counter = @counter + 1;
 
901
END|
 
902
SET @counter = 1;
 
903
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
904
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
905
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
906
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
907
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
908
ORDER BY f_int1;
 
909
DROP TRIGGER trg_3;
 
910
        
 
911
# check trigger-11 success:     1
 
912
DELETE FROM t1
 
913
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
914
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
915
AND f_charbig = '####updated per insert trigger####';
 
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_char1, f_char2, f_charbig)
 
926
SELECT 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-12 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
ANALYZE  TABLE t1;
 
938
Table   Op      Msg_type        Msg_text
 
939
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
940
CHECK    TABLE t1 EXTENDED;
 
941
Table   Op      Msg_type        Msg_text
 
942
test.t1 check   note    The storage engine for the table doesn't support check
 
943
CHECKSUM TABLE t1 EXTENDED;
 
944
Table   Checksum
 
945
test.t1 <some_value>
 
946
OPTIMIZE TABLE t1;
 
947
Table   Op      Msg_type        Msg_text
 
948
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
949
# check layout success:    1
 
950
REPAIR   TABLE t1 EXTENDED;
 
951
Table   Op      Msg_type        Msg_text
 
952
test.t1 repair  note    The storage engine for the table doesn't support repair
 
953
# check layout success:    1
 
954
TRUNCATE t1;
 
955
        
 
956
# check TRUNCATE success:       1
 
957
# check layout success:    1
 
958
# End usability test (include/partition_check.inc)
 
959
DROP TABLE t1;
 
960
CREATE TABLE t1 (
 
961
f_int1 INTEGER,
 
962
f_int2 INTEGER,
 
963
f_char1 CHAR(20),
 
964
f_char2 CHAR(20),
 
965
f_charbig VARCHAR(1000)
 
966
)
 
967
PARTITION BY RANGE(f_int1)
 
968
SUBPARTITION BY HASH(f_int1)
 
969
( PARTITION part1 VALUES LESS THAN (10)
 
970
(SUBPARTITION subpart11 STORAGE ENGINE = 'ndbcluster',
 
971
SUBPARTITION subpart12 STORAGE ENGINE = 'ndbcluster'),
 
972
PARTITION part2 VALUES LESS THAN (2147483646)
 
973
(SUBPARTITION subpart21 STORAGE ENGINE = 'ndbcluster',
 
974
SUBPARTITION subpart22 STORAGE ENGINE = 'ndbcluster')
 
975
);
 
976
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
977
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
978
# Start usability test (include/partition_check.inc)
 
979
create_command
 
980
SHOW CREATE TABLE t1;
 
981
Table   Create Table
 
982
t1      CREATE TABLE `t1` (
 
983
  `f_int1` int(11) DEFAULT NULL,
 
984
  `f_int2` int(11) DEFAULT NULL,
 
985
  `f_char1` char(20) DEFAULT NULL,
 
986
  `f_char2` char(20) DEFAULT NULL,
 
987
  `f_charbig` varchar(1000) DEFAULT NULL
 
988
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int1) (PARTITION part1 VALUES LESS THAN (10)  (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster), PARTITION part2 VALUES LESS THAN (2147483646)  (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster))
 
989
 
 
990
# check prerequisites-1 success:    1
 
991
# check COUNT(*) success:    1
 
992
# check MIN/MAX(f_int1) success:    1
 
993
# check MIN/MAX(f_int2) success:    1
 
994
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
995
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
996
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
997
WHERE f_int1 IN (2,3);
 
998
# check prerequisites-3 success:    1
 
999
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1000
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
1001
# check read via f_int1 success: 1
 
1002
# check read via f_int2 success: 1
 
1003
        
 
1004
# check multiple-1 success:     1
 
1005
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1006
        
 
1007
# check multiple-2 success:     1
 
1008
INSERT INTO t1 SELECT * FROM t0_template
 
1009
WHERE MOD(f_int1,3) = 0;
 
1010
        
 
1011
# check multiple-3 success:     1
 
1012
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1013
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1014
AND @max_row_div2 + @max_row_div4;
 
1015
        
 
1016
# check multiple-4 success:     1
 
1017
DELETE FROM t1
 
1018
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1019
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1020
        
 
1021
# check multiple-5 success:     1
 
1022
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1023
INSERT INTO t1
 
1024
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1025
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1026
f_charbig = '#SINGLE#';
 
1027
        
 
1028
# check single-1 success:       1
 
1029
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1030
INSERT INTO t1
 
1031
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1032
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1033
f_charbig = '#SINGLE#';
 
1034
        
 
1035
# check single-2 success:       1
 
1036
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1037
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1038
UPDATE t1 SET f_int1 = @cur_value2
 
1039
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1040
        
 
1041
# check single-3 success:       1
 
1042
SET @cur_value1= -1;
 
1043
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1044
UPDATE t1 SET f_int1 = @cur_value1
 
1045
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1046
        
 
1047
# check single-4 success:       1
 
1048
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1049
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1050
        
 
1051
# check single-5 success:       1
 
1052
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1053
        
 
1054
# check single-6 success:       1
 
1055
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1056
ERROR HY000: Table has no partition for value 2147483647
 
1057
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1058
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1059
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1060
f_charbig = '#NULL#';
 
1061
INSERT INTO t1
 
1062
SET f_int1 = NULL , f_int2 = -@max_row,
 
1063
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1064
f_charbig = '#NULL#';
 
1065
# check null success:    1
 
1066
        
 
1067
# check null-1 success:         1
 
1068
UPDATE t1 SET f_int1 = -@max_row
 
1069
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1070
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1071
        
 
1072
# check null-2 success:         1
 
1073
UPDATE t1 SET f_int1 = NULL
 
1074
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1075
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1076
        
 
1077
# check null-3 success:         1
 
1078
DELETE FROM t1
 
1079
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1080
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1081
        
 
1082
# check null-4 success:         1
 
1083
DELETE FROM t1
 
1084
WHERE f_int1 = 0 AND f_int2 = 0
 
1085
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1086
AND f_charbig = '#NULL#';
 
1087
SET AUTOCOMMIT= 0;
 
1088
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1089
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1090
FROM t0_template source_tab
 
1091
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1092
        
 
1093
# check transactions-1 success:         1
 
1094
COMMIT WORK;
 
1095
        
 
1096
# check transactions-2 success:         1
 
1097
ROLLBACK WORK;
 
1098
        
 
1099
# check transactions-3 success:         1
 
1100
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1101
COMMIT WORK;
 
1102
ROLLBACK WORK;
 
1103
        
 
1104
# check transactions-4 success:         1
 
1105
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1106
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1107
FROM t0_template source_tab
 
1108
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1109
        
 
1110
# check transactions-5 success:         1
 
1111
ROLLBACK WORK;
 
1112
        
 
1113
# check transactions-6 success:         1
 
1114
# INFO: Storage engine used for t1 seems to be transactional.
 
1115
COMMIT;
 
1116
        
 
1117
# check transactions-7 success:         1
 
1118
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1119
COMMIT WORK;
 
1120
SET @@session.sql_mode = 'traditional';
 
1121
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1122
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1123
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1124
'', '', 'was inserted' FROM t0_template
 
1125
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1126
ERROR 22012: Division by 0
 
1127
COMMIT;
 
1128
        
 
1129
# check transactions-8 success:         1
 
1130
# INFO: Storage engine used for t1 seems to be unable to revert
 
1131
#       changes made by the failing statement.
 
1132
SET @@session.sql_mode = '';
 
1133
SET AUTOCOMMIT= 1;
 
1134
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1135
COMMIT WORK;
 
1136
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
1137
        
 
1138
# check special-1 success:      1
 
1139
UPDATE t1 SET f_charbig = '';
 
1140
        
 
1141
# check special-2 success:      1
 
1142
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
1143
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1144
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
1145
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1146
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1147
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1148
'just inserted' FROM t0_template
 
1149
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1150
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
1151
BEGIN
 
1152
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1153
f_charbig = 'updated by trigger'
 
1154
      WHERE f_int1 = new.f_int1;
 
1155
END|
 
1156
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1157
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1158
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1159
        
 
1160
# check trigger-1 success:      1
 
1161
DROP TRIGGER trg_1;
 
1162
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1163
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1164
f_charbig = 'just inserted'
 
1165
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1166
DELETE FROM t0_aux
 
1167
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1168
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1169
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1170
'just inserted' FROM t0_template
 
1171
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1172
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1173
BEGIN
 
1174
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1175
f_charbig = 'updated by trigger'
 
1176
      WHERE f_int1 = new.f_int1;
 
1177
END|
 
1178
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1179
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1180
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1181
        
 
1182
# check trigger-2 success:      1
 
1183
DROP TRIGGER trg_1;
 
1184
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1185
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1186
f_charbig = 'just inserted'
 
1187
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1188
DELETE FROM t0_aux
 
1189
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1190
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1191
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1192
'just inserted' FROM t0_template
 
1193
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1194
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1195
BEGIN
 
1196
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1197
f_charbig = 'updated by trigger'
 
1198
      WHERE f_int1 = new.f_int1;
 
1199
END|
 
1200
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1201
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1202
        
 
1203
# check trigger-3 success:      1
 
1204
DROP TRIGGER trg_1;
 
1205
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1206
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1207
f_charbig = 'just inserted'
 
1208
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1209
DELETE FROM t0_aux
 
1210
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1211
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1212
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1213
'just inserted' FROM t0_template
 
1214
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1215
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1216
BEGIN
 
1217
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1218
f_charbig = 'updated by trigger'
 
1219
      WHERE f_int1 = - old.f_int1;
 
1220
END|
 
1221
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1222
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1223
        
 
1224
# check trigger-4 success:      1
 
1225
DROP TRIGGER trg_1;
 
1226
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1227
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1228
f_charbig = 'just inserted'
 
1229
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1230
DELETE FROM t0_aux
 
1231
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1232
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1233
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1234
'just inserted' FROM t0_template
 
1235
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1236
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1237
BEGIN
 
1238
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1239
f_charbig = 'updated by trigger'
 
1240
      WHERE f_int1 = new.f_int1;
 
1241
END|
 
1242
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1243
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1244
        
 
1245
# check trigger-5 success:      1
 
1246
DROP TRIGGER trg_1;
 
1247
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1248
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1249
f_charbig = 'just inserted'
 
1250
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1251
DELETE FROM t0_aux
 
1252
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1253
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1254
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1255
'just inserted' FROM t0_template
 
1256
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1257
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1258
BEGIN
 
1259
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1260
f_charbig = 'updated by trigger'
 
1261
      WHERE f_int1 = - old.f_int1;
 
1262
END|
 
1263
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1264
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1265
        
 
1266
# check trigger-6 success:      1
 
1267
DROP TRIGGER trg_1;
 
1268
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1269
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1270
f_charbig = 'just inserted'
 
1271
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1272
DELETE FROM t0_aux
 
1273
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1274
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1275
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1276
'just inserted' FROM t0_template
 
1277
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1278
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1279
BEGIN
 
1280
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1281
f_charbig = 'updated by trigger'
 
1282
      WHERE f_int1 = - old.f_int1;
 
1283
END|
 
1284
DELETE FROM t0_aux
 
1285
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1286
        
 
1287
# check trigger-7 success:      1
 
1288
DROP TRIGGER trg_1;
 
1289
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1290
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1291
f_charbig = 'just inserted'
 
1292
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1293
DELETE FROM t0_aux
 
1294
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1295
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1296
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1297
'just inserted' FROM t0_template
 
1298
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1299
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1300
BEGIN
 
1301
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1302
f_charbig = 'updated by trigger'
 
1303
      WHERE f_int1 = - old.f_int1;
 
1304
END|
 
1305
DELETE FROM t0_aux
 
1306
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1307
        
 
1308
# check trigger-8 success:      1
 
1309
DROP TRIGGER trg_1;
 
1310
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1311
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1312
f_charbig = 'just inserted'
 
1313
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1314
DELETE FROM t0_aux
 
1315
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1316
DELETE FROM t1
 
1317
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1318
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1319
BEGIN
 
1320
SET new.f_int1 = old.f_int1 + @max_row,
 
1321
new.f_int2 = old.f_int2 - @max_row,
 
1322
new.f_charbig = '####updated per update trigger####';
 
1323
END|
 
1324
UPDATE t1
 
1325
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1326
f_charbig = '####updated per update statement itself####';
 
1327
        
 
1328
# check trigger-9 success:      1
 
1329
DROP TRIGGER trg_2;
 
1330
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1331
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1332
f_charbig = CONCAT('===',f_char1,'===');
 
1333
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1334
BEGIN
 
1335
SET new.f_int1 = new.f_int1 + @max_row,
 
1336
new.f_int2 = new.f_int2 - @max_row,
 
1337
new.f_charbig = '####updated per update trigger####';
 
1338
END|
 
1339
UPDATE t1
 
1340
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1341
f_charbig = '####updated per update statement itself####';
 
1342
        
 
1343
# check trigger-10 success:     1
 
1344
DROP TRIGGER trg_2;
 
1345
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1346
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1347
f_charbig = CONCAT('===',f_char1,'===');
 
1348
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1349
BEGIN
 
1350
SET new.f_int1 = @my_max1 + @counter,
 
1351
new.f_int2 = @my_min2 - @counter,
 
1352
new.f_charbig = '####updated per insert trigger####';
 
1353
SET @counter = @counter + 1;
 
1354
END|
 
1355
SET @counter = 1;
 
1356
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1357
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1358
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1359
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1360
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1361
ORDER BY f_int1;
 
1362
DROP TRIGGER trg_3;
 
1363
        
 
1364
# check trigger-11 success:     1
 
1365
DELETE FROM t1
 
1366
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1367
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1368
AND f_charbig = '####updated per insert trigger####';
 
1369
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1370
BEGIN
 
1371
SET new.f_int1 = @my_max1 + @counter,
 
1372
new.f_int2 = @my_min2 - @counter,
 
1373
new.f_charbig = '####updated per insert trigger####';
 
1374
SET @counter = @counter + 1;
 
1375
END|
 
1376
SET @counter = 1;
 
1377
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1378
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1379
SELECT CAST(f_int1 AS CHAR),
 
1380
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1381
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1382
ORDER BY f_int1;
 
1383
DROP TRIGGER trg_3;
 
1384
        
 
1385
# check trigger-12 success:     1
 
1386
DELETE FROM t1
 
1387
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1388
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1389
AND f_charbig = '####updated per insert trigger####';
 
1390
ANALYZE  TABLE t1;
 
1391
Table   Op      Msg_type        Msg_text
 
1392
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
1393
CHECK    TABLE t1 EXTENDED;
 
1394
Table   Op      Msg_type        Msg_text
 
1395
test.t1 check   note    The storage engine for the table doesn't support check
 
1396
CHECKSUM TABLE t1 EXTENDED;
 
1397
Table   Checksum
 
1398
test.t1 <some_value>
 
1399
OPTIMIZE TABLE t1;
 
1400
Table   Op      Msg_type        Msg_text
 
1401
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
1402
# check layout success:    1
 
1403
REPAIR   TABLE t1 EXTENDED;
 
1404
Table   Op      Msg_type        Msg_text
 
1405
test.t1 repair  note    The storage engine for the table doesn't support repair
 
1406
# check layout success:    1
 
1407
TRUNCATE t1;
 
1408
        
 
1409
# check TRUNCATE success:       1
 
1410
# check layout success:    1
 
1411
# End usability test (include/partition_check.inc)
 
1412
DROP TABLE t1;
 
1413
#------------------------------------------------------------------------
 
1414
# 3 Some but not all named partitions or subpartitions get a storage
 
1415
#   engine assigned
 
1416
#------------------------------------------------------------------------
 
1417
CREATE TABLE t1 (
 
1418
f_int1 INTEGER,
 
1419
f_int2 INTEGER,
 
1420
f_char1 CHAR(20),
 
1421
f_char2 CHAR(20),
 
1422
f_charbig VARCHAR(1000)
 
1423
)
 
1424
PARTITION BY HASH(f_int1)
 
1425
( PARTITION part1 STORAGE ENGINE = 'ndbcluster',
 
1426
PARTITION part2
 
1427
);
 
1428
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1429
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
1430
# Start usability test (include/partition_check.inc)
 
1431
create_command
 
1432
SHOW CREATE TABLE t1;
 
1433
Table   Create Table
 
1434
t1      CREATE TABLE `t1` (
 
1435
  `f_int1` int(11) DEFAULT NULL,
 
1436
  `f_int2` int(11) DEFAULT NULL,
 
1437
  `f_char1` char(20) DEFAULT NULL,
 
1438
  `f_char2` char(20) DEFAULT NULL,
 
1439
  `f_charbig` varchar(1000) DEFAULT NULL
 
1440
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY HASH (f_int1) (PARTITION part1  ENGINE = ndbcluster, PARTITION part2  ENGINE = ndbcluster)
 
1441
 
 
1442
# check prerequisites-1 success:    1
 
1443
# check COUNT(*) success:    1
 
1444
# check MIN/MAX(f_int1) success:    1
 
1445
# check MIN/MAX(f_int2) success:    1
 
1446
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1447
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1448
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1449
WHERE f_int1 IN (2,3);
 
1450
# check prerequisites-3 success:    1
 
1451
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1452
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
1453
# check read via f_int1 success: 1
 
1454
# check read via f_int2 success: 1
 
1455
        
 
1456
# check multiple-1 success:     1
 
1457
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1458
        
 
1459
# check multiple-2 success:     1
 
1460
INSERT INTO t1 SELECT * FROM t0_template
 
1461
WHERE MOD(f_int1,3) = 0;
 
1462
        
 
1463
# check multiple-3 success:     1
 
1464
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1465
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1466
AND @max_row_div2 + @max_row_div4;
 
1467
        
 
1468
# check multiple-4 success:     1
 
1469
DELETE FROM t1
 
1470
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1471
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1472
        
 
1473
# check multiple-5 success:     1
 
1474
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1475
INSERT INTO t1
 
1476
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1477
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1478
f_charbig = '#SINGLE#';
 
1479
        
 
1480
# check single-1 success:       1
 
1481
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1482
INSERT INTO t1
 
1483
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1484
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1485
f_charbig = '#SINGLE#';
 
1486
        
 
1487
# check single-2 success:       1
 
1488
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1489
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1490
UPDATE t1 SET f_int1 = @cur_value2
 
1491
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1492
        
 
1493
# check single-3 success:       1
 
1494
SET @cur_value1= -1;
 
1495
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1496
UPDATE t1 SET f_int1 = @cur_value1
 
1497
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1498
        
 
1499
# check single-4 success:       1
 
1500
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1501
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1502
        
 
1503
# check single-5 success:       1
 
1504
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1505
        
 
1506
# check single-6 success:       1
 
1507
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1508
        
 
1509
# check single-7 success:       1
 
1510
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
1511
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1512
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1513
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1514
f_charbig = '#NULL#';
 
1515
INSERT INTO t1
 
1516
SET f_int1 = NULL , f_int2 = -@max_row,
 
1517
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1518
f_charbig = '#NULL#';
 
1519
# check null success:    1
 
1520
        
 
1521
# check null-1 success:         1
 
1522
UPDATE t1 SET f_int1 = -@max_row
 
1523
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1524
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1525
        
 
1526
# check null-2 success:         1
 
1527
UPDATE t1 SET f_int1 = NULL
 
1528
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1529
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1530
        
 
1531
# check null-3 success:         1
 
1532
DELETE FROM t1
 
1533
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1534
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1535
        
 
1536
# check null-4 success:         1
 
1537
DELETE FROM t1
 
1538
WHERE f_int1 = 0 AND f_int2 = 0
 
1539
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1540
AND f_charbig = '#NULL#';
 
1541
SET AUTOCOMMIT= 0;
 
1542
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1543
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1544
FROM t0_template source_tab
 
1545
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1546
        
 
1547
# check transactions-1 success:         1
 
1548
COMMIT WORK;
 
1549
        
 
1550
# check transactions-2 success:         1
 
1551
ROLLBACK WORK;
 
1552
        
 
1553
# check transactions-3 success:         1
 
1554
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1555
COMMIT WORK;
 
1556
ROLLBACK WORK;
 
1557
        
 
1558
# check transactions-4 success:         1
 
1559
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1560
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1561
FROM t0_template source_tab
 
1562
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1563
        
 
1564
# check transactions-5 success:         1
 
1565
ROLLBACK WORK;
 
1566
        
 
1567
# check transactions-6 success:         1
 
1568
# INFO: Storage engine used for t1 seems to be transactional.
 
1569
COMMIT;
 
1570
        
 
1571
# check transactions-7 success:         1
 
1572
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1573
COMMIT WORK;
 
1574
SET @@session.sql_mode = 'traditional';
 
1575
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
1576
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1577
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
1578
'', '', 'was inserted' FROM t0_template
 
1579
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1580
ERROR 22012: Division by 0
 
1581
COMMIT;
 
1582
        
 
1583
# check transactions-8 success:         1
 
1584
# INFO: Storage engine used for t1 seems to be unable to revert
 
1585
#       changes made by the failing statement.
 
1586
SET @@session.sql_mode = '';
 
1587
SET AUTOCOMMIT= 1;
 
1588
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
1589
COMMIT WORK;
 
1590
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
1591
        
 
1592
# check special-1 success:      1
 
1593
UPDATE t1 SET f_charbig = '';
 
1594
        
 
1595
# check special-2 success:      1
 
1596
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
1597
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1598
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
1599
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1600
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1601
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1602
'just inserted' FROM t0_template
 
1603
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1604
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
1605
BEGIN
 
1606
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1607
f_charbig = 'updated by trigger'
 
1608
      WHERE f_int1 = new.f_int1;
 
1609
END|
 
1610
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1611
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1612
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1613
        
 
1614
# check trigger-1 success:      1
 
1615
DROP TRIGGER trg_1;
 
1616
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1617
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1618
f_charbig = 'just inserted'
 
1619
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1620
DELETE FROM t0_aux
 
1621
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1622
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1623
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1624
'just inserted' FROM t0_template
 
1625
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1626
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
1627
BEGIN
 
1628
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1629
f_charbig = 'updated by trigger'
 
1630
      WHERE f_int1 = new.f_int1;
 
1631
END|
 
1632
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1633
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
1634
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1635
        
 
1636
# check trigger-2 success:      1
 
1637
DROP TRIGGER trg_1;
 
1638
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1639
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1640
f_charbig = 'just inserted'
 
1641
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1642
DELETE FROM t0_aux
 
1643
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1644
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1645
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1646
'just inserted' FROM t0_template
 
1647
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1648
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1649
BEGIN
 
1650
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1651
f_charbig = 'updated by trigger'
 
1652
      WHERE f_int1 = new.f_int1;
 
1653
END|
 
1654
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1655
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1656
        
 
1657
# check trigger-3 success:      1
 
1658
DROP TRIGGER trg_1;
 
1659
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1660
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1661
f_charbig = 'just inserted'
 
1662
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1663
DELETE FROM t0_aux
 
1664
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1665
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1666
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1667
'just inserted' FROM t0_template
 
1668
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1669
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
1670
BEGIN
 
1671
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1672
f_charbig = 'updated by trigger'
 
1673
      WHERE f_int1 = - old.f_int1;
 
1674
END|
 
1675
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1676
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1677
        
 
1678
# check trigger-4 success:      1
 
1679
DROP TRIGGER trg_1;
 
1680
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1681
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1682
f_charbig = 'just inserted'
 
1683
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1684
DELETE FROM t0_aux
 
1685
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1686
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1687
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1688
'just inserted' FROM t0_template
 
1689
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1690
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1691
BEGIN
 
1692
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1693
f_charbig = 'updated by trigger'
 
1694
      WHERE f_int1 = new.f_int1;
 
1695
END|
 
1696
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1697
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1698
        
 
1699
# check trigger-5 success:      1
 
1700
DROP TRIGGER trg_1;
 
1701
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1702
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1703
f_charbig = 'just inserted'
 
1704
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1705
DELETE FROM t0_aux
 
1706
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1707
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1708
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1709
'just inserted' FROM t0_template
 
1710
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1711
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
1712
BEGIN
 
1713
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1714
f_charbig = 'updated by trigger'
 
1715
      WHERE f_int1 = - old.f_int1;
 
1716
END|
 
1717
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
1718
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1719
        
 
1720
# check trigger-6 success:      1
 
1721
DROP TRIGGER trg_1;
 
1722
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1723
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1724
f_charbig = 'just inserted'
 
1725
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1726
DELETE FROM t0_aux
 
1727
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1728
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1729
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1730
'just inserted' FROM t0_template
 
1731
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1732
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
1733
BEGIN
 
1734
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1735
f_charbig = 'updated by trigger'
 
1736
      WHERE f_int1 = - old.f_int1;
 
1737
END|
 
1738
DELETE FROM t0_aux
 
1739
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1740
        
 
1741
# check trigger-7 success:      1
 
1742
DROP TRIGGER trg_1;
 
1743
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1744
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1745
f_charbig = 'just inserted'
 
1746
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1747
DELETE FROM t0_aux
 
1748
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1749
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1750
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
1751
'just inserted' FROM t0_template
 
1752
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1753
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
1754
BEGIN
 
1755
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
1756
f_charbig = 'updated by trigger'
 
1757
      WHERE f_int1 = - old.f_int1;
 
1758
END|
 
1759
DELETE FROM t0_aux
 
1760
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
1761
        
 
1762
# check trigger-8 success:      1
 
1763
DROP TRIGGER trg_1;
 
1764
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1765
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1766
f_charbig = 'just inserted'
 
1767
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
1768
DELETE FROM t0_aux
 
1769
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1770
DELETE FROM t1
 
1771
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
1772
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1773
BEGIN
 
1774
SET new.f_int1 = old.f_int1 + @max_row,
 
1775
new.f_int2 = old.f_int2 - @max_row,
 
1776
new.f_charbig = '####updated per update trigger####';
 
1777
END|
 
1778
UPDATE t1
 
1779
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1780
f_charbig = '####updated per update statement itself####';
 
1781
        
 
1782
# check trigger-9 success:      1
 
1783
DROP TRIGGER trg_2;
 
1784
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1785
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1786
f_charbig = CONCAT('===',f_char1,'===');
 
1787
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
1788
BEGIN
 
1789
SET new.f_int1 = new.f_int1 + @max_row,
 
1790
new.f_int2 = new.f_int2 - @max_row,
 
1791
new.f_charbig = '####updated per update trigger####';
 
1792
END|
 
1793
UPDATE t1
 
1794
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
1795
f_charbig = '####updated per update statement itself####';
 
1796
        
 
1797
# check trigger-10 success:     1
 
1798
DROP TRIGGER trg_2;
 
1799
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
1800
f_int2 = CAST(f_char1 AS SIGNED INT),
 
1801
f_charbig = CONCAT('===',f_char1,'===');
 
1802
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1803
BEGIN
 
1804
SET new.f_int1 = @my_max1 + @counter,
 
1805
new.f_int2 = @my_min2 - @counter,
 
1806
new.f_charbig = '####updated per insert trigger####';
 
1807
SET @counter = @counter + 1;
 
1808
END|
 
1809
SET @counter = 1;
 
1810
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1811
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1812
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1813
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1814
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1815
ORDER BY f_int1;
 
1816
DROP TRIGGER trg_3;
 
1817
        
 
1818
# check trigger-11 success:     1
 
1819
DELETE FROM t1
 
1820
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1821
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1822
AND f_charbig = '####updated per insert trigger####';
 
1823
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
1824
BEGIN
 
1825
SET new.f_int1 = @my_max1 + @counter,
 
1826
new.f_int2 = @my_min2 - @counter,
 
1827
new.f_charbig = '####updated per insert trigger####';
 
1828
SET @counter = @counter + 1;
 
1829
END|
 
1830
SET @counter = 1;
 
1831
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
1832
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
1833
SELECT CAST(f_int1 AS CHAR),
 
1834
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
1835
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
1836
ORDER BY f_int1;
 
1837
DROP TRIGGER trg_3;
 
1838
        
 
1839
# check trigger-12 success:     1
 
1840
DELETE FROM t1
 
1841
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
1842
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
1843
AND f_charbig = '####updated per insert trigger####';
 
1844
ANALYZE  TABLE t1;
 
1845
Table   Op      Msg_type        Msg_text
 
1846
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
1847
CHECK    TABLE t1 EXTENDED;
 
1848
Table   Op      Msg_type        Msg_text
 
1849
test.t1 check   note    The storage engine for the table doesn't support check
 
1850
CHECKSUM TABLE t1 EXTENDED;
 
1851
Table   Checksum
 
1852
test.t1 <some_value>
 
1853
OPTIMIZE TABLE t1;
 
1854
Table   Op      Msg_type        Msg_text
 
1855
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
1856
# check layout success:    1
 
1857
REPAIR   TABLE t1 EXTENDED;
 
1858
Table   Op      Msg_type        Msg_text
 
1859
test.t1 repair  note    The storage engine for the table doesn't support repair
 
1860
# check layout success:    1
 
1861
TRUNCATE t1;
 
1862
        
 
1863
# check TRUNCATE success:       1
 
1864
# check layout success:    1
 
1865
# End usability test (include/partition_check.inc)
 
1866
DROP TABLE t1;
 
1867
CREATE TABLE t1 (
 
1868
f_int1 INTEGER,
 
1869
f_int2 INTEGER,
 
1870
f_char1 CHAR(20),
 
1871
f_char2 CHAR(20),
 
1872
f_charbig VARCHAR(1000)
 
1873
)
 
1874
PARTITION BY HASH(f_int1)
 
1875
( PARTITION part1                         ,
 
1876
PARTITION part2 STORAGE ENGINE = 'ndbcluster'
 
1877
);
 
1878
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
1879
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
1880
# Start usability test (include/partition_check.inc)
 
1881
create_command
 
1882
SHOW CREATE TABLE t1;
 
1883
Table   Create Table
 
1884
t1      CREATE TABLE `t1` (
 
1885
  `f_int1` int(11) DEFAULT NULL,
 
1886
  `f_int2` int(11) DEFAULT NULL,
 
1887
  `f_char1` char(20) DEFAULT NULL,
 
1888
  `f_char2` char(20) DEFAULT NULL,
 
1889
  `f_charbig` varchar(1000) DEFAULT NULL
 
1890
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY HASH (f_int1) (PARTITION part1  ENGINE = ndbcluster, PARTITION part2  ENGINE = ndbcluster)
 
1891
 
 
1892
# check prerequisites-1 success:    1
 
1893
# check COUNT(*) success:    1
 
1894
# check MIN/MAX(f_int1) success:    1
 
1895
# check MIN/MAX(f_int2) success:    1
 
1896
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1897
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
1898
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
1899
WHERE f_int1 IN (2,3);
 
1900
# check prerequisites-3 success:    1
 
1901
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
1902
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
1903
# check read via f_int1 success: 1
 
1904
# check read via f_int2 success: 1
 
1905
        
 
1906
# check multiple-1 success:     1
 
1907
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
1908
        
 
1909
# check multiple-2 success:     1
 
1910
INSERT INTO t1 SELECT * FROM t0_template
 
1911
WHERE MOD(f_int1,3) = 0;
 
1912
        
 
1913
# check multiple-3 success:     1
 
1914
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
1915
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
1916
AND @max_row_div2 + @max_row_div4;
 
1917
        
 
1918
# check multiple-4 success:     1
 
1919
DELETE FROM t1
 
1920
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
1921
AND @max_row_div2 + @max_row_div4 + @max_row;
 
1922
        
 
1923
# check multiple-5 success:     1
 
1924
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
1925
INSERT INTO t1
 
1926
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1927
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1928
f_charbig = '#SINGLE#';
 
1929
        
 
1930
# check single-1 success:       1
 
1931
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
1932
INSERT INTO t1
 
1933
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
1934
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
1935
f_charbig = '#SINGLE#';
 
1936
        
 
1937
# check single-2 success:       1
 
1938
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
1939
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
1940
UPDATE t1 SET f_int1 = @cur_value2
 
1941
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
1942
        
 
1943
# check single-3 success:       1
 
1944
SET @cur_value1= -1;
 
1945
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
1946
UPDATE t1 SET f_int1 = @cur_value1
 
1947
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
1948
        
 
1949
# check single-4 success:       1
 
1950
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
1951
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
1952
        
 
1953
# check single-5 success:       1
 
1954
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
1955
        
 
1956
# check single-6 success:       1
 
1957
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
1958
        
 
1959
# check single-7 success:       1
 
1960
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
1961
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
1962
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
1963
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
1964
f_charbig = '#NULL#';
 
1965
INSERT INTO t1
 
1966
SET f_int1 = NULL , f_int2 = -@max_row,
 
1967
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
1968
f_charbig = '#NULL#';
 
1969
# check null success:    1
 
1970
        
 
1971
# check null-1 success:         1
 
1972
UPDATE t1 SET f_int1 = -@max_row
 
1973
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1974
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1975
        
 
1976
# check null-2 success:         1
 
1977
UPDATE t1 SET f_int1 = NULL
 
1978
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1979
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1980
        
 
1981
# check null-3 success:         1
 
1982
DELETE FROM t1
 
1983
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
1984
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
1985
        
 
1986
# check null-4 success:         1
 
1987
DELETE FROM t1
 
1988
WHERE f_int1 = 0 AND f_int2 = 0
 
1989
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
1990
AND f_charbig = '#NULL#';
 
1991
SET AUTOCOMMIT= 0;
 
1992
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
1993
SELECT f_int1, f_int1, '', '', 'was inserted'
 
1994
FROM t0_template source_tab
 
1995
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
1996
        
 
1997
# check transactions-1 success:         1
 
1998
COMMIT WORK;
 
1999
        
 
2000
# check transactions-2 success:         1
 
2001
ROLLBACK WORK;
 
2002
        
 
2003
# check transactions-3 success:         1
 
2004
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2005
COMMIT WORK;
 
2006
ROLLBACK WORK;
 
2007
        
 
2008
# check transactions-4 success:         1
 
2009
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2010
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2011
FROM t0_template source_tab
 
2012
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2013
        
 
2014
# check transactions-5 success:         1
 
2015
ROLLBACK WORK;
 
2016
        
 
2017
# check transactions-6 success:         1
 
2018
# INFO: Storage engine used for t1 seems to be transactional.
 
2019
COMMIT;
 
2020
        
 
2021
# check transactions-7 success:         1
 
2022
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2023
COMMIT WORK;
 
2024
SET @@session.sql_mode = 'traditional';
 
2025
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2026
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2027
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2028
'', '', 'was inserted' FROM t0_template
 
2029
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2030
ERROR 22012: Division by 0
 
2031
COMMIT;
 
2032
        
 
2033
# check transactions-8 success:         1
 
2034
# INFO: Storage engine used for t1 seems to be unable to revert
 
2035
#       changes made by the failing statement.
 
2036
SET @@session.sql_mode = '';
 
2037
SET AUTOCOMMIT= 1;
 
2038
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2039
COMMIT WORK;
 
2040
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2041
        
 
2042
# check special-1 success:      1
 
2043
UPDATE t1 SET f_charbig = '';
 
2044
        
 
2045
# check special-2 success:      1
 
2046
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2047
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2048
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2049
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2050
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2051
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2052
'just inserted' FROM t0_template
 
2053
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2054
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2055
BEGIN
 
2056
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2057
f_charbig = 'updated by trigger'
 
2058
      WHERE f_int1 = new.f_int1;
 
2059
END|
 
2060
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2061
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2062
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2063
        
 
2064
# check trigger-1 success:      1
 
2065
DROP TRIGGER trg_1;
 
2066
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2067
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2068
f_charbig = 'just inserted'
 
2069
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2070
DELETE FROM t0_aux
 
2071
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2072
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2073
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2074
'just inserted' FROM t0_template
 
2075
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2076
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2077
BEGIN
 
2078
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2079
f_charbig = 'updated by trigger'
 
2080
      WHERE f_int1 = new.f_int1;
 
2081
END|
 
2082
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2083
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2084
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2085
        
 
2086
# check trigger-2 success:      1
 
2087
DROP TRIGGER trg_1;
 
2088
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2089
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2090
f_charbig = 'just inserted'
 
2091
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2092
DELETE FROM t0_aux
 
2093
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2094
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2095
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2096
'just inserted' FROM t0_template
 
2097
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2098
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2099
BEGIN
 
2100
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2101
f_charbig = 'updated by trigger'
 
2102
      WHERE f_int1 = new.f_int1;
 
2103
END|
 
2104
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2105
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2106
        
 
2107
# check trigger-3 success:      1
 
2108
DROP TRIGGER trg_1;
 
2109
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2110
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2111
f_charbig = 'just inserted'
 
2112
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2113
DELETE FROM t0_aux
 
2114
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2115
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2116
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2117
'just inserted' FROM t0_template
 
2118
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2119
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2120
BEGIN
 
2121
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2122
f_charbig = 'updated by trigger'
 
2123
      WHERE f_int1 = - old.f_int1;
 
2124
END|
 
2125
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2126
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2127
        
 
2128
# check trigger-4 success:      1
 
2129
DROP TRIGGER trg_1;
 
2130
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2131
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2132
f_charbig = 'just inserted'
 
2133
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2134
DELETE FROM t0_aux
 
2135
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2136
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2137
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2138
'just inserted' FROM t0_template
 
2139
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2140
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2141
BEGIN
 
2142
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2143
f_charbig = 'updated by trigger'
 
2144
      WHERE f_int1 = new.f_int1;
 
2145
END|
 
2146
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2147
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2148
        
 
2149
# check trigger-5 success:      1
 
2150
DROP TRIGGER trg_1;
 
2151
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2152
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2153
f_charbig = 'just inserted'
 
2154
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2155
DELETE FROM t0_aux
 
2156
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2157
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2158
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2159
'just inserted' FROM t0_template
 
2160
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2161
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2162
BEGIN
 
2163
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2164
f_charbig = 'updated by trigger'
 
2165
      WHERE f_int1 = - old.f_int1;
 
2166
END|
 
2167
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2168
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2169
        
 
2170
# check trigger-6 success:      1
 
2171
DROP TRIGGER trg_1;
 
2172
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2173
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2174
f_charbig = 'just inserted'
 
2175
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2176
DELETE FROM t0_aux
 
2177
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2178
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2179
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2180
'just inserted' FROM t0_template
 
2181
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2182
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2183
BEGIN
 
2184
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2185
f_charbig = 'updated by trigger'
 
2186
      WHERE f_int1 = - old.f_int1;
 
2187
END|
 
2188
DELETE FROM t0_aux
 
2189
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2190
        
 
2191
# check trigger-7 success:      1
 
2192
DROP TRIGGER trg_1;
 
2193
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2194
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2195
f_charbig = 'just inserted'
 
2196
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2197
DELETE FROM t0_aux
 
2198
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2199
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2200
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2201
'just inserted' FROM t0_template
 
2202
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2203
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2204
BEGIN
 
2205
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2206
f_charbig = 'updated by trigger'
 
2207
      WHERE f_int1 = - old.f_int1;
 
2208
END|
 
2209
DELETE FROM t0_aux
 
2210
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2211
        
 
2212
# check trigger-8 success:      1
 
2213
DROP TRIGGER trg_1;
 
2214
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2215
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2216
f_charbig = 'just inserted'
 
2217
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2218
DELETE FROM t0_aux
 
2219
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2220
DELETE FROM t1
 
2221
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2222
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2223
BEGIN
 
2224
SET new.f_int1 = old.f_int1 + @max_row,
 
2225
new.f_int2 = old.f_int2 - @max_row,
 
2226
new.f_charbig = '####updated per update trigger####';
 
2227
END|
 
2228
UPDATE t1
 
2229
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2230
f_charbig = '####updated per update statement itself####';
 
2231
        
 
2232
# check trigger-9 success:      1
 
2233
DROP TRIGGER trg_2;
 
2234
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2235
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2236
f_charbig = CONCAT('===',f_char1,'===');
 
2237
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2238
BEGIN
 
2239
SET new.f_int1 = new.f_int1 + @max_row,
 
2240
new.f_int2 = new.f_int2 - @max_row,
 
2241
new.f_charbig = '####updated per update trigger####';
 
2242
END|
 
2243
UPDATE t1
 
2244
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2245
f_charbig = '####updated per update statement itself####';
 
2246
        
 
2247
# check trigger-10 success:     1
 
2248
DROP TRIGGER trg_2;
 
2249
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2250
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2251
f_charbig = CONCAT('===',f_char1,'===');
 
2252
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2253
BEGIN
 
2254
SET new.f_int1 = @my_max1 + @counter,
 
2255
new.f_int2 = @my_min2 - @counter,
 
2256
new.f_charbig = '####updated per insert trigger####';
 
2257
SET @counter = @counter + 1;
 
2258
END|
 
2259
SET @counter = 1;
 
2260
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2261
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2262
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2263
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2264
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2265
ORDER BY f_int1;
 
2266
DROP TRIGGER trg_3;
 
2267
        
 
2268
# check trigger-11 success:     1
 
2269
DELETE FROM t1
 
2270
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2271
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2272
AND f_charbig = '####updated per insert trigger####';
 
2273
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2274
BEGIN
 
2275
SET new.f_int1 = @my_max1 + @counter,
 
2276
new.f_int2 = @my_min2 - @counter,
 
2277
new.f_charbig = '####updated per insert trigger####';
 
2278
SET @counter = @counter + 1;
 
2279
END|
 
2280
SET @counter = 1;
 
2281
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2282
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2283
SELECT CAST(f_int1 AS CHAR),
 
2284
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2285
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2286
ORDER BY f_int1;
 
2287
DROP TRIGGER trg_3;
 
2288
        
 
2289
# check trigger-12 success:     1
 
2290
DELETE FROM t1
 
2291
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2292
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2293
AND f_charbig = '####updated per insert trigger####';
 
2294
ANALYZE  TABLE t1;
 
2295
Table   Op      Msg_type        Msg_text
 
2296
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
2297
CHECK    TABLE t1 EXTENDED;
 
2298
Table   Op      Msg_type        Msg_text
 
2299
test.t1 check   note    The storage engine for the table doesn't support check
 
2300
CHECKSUM TABLE t1 EXTENDED;
 
2301
Table   Checksum
 
2302
test.t1 <some_value>
 
2303
OPTIMIZE TABLE t1;
 
2304
Table   Op      Msg_type        Msg_text
 
2305
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
2306
# check layout success:    1
 
2307
REPAIR   TABLE t1 EXTENDED;
 
2308
Table   Op      Msg_type        Msg_text
 
2309
test.t1 repair  note    The storage engine for the table doesn't support repair
 
2310
# check layout success:    1
 
2311
TRUNCATE t1;
 
2312
        
 
2313
# check TRUNCATE success:       1
 
2314
# check layout success:    1
 
2315
# End usability test (include/partition_check.inc)
 
2316
DROP TABLE t1;
 
2317
CREATE TABLE t1 (
 
2318
f_int1 INTEGER,
 
2319
f_int2 INTEGER,
 
2320
f_char1 CHAR(20),
 
2321
f_char2 CHAR(20),
 
2322
f_charbig VARCHAR(1000)
 
2323
)
 
2324
PARTITION BY RANGE(f_int1)
 
2325
SUBPARTITION BY HASH(f_int1)
 
2326
( PARTITION part1 VALUES LESS THAN (10)
 
2327
(SUBPARTITION subpart11,
 
2328
SUBPARTITION subpart12 STORAGE ENGINE = 'ndbcluster'),
 
2329
PARTITION part2 VALUES LESS THAN (2147483646)
 
2330
(SUBPARTITION subpart21 STORAGE ENGINE = 'ndbcluster',
 
2331
SUBPARTITION subpart22 STORAGE ENGINE = 'ndbcluster')
 
2332
);
 
2333
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2334
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
2335
# Start usability test (include/partition_check.inc)
 
2336
create_command
 
2337
SHOW CREATE TABLE t1;
 
2338
Table   Create Table
 
2339
t1      CREATE TABLE `t1` (
 
2340
  `f_int1` int(11) DEFAULT NULL,
 
2341
  `f_int2` int(11) DEFAULT NULL,
 
2342
  `f_char1` char(20) DEFAULT NULL,
 
2343
  `f_char2` char(20) DEFAULT NULL,
 
2344
  `f_charbig` varchar(1000) DEFAULT NULL
 
2345
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int1) (PARTITION part1 VALUES LESS THAN (10)  (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster), PARTITION part2 VALUES LESS THAN (2147483646)  (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster))
 
2346
 
 
2347
# check prerequisites-1 success:    1
 
2348
# check COUNT(*) success:    1
 
2349
# check MIN/MAX(f_int1) success:    1
 
2350
# check MIN/MAX(f_int2) success:    1
 
2351
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2352
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2353
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2354
WHERE f_int1 IN (2,3);
 
2355
# check prerequisites-3 success:    1
 
2356
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2357
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
2358
# check read via f_int1 success: 1
 
2359
# check read via f_int2 success: 1
 
2360
        
 
2361
# check multiple-1 success:     1
 
2362
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2363
        
 
2364
# check multiple-2 success:     1
 
2365
INSERT INTO t1 SELECT * FROM t0_template
 
2366
WHERE MOD(f_int1,3) = 0;
 
2367
        
 
2368
# check multiple-3 success:     1
 
2369
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2370
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2371
AND @max_row_div2 + @max_row_div4;
 
2372
        
 
2373
# check multiple-4 success:     1
 
2374
DELETE FROM t1
 
2375
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2376
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2377
        
 
2378
# check multiple-5 success:     1
 
2379
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2380
INSERT INTO t1
 
2381
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2382
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2383
f_charbig = '#SINGLE#';
 
2384
        
 
2385
# check single-1 success:       1
 
2386
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2387
INSERT INTO t1
 
2388
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2389
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2390
f_charbig = '#SINGLE#';
 
2391
        
 
2392
# check single-2 success:       1
 
2393
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2394
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2395
UPDATE t1 SET f_int1 = @cur_value2
 
2396
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2397
        
 
2398
# check single-3 success:       1
 
2399
SET @cur_value1= -1;
 
2400
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2401
UPDATE t1 SET f_int1 = @cur_value1
 
2402
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2403
        
 
2404
# check single-4 success:       1
 
2405
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2406
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2407
        
 
2408
# check single-5 success:       1
 
2409
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2410
        
 
2411
# check single-6 success:       1
 
2412
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2413
ERROR HY000: Table has no partition for value 2147483647
 
2414
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2415
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2416
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2417
f_charbig = '#NULL#';
 
2418
INSERT INTO t1
 
2419
SET f_int1 = NULL , f_int2 = -@max_row,
 
2420
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2421
f_charbig = '#NULL#';
 
2422
# check null success:    1
 
2423
        
 
2424
# check null-1 success:         1
 
2425
UPDATE t1 SET f_int1 = -@max_row
 
2426
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2427
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2428
        
 
2429
# check null-2 success:         1
 
2430
UPDATE t1 SET f_int1 = NULL
 
2431
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2432
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2433
        
 
2434
# check null-3 success:         1
 
2435
DELETE FROM t1
 
2436
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2437
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2438
        
 
2439
# check null-4 success:         1
 
2440
DELETE FROM t1
 
2441
WHERE f_int1 = 0 AND f_int2 = 0
 
2442
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2443
AND f_charbig = '#NULL#';
 
2444
SET AUTOCOMMIT= 0;
 
2445
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2446
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2447
FROM t0_template source_tab
 
2448
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2449
        
 
2450
# check transactions-1 success:         1
 
2451
COMMIT WORK;
 
2452
        
 
2453
# check transactions-2 success:         1
 
2454
ROLLBACK WORK;
 
2455
        
 
2456
# check transactions-3 success:         1
 
2457
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2458
COMMIT WORK;
 
2459
ROLLBACK WORK;
 
2460
        
 
2461
# check transactions-4 success:         1
 
2462
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2463
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2464
FROM t0_template source_tab
 
2465
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2466
        
 
2467
# check transactions-5 success:         1
 
2468
ROLLBACK WORK;
 
2469
        
 
2470
# check transactions-6 success:         1
 
2471
# INFO: Storage engine used for t1 seems to be transactional.
 
2472
COMMIT;
 
2473
        
 
2474
# check transactions-7 success:         1
 
2475
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2476
COMMIT WORK;
 
2477
SET @@session.sql_mode = 'traditional';
 
2478
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2479
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2480
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2481
'', '', 'was inserted' FROM t0_template
 
2482
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2483
ERROR 22012: Division by 0
 
2484
COMMIT;
 
2485
        
 
2486
# check transactions-8 success:         1
 
2487
# INFO: Storage engine used for t1 seems to be unable to revert
 
2488
#       changes made by the failing statement.
 
2489
SET @@session.sql_mode = '';
 
2490
SET AUTOCOMMIT= 1;
 
2491
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2492
COMMIT WORK;
 
2493
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2494
        
 
2495
# check special-1 success:      1
 
2496
UPDATE t1 SET f_charbig = '';
 
2497
        
 
2498
# check special-2 success:      1
 
2499
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2500
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2501
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2502
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2503
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2504
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2505
'just inserted' FROM t0_template
 
2506
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2507
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2508
BEGIN
 
2509
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2510
f_charbig = 'updated by trigger'
 
2511
      WHERE f_int1 = new.f_int1;
 
2512
END|
 
2513
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2514
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2515
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2516
        
 
2517
# check trigger-1 success:      1
 
2518
DROP TRIGGER trg_1;
 
2519
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2520
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2521
f_charbig = 'just inserted'
 
2522
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2523
DELETE FROM t0_aux
 
2524
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2525
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2526
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2527
'just inserted' FROM t0_template
 
2528
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2529
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2530
BEGIN
 
2531
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2532
f_charbig = 'updated by trigger'
 
2533
      WHERE f_int1 = new.f_int1;
 
2534
END|
 
2535
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2536
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2537
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2538
        
 
2539
# check trigger-2 success:      1
 
2540
DROP TRIGGER trg_1;
 
2541
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2542
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2543
f_charbig = 'just inserted'
 
2544
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2545
DELETE FROM t0_aux
 
2546
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2547
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2548
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2549
'just inserted' FROM t0_template
 
2550
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2551
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2552
BEGIN
 
2553
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2554
f_charbig = 'updated by trigger'
 
2555
      WHERE f_int1 = new.f_int1;
 
2556
END|
 
2557
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2558
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2559
        
 
2560
# check trigger-3 success:      1
 
2561
DROP TRIGGER trg_1;
 
2562
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2563
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2564
f_charbig = 'just inserted'
 
2565
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2566
DELETE FROM t0_aux
 
2567
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2568
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2569
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2570
'just inserted' FROM t0_template
 
2571
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2572
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
2573
BEGIN
 
2574
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2575
f_charbig = 'updated by trigger'
 
2576
      WHERE f_int1 = - old.f_int1;
 
2577
END|
 
2578
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2579
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2580
        
 
2581
# check trigger-4 success:      1
 
2582
DROP TRIGGER trg_1;
 
2583
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2584
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2585
f_charbig = 'just inserted'
 
2586
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2587
DELETE FROM t0_aux
 
2588
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2589
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2590
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2591
'just inserted' FROM t0_template
 
2592
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2593
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2594
BEGIN
 
2595
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2596
f_charbig = 'updated by trigger'
 
2597
      WHERE f_int1 = new.f_int1;
 
2598
END|
 
2599
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2600
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2601
        
 
2602
# check trigger-5 success:      1
 
2603
DROP TRIGGER trg_1;
 
2604
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2605
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2606
f_charbig = 'just inserted'
 
2607
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2608
DELETE FROM t0_aux
 
2609
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2610
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2611
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2612
'just inserted' FROM t0_template
 
2613
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2614
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
2615
BEGIN
 
2616
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2617
f_charbig = 'updated by trigger'
 
2618
      WHERE f_int1 = - old.f_int1;
 
2619
END|
 
2620
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
2621
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2622
        
 
2623
# check trigger-6 success:      1
 
2624
DROP TRIGGER trg_1;
 
2625
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2626
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2627
f_charbig = 'just inserted'
 
2628
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2629
DELETE FROM t0_aux
 
2630
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2631
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2632
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2633
'just inserted' FROM t0_template
 
2634
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2635
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
2636
BEGIN
 
2637
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2638
f_charbig = 'updated by trigger'
 
2639
      WHERE f_int1 = - old.f_int1;
 
2640
END|
 
2641
DELETE FROM t0_aux
 
2642
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2643
        
 
2644
# check trigger-7 success:      1
 
2645
DROP TRIGGER trg_1;
 
2646
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2647
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2648
f_charbig = 'just inserted'
 
2649
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2650
DELETE FROM t0_aux
 
2651
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2652
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2653
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2654
'just inserted' FROM t0_template
 
2655
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2656
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
2657
BEGIN
 
2658
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2659
f_charbig = 'updated by trigger'
 
2660
      WHERE f_int1 = - old.f_int1;
 
2661
END|
 
2662
DELETE FROM t0_aux
 
2663
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
2664
        
 
2665
# check trigger-8 success:      1
 
2666
DROP TRIGGER trg_1;
 
2667
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2668
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2669
f_charbig = 'just inserted'
 
2670
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2671
DELETE FROM t0_aux
 
2672
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2673
DELETE FROM t1
 
2674
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2675
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2676
BEGIN
 
2677
SET new.f_int1 = old.f_int1 + @max_row,
 
2678
new.f_int2 = old.f_int2 - @max_row,
 
2679
new.f_charbig = '####updated per update trigger####';
 
2680
END|
 
2681
UPDATE t1
 
2682
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2683
f_charbig = '####updated per update statement itself####';
 
2684
        
 
2685
# check trigger-9 success:      1
 
2686
DROP TRIGGER trg_2;
 
2687
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2688
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2689
f_charbig = CONCAT('===',f_char1,'===');
 
2690
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
2691
BEGIN
 
2692
SET new.f_int1 = new.f_int1 + @max_row,
 
2693
new.f_int2 = new.f_int2 - @max_row,
 
2694
new.f_charbig = '####updated per update trigger####';
 
2695
END|
 
2696
UPDATE t1
 
2697
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
2698
f_charbig = '####updated per update statement itself####';
 
2699
        
 
2700
# check trigger-10 success:     1
 
2701
DROP TRIGGER trg_2;
 
2702
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2703
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2704
f_charbig = CONCAT('===',f_char1,'===');
 
2705
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2706
BEGIN
 
2707
SET new.f_int1 = @my_max1 + @counter,
 
2708
new.f_int2 = @my_min2 - @counter,
 
2709
new.f_charbig = '####updated per insert trigger####';
 
2710
SET @counter = @counter + 1;
 
2711
END|
 
2712
SET @counter = 1;
 
2713
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2714
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2715
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2716
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2717
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2718
ORDER BY f_int1;
 
2719
DROP TRIGGER trg_3;
 
2720
        
 
2721
# check trigger-11 success:     1
 
2722
DELETE FROM t1
 
2723
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2724
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2725
AND f_charbig = '####updated per insert trigger####';
 
2726
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
2727
BEGIN
 
2728
SET new.f_int1 = @my_max1 + @counter,
 
2729
new.f_int2 = @my_min2 - @counter,
 
2730
new.f_charbig = '####updated per insert trigger####';
 
2731
SET @counter = @counter + 1;
 
2732
END|
 
2733
SET @counter = 1;
 
2734
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
2735
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
2736
SELECT CAST(f_int1 AS CHAR),
 
2737
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
2738
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
2739
ORDER BY f_int1;
 
2740
DROP TRIGGER trg_3;
 
2741
        
 
2742
# check trigger-12 success:     1
 
2743
DELETE FROM t1
 
2744
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
2745
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
2746
AND f_charbig = '####updated per insert trigger####';
 
2747
ANALYZE  TABLE t1;
 
2748
Table   Op      Msg_type        Msg_text
 
2749
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
2750
CHECK    TABLE t1 EXTENDED;
 
2751
Table   Op      Msg_type        Msg_text
 
2752
test.t1 check   note    The storage engine for the table doesn't support check
 
2753
CHECKSUM TABLE t1 EXTENDED;
 
2754
Table   Checksum
 
2755
test.t1 <some_value>
 
2756
OPTIMIZE TABLE t1;
 
2757
Table   Op      Msg_type        Msg_text
 
2758
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
2759
# check layout success:    1
 
2760
REPAIR   TABLE t1 EXTENDED;
 
2761
Table   Op      Msg_type        Msg_text
 
2762
test.t1 repair  note    The storage engine for the table doesn't support repair
 
2763
# check layout success:    1
 
2764
TRUNCATE t1;
 
2765
        
 
2766
# check TRUNCATE success:       1
 
2767
# check layout success:    1
 
2768
# End usability test (include/partition_check.inc)
 
2769
DROP TABLE t1;
 
2770
CREATE TABLE t1 (
 
2771
f_int1 INTEGER,
 
2772
f_int2 INTEGER,
 
2773
f_char1 CHAR(20),
 
2774
f_char2 CHAR(20),
 
2775
f_charbig VARCHAR(1000)
 
2776
)
 
2777
PARTITION BY RANGE(f_int1)
 
2778
SUBPARTITION BY HASH(f_int1)
 
2779
( PARTITION part1 VALUES LESS THAN (10)
 
2780
(SUBPARTITION subpart11 STORAGE ENGINE = 'ndbcluster',
 
2781
SUBPARTITION subpart12 STORAGE ENGINE = 'ndbcluster'),
 
2782
PARTITION part2 VALUES LESS THAN (2147483646)
 
2783
(SUBPARTITION subpart21,
 
2784
SUBPARTITION subpart22 )
 
2785
);
 
2786
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2787
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
2788
# Start usability test (include/partition_check.inc)
 
2789
create_command
 
2790
SHOW CREATE TABLE t1;
 
2791
Table   Create Table
 
2792
t1      CREATE TABLE `t1` (
 
2793
  `f_int1` int(11) DEFAULT NULL,
 
2794
  `f_int2` int(11) DEFAULT NULL,
 
2795
  `f_char1` char(20) DEFAULT NULL,
 
2796
  `f_char2` char(20) DEFAULT NULL,
 
2797
  `f_charbig` varchar(1000) DEFAULT NULL
 
2798
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int1) (PARTITION part1 VALUES LESS THAN (10)  (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster), PARTITION part2 VALUES LESS THAN (2147483646)  (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster))
 
2799
 
 
2800
# check prerequisites-1 success:    1
 
2801
# check COUNT(*) success:    1
 
2802
# check MIN/MAX(f_int1) success:    1
 
2803
# check MIN/MAX(f_int2) success:    1
 
2804
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2805
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
2806
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
2807
WHERE f_int1 IN (2,3);
 
2808
# check prerequisites-3 success:    1
 
2809
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
2810
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
2811
# check read via f_int1 success: 1
 
2812
# check read via f_int2 success: 1
 
2813
        
 
2814
# check multiple-1 success:     1
 
2815
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
2816
        
 
2817
# check multiple-2 success:     1
 
2818
INSERT INTO t1 SELECT * FROM t0_template
 
2819
WHERE MOD(f_int1,3) = 0;
 
2820
        
 
2821
# check multiple-3 success:     1
 
2822
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
2823
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
2824
AND @max_row_div2 + @max_row_div4;
 
2825
        
 
2826
# check multiple-4 success:     1
 
2827
DELETE FROM t1
 
2828
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
2829
AND @max_row_div2 + @max_row_div4 + @max_row;
 
2830
        
 
2831
# check multiple-5 success:     1
 
2832
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
2833
INSERT INTO t1
 
2834
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2835
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2836
f_charbig = '#SINGLE#';
 
2837
        
 
2838
# check single-1 success:       1
 
2839
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
2840
INSERT INTO t1
 
2841
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
2842
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
2843
f_charbig = '#SINGLE#';
 
2844
        
 
2845
# check single-2 success:       1
 
2846
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
2847
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
2848
UPDATE t1 SET f_int1 = @cur_value2
 
2849
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
2850
        
 
2851
# check single-3 success:       1
 
2852
SET @cur_value1= -1;
 
2853
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
2854
UPDATE t1 SET f_int1 = @cur_value1
 
2855
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
2856
        
 
2857
# check single-4 success:       1
 
2858
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
2859
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
2860
        
 
2861
# check single-5 success:       1
 
2862
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
2863
        
 
2864
# check single-6 success:       1
 
2865
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
2866
ERROR HY000: Table has no partition for value 2147483647
 
2867
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
2868
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
2869
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
2870
f_charbig = '#NULL#';
 
2871
INSERT INTO t1
 
2872
SET f_int1 = NULL , f_int2 = -@max_row,
 
2873
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
2874
f_charbig = '#NULL#';
 
2875
# check null success:    1
 
2876
        
 
2877
# check null-1 success:         1
 
2878
UPDATE t1 SET f_int1 = -@max_row
 
2879
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2880
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2881
        
 
2882
# check null-2 success:         1
 
2883
UPDATE t1 SET f_int1 = NULL
 
2884
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2885
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2886
        
 
2887
# check null-3 success:         1
 
2888
DELETE FROM t1
 
2889
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
2890
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
2891
        
 
2892
# check null-4 success:         1
 
2893
DELETE FROM t1
 
2894
WHERE f_int1 = 0 AND f_int2 = 0
 
2895
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
2896
AND f_charbig = '#NULL#';
 
2897
SET AUTOCOMMIT= 0;
 
2898
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2899
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2900
FROM t0_template source_tab
 
2901
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2902
        
 
2903
# check transactions-1 success:         1
 
2904
COMMIT WORK;
 
2905
        
 
2906
# check transactions-2 success:         1
 
2907
ROLLBACK WORK;
 
2908
        
 
2909
# check transactions-3 success:         1
 
2910
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2911
COMMIT WORK;
 
2912
ROLLBACK WORK;
 
2913
        
 
2914
# check transactions-4 success:         1
 
2915
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2916
SELECT f_int1, f_int1, '', '', 'was inserted'
 
2917
FROM t0_template source_tab
 
2918
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2919
        
 
2920
# check transactions-5 success:         1
 
2921
ROLLBACK WORK;
 
2922
        
 
2923
# check transactions-6 success:         1
 
2924
# INFO: Storage engine used for t1 seems to be transactional.
 
2925
COMMIT;
 
2926
        
 
2927
# check transactions-7 success:         1
 
2928
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2929
COMMIT WORK;
 
2930
SET @@session.sql_mode = 'traditional';
 
2931
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
2932
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
2933
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
2934
'', '', 'was inserted' FROM t0_template
 
2935
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
2936
ERROR 22012: Division by 0
 
2937
COMMIT;
 
2938
        
 
2939
# check transactions-8 success:         1
 
2940
# INFO: Storage engine used for t1 seems to be unable to revert
 
2941
#       changes made by the failing statement.
 
2942
SET @@session.sql_mode = '';
 
2943
SET AUTOCOMMIT= 1;
 
2944
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
2945
COMMIT WORK;
 
2946
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
2947
        
 
2948
# check special-1 success:      1
 
2949
UPDATE t1 SET f_charbig = '';
 
2950
        
 
2951
# check special-2 success:      1
 
2952
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
2953
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2954
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
2955
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2956
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2957
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2958
'just inserted' FROM t0_template
 
2959
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2960
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
2961
BEGIN
 
2962
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2963
f_charbig = 'updated by trigger'
 
2964
      WHERE f_int1 = new.f_int1;
 
2965
END|
 
2966
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2967
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2968
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2969
        
 
2970
# check trigger-1 success:      1
 
2971
DROP TRIGGER trg_1;
 
2972
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2973
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2974
f_charbig = 'just inserted'
 
2975
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2976
DELETE FROM t0_aux
 
2977
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2978
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2979
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
2980
'just inserted' FROM t0_template
 
2981
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2982
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
2983
BEGIN
 
2984
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
2985
f_charbig = 'updated by trigger'
 
2986
      WHERE f_int1 = new.f_int1;
 
2987
END|
 
2988
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
2989
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
2990
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
2991
        
 
2992
# check trigger-2 success:      1
 
2993
DROP TRIGGER trg_1;
 
2994
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
2995
f_int2 = CAST(f_char1 AS SIGNED INT),
 
2996
f_charbig = 'just inserted'
 
2997
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
2998
DELETE FROM t0_aux
 
2999
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3000
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3001
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3002
'just inserted' FROM t0_template
 
3003
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3004
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3005
BEGIN
 
3006
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3007
f_charbig = 'updated by trigger'
 
3008
      WHERE f_int1 = new.f_int1;
 
3009
END|
 
3010
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3011
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3012
        
 
3013
# check trigger-3 success:      1
 
3014
DROP TRIGGER trg_1;
 
3015
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3016
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3017
f_charbig = 'just inserted'
 
3018
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3019
DELETE FROM t0_aux
 
3020
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3021
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3022
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3023
'just inserted' FROM t0_template
 
3024
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3025
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3026
BEGIN
 
3027
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3028
f_charbig = 'updated by trigger'
 
3029
      WHERE f_int1 = - old.f_int1;
 
3030
END|
 
3031
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3032
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3033
        
 
3034
# check trigger-4 success:      1
 
3035
DROP TRIGGER trg_1;
 
3036
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3037
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3038
f_charbig = 'just inserted'
 
3039
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3040
DELETE FROM t0_aux
 
3041
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3042
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3043
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3044
'just inserted' FROM t0_template
 
3045
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3046
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3047
BEGIN
 
3048
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3049
f_charbig = 'updated by trigger'
 
3050
      WHERE f_int1 = new.f_int1;
 
3051
END|
 
3052
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3053
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3054
        
 
3055
# check trigger-5 success:      1
 
3056
DROP TRIGGER trg_1;
 
3057
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3058
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3059
f_charbig = 'just inserted'
 
3060
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3061
DELETE FROM t0_aux
 
3062
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3063
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3064
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3065
'just inserted' FROM t0_template
 
3066
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3067
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3068
BEGIN
 
3069
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3070
f_charbig = 'updated by trigger'
 
3071
      WHERE f_int1 = - old.f_int1;
 
3072
END|
 
3073
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3074
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3075
        
 
3076
# check trigger-6 success:      1
 
3077
DROP TRIGGER trg_1;
 
3078
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3079
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3080
f_charbig = 'just inserted'
 
3081
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3082
DELETE FROM t0_aux
 
3083
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3084
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3085
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3086
'just inserted' FROM t0_template
 
3087
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3088
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3089
BEGIN
 
3090
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3091
f_charbig = 'updated by trigger'
 
3092
      WHERE f_int1 = - old.f_int1;
 
3093
END|
 
3094
DELETE FROM t0_aux
 
3095
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3096
        
 
3097
# check trigger-7 success:      1
 
3098
DROP TRIGGER trg_1;
 
3099
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3100
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3101
f_charbig = 'just inserted'
 
3102
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3103
DELETE FROM t0_aux
 
3104
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3105
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3106
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3107
'just inserted' FROM t0_template
 
3108
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3109
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3110
BEGIN
 
3111
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3112
f_charbig = 'updated by trigger'
 
3113
      WHERE f_int1 = - old.f_int1;
 
3114
END|
 
3115
DELETE FROM t0_aux
 
3116
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3117
        
 
3118
# check trigger-8 success:      1
 
3119
DROP TRIGGER trg_1;
 
3120
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3121
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3122
f_charbig = 'just inserted'
 
3123
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3124
DELETE FROM t0_aux
 
3125
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3126
DELETE FROM t1
 
3127
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3128
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3129
BEGIN
 
3130
SET new.f_int1 = old.f_int1 + @max_row,
 
3131
new.f_int2 = old.f_int2 - @max_row,
 
3132
new.f_charbig = '####updated per update trigger####';
 
3133
END|
 
3134
UPDATE t1
 
3135
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3136
f_charbig = '####updated per update statement itself####';
 
3137
        
 
3138
# check trigger-9 success:      1
 
3139
DROP TRIGGER trg_2;
 
3140
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3141
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3142
f_charbig = CONCAT('===',f_char1,'===');
 
3143
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3144
BEGIN
 
3145
SET new.f_int1 = new.f_int1 + @max_row,
 
3146
new.f_int2 = new.f_int2 - @max_row,
 
3147
new.f_charbig = '####updated per update trigger####';
 
3148
END|
 
3149
UPDATE t1
 
3150
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3151
f_charbig = '####updated per update statement itself####';
 
3152
        
 
3153
# check trigger-10 success:     1
 
3154
DROP TRIGGER trg_2;
 
3155
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3156
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3157
f_charbig = CONCAT('===',f_char1,'===');
 
3158
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3159
BEGIN
 
3160
SET new.f_int1 = @my_max1 + @counter,
 
3161
new.f_int2 = @my_min2 - @counter,
 
3162
new.f_charbig = '####updated per insert trigger####';
 
3163
SET @counter = @counter + 1;
 
3164
END|
 
3165
SET @counter = 1;
 
3166
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3167
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3168
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3169
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3170
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3171
ORDER BY f_int1;
 
3172
DROP TRIGGER trg_3;
 
3173
        
 
3174
# check trigger-11 success:     1
 
3175
DELETE FROM t1
 
3176
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3177
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3178
AND f_charbig = '####updated per insert trigger####';
 
3179
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3180
BEGIN
 
3181
SET new.f_int1 = @my_max1 + @counter,
 
3182
new.f_int2 = @my_min2 - @counter,
 
3183
new.f_charbig = '####updated per insert trigger####';
 
3184
SET @counter = @counter + 1;
 
3185
END|
 
3186
SET @counter = 1;
 
3187
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3188
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3189
SELECT CAST(f_int1 AS CHAR),
 
3190
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3191
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3192
ORDER BY f_int1;
 
3193
DROP TRIGGER trg_3;
 
3194
        
 
3195
# check trigger-12 success:     1
 
3196
DELETE FROM t1
 
3197
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3198
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3199
AND f_charbig = '####updated per insert trigger####';
 
3200
ANALYZE  TABLE t1;
 
3201
Table   Op      Msg_type        Msg_text
 
3202
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
3203
CHECK    TABLE t1 EXTENDED;
 
3204
Table   Op      Msg_type        Msg_text
 
3205
test.t1 check   note    The storage engine for the table doesn't support check
 
3206
CHECKSUM TABLE t1 EXTENDED;
 
3207
Table   Checksum
 
3208
test.t1 <some_value>
 
3209
OPTIMIZE TABLE t1;
 
3210
Table   Op      Msg_type        Msg_text
 
3211
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
3212
# check layout success:    1
 
3213
REPAIR   TABLE t1 EXTENDED;
 
3214
Table   Op      Msg_type        Msg_text
 
3215
test.t1 repair  note    The storage engine for the table doesn't support repair
 
3216
# check layout success:    1
 
3217
TRUNCATE t1;
 
3218
        
 
3219
# check TRUNCATE success:       1
 
3220
# check layout success:    1
 
3221
# End usability test (include/partition_check.inc)
 
3222
DROP TABLE t1;
 
3223
#------------------------------------------------------------------------
 
3224
# 4 Storage engine assignment after partition name + after name of
 
3225
#   subpartitions belonging to another partition
 
3226
#------------------------------------------------------------------------
 
3227
CREATE TABLE t1 (
 
3228
f_int1 INTEGER,
 
3229
f_int2 INTEGER,
 
3230
f_char1 CHAR(20),
 
3231
f_char2 CHAR(20),
 
3232
f_charbig VARCHAR(1000)
 
3233
)
 
3234
PARTITION BY RANGE(f_int1)
 
3235
SUBPARTITION BY HASH(f_int1)
 
3236
( PARTITION part1 VALUES LESS THAN (10) ENGINE = 'ndbcluster'
 
3237
(SUBPARTITION subpart11,
 
3238
SUBPARTITION subpart12),
 
3239
PARTITION part2 VALUES LESS THAN (2147483646)
 
3240
(SUBPARTITION subpart21 STORAGE ENGINE = 'ndbcluster',
 
3241
SUBPARTITION subpart22 STORAGE ENGINE = 'ndbcluster')
 
3242
);
 
3243
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3244
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
3245
# Start usability test (include/partition_check.inc)
 
3246
create_command
 
3247
SHOW CREATE TABLE t1;
 
3248
Table   Create Table
 
3249
t1      CREATE TABLE `t1` (
 
3250
  `f_int1` int(11) DEFAULT NULL,
 
3251
  `f_int2` int(11) DEFAULT NULL,
 
3252
  `f_char1` char(20) DEFAULT NULL,
 
3253
  `f_char2` char(20) DEFAULT NULL,
 
3254
  `f_charbig` varchar(1000) DEFAULT NULL
 
3255
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int1) (PARTITION part1 VALUES LESS THAN (10)  (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster), PARTITION part2 VALUES LESS THAN (2147483646)  (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster))
 
3256
 
 
3257
# check prerequisites-1 success:    1
 
3258
# check COUNT(*) success:    1
 
3259
# check MIN/MAX(f_int1) success:    1
 
3260
# check MIN/MAX(f_int2) success:    1
 
3261
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3262
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3263
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3264
WHERE f_int1 IN (2,3);
 
3265
# check prerequisites-3 success:    1
 
3266
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3267
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
3268
# check read via f_int1 success: 1
 
3269
# check read via f_int2 success: 1
 
3270
        
 
3271
# check multiple-1 success:     1
 
3272
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3273
        
 
3274
# check multiple-2 success:     1
 
3275
INSERT INTO t1 SELECT * FROM t0_template
 
3276
WHERE MOD(f_int1,3) = 0;
 
3277
        
 
3278
# check multiple-3 success:     1
 
3279
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3280
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3281
AND @max_row_div2 + @max_row_div4;
 
3282
        
 
3283
# check multiple-4 success:     1
 
3284
DELETE FROM t1
 
3285
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3286
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3287
        
 
3288
# check multiple-5 success:     1
 
3289
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3290
INSERT INTO t1
 
3291
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3292
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3293
f_charbig = '#SINGLE#';
 
3294
        
 
3295
# check single-1 success:       1
 
3296
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3297
INSERT INTO t1
 
3298
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3299
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3300
f_charbig = '#SINGLE#';
 
3301
        
 
3302
# check single-2 success:       1
 
3303
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3304
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3305
UPDATE t1 SET f_int1 = @cur_value2
 
3306
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3307
        
 
3308
# check single-3 success:       1
 
3309
SET @cur_value1= -1;
 
3310
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3311
UPDATE t1 SET f_int1 = @cur_value1
 
3312
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3313
        
 
3314
# check single-4 success:       1
 
3315
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3316
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3317
        
 
3318
# check single-5 success:       1
 
3319
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3320
        
 
3321
# check single-6 success:       1
 
3322
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3323
ERROR HY000: Table has no partition for value 2147483647
 
3324
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3325
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3326
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3327
f_charbig = '#NULL#';
 
3328
INSERT INTO t1
 
3329
SET f_int1 = NULL , f_int2 = -@max_row,
 
3330
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3331
f_charbig = '#NULL#';
 
3332
# check null success:    1
 
3333
        
 
3334
# check null-1 success:         1
 
3335
UPDATE t1 SET f_int1 = -@max_row
 
3336
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3337
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3338
        
 
3339
# check null-2 success:         1
 
3340
UPDATE t1 SET f_int1 = NULL
 
3341
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3342
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3343
        
 
3344
# check null-3 success:         1
 
3345
DELETE FROM t1
 
3346
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3347
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3348
        
 
3349
# check null-4 success:         1
 
3350
DELETE FROM t1
 
3351
WHERE f_int1 = 0 AND f_int2 = 0
 
3352
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3353
AND f_charbig = '#NULL#';
 
3354
SET AUTOCOMMIT= 0;
 
3355
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3356
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3357
FROM t0_template source_tab
 
3358
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3359
        
 
3360
# check transactions-1 success:         1
 
3361
COMMIT WORK;
 
3362
        
 
3363
# check transactions-2 success:         1
 
3364
ROLLBACK WORK;
 
3365
        
 
3366
# check transactions-3 success:         1
 
3367
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3368
COMMIT WORK;
 
3369
ROLLBACK WORK;
 
3370
        
 
3371
# check transactions-4 success:         1
 
3372
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3373
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3374
FROM t0_template source_tab
 
3375
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3376
        
 
3377
# check transactions-5 success:         1
 
3378
ROLLBACK WORK;
 
3379
        
 
3380
# check transactions-6 success:         1
 
3381
# INFO: Storage engine used for t1 seems to be transactional.
 
3382
COMMIT;
 
3383
        
 
3384
# check transactions-7 success:         1
 
3385
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3386
COMMIT WORK;
 
3387
SET @@session.sql_mode = 'traditional';
 
3388
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3389
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3390
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3391
'', '', 'was inserted' FROM t0_template
 
3392
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3393
ERROR 22012: Division by 0
 
3394
COMMIT;
 
3395
        
 
3396
# check transactions-8 success:         1
 
3397
# INFO: Storage engine used for t1 seems to be unable to revert
 
3398
#       changes made by the failing statement.
 
3399
SET @@session.sql_mode = '';
 
3400
SET AUTOCOMMIT= 1;
 
3401
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3402
COMMIT WORK;
 
3403
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3404
        
 
3405
# check special-1 success:      1
 
3406
UPDATE t1 SET f_charbig = '';
 
3407
        
 
3408
# check special-2 success:      1
 
3409
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3410
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3411
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3412
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3413
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3414
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3415
'just inserted' FROM t0_template
 
3416
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3417
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3418
BEGIN
 
3419
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3420
f_charbig = 'updated by trigger'
 
3421
      WHERE f_int1 = new.f_int1;
 
3422
END|
 
3423
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3424
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3425
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3426
        
 
3427
# check trigger-1 success:      1
 
3428
DROP TRIGGER trg_1;
 
3429
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3430
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3431
f_charbig = 'just inserted'
 
3432
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3433
DELETE FROM t0_aux
 
3434
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3435
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3436
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3437
'just inserted' FROM t0_template
 
3438
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3439
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3440
BEGIN
 
3441
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3442
f_charbig = 'updated by trigger'
 
3443
      WHERE f_int1 = new.f_int1;
 
3444
END|
 
3445
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3446
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3447
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3448
        
 
3449
# check trigger-2 success:      1
 
3450
DROP TRIGGER trg_1;
 
3451
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3452
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3453
f_charbig = 'just inserted'
 
3454
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3455
DELETE FROM t0_aux
 
3456
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3457
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3458
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3459
'just inserted' FROM t0_template
 
3460
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3461
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3462
BEGIN
 
3463
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3464
f_charbig = 'updated by trigger'
 
3465
      WHERE f_int1 = new.f_int1;
 
3466
END|
 
3467
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3468
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3469
        
 
3470
# check trigger-3 success:      1
 
3471
DROP TRIGGER trg_1;
 
3472
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3473
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3474
f_charbig = 'just inserted'
 
3475
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3476
DELETE FROM t0_aux
 
3477
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3478
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3479
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3480
'just inserted' FROM t0_template
 
3481
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3482
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3483
BEGIN
 
3484
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3485
f_charbig = 'updated by trigger'
 
3486
      WHERE f_int1 = - old.f_int1;
 
3487
END|
 
3488
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3489
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3490
        
 
3491
# check trigger-4 success:      1
 
3492
DROP TRIGGER trg_1;
 
3493
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3494
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3495
f_charbig = 'just inserted'
 
3496
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3497
DELETE FROM t0_aux
 
3498
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3499
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3500
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3501
'just inserted' FROM t0_template
 
3502
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3503
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3504
BEGIN
 
3505
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3506
f_charbig = 'updated by trigger'
 
3507
      WHERE f_int1 = new.f_int1;
 
3508
END|
 
3509
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3510
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3511
        
 
3512
# check trigger-5 success:      1
 
3513
DROP TRIGGER trg_1;
 
3514
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3515
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3516
f_charbig = 'just inserted'
 
3517
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3518
DELETE FROM t0_aux
 
3519
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3520
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3521
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3522
'just inserted' FROM t0_template
 
3523
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3524
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3525
BEGIN
 
3526
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3527
f_charbig = 'updated by trigger'
 
3528
      WHERE f_int1 = - old.f_int1;
 
3529
END|
 
3530
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3531
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3532
        
 
3533
# check trigger-6 success:      1
 
3534
DROP TRIGGER trg_1;
 
3535
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3536
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3537
f_charbig = 'just inserted'
 
3538
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3539
DELETE FROM t0_aux
 
3540
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3541
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3542
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3543
'just inserted' FROM t0_template
 
3544
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3545
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3546
BEGIN
 
3547
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3548
f_charbig = 'updated by trigger'
 
3549
      WHERE f_int1 = - old.f_int1;
 
3550
END|
 
3551
DELETE FROM t0_aux
 
3552
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3553
        
 
3554
# check trigger-7 success:      1
 
3555
DROP TRIGGER trg_1;
 
3556
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3557
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3558
f_charbig = 'just inserted'
 
3559
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3560
DELETE FROM t0_aux
 
3561
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3562
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3563
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3564
'just inserted' FROM t0_template
 
3565
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3566
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
3567
BEGIN
 
3568
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3569
f_charbig = 'updated by trigger'
 
3570
      WHERE f_int1 = - old.f_int1;
 
3571
END|
 
3572
DELETE FROM t0_aux
 
3573
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3574
        
 
3575
# check trigger-8 success:      1
 
3576
DROP TRIGGER trg_1;
 
3577
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3578
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3579
f_charbig = 'just inserted'
 
3580
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3581
DELETE FROM t0_aux
 
3582
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3583
DELETE FROM t1
 
3584
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3585
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3586
BEGIN
 
3587
SET new.f_int1 = old.f_int1 + @max_row,
 
3588
new.f_int2 = old.f_int2 - @max_row,
 
3589
new.f_charbig = '####updated per update trigger####';
 
3590
END|
 
3591
UPDATE t1
 
3592
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3593
f_charbig = '####updated per update statement itself####';
 
3594
        
 
3595
# check trigger-9 success:      1
 
3596
DROP TRIGGER trg_2;
 
3597
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3598
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3599
f_charbig = CONCAT('===',f_char1,'===');
 
3600
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
3601
BEGIN
 
3602
SET new.f_int1 = new.f_int1 + @max_row,
 
3603
new.f_int2 = new.f_int2 - @max_row,
 
3604
new.f_charbig = '####updated per update trigger####';
 
3605
END|
 
3606
UPDATE t1
 
3607
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
3608
f_charbig = '####updated per update statement itself####';
 
3609
        
 
3610
# check trigger-10 success:     1
 
3611
DROP TRIGGER trg_2;
 
3612
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3613
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3614
f_charbig = CONCAT('===',f_char1,'===');
 
3615
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3616
BEGIN
 
3617
SET new.f_int1 = @my_max1 + @counter,
 
3618
new.f_int2 = @my_min2 - @counter,
 
3619
new.f_charbig = '####updated per insert trigger####';
 
3620
SET @counter = @counter + 1;
 
3621
END|
 
3622
SET @counter = 1;
 
3623
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3624
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3625
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3626
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3627
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3628
ORDER BY f_int1;
 
3629
DROP TRIGGER trg_3;
 
3630
        
 
3631
# check trigger-11 success:     1
 
3632
DELETE FROM t1
 
3633
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3634
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3635
AND f_charbig = '####updated per insert trigger####';
 
3636
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
3637
BEGIN
 
3638
SET new.f_int1 = @my_max1 + @counter,
 
3639
new.f_int2 = @my_min2 - @counter,
 
3640
new.f_charbig = '####updated per insert trigger####';
 
3641
SET @counter = @counter + 1;
 
3642
END|
 
3643
SET @counter = 1;
 
3644
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
3645
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
3646
SELECT CAST(f_int1 AS CHAR),
 
3647
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
3648
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
3649
ORDER BY f_int1;
 
3650
DROP TRIGGER trg_3;
 
3651
        
 
3652
# check trigger-12 success:     1
 
3653
DELETE FROM t1
 
3654
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
3655
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
3656
AND f_charbig = '####updated per insert trigger####';
 
3657
ANALYZE  TABLE t1;
 
3658
Table   Op      Msg_type        Msg_text
 
3659
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
3660
CHECK    TABLE t1 EXTENDED;
 
3661
Table   Op      Msg_type        Msg_text
 
3662
test.t1 check   note    The storage engine for the table doesn't support check
 
3663
CHECKSUM TABLE t1 EXTENDED;
 
3664
Table   Checksum
 
3665
test.t1 <some_value>
 
3666
OPTIMIZE TABLE t1;
 
3667
Table   Op      Msg_type        Msg_text
 
3668
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
3669
# check layout success:    1
 
3670
REPAIR   TABLE t1 EXTENDED;
 
3671
Table   Op      Msg_type        Msg_text
 
3672
test.t1 repair  note    The storage engine for the table doesn't support repair
 
3673
# check layout success:    1
 
3674
TRUNCATE t1;
 
3675
        
 
3676
# check TRUNCATE success:       1
 
3677
# check layout success:    1
 
3678
# End usability test (include/partition_check.inc)
 
3679
DROP TABLE t1;
 
3680
CREATE TABLE t1 (
 
3681
f_int1 INTEGER,
 
3682
f_int2 INTEGER,
 
3683
f_char1 CHAR(20),
 
3684
f_char2 CHAR(20),
 
3685
f_charbig VARCHAR(1000)
 
3686
)
 
3687
PARTITION BY RANGE(f_int1)
 
3688
SUBPARTITION BY HASH(f_int1)
 
3689
( PARTITION part1 VALUES LESS THAN (10)
 
3690
(SUBPARTITION subpart11 STORAGE ENGINE = 'ndbcluster',
 
3691
SUBPARTITION subpart12 STORAGE ENGINE = 'ndbcluster'),
 
3692
PARTITION part2 VALUES LESS THAN (2147483646) ENGINE = 'ndbcluster'
 
3693
(SUBPARTITION subpart21,
 
3694
SUBPARTITION subpart22)
 
3695
);
 
3696
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3697
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
3698
# Start usability test (include/partition_check.inc)
 
3699
create_command
 
3700
SHOW CREATE TABLE t1;
 
3701
Table   Create Table
 
3702
t1      CREATE TABLE `t1` (
 
3703
  `f_int1` int(11) DEFAULT NULL,
 
3704
  `f_int2` int(11) DEFAULT NULL,
 
3705
  `f_char1` char(20) DEFAULT NULL,
 
3706
  `f_char2` char(20) DEFAULT NULL,
 
3707
  `f_charbig` varchar(1000) DEFAULT NULL
 
3708
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int1) (PARTITION part1 VALUES LESS THAN (10)  (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster), PARTITION part2 VALUES LESS THAN (2147483646)  (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster))
 
3709
 
 
3710
# check prerequisites-1 success:    1
 
3711
# check COUNT(*) success:    1
 
3712
# check MIN/MAX(f_int1) success:    1
 
3713
# check MIN/MAX(f_int2) success:    1
 
3714
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3715
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
3716
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
3717
WHERE f_int1 IN (2,3);
 
3718
# check prerequisites-3 success:    1
 
3719
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
3720
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
3721
# check read via f_int1 success: 1
 
3722
# check read via f_int2 success: 1
 
3723
        
 
3724
# check multiple-1 success:     1
 
3725
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
3726
        
 
3727
# check multiple-2 success:     1
 
3728
INSERT INTO t1 SELECT * FROM t0_template
 
3729
WHERE MOD(f_int1,3) = 0;
 
3730
        
 
3731
# check multiple-3 success:     1
 
3732
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
3733
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
3734
AND @max_row_div2 + @max_row_div4;
 
3735
        
 
3736
# check multiple-4 success:     1
 
3737
DELETE FROM t1
 
3738
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
3739
AND @max_row_div2 + @max_row_div4 + @max_row;
 
3740
        
 
3741
# check multiple-5 success:     1
 
3742
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
3743
INSERT INTO t1
 
3744
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3745
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3746
f_charbig = '#SINGLE#';
 
3747
        
 
3748
# check single-1 success:       1
 
3749
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
3750
INSERT INTO t1
 
3751
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
3752
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
3753
f_charbig = '#SINGLE#';
 
3754
        
 
3755
# check single-2 success:       1
 
3756
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
3757
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
3758
UPDATE t1 SET f_int1 = @cur_value2
 
3759
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
3760
        
 
3761
# check single-3 success:       1
 
3762
SET @cur_value1= -1;
 
3763
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
3764
UPDATE t1 SET f_int1 = @cur_value1
 
3765
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
3766
        
 
3767
# check single-4 success:       1
 
3768
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
3769
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
3770
        
 
3771
# check single-5 success:       1
 
3772
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
3773
        
 
3774
# check single-6 success:       1
 
3775
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
3776
ERROR HY000: Table has no partition for value 2147483647
 
3777
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
3778
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
3779
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
3780
f_charbig = '#NULL#';
 
3781
INSERT INTO t1
 
3782
SET f_int1 = NULL , f_int2 = -@max_row,
 
3783
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
3784
f_charbig = '#NULL#';
 
3785
# check null success:    1
 
3786
        
 
3787
# check null-1 success:         1
 
3788
UPDATE t1 SET f_int1 = -@max_row
 
3789
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3790
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3791
        
 
3792
# check null-2 success:         1
 
3793
UPDATE t1 SET f_int1 = NULL
 
3794
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3795
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3796
        
 
3797
# check null-3 success:         1
 
3798
DELETE FROM t1
 
3799
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
3800
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
3801
        
 
3802
# check null-4 success:         1
 
3803
DELETE FROM t1
 
3804
WHERE f_int1 = 0 AND f_int2 = 0
 
3805
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
3806
AND f_charbig = '#NULL#';
 
3807
SET AUTOCOMMIT= 0;
 
3808
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3809
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3810
FROM t0_template source_tab
 
3811
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3812
        
 
3813
# check transactions-1 success:         1
 
3814
COMMIT WORK;
 
3815
        
 
3816
# check transactions-2 success:         1
 
3817
ROLLBACK WORK;
 
3818
        
 
3819
# check transactions-3 success:         1
 
3820
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3821
COMMIT WORK;
 
3822
ROLLBACK WORK;
 
3823
        
 
3824
# check transactions-4 success:         1
 
3825
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3826
SELECT f_int1, f_int1, '', '', 'was inserted'
 
3827
FROM t0_template source_tab
 
3828
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3829
        
 
3830
# check transactions-5 success:         1
 
3831
ROLLBACK WORK;
 
3832
        
 
3833
# check transactions-6 success:         1
 
3834
# INFO: Storage engine used for t1 seems to be transactional.
 
3835
COMMIT;
 
3836
        
 
3837
# check transactions-7 success:         1
 
3838
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3839
COMMIT WORK;
 
3840
SET @@session.sql_mode = 'traditional';
 
3841
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
3842
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
3843
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
3844
'', '', 'was inserted' FROM t0_template
 
3845
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
3846
ERROR 22012: Division by 0
 
3847
COMMIT;
 
3848
        
 
3849
# check transactions-8 success:         1
 
3850
# INFO: Storage engine used for t1 seems to be unable to revert
 
3851
#       changes made by the failing statement.
 
3852
SET @@session.sql_mode = '';
 
3853
SET AUTOCOMMIT= 1;
 
3854
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
3855
COMMIT WORK;
 
3856
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
3857
        
 
3858
# check special-1 success:      1
 
3859
UPDATE t1 SET f_charbig = '';
 
3860
        
 
3861
# check special-2 success:      1
 
3862
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
3863
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3864
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
3865
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3866
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3867
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3868
'just inserted' FROM t0_template
 
3869
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3870
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
3871
BEGIN
 
3872
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3873
f_charbig = 'updated by trigger'
 
3874
      WHERE f_int1 = new.f_int1;
 
3875
END|
 
3876
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3877
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3878
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3879
        
 
3880
# check trigger-1 success:      1
 
3881
DROP TRIGGER trg_1;
 
3882
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3883
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3884
f_charbig = 'just inserted'
 
3885
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3886
DELETE FROM t0_aux
 
3887
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3888
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3889
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3890
'just inserted' FROM t0_template
 
3891
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3892
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
3893
BEGIN
 
3894
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3895
f_charbig = 'updated by trigger'
 
3896
      WHERE f_int1 = new.f_int1;
 
3897
END|
 
3898
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3899
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
3900
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3901
        
 
3902
# check trigger-2 success:      1
 
3903
DROP TRIGGER trg_1;
 
3904
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3905
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3906
f_charbig = 'just inserted'
 
3907
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3908
DELETE FROM t0_aux
 
3909
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3910
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3911
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3912
'just inserted' FROM t0_template
 
3913
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3914
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3915
BEGIN
 
3916
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3917
f_charbig = 'updated by trigger'
 
3918
      WHERE f_int1 = new.f_int1;
 
3919
END|
 
3920
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3921
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3922
        
 
3923
# check trigger-3 success:      1
 
3924
DROP TRIGGER trg_1;
 
3925
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3926
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3927
f_charbig = 'just inserted'
 
3928
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3929
DELETE FROM t0_aux
 
3930
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3931
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3932
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3933
'just inserted' FROM t0_template
 
3934
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3935
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
3936
BEGIN
 
3937
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3938
f_charbig = 'updated by trigger'
 
3939
      WHERE f_int1 = - old.f_int1;
 
3940
END|
 
3941
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3942
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3943
        
 
3944
# check trigger-4 success:      1
 
3945
DROP TRIGGER trg_1;
 
3946
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3947
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3948
f_charbig = 'just inserted'
 
3949
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3950
DELETE FROM t0_aux
 
3951
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3952
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3953
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3954
'just inserted' FROM t0_template
 
3955
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3956
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3957
BEGIN
 
3958
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3959
f_charbig = 'updated by trigger'
 
3960
      WHERE f_int1 = new.f_int1;
 
3961
END|
 
3962
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3963
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3964
        
 
3965
# check trigger-5 success:      1
 
3966
DROP TRIGGER trg_1;
 
3967
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3968
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3969
f_charbig = 'just inserted'
 
3970
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3971
DELETE FROM t0_aux
 
3972
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3973
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3974
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3975
'just inserted' FROM t0_template
 
3976
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3977
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
3978
BEGIN
 
3979
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
3980
f_charbig = 'updated by trigger'
 
3981
      WHERE f_int1 = - old.f_int1;
 
3982
END|
 
3983
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
3984
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
3985
        
 
3986
# check trigger-6 success:      1
 
3987
DROP TRIGGER trg_1;
 
3988
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
3989
f_int2 = CAST(f_char1 AS SIGNED INT),
 
3990
f_charbig = 'just inserted'
 
3991
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
3992
DELETE FROM t0_aux
 
3993
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3994
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
3995
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
3996
'just inserted' FROM t0_template
 
3997
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
3998
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
3999
BEGIN
 
4000
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4001
f_charbig = 'updated by trigger'
 
4002
      WHERE f_int1 = - old.f_int1;
 
4003
END|
 
4004
DELETE FROM t0_aux
 
4005
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4006
        
 
4007
# check trigger-7 success:      1
 
4008
DROP TRIGGER trg_1;
 
4009
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4010
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4011
f_charbig = 'just inserted'
 
4012
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4013
DELETE FROM t0_aux
 
4014
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4015
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4016
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4017
'just inserted' FROM t0_template
 
4018
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4019
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4020
BEGIN
 
4021
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4022
f_charbig = 'updated by trigger'
 
4023
      WHERE f_int1 = - old.f_int1;
 
4024
END|
 
4025
DELETE FROM t0_aux
 
4026
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4027
        
 
4028
# check trigger-8 success:      1
 
4029
DROP TRIGGER trg_1;
 
4030
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4031
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4032
f_charbig = 'just inserted'
 
4033
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4034
DELETE FROM t0_aux
 
4035
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4036
DELETE FROM t1
 
4037
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4038
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4039
BEGIN
 
4040
SET new.f_int1 = old.f_int1 + @max_row,
 
4041
new.f_int2 = old.f_int2 - @max_row,
 
4042
new.f_charbig = '####updated per update trigger####';
 
4043
END|
 
4044
UPDATE t1
 
4045
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4046
f_charbig = '####updated per update statement itself####';
 
4047
        
 
4048
# check trigger-9 success:      1
 
4049
DROP TRIGGER trg_2;
 
4050
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4051
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4052
f_charbig = CONCAT('===',f_char1,'===');
 
4053
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4054
BEGIN
 
4055
SET new.f_int1 = new.f_int1 + @max_row,
 
4056
new.f_int2 = new.f_int2 - @max_row,
 
4057
new.f_charbig = '####updated per update trigger####';
 
4058
END|
 
4059
UPDATE t1
 
4060
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4061
f_charbig = '####updated per update statement itself####';
 
4062
        
 
4063
# check trigger-10 success:     1
 
4064
DROP TRIGGER trg_2;
 
4065
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4066
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4067
f_charbig = CONCAT('===',f_char1,'===');
 
4068
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4069
BEGIN
 
4070
SET new.f_int1 = @my_max1 + @counter,
 
4071
new.f_int2 = @my_min2 - @counter,
 
4072
new.f_charbig = '####updated per insert trigger####';
 
4073
SET @counter = @counter + 1;
 
4074
END|
 
4075
SET @counter = 1;
 
4076
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4077
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4078
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4079
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4080
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4081
ORDER BY f_int1;
 
4082
DROP TRIGGER trg_3;
 
4083
        
 
4084
# check trigger-11 success:     1
 
4085
DELETE FROM t1
 
4086
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4087
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4088
AND f_charbig = '####updated per insert trigger####';
 
4089
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4090
BEGIN
 
4091
SET new.f_int1 = @my_max1 + @counter,
 
4092
new.f_int2 = @my_min2 - @counter,
 
4093
new.f_charbig = '####updated per insert trigger####';
 
4094
SET @counter = @counter + 1;
 
4095
END|
 
4096
SET @counter = 1;
 
4097
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4098
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4099
SELECT CAST(f_int1 AS CHAR),
 
4100
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4101
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4102
ORDER BY f_int1;
 
4103
DROP TRIGGER trg_3;
 
4104
        
 
4105
# check trigger-12 success:     1
 
4106
DELETE FROM t1
 
4107
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4108
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4109
AND f_charbig = '####updated per insert trigger####';
 
4110
ANALYZE  TABLE t1;
 
4111
Table   Op      Msg_type        Msg_text
 
4112
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
4113
CHECK    TABLE t1 EXTENDED;
 
4114
Table   Op      Msg_type        Msg_text
 
4115
test.t1 check   note    The storage engine for the table doesn't support check
 
4116
CHECKSUM TABLE t1 EXTENDED;
 
4117
Table   Checksum
 
4118
test.t1 <some_value>
 
4119
OPTIMIZE TABLE t1;
 
4120
Table   Op      Msg_type        Msg_text
 
4121
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
4122
# check layout success:    1
 
4123
REPAIR   TABLE t1 EXTENDED;
 
4124
Table   Op      Msg_type        Msg_text
 
4125
test.t1 repair  note    The storage engine for the table doesn't support repair
 
4126
# check layout success:    1
 
4127
TRUNCATE t1;
 
4128
        
 
4129
# check TRUNCATE success:       1
 
4130
# check layout success:    1
 
4131
# End usability test (include/partition_check.inc)
 
4132
DROP TABLE t1;
 
4133
#------------------------------------------------------------------------
 
4134
# 5 Precedence of storage engine assignments (if there is any)
 
4135
#------------------------------------------------------------------------
 
4136
# 5.1 Storage engine assignment after column list + after partition
 
4137
#     or subpartition name
 
4138
CREATE TABLE t1 (
 
4139
f_int1 INTEGER,
 
4140
f_int2 INTEGER,
 
4141
f_char1 CHAR(20),
 
4142
f_char2 CHAR(20),
 
4143
f_charbig VARCHAR(1000)
 
4144
) ENGINE = 'ndbcluster'
 
4145
PARTITION BY HASH(f_int1)
 
4146
( PARTITION part1 STORAGE ENGINE = 'ndbcluster',
 
4147
PARTITION part2 STORAGE ENGINE = 'ndbcluster'
 
4148
);
 
4149
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4150
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
4151
# Start usability test (include/partition_check.inc)
 
4152
create_command
 
4153
SHOW CREATE TABLE t1;
 
4154
Table   Create Table
 
4155
t1      CREATE TABLE `t1` (
 
4156
  `f_int1` int(11) DEFAULT NULL,
 
4157
  `f_int2` int(11) DEFAULT NULL,
 
4158
  `f_char1` char(20) DEFAULT NULL,
 
4159
  `f_char2` char(20) DEFAULT NULL,
 
4160
  `f_charbig` varchar(1000) DEFAULT NULL
 
4161
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY HASH (f_int1) (PARTITION part1  ENGINE = ndbcluster, PARTITION part2  ENGINE = ndbcluster)
 
4162
 
 
4163
# check prerequisites-1 success:    1
 
4164
# check COUNT(*) success:    1
 
4165
# check MIN/MAX(f_int1) success:    1
 
4166
# check MIN/MAX(f_int2) success:    1
 
4167
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4168
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4169
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
4170
WHERE f_int1 IN (2,3);
 
4171
# check prerequisites-3 success:    1
 
4172
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4173
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
4174
# check read via f_int1 success: 1
 
4175
# check read via f_int2 success: 1
 
4176
        
 
4177
# check multiple-1 success:     1
 
4178
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
4179
        
 
4180
# check multiple-2 success:     1
 
4181
INSERT INTO t1 SELECT * FROM t0_template
 
4182
WHERE MOD(f_int1,3) = 0;
 
4183
        
 
4184
# check multiple-3 success:     1
 
4185
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
4186
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
4187
AND @max_row_div2 + @max_row_div4;
 
4188
        
 
4189
# check multiple-4 success:     1
 
4190
DELETE FROM t1
 
4191
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4192
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4193
        
 
4194
# check multiple-5 success:     1
 
4195
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4196
INSERT INTO t1
 
4197
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4198
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4199
f_charbig = '#SINGLE#';
 
4200
        
 
4201
# check single-1 success:       1
 
4202
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4203
INSERT INTO t1
 
4204
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4205
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4206
f_charbig = '#SINGLE#';
 
4207
        
 
4208
# check single-2 success:       1
 
4209
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4210
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4211
UPDATE t1 SET f_int1 = @cur_value2
 
4212
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4213
        
 
4214
# check single-3 success:       1
 
4215
SET @cur_value1= -1;
 
4216
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4217
UPDATE t1 SET f_int1 = @cur_value1
 
4218
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4219
        
 
4220
# check single-4 success:       1
 
4221
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4222
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4223
        
 
4224
# check single-5 success:       1
 
4225
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4226
        
 
4227
# check single-6 success:       1
 
4228
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4229
        
 
4230
# check single-7 success:       1
 
4231
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
4232
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4233
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4234
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4235
f_charbig = '#NULL#';
 
4236
INSERT INTO t1
 
4237
SET f_int1 = NULL , f_int2 = -@max_row,
 
4238
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4239
f_charbig = '#NULL#';
 
4240
# check null success:    1
 
4241
        
 
4242
# check null-1 success:         1
 
4243
UPDATE t1 SET f_int1 = -@max_row
 
4244
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4245
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4246
        
 
4247
# check null-2 success:         1
 
4248
UPDATE t1 SET f_int1 = NULL
 
4249
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4250
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4251
        
 
4252
# check null-3 success:         1
 
4253
DELETE FROM t1
 
4254
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4255
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4256
        
 
4257
# check null-4 success:         1
 
4258
DELETE FROM t1
 
4259
WHERE f_int1 = 0 AND f_int2 = 0
 
4260
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4261
AND f_charbig = '#NULL#';
 
4262
SET AUTOCOMMIT= 0;
 
4263
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4264
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4265
FROM t0_template source_tab
 
4266
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4267
        
 
4268
# check transactions-1 success:         1
 
4269
COMMIT WORK;
 
4270
        
 
4271
# check transactions-2 success:         1
 
4272
ROLLBACK WORK;
 
4273
        
 
4274
# check transactions-3 success:         1
 
4275
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4276
COMMIT WORK;
 
4277
ROLLBACK WORK;
 
4278
        
 
4279
# check transactions-4 success:         1
 
4280
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4281
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4282
FROM t0_template source_tab
 
4283
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4284
        
 
4285
# check transactions-5 success:         1
 
4286
ROLLBACK WORK;
 
4287
        
 
4288
# check transactions-6 success:         1
 
4289
# INFO: Storage engine used for t1 seems to be transactional.
 
4290
COMMIT;
 
4291
        
 
4292
# check transactions-7 success:         1
 
4293
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4294
COMMIT WORK;
 
4295
SET @@session.sql_mode = 'traditional';
 
4296
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4297
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4298
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4299
'', '', 'was inserted' FROM t0_template
 
4300
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4301
ERROR 22012: Division by 0
 
4302
COMMIT;
 
4303
        
 
4304
# check transactions-8 success:         1
 
4305
# INFO: Storage engine used for t1 seems to be unable to revert
 
4306
#       changes made by the failing statement.
 
4307
SET @@session.sql_mode = '';
 
4308
SET AUTOCOMMIT= 1;
 
4309
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4310
COMMIT WORK;
 
4311
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4312
        
 
4313
# check special-1 success:      1
 
4314
UPDATE t1 SET f_charbig = '';
 
4315
        
 
4316
# check special-2 success:      1
 
4317
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4318
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4319
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4320
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4321
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4322
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4323
'just inserted' FROM t0_template
 
4324
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4325
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4326
BEGIN
 
4327
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4328
f_charbig = 'updated by trigger'
 
4329
      WHERE f_int1 = new.f_int1;
 
4330
END|
 
4331
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4332
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4333
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4334
        
 
4335
# check trigger-1 success:      1
 
4336
DROP TRIGGER trg_1;
 
4337
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4338
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4339
f_charbig = 'just inserted'
 
4340
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4341
DELETE FROM t0_aux
 
4342
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4343
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4344
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4345
'just inserted' FROM t0_template
 
4346
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4347
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4348
BEGIN
 
4349
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4350
f_charbig = 'updated by trigger'
 
4351
      WHERE f_int1 = new.f_int1;
 
4352
END|
 
4353
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4354
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4355
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4356
        
 
4357
# check trigger-2 success:      1
 
4358
DROP TRIGGER trg_1;
 
4359
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4360
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4361
f_charbig = 'just inserted'
 
4362
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4363
DELETE FROM t0_aux
 
4364
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4365
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4366
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4367
'just inserted' FROM t0_template
 
4368
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4369
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4370
BEGIN
 
4371
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4372
f_charbig = 'updated by trigger'
 
4373
      WHERE f_int1 = new.f_int1;
 
4374
END|
 
4375
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4376
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4377
        
 
4378
# check trigger-3 success:      1
 
4379
DROP TRIGGER trg_1;
 
4380
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4381
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4382
f_charbig = 'just inserted'
 
4383
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4384
DELETE FROM t0_aux
 
4385
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4386
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4387
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4388
'just inserted' FROM t0_template
 
4389
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4390
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4391
BEGIN
 
4392
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4393
f_charbig = 'updated by trigger'
 
4394
      WHERE f_int1 = - old.f_int1;
 
4395
END|
 
4396
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4397
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4398
        
 
4399
# check trigger-4 success:      1
 
4400
DROP TRIGGER trg_1;
 
4401
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4402
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4403
f_charbig = 'just inserted'
 
4404
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4405
DELETE FROM t0_aux
 
4406
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4407
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4408
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4409
'just inserted' FROM t0_template
 
4410
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4411
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4412
BEGIN
 
4413
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4414
f_charbig = 'updated by trigger'
 
4415
      WHERE f_int1 = new.f_int1;
 
4416
END|
 
4417
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4418
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4419
        
 
4420
# check trigger-5 success:      1
 
4421
DROP TRIGGER trg_1;
 
4422
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4423
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4424
f_charbig = 'just inserted'
 
4425
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4426
DELETE FROM t0_aux
 
4427
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4428
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4429
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4430
'just inserted' FROM t0_template
 
4431
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4432
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4433
BEGIN
 
4434
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4435
f_charbig = 'updated by trigger'
 
4436
      WHERE f_int1 = - old.f_int1;
 
4437
END|
 
4438
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4439
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4440
        
 
4441
# check trigger-6 success:      1
 
4442
DROP TRIGGER trg_1;
 
4443
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4444
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4445
f_charbig = 'just inserted'
 
4446
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4447
DELETE FROM t0_aux
 
4448
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4449
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4450
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4451
'just inserted' FROM t0_template
 
4452
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4453
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4454
BEGIN
 
4455
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4456
f_charbig = 'updated by trigger'
 
4457
      WHERE f_int1 = - old.f_int1;
 
4458
END|
 
4459
DELETE FROM t0_aux
 
4460
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4461
        
 
4462
# check trigger-7 success:      1
 
4463
DROP TRIGGER trg_1;
 
4464
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4465
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4466
f_charbig = 'just inserted'
 
4467
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4468
DELETE FROM t0_aux
 
4469
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4470
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4471
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4472
'just inserted' FROM t0_template
 
4473
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4474
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4475
BEGIN
 
4476
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4477
f_charbig = 'updated by trigger'
 
4478
      WHERE f_int1 = - old.f_int1;
 
4479
END|
 
4480
DELETE FROM t0_aux
 
4481
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4482
        
 
4483
# check trigger-8 success:      1
 
4484
DROP TRIGGER trg_1;
 
4485
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4486
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4487
f_charbig = 'just inserted'
 
4488
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4489
DELETE FROM t0_aux
 
4490
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4491
DELETE FROM t1
 
4492
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4493
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4494
BEGIN
 
4495
SET new.f_int1 = old.f_int1 + @max_row,
 
4496
new.f_int2 = old.f_int2 - @max_row,
 
4497
new.f_charbig = '####updated per update trigger####';
 
4498
END|
 
4499
UPDATE t1
 
4500
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4501
f_charbig = '####updated per update statement itself####';
 
4502
        
 
4503
# check trigger-9 success:      1
 
4504
DROP TRIGGER trg_2;
 
4505
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4506
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4507
f_charbig = CONCAT('===',f_char1,'===');
 
4508
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4509
BEGIN
 
4510
SET new.f_int1 = new.f_int1 + @max_row,
 
4511
new.f_int2 = new.f_int2 - @max_row,
 
4512
new.f_charbig = '####updated per update trigger####';
 
4513
END|
 
4514
UPDATE t1
 
4515
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4516
f_charbig = '####updated per update statement itself####';
 
4517
        
 
4518
# check trigger-10 success:     1
 
4519
DROP TRIGGER trg_2;
 
4520
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4521
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4522
f_charbig = CONCAT('===',f_char1,'===');
 
4523
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4524
BEGIN
 
4525
SET new.f_int1 = @my_max1 + @counter,
 
4526
new.f_int2 = @my_min2 - @counter,
 
4527
new.f_charbig = '####updated per insert trigger####';
 
4528
SET @counter = @counter + 1;
 
4529
END|
 
4530
SET @counter = 1;
 
4531
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4532
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4533
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4534
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4535
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4536
ORDER BY f_int1;
 
4537
DROP TRIGGER trg_3;
 
4538
        
 
4539
# check trigger-11 success:     1
 
4540
DELETE FROM t1
 
4541
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4542
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4543
AND f_charbig = '####updated per insert trigger####';
 
4544
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4545
BEGIN
 
4546
SET new.f_int1 = @my_max1 + @counter,
 
4547
new.f_int2 = @my_min2 - @counter,
 
4548
new.f_charbig = '####updated per insert trigger####';
 
4549
SET @counter = @counter + 1;
 
4550
END|
 
4551
SET @counter = 1;
 
4552
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4553
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
4554
SELECT CAST(f_int1 AS CHAR),
 
4555
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4556
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4557
ORDER BY f_int1;
 
4558
DROP TRIGGER trg_3;
 
4559
        
 
4560
# check trigger-12 success:     1
 
4561
DELETE FROM t1
 
4562
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4563
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4564
AND f_charbig = '####updated per insert trigger####';
 
4565
ANALYZE  TABLE t1;
 
4566
Table   Op      Msg_type        Msg_text
 
4567
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
4568
CHECK    TABLE t1 EXTENDED;
 
4569
Table   Op      Msg_type        Msg_text
 
4570
test.t1 check   note    The storage engine for the table doesn't support check
 
4571
CHECKSUM TABLE t1 EXTENDED;
 
4572
Table   Checksum
 
4573
test.t1 <some_value>
 
4574
OPTIMIZE TABLE t1;
 
4575
Table   Op      Msg_type        Msg_text
 
4576
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
4577
# check layout success:    1
 
4578
REPAIR   TABLE t1 EXTENDED;
 
4579
Table   Op      Msg_type        Msg_text
 
4580
test.t1 repair  note    The storage engine for the table doesn't support repair
 
4581
# check layout success:    1
 
4582
TRUNCATE t1;
 
4583
        
 
4584
# check TRUNCATE success:       1
 
4585
# check layout success:    1
 
4586
# End usability test (include/partition_check.inc)
 
4587
DROP TABLE t1;
 
4588
CREATE TABLE t1 (
 
4589
f_int1 INTEGER,
 
4590
f_int2 INTEGER,
 
4591
f_char1 CHAR(20),
 
4592
f_char2 CHAR(20),
 
4593
f_charbig VARCHAR(1000)
 
4594
)
 
4595
PARTITION BY RANGE(f_int1)
 
4596
SUBPARTITION BY HASH(f_int1)
 
4597
( PARTITION part1 VALUES LESS THAN (10)
 
4598
(SUBPARTITION subpart11 STORAGE ENGINE = 'ndbcluster',
 
4599
SUBPARTITION subpart12 STORAGE ENGINE = 'ndbcluster'),
 
4600
PARTITION part2 VALUES LESS THAN (2147483646)
 
4601
(SUBPARTITION subpart21 STORAGE ENGINE = 'ndbcluster',
 
4602
SUBPARTITION subpart22 STORAGE ENGINE = 'ndbcluster')
 
4603
);
 
4604
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4605
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
4606
# Start usability test (include/partition_check.inc)
 
4607
create_command
 
4608
SHOW CREATE TABLE t1;
 
4609
Table   Create Table
 
4610
t1      CREATE TABLE `t1` (
 
4611
  `f_int1` int(11) DEFAULT NULL,
 
4612
  `f_int2` int(11) DEFAULT NULL,
 
4613
  `f_char1` char(20) DEFAULT NULL,
 
4614
  `f_char2` char(20) DEFAULT NULL,
 
4615
  `f_charbig` varchar(1000) DEFAULT NULL
 
4616
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int1) (PARTITION part1 VALUES LESS THAN (10)  (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster), PARTITION part2 VALUES LESS THAN (2147483646)  (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster))
 
4617
 
 
4618
# check prerequisites-1 success:    1
 
4619
# check COUNT(*) success:    1
 
4620
# check MIN/MAX(f_int1) success:    1
 
4621
# check MIN/MAX(f_int2) success:    1
 
4622
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4623
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4624
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
4625
WHERE f_int1 IN (2,3);
 
4626
# check prerequisites-3 success:    1
 
4627
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
4628
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
4629
# check read via f_int1 success: 1
 
4630
# check read via f_int2 success: 1
 
4631
        
 
4632
# check multiple-1 success:     1
 
4633
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
4634
        
 
4635
# check multiple-2 success:     1
 
4636
INSERT INTO t1 SELECT * FROM t0_template
 
4637
WHERE MOD(f_int1,3) = 0;
 
4638
        
 
4639
# check multiple-3 success:     1
 
4640
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
4641
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
4642
AND @max_row_div2 + @max_row_div4;
 
4643
        
 
4644
# check multiple-4 success:     1
 
4645
DELETE FROM t1
 
4646
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
4647
AND @max_row_div2 + @max_row_div4 + @max_row;
 
4648
        
 
4649
# check multiple-5 success:     1
 
4650
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
4651
INSERT INTO t1
 
4652
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4653
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4654
f_charbig = '#SINGLE#';
 
4655
        
 
4656
# check single-1 success:       1
 
4657
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
4658
INSERT INTO t1
 
4659
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
4660
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
4661
f_charbig = '#SINGLE#';
 
4662
        
 
4663
# check single-2 success:       1
 
4664
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
4665
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
4666
UPDATE t1 SET f_int1 = @cur_value2
 
4667
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
4668
        
 
4669
# check single-3 success:       1
 
4670
SET @cur_value1= -1;
 
4671
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
4672
UPDATE t1 SET f_int1 = @cur_value1
 
4673
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
4674
        
 
4675
# check single-4 success:       1
 
4676
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
4677
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
4678
        
 
4679
# check single-5 success:       1
 
4680
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
4681
        
 
4682
# check single-6 success:       1
 
4683
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
4684
ERROR HY000: Table has no partition for value 2147483647
 
4685
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
4686
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
4687
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
4688
f_charbig = '#NULL#';
 
4689
INSERT INTO t1
 
4690
SET f_int1 = NULL , f_int2 = -@max_row,
 
4691
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
4692
f_charbig = '#NULL#';
 
4693
# check null success:    1
 
4694
        
 
4695
# check null-1 success:         1
 
4696
UPDATE t1 SET f_int1 = -@max_row
 
4697
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4698
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4699
        
 
4700
# check null-2 success:         1
 
4701
UPDATE t1 SET f_int1 = NULL
 
4702
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4703
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4704
        
 
4705
# check null-3 success:         1
 
4706
DELETE FROM t1
 
4707
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
4708
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
4709
        
 
4710
# check null-4 success:         1
 
4711
DELETE FROM t1
 
4712
WHERE f_int1 = 0 AND f_int2 = 0
 
4713
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
4714
AND f_charbig = '#NULL#';
 
4715
SET AUTOCOMMIT= 0;
 
4716
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4717
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4718
FROM t0_template source_tab
 
4719
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4720
        
 
4721
# check transactions-1 success:         1
 
4722
COMMIT WORK;
 
4723
        
 
4724
# check transactions-2 success:         1
 
4725
ROLLBACK WORK;
 
4726
        
 
4727
# check transactions-3 success:         1
 
4728
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4729
COMMIT WORK;
 
4730
ROLLBACK WORK;
 
4731
        
 
4732
# check transactions-4 success:         1
 
4733
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4734
SELECT f_int1, f_int1, '', '', 'was inserted'
 
4735
FROM t0_template source_tab
 
4736
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4737
        
 
4738
# check transactions-5 success:         1
 
4739
ROLLBACK WORK;
 
4740
        
 
4741
# check transactions-6 success:         1
 
4742
# INFO: Storage engine used for t1 seems to be transactional.
 
4743
COMMIT;
 
4744
        
 
4745
# check transactions-7 success:         1
 
4746
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4747
COMMIT WORK;
 
4748
SET @@session.sql_mode = 'traditional';
 
4749
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
4750
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4751
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
4752
'', '', 'was inserted' FROM t0_template
 
4753
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
4754
ERROR 22012: Division by 0
 
4755
COMMIT;
 
4756
        
 
4757
# check transactions-8 success:         1
 
4758
# INFO: Storage engine used for t1 seems to be unable to revert
 
4759
#       changes made by the failing statement.
 
4760
SET @@session.sql_mode = '';
 
4761
SET AUTOCOMMIT= 1;
 
4762
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
4763
COMMIT WORK;
 
4764
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
4765
        
 
4766
# check special-1 success:      1
 
4767
UPDATE t1 SET f_charbig = '';
 
4768
        
 
4769
# check special-2 success:      1
 
4770
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
4771
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4772
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
4773
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4774
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4775
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4776
'just inserted' FROM t0_template
 
4777
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4778
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
4779
BEGIN
 
4780
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4781
f_charbig = 'updated by trigger'
 
4782
      WHERE f_int1 = new.f_int1;
 
4783
END|
 
4784
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4785
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4786
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4787
        
 
4788
# check trigger-1 success:      1
 
4789
DROP TRIGGER trg_1;
 
4790
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4791
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4792
f_charbig = 'just inserted'
 
4793
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4794
DELETE FROM t0_aux
 
4795
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4796
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4797
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4798
'just inserted' FROM t0_template
 
4799
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4800
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
4801
BEGIN
 
4802
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4803
f_charbig = 'updated by trigger'
 
4804
      WHERE f_int1 = new.f_int1;
 
4805
END|
 
4806
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4807
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
4808
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4809
        
 
4810
# check trigger-2 success:      1
 
4811
DROP TRIGGER trg_1;
 
4812
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4813
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4814
f_charbig = 'just inserted'
 
4815
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4816
DELETE FROM t0_aux
 
4817
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4818
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4819
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4820
'just inserted' FROM t0_template
 
4821
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4822
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4823
BEGIN
 
4824
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4825
f_charbig = 'updated by trigger'
 
4826
      WHERE f_int1 = new.f_int1;
 
4827
END|
 
4828
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4829
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4830
        
 
4831
# check trigger-3 success:      1
 
4832
DROP TRIGGER trg_1;
 
4833
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4834
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4835
f_charbig = 'just inserted'
 
4836
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4837
DELETE FROM t0_aux
 
4838
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4839
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4840
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4841
'just inserted' FROM t0_template
 
4842
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4843
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
4844
BEGIN
 
4845
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4846
f_charbig = 'updated by trigger'
 
4847
      WHERE f_int1 = - old.f_int1;
 
4848
END|
 
4849
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4850
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4851
        
 
4852
# check trigger-4 success:      1
 
4853
DROP TRIGGER trg_1;
 
4854
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4855
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4856
f_charbig = 'just inserted'
 
4857
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4858
DELETE FROM t0_aux
 
4859
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4860
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4861
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4862
'just inserted' FROM t0_template
 
4863
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4864
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4865
BEGIN
 
4866
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4867
f_charbig = 'updated by trigger'
 
4868
      WHERE f_int1 = new.f_int1;
 
4869
END|
 
4870
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4871
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4872
        
 
4873
# check trigger-5 success:      1
 
4874
DROP TRIGGER trg_1;
 
4875
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4876
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4877
f_charbig = 'just inserted'
 
4878
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4879
DELETE FROM t0_aux
 
4880
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4881
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4882
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4883
'just inserted' FROM t0_template
 
4884
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4885
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
4886
BEGIN
 
4887
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4888
f_charbig = 'updated by trigger'
 
4889
      WHERE f_int1 = - old.f_int1;
 
4890
END|
 
4891
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
4892
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4893
        
 
4894
# check trigger-6 success:      1
 
4895
DROP TRIGGER trg_1;
 
4896
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4897
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4898
f_charbig = 'just inserted'
 
4899
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4900
DELETE FROM t0_aux
 
4901
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4902
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4903
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4904
'just inserted' FROM t0_template
 
4905
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4906
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
4907
BEGIN
 
4908
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4909
f_charbig = 'updated by trigger'
 
4910
      WHERE f_int1 = - old.f_int1;
 
4911
END|
 
4912
DELETE FROM t0_aux
 
4913
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4914
        
 
4915
# check trigger-7 success:      1
 
4916
DROP TRIGGER trg_1;
 
4917
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4918
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4919
f_charbig = 'just inserted'
 
4920
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4921
DELETE FROM t0_aux
 
4922
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4923
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
4924
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
4925
'just inserted' FROM t0_template
 
4926
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4927
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
4928
BEGIN
 
4929
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
4930
f_charbig = 'updated by trigger'
 
4931
      WHERE f_int1 = - old.f_int1;
 
4932
END|
 
4933
DELETE FROM t0_aux
 
4934
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
4935
        
 
4936
# check trigger-8 success:      1
 
4937
DROP TRIGGER trg_1;
 
4938
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4939
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4940
f_charbig = 'just inserted'
 
4941
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
4942
DELETE FROM t0_aux
 
4943
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4944
DELETE FROM t1
 
4945
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
4946
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4947
BEGIN
 
4948
SET new.f_int1 = old.f_int1 + @max_row,
 
4949
new.f_int2 = old.f_int2 - @max_row,
 
4950
new.f_charbig = '####updated per update trigger####';
 
4951
END|
 
4952
UPDATE t1
 
4953
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4954
f_charbig = '####updated per update statement itself####';
 
4955
        
 
4956
# check trigger-9 success:      1
 
4957
DROP TRIGGER trg_2;
 
4958
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4959
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4960
f_charbig = CONCAT('===',f_char1,'===');
 
4961
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
4962
BEGIN
 
4963
SET new.f_int1 = new.f_int1 + @max_row,
 
4964
new.f_int2 = new.f_int2 - @max_row,
 
4965
new.f_charbig = '####updated per update trigger####';
 
4966
END|
 
4967
UPDATE t1
 
4968
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
4969
f_charbig = '####updated per update statement itself####';
 
4970
        
 
4971
# check trigger-10 success:     1
 
4972
DROP TRIGGER trg_2;
 
4973
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
4974
f_int2 = CAST(f_char1 AS SIGNED INT),
 
4975
f_charbig = CONCAT('===',f_char1,'===');
 
4976
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4977
BEGIN
 
4978
SET new.f_int1 = @my_max1 + @counter,
 
4979
new.f_int2 = @my_min2 - @counter,
 
4980
new.f_charbig = '####updated per insert trigger####';
 
4981
SET @counter = @counter + 1;
 
4982
END|
 
4983
SET @counter = 1;
 
4984
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
4985
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
4986
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
4987
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
4988
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
4989
ORDER BY f_int1;
 
4990
DROP TRIGGER trg_3;
 
4991
        
 
4992
# check trigger-11 success:     1
 
4993
DELETE FROM t1
 
4994
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
4995
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
4996
AND f_charbig = '####updated per insert trigger####';
 
4997
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
4998
BEGIN
 
4999
SET new.f_int1 = @my_max1 + @counter,
 
5000
new.f_int2 = @my_min2 - @counter,
 
5001
new.f_charbig = '####updated per insert trigger####';
 
5002
SET @counter = @counter + 1;
 
5003
END|
 
5004
SET @counter = 1;
 
5005
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5006
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5007
SELECT CAST(f_int1 AS CHAR),
 
5008
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5009
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5010
ORDER BY f_int1;
 
5011
DROP TRIGGER trg_3;
 
5012
        
 
5013
# check trigger-12 success:     1
 
5014
DELETE FROM t1
 
5015
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5016
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5017
AND f_charbig = '####updated per insert trigger####';
 
5018
ANALYZE  TABLE t1;
 
5019
Table   Op      Msg_type        Msg_text
 
5020
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
5021
CHECK    TABLE t1 EXTENDED;
 
5022
Table   Op      Msg_type        Msg_text
 
5023
test.t1 check   note    The storage engine for the table doesn't support check
 
5024
CHECKSUM TABLE t1 EXTENDED;
 
5025
Table   Checksum
 
5026
test.t1 <some_value>
 
5027
OPTIMIZE TABLE t1;
 
5028
Table   Op      Msg_type        Msg_text
 
5029
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
5030
# check layout success:    1
 
5031
REPAIR   TABLE t1 EXTENDED;
 
5032
Table   Op      Msg_type        Msg_text
 
5033
test.t1 repair  note    The storage engine for the table doesn't support repair
 
5034
# check layout success:    1
 
5035
TRUNCATE t1;
 
5036
        
 
5037
# check TRUNCATE success:       1
 
5038
# check layout success:    1
 
5039
# End usability test (include/partition_check.inc)
 
5040
DROP TABLE t1;
 
5041
# 6.2 Storage engine assignment after partition name + after
 
5042
#     subpartition name
 
5043
CREATE TABLE t1 (
 
5044
f_int1 INTEGER,
 
5045
f_int2 INTEGER,
 
5046
f_char1 CHAR(20),
 
5047
f_char2 CHAR(20),
 
5048
f_charbig VARCHAR(1000)
 
5049
)
 
5050
PARTITION BY RANGE(f_int1)
 
5051
SUBPARTITION BY HASH(f_int1)
 
5052
( PARTITION part1 VALUES LESS THAN (10) STORAGE ENGINE = 'ndbcluster'
 
5053
(SUBPARTITION subpart11 STORAGE ENGINE = 'ndbcluster',
 
5054
SUBPARTITION subpart12 STORAGE ENGINE = 'ndbcluster'),
 
5055
PARTITION part2 VALUES LESS THAN (2147483646)
 
5056
(SUBPARTITION subpart21 STORAGE ENGINE = 'ndbcluster',
 
5057
SUBPARTITION subpart22 STORAGE ENGINE = 'ndbcluster')
 
5058
);
 
5059
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5060
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
5061
# Start usability test (include/partition_check.inc)
 
5062
create_command
 
5063
SHOW CREATE TABLE t1;
 
5064
Table   Create Table
 
5065
t1      CREATE TABLE `t1` (
 
5066
  `f_int1` int(11) DEFAULT NULL,
 
5067
  `f_int2` int(11) DEFAULT NULL,
 
5068
  `f_char1` char(20) DEFAULT NULL,
 
5069
  `f_char2` char(20) DEFAULT NULL,
 
5070
  `f_charbig` varchar(1000) DEFAULT NULL
 
5071
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int1) (PARTITION part1 VALUES LESS THAN (10)  (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster), PARTITION part2 VALUES LESS THAN (2147483646)  (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster))
 
5072
 
 
5073
# check prerequisites-1 success:    1
 
5074
# check COUNT(*) success:    1
 
5075
# check MIN/MAX(f_int1) success:    1
 
5076
# check MIN/MAX(f_int2) success:    1
 
5077
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5078
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5079
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5080
WHERE f_int1 IN (2,3);
 
5081
# check prerequisites-3 success:    1
 
5082
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5083
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
5084
# check read via f_int1 success: 1
 
5085
# check read via f_int2 success: 1
 
5086
        
 
5087
# check multiple-1 success:     1
 
5088
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5089
        
 
5090
# check multiple-2 success:     1
 
5091
INSERT INTO t1 SELECT * FROM t0_template
 
5092
WHERE MOD(f_int1,3) = 0;
 
5093
        
 
5094
# check multiple-3 success:     1
 
5095
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5096
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5097
AND @max_row_div2 + @max_row_div4;
 
5098
        
 
5099
# check multiple-4 success:     1
 
5100
DELETE FROM t1
 
5101
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5102
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5103
        
 
5104
# check multiple-5 success:     1
 
5105
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5106
INSERT INTO t1
 
5107
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5108
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5109
f_charbig = '#SINGLE#';
 
5110
        
 
5111
# check single-1 success:       1
 
5112
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5113
INSERT INTO t1
 
5114
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5115
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5116
f_charbig = '#SINGLE#';
 
5117
        
 
5118
# check single-2 success:       1
 
5119
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5120
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5121
UPDATE t1 SET f_int1 = @cur_value2
 
5122
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5123
        
 
5124
# check single-3 success:       1
 
5125
SET @cur_value1= -1;
 
5126
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5127
UPDATE t1 SET f_int1 = @cur_value1
 
5128
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5129
        
 
5130
# check single-4 success:       1
 
5131
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5132
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5133
        
 
5134
# check single-5 success:       1
 
5135
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5136
        
 
5137
# check single-6 success:       1
 
5138
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5139
ERROR HY000: Table has no partition for value 2147483647
 
5140
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5141
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5142
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5143
f_charbig = '#NULL#';
 
5144
INSERT INTO t1
 
5145
SET f_int1 = NULL , f_int2 = -@max_row,
 
5146
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5147
f_charbig = '#NULL#';
 
5148
# check null success:    1
 
5149
        
 
5150
# check null-1 success:         1
 
5151
UPDATE t1 SET f_int1 = -@max_row
 
5152
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5153
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5154
        
 
5155
# check null-2 success:         1
 
5156
UPDATE t1 SET f_int1 = NULL
 
5157
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5158
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5159
        
 
5160
# check null-3 success:         1
 
5161
DELETE FROM t1
 
5162
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5163
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5164
        
 
5165
# check null-4 success:         1
 
5166
DELETE FROM t1
 
5167
WHERE f_int1 = 0 AND f_int2 = 0
 
5168
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5169
AND f_charbig = '#NULL#';
 
5170
SET AUTOCOMMIT= 0;
 
5171
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5172
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5173
FROM t0_template source_tab
 
5174
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5175
        
 
5176
# check transactions-1 success:         1
 
5177
COMMIT WORK;
 
5178
        
 
5179
# check transactions-2 success:         1
 
5180
ROLLBACK WORK;
 
5181
        
 
5182
# check transactions-3 success:         1
 
5183
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5184
COMMIT WORK;
 
5185
ROLLBACK WORK;
 
5186
        
 
5187
# check transactions-4 success:         1
 
5188
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5189
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5190
FROM t0_template source_tab
 
5191
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5192
        
 
5193
# check transactions-5 success:         1
 
5194
ROLLBACK WORK;
 
5195
        
 
5196
# check transactions-6 success:         1
 
5197
# INFO: Storage engine used for t1 seems to be transactional.
 
5198
COMMIT;
 
5199
        
 
5200
# check transactions-7 success:         1
 
5201
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5202
COMMIT WORK;
 
5203
SET @@session.sql_mode = 'traditional';
 
5204
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5205
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5206
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5207
'', '', 'was inserted' FROM t0_template
 
5208
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5209
ERROR 22012: Division by 0
 
5210
COMMIT;
 
5211
        
 
5212
# check transactions-8 success:         1
 
5213
# INFO: Storage engine used for t1 seems to be unable to revert
 
5214
#       changes made by the failing statement.
 
5215
SET @@session.sql_mode = '';
 
5216
SET AUTOCOMMIT= 1;
 
5217
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5218
COMMIT WORK;
 
5219
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5220
        
 
5221
# check special-1 success:      1
 
5222
UPDATE t1 SET f_charbig = '';
 
5223
        
 
5224
# check special-2 success:      1
 
5225
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5226
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5227
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5228
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5229
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5230
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5231
'just inserted' FROM t0_template
 
5232
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5233
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5234
BEGIN
 
5235
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5236
f_charbig = 'updated by trigger'
 
5237
      WHERE f_int1 = new.f_int1;
 
5238
END|
 
5239
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5240
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5241
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5242
        
 
5243
# check trigger-1 success:      1
 
5244
DROP TRIGGER trg_1;
 
5245
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5246
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5247
f_charbig = 'just inserted'
 
5248
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5249
DELETE FROM t0_aux
 
5250
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5251
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5252
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5253
'just inserted' FROM t0_template
 
5254
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5255
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5256
BEGIN
 
5257
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5258
f_charbig = 'updated by trigger'
 
5259
      WHERE f_int1 = new.f_int1;
 
5260
END|
 
5261
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5262
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5263
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5264
        
 
5265
# check trigger-2 success:      1
 
5266
DROP TRIGGER trg_1;
 
5267
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5268
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5269
f_charbig = 'just inserted'
 
5270
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5271
DELETE FROM t0_aux
 
5272
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5273
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5274
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5275
'just inserted' FROM t0_template
 
5276
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5277
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5278
BEGIN
 
5279
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5280
f_charbig = 'updated by trigger'
 
5281
      WHERE f_int1 = new.f_int1;
 
5282
END|
 
5283
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5284
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5285
        
 
5286
# check trigger-3 success:      1
 
5287
DROP TRIGGER trg_1;
 
5288
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5289
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5290
f_charbig = 'just inserted'
 
5291
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5292
DELETE FROM t0_aux
 
5293
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5294
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5295
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5296
'just inserted' FROM t0_template
 
5297
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5298
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5299
BEGIN
 
5300
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5301
f_charbig = 'updated by trigger'
 
5302
      WHERE f_int1 = - old.f_int1;
 
5303
END|
 
5304
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5305
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5306
        
 
5307
# check trigger-4 success:      1
 
5308
DROP TRIGGER trg_1;
 
5309
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5310
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5311
f_charbig = 'just inserted'
 
5312
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5313
DELETE FROM t0_aux
 
5314
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5315
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5316
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5317
'just inserted' FROM t0_template
 
5318
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5319
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5320
BEGIN
 
5321
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5322
f_charbig = 'updated by trigger'
 
5323
      WHERE f_int1 = new.f_int1;
 
5324
END|
 
5325
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5326
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5327
        
 
5328
# check trigger-5 success:      1
 
5329
DROP TRIGGER trg_1;
 
5330
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5331
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5332
f_charbig = 'just inserted'
 
5333
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5334
DELETE FROM t0_aux
 
5335
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5336
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5337
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5338
'just inserted' FROM t0_template
 
5339
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5340
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5341
BEGIN
 
5342
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5343
f_charbig = 'updated by trigger'
 
5344
      WHERE f_int1 = - old.f_int1;
 
5345
END|
 
5346
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5347
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5348
        
 
5349
# check trigger-6 success:      1
 
5350
DROP TRIGGER trg_1;
 
5351
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5352
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5353
f_charbig = 'just inserted'
 
5354
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5355
DELETE FROM t0_aux
 
5356
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5357
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5358
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5359
'just inserted' FROM t0_template
 
5360
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5361
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5362
BEGIN
 
5363
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5364
f_charbig = 'updated by trigger'
 
5365
      WHERE f_int1 = - old.f_int1;
 
5366
END|
 
5367
DELETE FROM t0_aux
 
5368
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5369
        
 
5370
# check trigger-7 success:      1
 
5371
DROP TRIGGER trg_1;
 
5372
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5373
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5374
f_charbig = 'just inserted'
 
5375
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5376
DELETE FROM t0_aux
 
5377
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5378
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5379
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5380
'just inserted' FROM t0_template
 
5381
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5382
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5383
BEGIN
 
5384
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5385
f_charbig = 'updated by trigger'
 
5386
      WHERE f_int1 = - old.f_int1;
 
5387
END|
 
5388
DELETE FROM t0_aux
 
5389
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5390
        
 
5391
# check trigger-8 success:      1
 
5392
DROP TRIGGER trg_1;
 
5393
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5394
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5395
f_charbig = 'just inserted'
 
5396
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5397
DELETE FROM t0_aux
 
5398
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5399
DELETE FROM t1
 
5400
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5401
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5402
BEGIN
 
5403
SET new.f_int1 = old.f_int1 + @max_row,
 
5404
new.f_int2 = old.f_int2 - @max_row,
 
5405
new.f_charbig = '####updated per update trigger####';
 
5406
END|
 
5407
UPDATE t1
 
5408
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5409
f_charbig = '####updated per update statement itself####';
 
5410
        
 
5411
# check trigger-9 success:      1
 
5412
DROP TRIGGER trg_2;
 
5413
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5414
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5415
f_charbig = CONCAT('===',f_char1,'===');
 
5416
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5417
BEGIN
 
5418
SET new.f_int1 = new.f_int1 + @max_row,
 
5419
new.f_int2 = new.f_int2 - @max_row,
 
5420
new.f_charbig = '####updated per update trigger####';
 
5421
END|
 
5422
UPDATE t1
 
5423
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5424
f_charbig = '####updated per update statement itself####';
 
5425
        
 
5426
# check trigger-10 success:     1
 
5427
DROP TRIGGER trg_2;
 
5428
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5429
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5430
f_charbig = CONCAT('===',f_char1,'===');
 
5431
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5432
BEGIN
 
5433
SET new.f_int1 = @my_max1 + @counter,
 
5434
new.f_int2 = @my_min2 - @counter,
 
5435
new.f_charbig = '####updated per insert trigger####';
 
5436
SET @counter = @counter + 1;
 
5437
END|
 
5438
SET @counter = 1;
 
5439
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5440
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5441
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5442
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5443
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5444
ORDER BY f_int1;
 
5445
DROP TRIGGER trg_3;
 
5446
        
 
5447
# check trigger-11 success:     1
 
5448
DELETE FROM t1
 
5449
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5450
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5451
AND f_charbig = '####updated per insert trigger####';
 
5452
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5453
BEGIN
 
5454
SET new.f_int1 = @my_max1 + @counter,
 
5455
new.f_int2 = @my_min2 - @counter,
 
5456
new.f_charbig = '####updated per insert trigger####';
 
5457
SET @counter = @counter + 1;
 
5458
END|
 
5459
SET @counter = 1;
 
5460
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5461
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5462
SELECT CAST(f_int1 AS CHAR),
 
5463
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5464
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5465
ORDER BY f_int1;
 
5466
DROP TRIGGER trg_3;
 
5467
        
 
5468
# check trigger-12 success:     1
 
5469
DELETE FROM t1
 
5470
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5471
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5472
AND f_charbig = '####updated per insert trigger####';
 
5473
ANALYZE  TABLE t1;
 
5474
Table   Op      Msg_type        Msg_text
 
5475
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
5476
CHECK    TABLE t1 EXTENDED;
 
5477
Table   Op      Msg_type        Msg_text
 
5478
test.t1 check   note    The storage engine for the table doesn't support check
 
5479
CHECKSUM TABLE t1 EXTENDED;
 
5480
Table   Checksum
 
5481
test.t1 <some_value>
 
5482
OPTIMIZE TABLE t1;
 
5483
Table   Op      Msg_type        Msg_text
 
5484
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
5485
# check layout success:    1
 
5486
REPAIR   TABLE t1 EXTENDED;
 
5487
Table   Op      Msg_type        Msg_text
 
5488
test.t1 repair  note    The storage engine for the table doesn't support repair
 
5489
# check layout success:    1
 
5490
TRUNCATE t1;
 
5491
        
 
5492
# check TRUNCATE success:       1
 
5493
# check layout success:    1
 
5494
# End usability test (include/partition_check.inc)
 
5495
DROP TABLE t1;
 
5496
#------------------------------------------------------------------------
 
5497
# 6 Session default engine differs from engine used within create table
 
5498
#------------------------------------------------------------------------
 
5499
SET SESSION storage_engine='MEMORY';
 
5500
CREATE TABLE t1 (
 
5501
f_int1 INTEGER,
 
5502
f_int2 INTEGER,
 
5503
f_char1 CHAR(20),
 
5504
f_char2 CHAR(20),
 
5505
f_charbig VARCHAR(1000)
 
5506
)
 
5507
PARTITION BY HASH(f_int1) ( PARTITION part1 ENGINE = 'ndbcluster');
 
5508
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5509
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
5510
# Start usability test (include/partition_check.inc)
 
5511
create_command
 
5512
SHOW CREATE TABLE t1;
 
5513
Table   Create Table
 
5514
t1      CREATE TABLE `t1` (
 
5515
  `f_int1` int(11) DEFAULT NULL,
 
5516
  `f_int2` int(11) DEFAULT NULL,
 
5517
  `f_char1` char(20) DEFAULT NULL,
 
5518
  `f_char2` char(20) DEFAULT NULL,
 
5519
  `f_charbig` varchar(1000) DEFAULT NULL
 
5520
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY HASH (f_int1) (PARTITION part1  ENGINE = ndbcluster)
 
5521
 
 
5522
# check prerequisites-1 success:    1
 
5523
# check COUNT(*) success:    1
 
5524
# check MIN/MAX(f_int1) success:    1
 
5525
# check MIN/MAX(f_int2) success:    1
 
5526
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5527
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5528
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5529
WHERE f_int1 IN (2,3);
 
5530
# check prerequisites-3 success:    1
 
5531
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5532
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
5533
# check read via f_int1 success: 1
 
5534
# check read via f_int2 success: 1
 
5535
        
 
5536
# check multiple-1 success:     1
 
5537
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5538
        
 
5539
# check multiple-2 success:     1
 
5540
INSERT INTO t1 SELECT * FROM t0_template
 
5541
WHERE MOD(f_int1,3) = 0;
 
5542
        
 
5543
# check multiple-3 success:     1
 
5544
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5545
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5546
AND @max_row_div2 + @max_row_div4;
 
5547
        
 
5548
# check multiple-4 success:     1
 
5549
DELETE FROM t1
 
5550
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
5551
AND @max_row_div2 + @max_row_div4 + @max_row;
 
5552
        
 
5553
# check multiple-5 success:     1
 
5554
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
5555
INSERT INTO t1
 
5556
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5557
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5558
f_charbig = '#SINGLE#';
 
5559
        
 
5560
# check single-1 success:       1
 
5561
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
5562
INSERT INTO t1
 
5563
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
5564
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
5565
f_charbig = '#SINGLE#';
 
5566
        
 
5567
# check single-2 success:       1
 
5568
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
5569
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
5570
UPDATE t1 SET f_int1 = @cur_value2
 
5571
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
5572
        
 
5573
# check single-3 success:       1
 
5574
SET @cur_value1= -1;
 
5575
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
5576
UPDATE t1 SET f_int1 = @cur_value1
 
5577
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
5578
        
 
5579
# check single-4 success:       1
 
5580
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
5581
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
5582
        
 
5583
# check single-5 success:       1
 
5584
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
5585
        
 
5586
# check single-6 success:       1
 
5587
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
5588
        
 
5589
# check single-7 success:       1
 
5590
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
5591
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
5592
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
5593
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
5594
f_charbig = '#NULL#';
 
5595
INSERT INTO t1
 
5596
SET f_int1 = NULL , f_int2 = -@max_row,
 
5597
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
5598
f_charbig = '#NULL#';
 
5599
# check null success:    1
 
5600
        
 
5601
# check null-1 success:         1
 
5602
UPDATE t1 SET f_int1 = -@max_row
 
5603
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5604
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5605
        
 
5606
# check null-2 success:         1
 
5607
UPDATE t1 SET f_int1 = NULL
 
5608
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5609
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5610
        
 
5611
# check null-3 success:         1
 
5612
DELETE FROM t1
 
5613
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
5614
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
5615
        
 
5616
# check null-4 success:         1
 
5617
DELETE FROM t1
 
5618
WHERE f_int1 = 0 AND f_int2 = 0
 
5619
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
5620
AND f_charbig = '#NULL#';
 
5621
SET AUTOCOMMIT= 0;
 
5622
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5623
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5624
FROM t0_template source_tab
 
5625
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5626
        
 
5627
# check transactions-1 success:         1
 
5628
COMMIT WORK;
 
5629
        
 
5630
# check transactions-2 success:         1
 
5631
ROLLBACK WORK;
 
5632
        
 
5633
# check transactions-3 success:         1
 
5634
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5635
COMMIT WORK;
 
5636
ROLLBACK WORK;
 
5637
        
 
5638
# check transactions-4 success:         1
 
5639
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5640
SELECT f_int1, f_int1, '', '', 'was inserted'
 
5641
FROM t0_template source_tab
 
5642
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5643
        
 
5644
# check transactions-5 success:         1
 
5645
ROLLBACK WORK;
 
5646
Warnings:
 
5647
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
5648
        
 
5649
# check transactions-6 success:         1
 
5650
# INFO: Storage engine used for t1 seems to be not transactional.
 
5651
COMMIT;
 
5652
        
 
5653
# check transactions-7 success:         1
 
5654
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5655
COMMIT WORK;
 
5656
SET @@session.sql_mode = 'traditional';
 
5657
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
5658
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5659
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
5660
'', '', 'was inserted' FROM t0_template
 
5661
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
5662
ERROR 22012: Division by 0
 
5663
COMMIT;
 
5664
        
 
5665
# check transactions-8 success:         1
 
5666
# INFO: Storage engine used for t1 seems to be unable to revert
 
5667
#       changes made by the failing statement.
 
5668
SET @@session.sql_mode = '';
 
5669
SET AUTOCOMMIT= 1;
 
5670
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
5671
COMMIT WORK;
 
5672
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
5673
        
 
5674
# check special-1 success:      1
 
5675
UPDATE t1 SET f_charbig = '';
 
5676
        
 
5677
# check special-2 success:      1
 
5678
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
5679
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5680
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
5681
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5682
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5683
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5684
'just inserted' FROM t0_template
 
5685
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5686
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
5687
BEGIN
 
5688
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5689
f_charbig = 'updated by trigger'
 
5690
      WHERE f_int1 = new.f_int1;
 
5691
END|
 
5692
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5693
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5694
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5695
        
 
5696
# check trigger-1 success:      1
 
5697
DROP TRIGGER trg_1;
 
5698
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5699
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5700
f_charbig = 'just inserted'
 
5701
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5702
DELETE FROM t0_aux
 
5703
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5704
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5705
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5706
'just inserted' FROM t0_template
 
5707
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5708
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
5709
BEGIN
 
5710
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5711
f_charbig = 'updated by trigger'
 
5712
      WHERE f_int1 = new.f_int1;
 
5713
END|
 
5714
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5715
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
5716
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5717
        
 
5718
# check trigger-2 success:      1
 
5719
DROP TRIGGER trg_1;
 
5720
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5721
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5722
f_charbig = 'just inserted'
 
5723
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5724
DELETE FROM t0_aux
 
5725
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5726
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5727
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5728
'just inserted' FROM t0_template
 
5729
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5730
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5731
BEGIN
 
5732
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5733
f_charbig = 'updated by trigger'
 
5734
      WHERE f_int1 = new.f_int1;
 
5735
END|
 
5736
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5737
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5738
        
 
5739
# check trigger-3 success:      1
 
5740
DROP TRIGGER trg_1;
 
5741
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5742
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5743
f_charbig = 'just inserted'
 
5744
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5745
DELETE FROM t0_aux
 
5746
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5747
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5748
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5749
'just inserted' FROM t0_template
 
5750
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5751
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
5752
BEGIN
 
5753
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5754
f_charbig = 'updated by trigger'
 
5755
      WHERE f_int1 = - old.f_int1;
 
5756
END|
 
5757
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5758
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5759
        
 
5760
# check trigger-4 success:      1
 
5761
DROP TRIGGER trg_1;
 
5762
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5763
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5764
f_charbig = 'just inserted'
 
5765
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5766
DELETE FROM t0_aux
 
5767
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5768
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5769
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5770
'just inserted' FROM t0_template
 
5771
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5772
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5773
BEGIN
 
5774
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5775
f_charbig = 'updated by trigger'
 
5776
      WHERE f_int1 = new.f_int1;
 
5777
END|
 
5778
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5779
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5780
        
 
5781
# check trigger-5 success:      1
 
5782
DROP TRIGGER trg_1;
 
5783
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5784
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5785
f_charbig = 'just inserted'
 
5786
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5787
DELETE FROM t0_aux
 
5788
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5789
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5790
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5791
'just inserted' FROM t0_template
 
5792
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5793
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
5794
BEGIN
 
5795
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5796
f_charbig = 'updated by trigger'
 
5797
      WHERE f_int1 = - old.f_int1;
 
5798
END|
 
5799
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
5800
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5801
        
 
5802
# check trigger-6 success:      1
 
5803
DROP TRIGGER trg_1;
 
5804
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5805
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5806
f_charbig = 'just inserted'
 
5807
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5808
DELETE FROM t0_aux
 
5809
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5810
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5811
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5812
'just inserted' FROM t0_template
 
5813
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5814
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
5815
BEGIN
 
5816
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5817
f_charbig = 'updated by trigger'
 
5818
      WHERE f_int1 = - old.f_int1;
 
5819
END|
 
5820
DELETE FROM t0_aux
 
5821
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5822
        
 
5823
# check trigger-7 success:      1
 
5824
DROP TRIGGER trg_1;
 
5825
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5826
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5827
f_charbig = 'just inserted'
 
5828
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5829
DELETE FROM t0_aux
 
5830
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5831
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5832
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
5833
'just inserted' FROM t0_template
 
5834
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5835
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
5836
BEGIN
 
5837
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
5838
f_charbig = 'updated by trigger'
 
5839
      WHERE f_int1 = - old.f_int1;
 
5840
END|
 
5841
DELETE FROM t0_aux
 
5842
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
5843
        
 
5844
# check trigger-8 success:      1
 
5845
DROP TRIGGER trg_1;
 
5846
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5847
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5848
f_charbig = 'just inserted'
 
5849
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
5850
DELETE FROM t0_aux
 
5851
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5852
DELETE FROM t1
 
5853
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
5854
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5855
BEGIN
 
5856
SET new.f_int1 = old.f_int1 + @max_row,
 
5857
new.f_int2 = old.f_int2 - @max_row,
 
5858
new.f_charbig = '####updated per update trigger####';
 
5859
END|
 
5860
UPDATE t1
 
5861
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5862
f_charbig = '####updated per update statement itself####';
 
5863
        
 
5864
# check trigger-9 success:      1
 
5865
DROP TRIGGER trg_2;
 
5866
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5867
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5868
f_charbig = CONCAT('===',f_char1,'===');
 
5869
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
5870
BEGIN
 
5871
SET new.f_int1 = new.f_int1 + @max_row,
 
5872
new.f_int2 = new.f_int2 - @max_row,
 
5873
new.f_charbig = '####updated per update trigger####';
 
5874
END|
 
5875
UPDATE t1
 
5876
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
5877
f_charbig = '####updated per update statement itself####';
 
5878
        
 
5879
# check trigger-10 success:     1
 
5880
DROP TRIGGER trg_2;
 
5881
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
5882
f_int2 = CAST(f_char1 AS SIGNED INT),
 
5883
f_charbig = CONCAT('===',f_char1,'===');
 
5884
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5885
BEGIN
 
5886
SET new.f_int1 = @my_max1 + @counter,
 
5887
new.f_int2 = @my_min2 - @counter,
 
5888
new.f_charbig = '####updated per insert trigger####';
 
5889
SET @counter = @counter + 1;
 
5890
END|
 
5891
SET @counter = 1;
 
5892
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5893
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5894
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5895
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5896
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5897
ORDER BY f_int1;
 
5898
DROP TRIGGER trg_3;
 
5899
        
 
5900
# check trigger-11 success:     1
 
5901
DELETE FROM t1
 
5902
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5903
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5904
AND f_charbig = '####updated per insert trigger####';
 
5905
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
5906
BEGIN
 
5907
SET new.f_int1 = @my_max1 + @counter,
 
5908
new.f_int2 = @my_min2 - @counter,
 
5909
new.f_charbig = '####updated per insert trigger####';
 
5910
SET @counter = @counter + 1;
 
5911
END|
 
5912
SET @counter = 1;
 
5913
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
5914
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
5915
SELECT CAST(f_int1 AS CHAR),
 
5916
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
5917
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
5918
ORDER BY f_int1;
 
5919
DROP TRIGGER trg_3;
 
5920
        
 
5921
# check trigger-12 success:     1
 
5922
DELETE FROM t1
 
5923
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
5924
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
5925
AND f_charbig = '####updated per insert trigger####';
 
5926
ANALYZE  TABLE t1;
 
5927
Table   Op      Msg_type        Msg_text
 
5928
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
5929
CHECK    TABLE t1 EXTENDED;
 
5930
Table   Op      Msg_type        Msg_text
 
5931
test.t1 check   note    The storage engine for the table doesn't support check
 
5932
CHECKSUM TABLE t1 EXTENDED;
 
5933
Table   Checksum
 
5934
test.t1 <some_value>
 
5935
OPTIMIZE TABLE t1;
 
5936
Table   Op      Msg_type        Msg_text
 
5937
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
5938
# check layout success:    1
 
5939
REPAIR   TABLE t1 EXTENDED;
 
5940
Table   Op      Msg_type        Msg_text
 
5941
test.t1 repair  note    The storage engine for the table doesn't support repair
 
5942
# check layout success:    1
 
5943
TRUNCATE t1;
 
5944
        
 
5945
# check TRUNCATE success:       1
 
5946
# check layout success:    1
 
5947
# End usability test (include/partition_check.inc)
 
5948
DROP TABLE t1;
 
5949
CREATE TABLE t1 (
 
5950
f_int1 INTEGER,
 
5951
f_int2 INTEGER,
 
5952
f_char1 CHAR(20),
 
5953
f_char2 CHAR(20),
 
5954
f_charbig VARCHAR(1000)
 
5955
)
 
5956
PARTITION BY RANGE(f_int1)
 
5957
SUBPARTITION BY HASH(f_int1)
 
5958
( PARTITION part1 VALUES LESS THAN (1000)
 
5959
(SUBPARTITION subpart11 STORAGE ENGINE = 'ndbcluster',
 
5960
SUBPARTITION subpart12 STORAGE ENGINE = 'ndbcluster'));
 
5961
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
5962
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
 
5963
# Start usability test (include/partition_check.inc)
 
5964
create_command
 
5965
SHOW CREATE TABLE t1;
 
5966
Table   Create Table
 
5967
t1      CREATE TABLE `t1` (
 
5968
  `f_int1` int(11) DEFAULT NULL,
 
5969
  `f_int2` int(11) DEFAULT NULL,
 
5970
  `f_char1` char(20) DEFAULT NULL,
 
5971
  `f_char2` char(20) DEFAULT NULL,
 
5972
  `f_charbig` varchar(1000) DEFAULT NULL
 
5973
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f_int1) SUBPARTITION BY HASH (f_int1) (PARTITION part1 VALUES LESS THAN (1000)  (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster))
 
5974
 
 
5975
# check prerequisites-1 success:    1
 
5976
# check COUNT(*) success:    1
 
5977
# check MIN/MAX(f_int1) success:    1
 
5978
# check MIN/MAX(f_int2) success:    1
 
5979
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
5980
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
5981
CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
 
5982
WHERE f_int1 IN (2,3);
 
5983
# check prerequisites-3 success:    1
 
5984
DELETE FROM t1 WHERE f_charbig = 'delete me';
 
5985
# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
 
5986
# check read via f_int1 success: 1
 
5987
# check read via f_int2 success: 1
 
5988
        
 
5989
# check multiple-1 success:     1
 
5990
DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
 
5991
        
 
5992
# check multiple-2 success:     1
 
5993
INSERT INTO t1 SELECT * FROM t0_template
 
5994
WHERE MOD(f_int1,3) = 0;
 
5995
        
 
5996
# check multiple-3 success:     1
 
5997
UPDATE t1 SET f_int1 = f_int1 + @max_row
 
5998
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
 
5999
AND @max_row_div2 + @max_row_div4;
 
6000
        
 
6001
# check multiple-4 success:     1
 
6002
DELETE FROM t1
 
6003
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
 
6004
AND @max_row_div2 + @max_row_div4 + @max_row;
 
6005
        
 
6006
# check multiple-5 success:     1
 
6007
SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
 
6008
INSERT INTO t1
 
6009
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6010
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6011
f_charbig = '#SINGLE#';
 
6012
        
 
6013
# check single-1 success:       1
 
6014
SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
 
6015
INSERT INTO t1
 
6016
SET f_int1 = @cur_value , f_int2 = @cur_value,
 
6017
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
 
6018
f_charbig = '#SINGLE#';
 
6019
        
 
6020
# check single-2 success:       1
 
6021
SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
 
6022
SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
 
6023
UPDATE t1 SET f_int1 = @cur_value2
 
6024
WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
 
6025
        
 
6026
# check single-3 success:       1
 
6027
SET @cur_value1= -1;
 
6028
SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
 
6029
UPDATE t1 SET f_int1 = @cur_value1
 
6030
WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
 
6031
        
 
6032
# check single-4 success:       1
 
6033
SELECT MAX(f_int1) INTO @cur_value FROM t1;
 
6034
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
 
6035
        
 
6036
# check single-5 success:       1
 
6037
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
 
6038
        
 
6039
# check single-6 success:       1
 
6040
INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
 
6041
        
 
6042
# check single-7 success:       1
 
6043
DELETE FROM t1 WHERE f_charbig = '#2147483647##';
 
6044
DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
 
6045
INSERT t1 SET f_int1 = 0 , f_int2 = 0,
 
6046
f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
 
6047
f_charbig = '#NULL#';
 
6048
INSERT INTO t1
 
6049
SET f_int1 = NULL , f_int2 = -@max_row,
 
6050
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
 
6051
f_charbig = '#NULL#';
 
6052
# check null success:    1
 
6053
        
 
6054
# check null-1 success:         1
 
6055
UPDATE t1 SET f_int1 = -@max_row
 
6056
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6057
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6058
        
 
6059
# check null-2 success:         1
 
6060
UPDATE t1 SET f_int1 = NULL
 
6061
WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6062
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6063
        
 
6064
# check null-3 success:         1
 
6065
DELETE FROM t1
 
6066
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
 
6067
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
 
6068
        
 
6069
# check null-4 success:         1
 
6070
DELETE FROM t1
 
6071
WHERE f_int1 = 0 AND f_int2 = 0
 
6072
AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
 
6073
AND f_charbig = '#NULL#';
 
6074
SET AUTOCOMMIT= 0;
 
6075
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6076
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6077
FROM t0_template source_tab
 
6078
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6079
        
 
6080
# check transactions-1 success:         1
 
6081
COMMIT WORK;
 
6082
        
 
6083
# check transactions-2 success:         1
 
6084
ROLLBACK WORK;
 
6085
        
 
6086
# check transactions-3 success:         1
 
6087
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6088
COMMIT WORK;
 
6089
ROLLBACK WORK;
 
6090
        
 
6091
# check transactions-4 success:         1
 
6092
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6093
SELECT f_int1, f_int1, '', '', 'was inserted'
 
6094
FROM t0_template source_tab
 
6095
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6096
        
 
6097
# check transactions-5 success:         1
 
6098
ROLLBACK WORK;
 
6099
Warnings:
 
6100
Warning 1196    Some non-transactional changed tables couldn't be rolled back
 
6101
        
 
6102
# check transactions-6 success:         1
 
6103
# INFO: Storage engine used for t1 seems to be not transactional.
 
6104
COMMIT;
 
6105
        
 
6106
# check transactions-7 success:         1
 
6107
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6108
COMMIT WORK;
 
6109
SET @@session.sql_mode = 'traditional';
 
6110
SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
 
6111
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6112
SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
 
6113
'', '', 'was inserted' FROM t0_template
 
6114
WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
 
6115
ERROR 22012: Division by 0
 
6116
COMMIT;
 
6117
        
 
6118
# check transactions-8 success:         1
 
6119
# INFO: Storage engine used for t1 seems to be unable to revert
 
6120
#       changes made by the failing statement.
 
6121
SET @@session.sql_mode = '';
 
6122
SET AUTOCOMMIT= 1;
 
6123
DELETE FROM t1 WHERE f_charbig = 'was inserted';
 
6124
COMMIT WORK;
 
6125
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
 
6126
        
 
6127
# check special-1 success:      1
 
6128
UPDATE t1 SET f_charbig = '';
 
6129
        
 
6130
# check special-2 success:      1
 
6131
UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
 
6132
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6133
SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
 
6134
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6135
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6136
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6137
'just inserted' FROM t0_template
 
6138
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6139
CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
 
6140
BEGIN
 
6141
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6142
f_charbig = 'updated by trigger'
 
6143
      WHERE f_int1 = new.f_int1;
 
6144
END|
 
6145
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6146
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6147
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6148
        
 
6149
# check trigger-1 success:      1
 
6150
DROP TRIGGER trg_1;
 
6151
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6152
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6153
f_charbig = 'just inserted'
 
6154
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6155
DELETE FROM t0_aux
 
6156
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6157
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6158
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6159
'just inserted' FROM t0_template
 
6160
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6161
CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
 
6162
BEGIN
 
6163
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6164
f_charbig = 'updated by trigger'
 
6165
      WHERE f_int1 = new.f_int1;
 
6166
END|
 
6167
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6168
SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
 
6169
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6170
        
 
6171
# check trigger-2 success:      1
 
6172
DROP TRIGGER trg_1;
 
6173
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6174
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6175
f_charbig = 'just inserted'
 
6176
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6177
DELETE FROM t0_aux
 
6178
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6179
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6180
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6181
'just inserted' FROM t0_template
 
6182
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6183
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6184
BEGIN
 
6185
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6186
f_charbig = 'updated by trigger'
 
6187
      WHERE f_int1 = new.f_int1;
 
6188
END|
 
6189
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6190
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6191
        
 
6192
# check trigger-3 success:      1
 
6193
DROP TRIGGER trg_1;
 
6194
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6195
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6196
f_charbig = 'just inserted'
 
6197
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6198
DELETE FROM t0_aux
 
6199
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6200
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6201
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6202
'just inserted' FROM t0_template
 
6203
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6204
CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
 
6205
BEGIN
 
6206
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6207
f_charbig = 'updated by trigger'
 
6208
      WHERE f_int1 = - old.f_int1;
 
6209
END|
 
6210
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6211
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6212
        
 
6213
# check trigger-4 success:      1
 
6214
DROP TRIGGER trg_1;
 
6215
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6216
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6217
f_charbig = 'just inserted'
 
6218
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6219
DELETE FROM t0_aux
 
6220
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6221
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6222
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6223
'just inserted' FROM t0_template
 
6224
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6225
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6226
BEGIN
 
6227
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6228
f_charbig = 'updated by trigger'
 
6229
      WHERE f_int1 = new.f_int1;
 
6230
END|
 
6231
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6232
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6233
        
 
6234
# check trigger-5 success:      1
 
6235
DROP TRIGGER trg_1;
 
6236
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6237
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6238
f_charbig = 'just inserted'
 
6239
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6240
DELETE FROM t0_aux
 
6241
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6242
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6243
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6244
'just inserted' FROM t0_template
 
6245
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6246
CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
 
6247
BEGIN
 
6248
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6249
f_charbig = 'updated by trigger'
 
6250
      WHERE f_int1 = - old.f_int1;
 
6251
END|
 
6252
UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
 
6253
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6254
        
 
6255
# check trigger-6 success:      1
 
6256
DROP TRIGGER trg_1;
 
6257
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6258
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6259
f_charbig = 'just inserted'
 
6260
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6261
DELETE FROM t0_aux
 
6262
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6263
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6264
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6265
'just inserted' FROM t0_template
 
6266
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6267
CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
 
6268
BEGIN
 
6269
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6270
f_charbig = 'updated by trigger'
 
6271
      WHERE f_int1 = - old.f_int1;
 
6272
END|
 
6273
DELETE FROM t0_aux
 
6274
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6275
        
 
6276
# check trigger-7 success:      1
 
6277
DROP TRIGGER trg_1;
 
6278
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6279
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6280
f_charbig = 'just inserted'
 
6281
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6282
DELETE FROM t0_aux
 
6283
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6284
INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
 
6285
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
 
6286
'just inserted' FROM t0_template
 
6287
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6288
CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
 
6289
BEGIN
 
6290
UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
 
6291
f_charbig = 'updated by trigger'
 
6292
      WHERE f_int1 = - old.f_int1;
 
6293
END|
 
6294
DELETE FROM t0_aux
 
6295
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
 
6296
        
 
6297
# check trigger-8 success:      1
 
6298
DROP TRIGGER trg_1;
 
6299
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6300
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6301
f_charbig = 'just inserted'
 
6302
   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
 
6303
DELETE FROM t0_aux
 
6304
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6305
DELETE FROM t1
 
6306
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
 
6307
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6308
BEGIN
 
6309
SET new.f_int1 = old.f_int1 + @max_row,
 
6310
new.f_int2 = old.f_int2 - @max_row,
 
6311
new.f_charbig = '####updated per update trigger####';
 
6312
END|
 
6313
UPDATE t1
 
6314
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6315
f_charbig = '####updated per update statement itself####';
 
6316
        
 
6317
# check trigger-9 success:      1
 
6318
DROP TRIGGER trg_2;
 
6319
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6320
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6321
f_charbig = CONCAT('===',f_char1,'===');
 
6322
CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
 
6323
BEGIN
 
6324
SET new.f_int1 = new.f_int1 + @max_row,
 
6325
new.f_int2 = new.f_int2 - @max_row,
 
6326
new.f_charbig = '####updated per update trigger####';
 
6327
END|
 
6328
UPDATE t1
 
6329
SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
 
6330
f_charbig = '####updated per update statement itself####';
 
6331
        
 
6332
# check trigger-10 success:     1
 
6333
DROP TRIGGER trg_2;
 
6334
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
 
6335
f_int2 = CAST(f_char1 AS SIGNED INT),
 
6336
f_charbig = CONCAT('===',f_char1,'===');
 
6337
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6338
BEGIN
 
6339
SET new.f_int1 = @my_max1 + @counter,
 
6340
new.f_int2 = @my_min2 - @counter,
 
6341
new.f_charbig = '####updated per insert trigger####';
 
6342
SET @counter = @counter + 1;
 
6343
END|
 
6344
SET @counter = 1;
 
6345
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6346
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
 
6347
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
 
6348
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6349
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6350
ORDER BY f_int1;
 
6351
DROP TRIGGER trg_3;
 
6352
        
 
6353
# check trigger-11 success:     1
 
6354
DELETE FROM t1
 
6355
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6356
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6357
AND f_charbig = '####updated per insert trigger####';
 
6358
CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
 
6359
BEGIN
 
6360
SET new.f_int1 = @my_max1 + @counter,
 
6361
new.f_int2 = @my_min2 - @counter,
 
6362
new.f_charbig = '####updated per insert trigger####';
 
6363
SET @counter = @counter + 1;
 
6364
END|
 
6365
SET @counter = 1;
 
6366
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
 
6367
INSERT INTO t1 (f_char1, f_char2, f_charbig)
 
6368
SELECT CAST(f_int1 AS CHAR),
 
6369
CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
 
6370
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
 
6371
ORDER BY f_int1;
 
6372
DROP TRIGGER trg_3;
 
6373
        
 
6374
# check trigger-12 success:     1
 
6375
DELETE FROM t1
 
6376
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
 
6377
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
 
6378
AND f_charbig = '####updated per insert trigger####';
 
6379
ANALYZE  TABLE t1;
 
6380
Table   Op      Msg_type        Msg_text
 
6381
test.t1 analyze note    The storage engine for the table doesn't support analyze
 
6382
CHECK    TABLE t1 EXTENDED;
 
6383
Table   Op      Msg_type        Msg_text
 
6384
test.t1 check   note    The storage engine for the table doesn't support check
 
6385
CHECKSUM TABLE t1 EXTENDED;
 
6386
Table   Checksum
 
6387
test.t1 <some_value>
 
6388
OPTIMIZE TABLE t1;
 
6389
Table   Op      Msg_type        Msg_text
 
6390
test.t1 optimize        note    The storage engine for the table doesn't support optimize
 
6391
# check layout success:    1
 
6392
REPAIR   TABLE t1 EXTENDED;
 
6393
Table   Op      Msg_type        Msg_text
 
6394
test.t1 repair  note    The storage engine for the table doesn't support repair
 
6395
# check layout success:    1
 
6396
TRUNCATE t1;
 
6397
        
 
6398
# check TRUNCATE success:       1
 
6399
# check layout success:    1
 
6400
# End usability test (include/partition_check.inc)
 
6401
DROP TABLE t1;
 
6402
SET SESSION storage_engine='ndbcluster';
 
6403
DROP VIEW  IF EXISTS v1;
 
6404
DROP TABLE IF EXISTS t1;
 
6405
DROP TABLE IF EXISTS t0_aux;
 
6406
DROP TABLE IF EXISTS t0_definition;
 
6407
DROP TABLE IF EXISTS t0_template;