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

« back to all changes in this revision

Viewing changes to mysql-test/suite/parts/inc/partition_auto_increment.inc

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

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# inc/partition_auto_increment.inc
 
2
#
 
3
# auto_increment test
 
4
# used variables: $engine
 
5
#
 
6
 
 
7
-- disable_warnings
 
8
DROP TABLE IF EXISTS t1;
 
9
-- enable_warnings
 
10
 
 
11
-- echo # test without partitioning for reference
 
12
eval CREATE TABLE t1 (
 
13
  c1 INT NOT NULL AUTO_INCREMENT,
 
14
  PRIMARY KEY (c1))
 
15
ENGINE=$engine;
 
16
SHOW CREATE TABLE t1;
 
17
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
 
18
AND TABLE_NAME='t1';
 
19
INSERT INTO t1 VALUES (2);
 
20
INSERT INTO t1 VALUES (4);
 
21
INSERT INTO t1 VALUES (NULL);
 
22
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
 
23
AND TABLE_NAME='t1';
 
24
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
 
25
AND TABLE_NAME='t1';
 
26
INSERT INTO t1 VALUES (0);
 
27
-- error 0, ER_DUP_KEY, ER_DUP_ENTRY
 
28
INSERT INTO t1 VALUES (5), (16);
 
29
if (!$mysql_errno)
 
30
{
 
31
  echo # ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY;
 
32
  echo # mysql_errno: $mysql_errno;
 
33
}
 
34
INSERT INTO t1 VALUES (17);
 
35
INSERT INTO t1 VALUES (19), (NULL);
 
36
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
 
37
INSERT INTO t1 VALUES (NULL), (10), (NULL);
 
38
if ($mysql_errno)
 
39
{
 
40
  echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
 
41
}
 
42
INSERT INTO t1 VALUES (NULL);
 
43
SET INSERT_ID = 30;
 
44
INSERT INTO t1 VALUES (NULL);
 
45
if (!$skip_update)
 
46
{
 
47
# InnoDB Does not handle this correctly, see bug#14793, bug#21641
 
48
  UPDATE t1 SET c1 = 50 WHERE c1 = 17;
 
49
  UPDATE t1 SET c1 = 51 WHERE c1 = 19;
 
50
  FLUSH TABLES;
 
51
  UPDATE t1 SET c1 = 40 WHERE c1 = 50;
 
52
  SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
 
53
  AND TABLE_NAME='t1';
 
54
  UPDATE t1 SET c1 = NULL WHERE c1 = 4;
 
55
  INSERT INTO t1 VALUES (NULL);
 
56
  INSERT INTO t1 VALUES (NULL);
 
57
}
 
58
SELECT * FROM t1 ORDER BY c1;
 
59
DROP TABLE t1;
 
60
eval CREATE TABLE t1 (
 
61
  c1 INT NOT NULL AUTO_INCREMENT,
 
62
  PRIMARY KEY (c1))
 
63
ENGINE=$engine;
 
64
SHOW CREATE TABLE t1;
 
65
FLUSH TABLE;
 
66
SHOW CREATE TABLE t1;
 
67
INSERT INTO t1 VALUES (4);
 
68
FLUSH TABLE;
 
69
SHOW CREATE TABLE t1;
 
70
INSERT INTO t1 VALUES (NULL);
 
71
FLUSH TABLE;
 
72
SHOW CREATE TABLE t1;
 
73
if (!$skip_delete)
 
74
{
 
75
DELETE FROM t1;
 
76
}
 
77
INSERT INTO t1 VALUES (NULL);
 
78
SHOW CREATE TABLE t1;
 
79
SELECT * FROM t1 ORDER BY c1;
 
80
if (!$skip_truncate)
 
81
{
 
82
TRUNCATE TABLE t1;
 
83
}
 
84
INSERT INTO t1 VALUES (NULL);
 
85
SHOW CREATE TABLE t1;
 
86
SELECT * FROM t1 ORDER BY c1;
 
87
INSERT INTO t1 VALUES (100);
 
88
INSERT INTO t1 VALUES (NULL);
 
89
if (!$skip_delete)
 
90
{
 
91
DELETE FROM t1 WHERE c1 >= 100;
 
92
}
 
93
# InnoDB does reset auto_increment on OPTIMIZE, Bug#18274
 
94
# Archive does reset auto_increment on OPTIMIZE, Bug#40216
 
95
OPTIMIZE TABLE t1;
 
96
SHOW CREATE TABLE t1;
 
97
DROP TABLE t1;
 
