MDEV-28416 Incorrect AUTO_INCREMENT may be issued when close to UINT64_MAX

ha_innobase::get_auto_increment(): In the overflow check, account
for 64-bit unsigned integer wrap-around.

Based on mysql/mysql-server@25ecfe7f49
This commit is contained in:
Marko Mäkelä 2022-04-27 08:08:06 +03:00
commit 44a27a26e9
5 changed files with 101 additions and 9 deletions

View file

@ -0,0 +1,34 @@
#
# MDEV-28416 Incorrect AUTO_INCREMENT may be issued
#
SET @aii=@@auto_increment_increment;
SET auto_increment_increment=300;
CREATE TABLE t1 (a SERIAL) ENGINE=innodb
PARTITION BY RANGE (a) (
PARTITION p0 VALUES LESS THAN (6),
PARTITION p1 VALUES LESS THAN MAXVALUE
);
INSERT INTO t1 VALUES (18446744073709551613);
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
UNIQUE KEY `a` (`a`)
) ENGINE=InnoDB AUTO_INCREMENT=18446744073709551614 DEFAULT CHARSET=latin1
PARTITION BY RANGE (`a`)
(PARTITION `p0` VALUES LESS THAN (6) ENGINE = InnoDB,
PARTITION `p1` VALUES LESS THAN MAXVALUE ENGINE = InnoDB)
INSERT INTO t1 VALUES (NULL);
ERROR 22003: Out of range value for column 'a' at row 1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
UNIQUE KEY `a` (`a`)
) ENGINE=InnoDB AUTO_INCREMENT=298 DEFAULT CHARSET=latin1
PARTITION BY RANGE (`a`)
(PARTITION `p0` VALUES LESS THAN (6) ENGINE = InnoDB,
PARTITION `p1` VALUES LESS THAN MAXVALUE ENGINE = InnoDB)
DROP TABLE t1;
SET auto_increment_increment=@aii;
# End of 10.2 tests