1
-- source include/have_innodb.inc
2
# embedded server ignores 'delayed', so skip this
3
-- source include/not_embedded.inc
6
drop table if exists t1;
12
CREATE TABLE t1 (c1 BIGINT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
13
INSERT INTO t1 VALUES (9223372036854775807, null);
14
-- error ER_DUP_ENTRY,1062
15
INSERT INTO t1 (c2) VALUES ('innodb');
19
## Test AUTOINC overflow
23
CREATE TABLE t1 (c1 TINYINT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
24
INSERT INTO t1 VALUES (127, null);
25
-- error ER_DUP_ENTRY,1062
26
-- warning ER_WARN_DATA_OUT_OF_RANGE,1264
27
INSERT INTO t1 (c2) VALUES ('innodb');
31
CREATE TABLE t1 (c1 TINYINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
32
INSERT INTO t1 VALUES (255, null);
33
-- error ER_DUP_ENTRY,1062
34
-- warning ER_WARN_DATA_OUT_OF_RANGE,1264
35
INSERT INTO t1 (c2) VALUES ('innodb');
41
CREATE TABLE t1 (c1 SMALLINT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
42
INSERT INTO t1 VALUES (32767, null);
43
-- error ER_DUP_ENTRY,1062
44
-- warning ER_WARN_DATA_OUT_OF_RANGE,1264
45
INSERT INTO t1 (c2) VALUES ('innodb');
49
CREATE TABLE t1 (c1 SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
50
INSERT INTO t1 VALUES (65535, null);
51
-- error ER_DUP_ENTRY,1062
52
-- warning ER_WARN_DATA_OUT_OF_RANGE,1264
53
INSERT INTO t1 (c2) VALUES ('innodb');
59
CREATE TABLE t1 (c1 MEDIUMINT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
60
INSERT INTO t1 VALUES (8388607, null);
61
-- error ER_DUP_ENTRY,1062
62
-- warning ER_WARN_DATA_OUT_OF_RANGE,1264
63
INSERT INTO t1 (c2) VALUES ('innodb');
67
CREATE TABLE t1 (c1 MEDIUMINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
68
INSERT INTO t1 VALUES (16777215, null);
69
-- error ER_DUP_ENTRY,1062
70
-- warning ER_WARN_DATA_OUT_OF_RANGE,1264
71
INSERT INTO t1 (c2) VALUES ('innodb');
77
CREATE TABLE t1 (c1 INT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
78
INSERT INTO t1 VALUES (2147483647, null);
79
-- error ER_DUP_ENTRY,1062
80
-- warning ER_WARN_DATA_OUT_OF_RANGE,1264
81
INSERT INTO t1 (c2) VALUES ('innodb');
85
CREATE TABLE t1 (c1 INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
86
INSERT INTO t1 VALUES (4294967295, null);
87
-- error ER_DUP_ENTRY,1062
88
INSERT INTO t1 (c2) VALUES ('innodb');
94
CREATE TABLE t1 (c1 BIGINT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
95
INSERT INTO t1 VALUES (9223372036854775807, null);
96
-- error ER_DUP_ENTRY,1062
97
-- warning ER_WARN_DATA_OUT_OF_RANGE,1264
98
INSERT INTO t1 (c2) VALUES ('innodb');
102
CREATE TABLE t1 (c1 BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
103
INSERT INTO t1 VALUES (18446744073709551615, null);
104
-- error ER_AUTOINC_READ_FAILED,1467
105
INSERT INTO t1 (c2) VALUES ('innodb');
111
# After truncate, auto_increment behaves incorrectly for InnoDB
113
CREATE TABLE t1(c1 INT PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
114
INSERT INTO t1 VALUES (1), (2), (3);
115
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
117
SHOW CREATE TABLE t1;
119
SHOW CREATE TABLE t1;
120
INSERT INTO t1 VALUES (1), (2), (3);
121
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
123
SHOW CREATE TABLE t1;
127
# Deleting all records should not reset the AUTOINC counter.
129
CREATE TABLE t1(c1 INT PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
130
INSERT INTO t1 VALUES (1), (2), (3);
131
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
133
SHOW CREATE TABLE t1;
135
SHOW CREATE TABLE t1;
136
INSERT INTO t1 VALUES (1), (2), (3);
137
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
139
SHOW CREATE TABLE t1;
144
# Reset the last value generated at end of statement
146
DROP TABLE IF EXISTS t1;
147
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, c2 INT, PRIMARY KEY(c1)) ENGINE=InnoDB;
148
INSERT INTO t1 VALUES (NULL, 1);
149
DELETE FROM t1 WHERE c1 = 1;
150
INSERT INTO t1 VALUES (2,1);
151
INSERT INTO t1 VALUES (NULL,8);
154
# Bug 38839 -- same as above but for multi value insert
155
DROP TABLE IF EXISTS t1;
156
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, c2 INT, PRIMARY KEY(c1)) ENGINE=InnoDB;
157
INSERT INTO t1 VALUES (NULL, 1);
158
DELETE FROM t1 WHERE c1 = 1;
159
INSERT INTO t1 VALUES (2,1), (NULL, 8);
160
INSERT INTO t1 VALUES (NULL,9);
165
# Test changes to AUTOINC next value calculation
166
SET @@SESSION.AUTO_INCREMENT_INCREMENT=100, @@SESSION.AUTO_INCREMENT_OFFSET=10;
167
SHOW VARIABLES LIKE "%auto_inc%";
168
DROP TABLE IF EXISTS t1;
169
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
170
INSERT INTO t1 VALUES (NULL),(5),(NULL);
171
INSERT INTO t1 VALUES (250),(NULL);
173
INSERT INTO t1 VALUES (1000);
175
INSERT INTO t1 VALUES(NULL),(NULL);
179
# Test with SIGNED INT column, by inserting a 0 for the first column value
180
# 0 is treated in the same was NULL.
181
# Reset the AUTOINC session variables
182
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
184
SHOW VARIABLES LIKE "%auto_inc%";
185
DROP TABLE IF EXISTS t1;
186
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
187
INSERT INTO t1 VALUES(0);
189
SET @@SESSION.AUTO_INCREMENT_INCREMENT=100, @@SESSION.AUTO_INCREMENT_OFFSET=10;
190
INSERT INTO t1 VALUES (-1), (NULL),(2),(NULL);
191
INSERT INTO t1 VALUES (250),(NULL);
194
# Duplicate error expected here for autoinc_lock_mode != TRADITIONAL
195
-- error ER_DUP_ENTRY,1062
196
INSERT INTO t1 VALUES(NULL),(NULL);
200
# Test with SIGNED INT column
201
# Reset the AUTOINC session variables
202
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
204
SHOW VARIABLES LIKE "%auto_inc%";
205
DROP TABLE IF EXISTS t1;
206
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
207
INSERT INTO t1 VALUES(-1);
209
SET @@SESSION.AUTO_INCREMENT_INCREMENT=100, @@SESSION.AUTO_INCREMENT_OFFSET=10;
210
SHOW VARIABLES LIKE "%auto_inc%";
211
INSERT INTO t1 VALUES (-2), (NULL),(2),(NULL);
212
INSERT INTO t1 VALUES (250),(NULL);
214
INSERT INTO t1 VALUES (1000);
216
INSERT INTO t1 VALUES(NULL),(NULL);
220
# Test with UNSIGNED INT column, single insert
221
# The sign in the value is ignored and a new column value is generated
222
# Reset the AUTOINC session variables
223
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
225
SHOW VARIABLES LIKE "%auto_inc%";
226
DROP TABLE IF EXISTS t1;
227
CREATE TABLE t1 (c1 INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
228
INSERT INTO t1 VALUES(-1);
230
SET @@SESSION.AUTO_INCREMENT_INCREMENT=100, @@SESSION.AUTO_INCREMENT_OFFSET=10;
231
SHOW VARIABLES LIKE "%auto_inc%";
232
INSERT INTO t1 VALUES (-2);
233
INSERT INTO t1 VALUES (NULL);
234
INSERT INTO t1 VALUES (2);
235
INSERT INTO t1 VALUES (NULL);
236
INSERT INTO t1 VALUES (250);
237
INSERT INTO t1 VALUES (NULL);
239
INSERT INTO t1 VALUES (1000);
241
INSERT INTO t1 VALUES(NULL);
242
INSERT INTO t1 VALUES(NULL);
246
# Test with UNSIGNED INT column, multi-value inserts
247
# The sign in the value is ignored and a new column value is generated
248
# Reset the AUTOINC session variables
249
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
251
SHOW VARIABLES LIKE "%auto_inc%";
252
DROP TABLE IF EXISTS t1;
253
CREATE TABLE t1 (c1 INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
254
INSERT INTO t1 VALUES(-1);
256
SET @@SESSION.AUTO_INCREMENT_INCREMENT=100, @@SESSION.AUTO_INCREMENT_OFFSET=10;
257
SHOW VARIABLES LIKE "%auto_inc%";
258
INSERT INTO t1 VALUES (-2),(NULL),(2),(NULL);
259
INSERT INTO t1 VALUES (250),(NULL);
261
INSERT INTO t1 VALUES (1000);
263
# Duplicate error expected here for autoinc_lock_mode != TRADITIONAL
264
-- error ER_DUP_ENTRY,1062
265
INSERT INTO t1 VALUES(NULL),(NULL);
270
# Check for overflow handling when increment is > 1
271
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
273
SHOW VARIABLES LIKE "%auto_inc%";
274
DROP TABLE IF EXISTS t1;
275
CREATE TABLE t1 (c1 BIGINT AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
276
# TODO: Fix the autoinc init code
277
# We have to do this because of a bug in the AUTOINC init code.
278
INSERT INTO t1 VALUES(NULL);
279
INSERT INTO t1 VALUES (9223372036854775794); -- 2^63 - 14
281
SET @@SESSION.AUTO_INCREMENT_INCREMENT=2, @@SESSION.AUTO_INCREMENT_OFFSET=10;
282
SHOW VARIABLES LIKE "%auto_inc%";
283
# This should just fit
284
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
289
# Check for overflow handling when increment and offser are > 1
290
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
292
SHOW VARIABLES LIKE "%auto_inc%";
293
DROP TABLE IF EXISTS t1;
294
CREATE TABLE t1 (c1 BIGINT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
295
# TODO: Fix the autoinc init code
296
# We have to do this because of a bug in the AUTOINC init code.
297
INSERT INTO t1 VALUES(NULL);
298
INSERT INTO t1 VALUES (18446744073709551603); -- 2^64 - 13
300
SET @@SESSION.AUTO_INCREMENT_INCREMENT=2, @@SESSION.AUTO_INCREMENT_OFFSET=10;
301
SHOW VARIABLES LIKE "%auto_inc%";
302
# This should fail because of overflow but it doesn't, it seems to be
303
# a MySQL server bug. It wraps around to 0 for the last value.
304
# See MySQL Bug# 39828
305
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
310
# Check for overflow handling when increment and offset are odd numbers
311
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
313
SHOW VARIABLES LIKE "%auto_inc%";
314
DROP TABLE IF EXISTS t1;
315
CREATE TABLE t1 (c1 BIGINT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
316
# TODO: Fix the autoinc init code
317
# We have to do this because of a bug in the AUTOINC init code.
318
INSERT INTO t1 VALUES(NULL);
319
INSERT INTO t1 VALUES (18446744073709551603); -- 2^64 - 13
321
SET @@SESSION.AUTO_INCREMENT_INCREMENT=5, @@SESSION.AUTO_INCREMENT_OFFSET=7;
322
SHOW VARIABLES LIKE "%auto_inc%";
323
# This should fail because of overflow but it doesn't. It fails with
324
# a duplicate entry message because of a MySQL server bug, it wraps
325
# around. See MySQL Bug# 39828, once MySQL fix the bug we can replace
326
# the ER_DUP_ENTRY, 1062 below with the appropriate error message
327
-- error ER_DUP_ENTRY,1062
328
INSERT INTO t1 VALUES (NULL),(NULL), (NULL);
332
# Check for overflow handling when increment and offset are odd numbers
333
# and check for large -ve numbers
334
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
336
SHOW VARIABLES LIKE "%auto_inc%";
337
DROP TABLE IF EXISTS t1;
338
CREATE TABLE t1 (c1 BIGINT AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
339
# TODO: Fix the autoinc init code
340
# We have to do this because of a bug in the AUTOINC init code.
341
INSERT INTO t1 VALUES(NULL);
342
INSERT INTO t1 VALUES(-9223372036854775806); -- -2^63 + 2
343
INSERT INTO t1 VALUES(-9223372036854775807); -- -2^63 + 1
344
INSERT INTO t1 VALUES(-9223372036854775808); -- -2^63
346
SET @@SESSION.AUTO_INCREMENT_INCREMENT=3, @@SESSION.AUTO_INCREMENT_OFFSET=3;
347
SHOW VARIABLES LIKE "%auto_inc%";
348
INSERT INTO t1 VALUES (NULL),(NULL), (NULL);
352
# Check for overflow handling when increment and offset are very
354
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
356
SHOW VARIABLES LIKE "%auto_inc%";
357
DROP TABLE IF EXISTS t1;
358
CREATE TABLE t1 (c1 BIGINT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
359
# TODO: Fix the autoinc init code
360
# We have to do this because of a bug in the AUTOINC init code.
361
INSERT INTO t1 VALUES(NULL);
362
INSERT INTO t1 VALUES (18446744073709551610); -- 2^64 - 2
364
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1152921504606846976, @@SESSION.AUTO_INCREMENT_OFFSET=1152921504606846976;
365
SHOW VARIABLES LIKE "%auto_inc%";
366
# This should fail because of overflow but it doesn't. It wraps around
367
# and the autoinc values look bogus too.
368
# See MySQL Bug# 39828, once MySQL fix the bug we can enable the error
369
# code expected test.
370
# -- error ER_AUTOINC_READ_FAILED,1467
371
INSERT INTO t1 VALUES (NULL),(NULL), (NULL);