98
 
 
99
-- echo # Simple test with NULL
 
100
eval CREATE TABLE t1 (
 
101
  c1 INT NOT NULL AUTO_INCREMENT,
 
102
  PRIMARY KEY (c1))
 
103
ENGINE=$engine
 
104
PARTITION BY HASH(c1)
 
105
PARTITIONS 2;
 
106
INSERT INTO t1 VALUES (NULL);
 
107
SHOW CREATE TABLE t1;
 
108
SELECT * FROM t1;
 
109
DROP TABLE t1;
 
110
 
 
111
-- echo # Test with sql_mode and first insert as 0
 
112
eval CREATE TABLE t1 (
 
113
  c1 INT,
 
114
  c2 INT NOT NULL AUTO_INCREMENT,
 
115
  PRIMARY KEY (c2))
 
116
ENGINE=$engine
 
117
PARTITION BY HASH(c2)
 
118
PARTITIONS 2;
 
119
INSERT INTO t1 VALUES (1, NULL);
 
120
-- error 0, ER_DUP_KEY, ER_DUP_ENTRY
 
121
INSERT INTO t1 VALUES (1, 1), (99, 99);
 
122
if (!$mysql_errno)
 
123
{
 
124
  echo # ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY;
 
125
  echo # mysql_errno: $mysql_errno;
 
126
}
 
127
INSERT INTO t1 VALUES (1, NULL);
 
128
let $old_sql_mode = `select @@session.sql_mode`;
 
129
SET @@session.sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
 
130
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
 
131
INSERT INTO t1 VALUES (1, 0);
 
132
if ($mysql_errno)
 
133
{
 
134
  echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
 
135
}
 
136
SELECT * FROM t1 ORDER BY c1, c2;
 
137
DROP TABLE t1;
 
138
eval CREATE TABLE t1 (
 
139
  c1 INT,
 
140
  c2 INT NOT NULL AUTO_INCREMENT,
 
141
  PRIMARY KEY (c2))
 
142
ENGINE=$engine
 
143
PARTITION BY HASH(c2)
 
144
PARTITIONS 2;
 
145
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
 
146
INSERT INTO t1 VALUES (1, 0);
 
147
if ($mysql_errno)
 
148
{
 
149
  echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
 
150
}
 
151
INSERT INTO t1 VALUES (1, 1), (1, NULL);
 
152
INSERT INTO t1 VALUES (2, NULL), (4, 7);
 
153
INSERT INTO t1 VALUES (1, NULL);
 
154
SELECT * FROM t1 ORDER BY c1, c2;
 
155
eval SET @@session.sql_mode = '$old_sql_mode';
 
156
DROP TABLE t1;
 
157
 
 
158
 
 
159
-- echo # Simple test with NULL, 0 and explicit values both incr. and desc.
 
160
eval CREATE TABLE t1 (
 
161
  c1 INT NOT NULL AUTO_INCREMENT,
 
162
  PRIMARY KEY (c1))
 
163
ENGINE=$engine
 
164
PARTITION BY HASH(c1)
 
165
PARTITIONS 2;
 
166
INSERT INTO t1 VALUES (2), (4), (NULL);
 
167
INSERT INTO t1 VALUES (0);
 
168
-- error 0, ER_DUP_KEY, ER_DUP_ENTRY
 
169
INSERT INTO t1 VALUES (5), (16);
 
170
if (!$mysql_errno)
 
171
{
 
172
  echo # ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY;
 
173
  echo # mysql_errno: $mysql_errno;
 
174
}
 
175
INSERT INTO t1 VALUES (17), (19), (NULL);
 
176
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
 
177
INSERT INTO t1 VALUES (NULL), (10), (NULL);
 
178
if ($mysql_errno)
 
179
{
 
180
  echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
 
181
}
 
182
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
 
183
INSERT INTO t1 VALUES (NULL), (9);
 
184
if ($mysql_errno)
 
185
{
 
186
  echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
 
187
}
 
188
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
 
189
INSERT INTO t1 VALUES (59), (55);
 
190
if ($mysql_errno)
 
191
{
 
192
  echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
 
193
}
 
194
INSERT INTO t1 VALUES (NULL), (90);
 
195
INSERT INTO t1 VALUES (NULL);
 
196
if (!$skip_update)
 
197
{
 
198
  UPDATE t1 SET c1 = 150 WHERE c1 = 17;
 
199
  UPDATE t1 SET c1 = 151 WHERE c1 = 19;
 
200
  FLUSH TABLES;
 
201
  UPDATE t1 SET c1 = 140 WHERE c1 = 150;
 
202
  SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
 
203
  AND TABLE_NAME='t1';
 
204
  UPDATE t1 SET c1 = NULL WHERE c1 = 4;
 
205
  INSERT INTO t1 VALUES (NULL);
 
206
  INSERT INTO t1 VALUES (NULL);
 
207
}
 
208
SELECT * FROM t1 ORDER BY c1;
 
209
DROP TABLE t1;
 
210
 
 
211
-- echo # Test with auto_increment_increment and auto_increment_offset.
 
212
eval CREATE TABLE t1 (
 
213
  c1 INT NOT NULL AUTO_INCREMENT,
 
214
  PRIMARY KEY (c1))
 
215
ENGINE=$engine
 
216
PARTITION BY HASH(c1)
 
217
PARTITIONS 2;
 
218
let $old_increment = `SELECT @@session.auto_increment_increment`;
 
219
let $old_offset = `SELECT @@session.auto_increment_offset`;
 
220
SET @@session.auto_increment_increment = 10;
 
221
SET @@session.auto_increment_offset = 5;
 
222
INSERT INTO t1 VALUES (1);
 
223
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
 
224
SET @@session.auto_increment_increment = 5;
 
225
SET @@session.auto_increment_offset = 3;
 
226
INSERT INTO t1 VALUES (NULL);
 
227
let $new_val = `SELECT LAST_INSERT_ID()`;
 
228
eval INSERT INTO t1 VALUES ($new_val + 1);
 
229
INSERT INTO t1 VALUES (NULL);
 
230
let $new_val = `SELECT LAST_INSERT_ID()`;
 
231
eval INSERT INTO t1 VALUES ($new_val + 2);
 
232
INSERT INTO t1 VALUES (NULL);
 
233
let $new_val = `SELECT LAST_INSERT_ID()`;
 
234
eval INSERT INTO t1 VALUES ($new_val + 3);
 
235
INSERT INTO t1 VALUES (NULL);
 
236
let $new_val = `SELECT LAST_INSERT_ID()`;
 
237
eval INSERT INTO t1 VALUES ($new_val + 4);
 
238
INSERT INTO t1 VALUES (NULL);
 
239
let $new_val = `SELECT LAST_INSERT_ID()`;
 
240
eval INSERT INTO t1 VALUES ($new_val + 5);
 
241
INSERT INTO t1 VALUES (NULL);
 
242
let $new_val = `SELECT LAST_INSERT_ID()`;
 
243
eval INSERT INTO t1 VALUES ($new_val + 6);
 
244
INSERT INTO t1 VALUES (NULL);
 
245
eval SET @@session.auto_increment_increment = $old_increment;
 
246
eval SET @@session.auto_increment_offset = $old_offset;
 
247
SELECT * FROM t1 ORDER BY c1;
 
248
DROP TABLE t1;
 
249
 
 
250
 
 
251
-- echo # Test reported auto_increment value
 
252
eval CREATE TABLE t1 (
 
253
  c1 INT NOT NULL AUTO_INCREMENT,
 
254
  PRIMARY KEY (c1))
 
255
ENGINE=$engine
 
256
PARTITION BY HASH (c1)
 
257
PARTITIONS 2;
 
258
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
 
259
AND TABLE_NAME='t1';
 
260
INSERT INTO t1 VALUES (2);
 
261
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
 
262
AND TABLE_NAME='t1';
 
263
INSERT INTO t1 VALUES (4);
 
264
INSERT INTO t1 VALUES (NULL);
 
265
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
 
266
AND TABLE_NAME='t1';
 
267
INSERT INTO t1 VALUES (NULL);
 
268
INSERT INTO t1 VALUES (17);
 
269
INSERT INTO t1 VALUES (19);
 
270
INSERT INTO t1 VALUES (NULL);
 
271
INSERT INTO t1 VALUES (NULL);
 
272
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
 
273
AND TABLE_NAME='t1';
 
274
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
 
275
AND TABLE_NAME='t1';
 
276
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
 
277
INSERT INTO t1 VALUES (10);
 
278
if ($mysql_errno)
 
279
{
 
280
  echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
 
281
}
 
282
SELECT * FROM t1 ORDER BY c1;
 
283
INSERT INTO t1 VALUES (NULL);
 
284
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
 
285
AND TABLE_NAME='t1';
 
286
INSERT INTO t1 VALUES (NULL);
 
287
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
 
288
INSERT INTO t1 VALUES (15);
 
289
if ($mysql_errno)
 
290
{
 
291
  echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
 
292
}
 
293
INSERT INTO t1 VALUES (NULL);
 
294
SELECT * FROM t1 ORDER BY c1;
 
295
INSERT INTO t1 VALUES (NULL);
 
296
if (!$skip_delete)
 
297
{
 
298
DELETE FROM t1;
 
299
}
 
300
INSERT INTO t1 VALUES (NULL);
 
301
SHOW CREATE TABLE t1;
 
302
SELECT * FROM t1 ORDER BY c1;
 
303
if (!$skip_truncate)
 
304
{
 
305
TRUNCATE TABLE t1;
 
306
}
 
307
INSERT INTO t1 VALUES (NULL);
 
308
SHOW CREATE TABLE t1;
 
309
SELECT * FROM t1 ORDER BY c1;
 
310
INSERT INTO t1 VALUES (100);
 
311
INSERT INTO t1 VALUES (NULL);
 
312
if (!$skip_delete)
 
313
{
 
314
DELETE FROM t1 WHERE c1 >= 100;
 
315
}
 
316
# InnoDB does reset auto_increment on OPTIMIZE, Bug#18274
 
317
OPTIMIZE TABLE t1;
 
318
SHOW CREATE TABLE t1;
 
319
DROP TABLE t1;
 
320
 
 
321
-- echo # Test with two threads
 
322
connection default;
 
323
-- echo # con default
 
324
eval CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
 
325
  ENGINE = $engine
 
326
  PARTITION BY HASH(c1)
 
327
  PARTITIONS 2;
 
328
INSERT INTO t1 (c1) VALUES (2);
 
329
INSERT INTO t1 (c1) VALUES (4);
 
330
connect(con1, localhost, root,,);
 
331
connection con1;
 
332
-- echo # con1
 
333
INSERT INTO t1 (c1) VALUES (NULL);
 
334
INSERT INTO t1 (c1) VALUES (10);
 
335
connection default;
 
336
-- echo # con default
 
337
INSERT INTO t1 (c1) VALUES (NULL);
 
338
INSERT INTO t1 (c1) VALUES (NULL);
 
339
INSERT INTO t1 (c1) VALUES (19);
 
340
INSERT INTO t1 (c1) VALUES (21);
 
341
-- echo # con1
 
342
connection con1;
 
343
INSERT INTO t1 (c1) VALUES (NULL);
 
344
connection default;
 
345
-- echo # con default
 
346
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
 
347
INSERT INTO t1 (c1) VALUES (16);
 
348
if ($mysql_errno)
 
349
{
 
350
  echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
 
351
}
 
352
-- echo # con1
 
353
connection con1;
 
354
INSERT INTO t1 (c1) VALUES (NULL);
 
355
disconnect con1;
 
356
connection default;
 
357
-- echo # con default
 
358
INSERT INTO t1 (c1) VALUES (NULL);
 
359
SELECT * FROM t1 ORDER BY c1;
 
360
DROP TABLE t1;
 
361
 
 
362
-- echo # Test with two threads + start transaction NO PARTITIONING
 
363
connect(con1, localhost, root,,);
 
364
connection default;
 
365
-- echo # con default
 
366
eval CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
 
367
  ENGINE = $engine;
 
368
START TRANSACTION;
 
369
INSERT INTO t1 (c1) VALUES (2);
 
370
INSERT INTO t1 (c1) VALUES (4);
 
371
connection con1;
 
372
-- echo # con1
 
373
START TRANSACTION;
 
374
INSERT INTO t1 (c1) VALUES (NULL);
 
375
INSERT INTO t1 (c1) VALUES (10);
 
376
connection default;
 
377
-- echo # con default
 
378
INSERT INTO t1 (c1) VALUES (NULL);
 
379
INSERT INTO t1 (c1) VALUES (NULL);
 
380
INSERT INTO t1 (c1) VALUES (19);
 
381
INSERT INTO t1 (c1) VALUES (21);
 
382
-- echo # con1
 
383
connection con1;
 
384
INSERT INTO t1 (c1) VALUES (NULL);
 
385
connection default;
 
386
-- echo # con default
 
387
-- error 0, ER_DUP_KEY
 
388
INSERT INTO t1 (c1) VALUES (16);
 
389
if ($mysql_errno)
 
390
{
 
391
  echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
 
392
}
 
393
-- echo # con1
 
394
connection con1;
 
395
INSERT INTO t1 (c1) VALUES (NULL);
 
396
SELECT * FROM t1 ORDER BY c1;
 
397
COMMIT;
 
398
SELECT * FROM t1 ORDER BY c1;
 
399
disconnect con1;
 
400
connection default;
 
401
-- echo # con default
 
402
INSERT INTO t1 (c1) VALUES (NULL);
 
403
SELECT * FROM t1 ORDER BY c1;
 
404
COMMIT;
 
405
SELECT * FROM t1 ORDER BY c1;
 
406
DROP TABLE t1;
 
407
 
 
408
-- echo # Test with two threads + start transaction
 
409
connect(con1, localhost, root,,);
 
410
connection default;
 
411
-- echo # con default
 
412
eval CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
 
413
  ENGINE = $engine
 
414
  PARTITION BY HASH(c1)
 
415
  PARTITIONS 2;
 
416
START TRANSACTION;
 
417
INSERT INTO t1 (c1) VALUES (2);
 
418
INSERT INTO t1 (c1) VALUES (4);
 
419
connection con1;
 
420
-- echo # con1
 
421
START TRANSACTION;
 
422
INSERT INTO t1 (c1) VALUES (NULL), (10);
 
423
connection default;
 
424
-- echo # con default
 
425
INSERT INTO t1 (c1) VALUES (NULL), (NULL), (19);
 
426
INSERT INTO t1 (c1) VALUES (21);
 
427
-- echo # con1
 
428
connection con1;
 
429
INSERT INTO t1 (c1) VALUES (NULL);
 
430
connection default;
 
431
-- echo # con default
 
432
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
 
433
INSERT INTO t1 (c1) VALUES (16);
 
434
if ($mysql_errno)
 
435
{
 
436
  echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
 
437
}
 
438
-- echo # con1
 
439
connection con1;
 
440
INSERT INTO t1 (c1) VALUES (NULL);
 
441
SELECT * FROM t1 ORDER BY c1;
 
442
COMMIT;
 
443
SELECT * FROM t1 ORDER BY c1;
 
444
disconnect con1;
 
445
connection default;
 
446
-- echo # con default
 
447
INSERT INTO t1 (c1) VALUES (NULL);
 
448
SELECT * FROM t1 ORDER BY c1;
 
449
COMMIT;
 
450
SELECT * FROM t1 ORDER BY c1;
 
451
DROP TABLE t1;
 
452
 
 
453
if (!$only_ai_pk)
 
454
{
 
455
-- echo # Test with another column after
 
456
eval CREATE TABLE t1 (
 
457
c1 INT NOT NULL AUTO_INCREMENT,
 
458
c2 INT,
 
459
PRIMARY KEY (c1,c2))
 
460
ENGINE = $engine
 
461
PARTITION BY HASH(c2)
 
462
PARTITIONS 2;
 
463
INSERT INTO t1 VALUES (1, 0);
 
464
INSERT INTO t1 VALUES (1, 1);
 
465
INSERT INTO t1 VALUES (NULL, 1), (NULL, 2), (NULL, 3);
 
466
INSERT INTO t1 VALUES (NULL, 3);
 
467
INSERT INTO t1 VALUES (2, 0), (NULL, 2);
 
468
INSERT INTO t1 VALUES (2, 2);
 
469
INSERT INTO t1 VALUES (2, 22);
 
470
INSERT INTO t1 VALUES (NULL, 2);
 
471
SELECT * FROM t1 ORDER BY c1,c2;
 
472
DROP TABLE t1;
 
473
}
 
474
 
 
475
-- echo # Test with another column before
 
476
eval CREATE TABLE t1 (
 
477
c1 INT,
 
478
c2 INT NOT NULL AUTO_INCREMENT,
 
479
PRIMARY KEY (c2))
 
480
ENGINE = $engine
 
481
PARTITION BY HASH(c2)
 
482
PARTITIONS 2;
 
483
INSERT INTO t1 VALUES (1, 0);
 
484
-- error 0, ER_DUP_KEY, ER_DUP_ENTRY
 
485
INSERT INTO t1 VALUES (1, 1);
 
486
if (!$mysql_errno)
 
487
{
 
488
  echo # ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY;
 
489
  echo # mysql_errno: $mysql_errno;
 
490
}
 
491
INSERT INTO t1 VALUES (1, NULL);
 
492
INSERT INTO t1 VALUES (2, NULL), (3, 11), (3, NULL), (2, 0);
 
493
INSERT INTO t1 VALUES (2, NULL);
 
494
-- error 0, ER_DUP_KEY, ER_DUP_ENTRY
 
495
INSERT INTO t1 VALUES (2, 2);
 
496
if (!$mysql_errno)
 
497
{
 
498
  echo # ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY;
 
499
  echo # mysql_errno: $mysql_errno;
 
500
}
 
501
INSERT INTO t1 VALUES (2, 22);
 
502
INSERT INTO t1 VALUES (2, NULL);
 
503
SELECT * FROM t1 ORDER BY c1,c2;
 
504
DROP TABLE t1;
 
505
 
 
506
-- echo # Test with auto_increment on secondary column in multi-column-index
 
507
-- disable_abort_on_error
 
508
eval CREATE TABLE t1 (
 
509
c1 INT,
 
510
c2 INT NOT NULL AUTO_INCREMENT,
 
511
PRIMARY KEY (c1,c2))
 
512
ENGINE = $engine
 
513
PARTITION BY HASH(c2)
 
514
PARTITIONS 2;
 
515
-- enable_abort_on_error
 
516
-- disable_query_log
 
517
eval SET @my_errno= $mysql_errno ;
 
518
let $run = `SELECT @my_errno = 0`;
 
519
# ER_WRONG_AUTO_KEY is 1075
 
520
let $ER_WRONG_AUTO_KEY= 1075;
 
521
if (`SELECT @my_errno NOT IN (0,$ER_WRONG_AUTO_KEY)`)
 
522
{
 
523
  -- echo # Unknown error code, exits
 
524
  exit;
 
525
}
 
526
-- enable_query_log
 
527
if ($run)
 
528
{
 
529
INSERT INTO t1 VALUES (1, 0);
 
530
-- error 0, ER_DUP_KEY, ER_DUP_ENTRY
 
531
INSERT INTO t1 VALUES (1, 1);
 
532
if (!$mysql_errno)
 
533
{
 
534
  echo # ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY;
 
535
  echo # mysql_errno: $mysql_errno;
 
536
}
 
537
INSERT INTO t1 VALUES (1, NULL);
 
538
INSERT INTO t1 VALUES (2, NULL);
 
539
INSERT INTO t1 VALUES (3, NULL);
 
540
INSERT INTO t1 VALUES (3, NULL), (2, 0), (2, NULL);
 
541
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
 
542
INSERT INTO t1 VALUES (2, 2);
 
543
if (!$mysql_errno)
 
544
{
 
545
  echo # ERROR (only OK if Blackhole/NDB) should give ER_DUP_KEY or ER_DUP_ENTRY;
 
546
  echo # mysql_errno: $mysql_errno;
 
547
}
 
548
INSERT INTO t1 VALUES (2, 22), (2, NULL);
 
549
SELECT * FROM t1 ORDER BY c1,c2;
 
550
DROP TABLE t1;
 
551
}
 
552
 
 
553
-- echo # Test AUTO_INCREMENT in CREATE
 
554
eval CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
 
555
  ENGINE = $engine
 
556
  AUTO_INCREMENT = 15
 
557
  PARTITION BY HASH(c1)
 
558
  PARTITIONS 2;
 
559
SHOW CREATE TABLE t1;
 
560
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
 
561
INSERT INTO t1 (c1) VALUES (4);
 
562
if ($mysql_errno)
 
563
{
 
564
  echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
 
565
}
 
566
SHOW CREATE TABLE t1;
 
567
INSERT INTO t1 (c1) VALUES (0);
 
568
SHOW CREATE TABLE t1;
 
569
INSERT INTO t1 (c1) VALUES (NULL);
 
570
SHOW CREATE TABLE t1;
 
571
SELECT * FROM t1 ORDER BY c1;
 
572
 
 
573
-- echo # Test sql_mode 'NO_AUTO_VALUE_ON_ZERO'
 
574
let $old_sql_mode = `select @@session.sql_mode`;
 
575
SET @@session.sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
 
576
INSERT INTO t1 (c1) VALUES (300);
 
577
SHOW CREATE TABLE t1;
 
578
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
 
579
INSERT INTO t1 (c1) VALUES (0);
 
580
if ($mysql_errno)
 
581
{
 
582
  echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
 
583
}
 
584
SHOW CREATE TABLE t1;
 
585
INSERT INTO t1 (c1) VALUES (NULL);
 
586
SHOW CREATE TABLE t1;
 
587
SELECT * FROM t1 ORDER BY c1;
 
588
eval SET @@session.sql_mode = '$old_sql_mode';
 
589
DROP TABLE t1;
 
590
 
 
591
-- echo # Test SET INSERT_ID
 
592
eval CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
 
593
  ENGINE = $engine
 
594
  PARTITION BY HASH(c1)
 
595
  PARTITIONS 2;
 
596
SHOW CREATE TABLE t1;
 
597
INSERT INTO t1 (c1) VALUES (NULL);
 
598
SHOW CREATE TABLE t1;
 
599
SELECT * FROM t1;
 
600
SET INSERT_ID = 23;
 
601
SHOW CREATE TABLE t1;
 
602
INSERT INTO t1 (c1) VALUES (NULL);
 
603
SHOW CREATE TABLE t1;
 
604
SELECT * FROM t1 ORDER BY c1;
 
605
DROP TABLE t1;
 
606
 
 
607
-- echo # Testing with FLUSH TABLE
 
608
eval CREATE TABLE t1 (
 
609
  c1 INT NOT NULL AUTO_INCREMENT,
 
610
  PRIMARY KEY (c1))
 
611
  ENGINE=$engine
 
612
  PARTITION BY HASH(c1)
 
613
  PARTITIONS 2;
 
614
SHOW CREATE TABLE t1;
 
615
FLUSH TABLE;
 
616
SHOW CREATE TABLE t1;
 
617
INSERT INTO t1 VALUES (4);
 
618
FLUSH TABLE;
 
619
SHOW CREATE TABLE t1;
 
620
INSERT INTO t1 VALUES (NULL);
 
621
FLUSH TABLE;
 
622
SHOW CREATE TABLE t1;
 
623
SELECT * FROM t1 ORDER BY c1;
 
624
DROP TABLE t1;
 
625
 
 
626
if (!$skip_negative_auto_inc)
 
627
{
 
628
--echo #############################################################################
 
629
--echo # Bug #45823 - Assertion failure in file row/row0mysql.c line 1386
 
630
--echo # Bug #43988 - AUTO_INCREMENT errors with partitioned InnoDB tables in 5.1.31
 
631
--echo ##############################################################################
 
632
 
 
633
--echo # Inserting negative autoincrement values into a partition table (partitions >= 4)
 
634
 
 
635
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
 
636
  c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
 
637
 
 
638
INSERT INTO t(c2) VALUES (10);
 
639
INSERT INTO t(c2) VALUES (20);
 
640
INSERT INTO t VALUES (-1,-10);
 
641
INSERT INTO t(c2) VALUES (30);
 
642
INSERT INTO t(c2) VALUES (40);
 
643
 
 
644
SELECT * FROM t ORDER BY c1 ASC;
 
645
 
 
646
DROP TABLE t;
 
647
 
 
648
--echo # Reading from a partition table (partitions >= 2 ) after inserting a negative
 
649
--echo # value into the auto increment column
 
650
 
 
651
 
 
652
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
 
653
  c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 2;
 
654
 
 
655
INSERT INTO t VALUES (-2,-20);
 
656
INSERT INTO t(c2) VALUES (30);
 
657
 
 
658
SELECT * FROM t ORDER BY c1 ASC;
 
659
 
 
660
DROP TABLE t;
 
661
 
 
662
--echo # Inserting negative auto increment value into a partition table (partitions >= 2)
 
663
--echo # auto increment value > 2.
 
664
 
 
665
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
 
666
  c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 2;
 
667
 
 
668
INSERT INTO t VALUES (-4,-20);
 
669
INSERT INTO t(c2) VALUES (30);
 
670
INSERT INTO t(c2) VALUES (40);
 
671
 
 
672
SELECT * FROM t ORDER BY c1 ASC;
 
673
 
 
674
DROP TABLE t;
 
675
 
 
676
--echo # Inserting -1 into autoincrement column of a partition table (partition >= 4)
 
677
 
 
678
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
 
679
  c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
 
680
 
 
681
INSERT INTO t(c2) VALUES (10);
 
682
INSERT INTO t(c2) VALUES (20);
 
683
INSERT INTO t VALUES (-1,-10);
 
684
 
 
685
SELECT * FROM t ORDER BY c1 ASC;
 
686
 
 
687
INSERT INTO t(c2) VALUES (30);
 
688
 
 
689
SELECT * FROM t ORDER BY c1 ASC;
 
690
 
 
691
DROP TABLE t;
 
692
 
 
693
--echo # Deleting from an auto increment table after inserting negative values
 
694
 
 
695
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
 
696
  c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4; 
 
697
 
 
698
INSERT INTO t(c2) VALUES (10);
 
699
INSERT INTO t(c2) VALUES (20);
 
700
INSERT INTO t VALUES (-1,-10);
 
701
INSERT INTO t(c2) VALUES (30);
 
702
INSERT INTO t VALUES (-3,-20);
 
703
INSERT INTO t(c2) VALUES (40);
 
704
 
 
705
SELECT * FROM t ORDER BY c1 ASC;
 
706
 
 
707
if (!$skip_delete)
 
708
 
709
DELETE FROM t WHERE c1 > 1;
 
710
}
 
711
 
 
712
SELECT * FROM t ORDER BY c1 ASC;
 
713
 
 
714
DROP TABLE t;
 
715
 
 
716
--echo # Inserting a positive value that exceeds maximum allowed value for an
 
717
--echo # Auto Increment column (positive maximum)
 
718
 
 
719
eval CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
 
720
  c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
 
721
 
 
722
INSERT INTO t(c2) VALUES (10);
 
723
INSERT INTO t(c2) VALUES (20);
 
724
INSERT INTO t VALUES (126,30);
 
725
INSERT INTO t VALUES (127,40);
 
726
 
 
727
--error ER_DUP_ENTRY
 
728
INSERT INTO t VALUES (128,50);
 
729
--error ER_DUP_ENTRY 
 
730
INSERT INTO t VALUES (129,60);
 
731
 
 
732
SELECT * FROM t ORDER BY c1 ASC;
 
733
 
 
734
DROP TABLE t;
 
735
 
 
736
--echo # Inserting a negative value that goes below minimum allowed value for an
 
737
--echo # Auto Increment column (negative minimum)
 
738
 
 
739
eval CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
 
740
  c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
 
741
 
 
742
INSERT INTO t(c2) VALUES (10);
 
743
INSERT INTO t(c2) VALUES (20);
 
744
INSERT INTO t VALUES (-127,30);
 
745
INSERT INTO t VALUES (-128,40);
 
746
 
 
747
--error ER_DUP_ENTRY
 
748
INSERT INTO t VALUES (-129,50);
 
749
--error ER_DUP_ENTRY
 
750
INSERT INTO t VALUES (-130,60);
 
751
 
 
752
SELECT * FROM t ORDER BY c1 ASC;
 
753
 
 
754
DROP TABLE t;
 
755
 
 
756
--echo # Updating the partition table with a negative Auto Increment value
 
757
 
 
758
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
 
759
  c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
 
760
 
 
761
INSERT INTO t(c2) VALUES (10);
 
762
INSERT INTO t(c2) VALUES (20);
 
763
INSERT INTO t VALUES (-1,-10);
 
764
INSERT INTO t(c2) VALUES (30);
 
765
 
 
766
SELECT * FROM t ORDER BY c1 ASC;
 
767
 
 
768
if (!$skip_update)
 
769
 
770
UPDATE t SET c1 = -6 WHERE c1 = 2;
 
771
}
 
772
 
 
773
SELECT * FROM t ORDER BY c1 ASC;
 
774
 
 
775
INSERT INTO t(c2) VALUES (40);
 
776
INSERT INTO t(c2) VALUES (50);
 
777
 
 
778
if (!$skip_update)
 
779
 
780
UPDATE t SET c1 = -6 WHERE c1 = 2;
 
781
}
 
782
 
 
783
SELECT * FROM t ORDER BY c1 ASC;
 
784
 
 
785
DROP TABLE t;
 
786
 
 
787
--echo # Updating the partition table with a value that crosses the upper limits
 
788
--echo # on both the positive and the negative side.
 
789
 
 
790
eval CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
 
791
  c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
 
792
 
 
793
INSERT INTO t(c2) VALUES (10);
 
794
INSERT INTO t(c2) VALUES (20);
 
795
INSERT INTO t VALUES (126,30);
 
796
INSERT INTO t VALUES (127,40);
 
797
 
 
798
SELECT * FROM t ORDER BY c1 ASC;
 
799
 
 
800
if (!$skip_update)
 
801
 
802
UPDATE t SET c1 = 130 where c1 = 127;
 
803
}
 
804
 
 
805
SELECT * FROM t ORDER BY c1 ASC;
 
806
 
 
807
if (!$skip_update)
 
808
 
809
UPDATE t SET c1 = -140 where c1 = 126;
 
810
}
 
811
 
 
812
SELECT * FROM t ORDER BY c1 ASC;
 
813
 
 
814
DROP TABLE t;
 
815
 
 
816
--echo ##############################################################################
 
817
}