mirror of
https://github.com/MariaDB/server.git
synced 2025-01-23 15:24:16 +01:00
cb0cacc2d8
------------------------------------------------------------------------ r2702 | sunny | 2008-09-30 11:41:56 +0300 (Tue, 30 Sep 2008) | 13 lines Changed paths: M /branches/5.1/handler/ha_innodb.cc branches/5.1: Since handler::get_auto_increment() doesn't allow us to return the cause of failure we have to inform MySQL using the sql_print_warning() function to return the cause for autoinc failure. Previously we simply printed the error code, this patch prints the text string representing the following two error codes: DB_LOCK_WAIT_TIMEOUT DB_DEADLOCK. Bug#35498 Cannot get table test/table1 auto-inccounter value in ::info Approved by Marko. ------------------------------------------------------------------------ r2709 | vasil | 2008-10-01 10:13:13 +0300 (Wed, 01 Oct 2008) | 10 lines Changed paths: M /branches/5.1/include/lock0lock.h M /branches/5.1/lock/lock0lock.c A /branches/5.1/mysql-test/innodb_bug38231.result A /branches/5.1/mysql-test/innodb_bug38231.test M /branches/5.1/row/row0mysql.c branches/5.1: Fix Bug#38231 Innodb crash in lock_reset_all_on_table() on TRUNCATE + LOCK / UNLOCK In TRUNCATE TABLE and discard tablespace: do not remove table-level S and X locks and do not assert on such locks not being wait locks. Leave such locks alone. Approved by: Heikki (rb://14) ------------------------------------------------------------------------ r2710 | vasil | 2008-10-01 14:13:58 +0300 (Wed, 01 Oct 2008) | 6 lines Changed paths: M /branches/5.1/include/sync0sync.ic branches/5.1: Silence a compilation warning in UNIV_DEBUG. Approved by: Marko (via IM) ------------------------------------------------------------------------ r2719 | vasil | 2008-10-03 18:17:28 +0300 (Fri, 03 Oct 2008) | 49 lines Changed paths: M /branches/5.1/handler/ha_innodb.cc A /branches/5.1/mysql-test/innodb_bug39438-master.opt A /branches/5.1/mysql-test/innodb_bug39438.result A /branches/5.1/mysql-test/innodb_bug39438.test branches/5.1: Fix Bug#39438 Testcase for Bug#39436 crashes on 5.1 in fil_space_get_latch In ha_innobase::info() - do not try to get the free space for a tablespace which has been discarded with ALTER TABLE ... DISCARD TABLESPACE or if the .ibd file is missing for some other reason. ibd_file_missing and tablespace_discarded are manipulated only in row_discard_tablespace_for_mysql() and in row_import_tablespace_for_mysql() and the manipulation is protected/surrounded by row_mysql_lock_data_dictionary()/row_mysql_unlock_data_dictionary() thus we do the same in ha_innobase::info() when checking the values of those members to avoid race conditions. I have tested the code-path with UNIV_DEBUG and UNIV_SYNC_DEBUG. Looks like it is not possible to avoid mysqld printing warnings in the mysql-test case and thus this test innodb_bug39438 must be added to the list of exceptional test cases that are allowed to print warnings. For this, the following patch must be applied to the mysql source tree: --- cut --- === modified file 'mysql-test/lib/mtr_report.pl' --- mysql-test/lib/mtr_report.pl 2008-08-12 10:26:23 +0000 +++ mysql-test/lib/mtr_report.pl 2008-10-01 11:57:41 +0000 @@ -412,7 +412,10 @@ # When trying to set lower_case_table_names = 2 # on a case sensitive file system. Bug#37402. - /lower_case_table_names was set to 2, even though your the file system '.*' is case sensitive. Now setting lower_case_table_names to 0 to avoid future problems./ + /lower_case_table_names was set to 2, even though your the file system '.*' is case sensitive. Now setting lower_case_table_names to 0 to avoid future problems./ or + + # this test is expected to print warnings + ($testname eq 'main.innodb_bug39438') ) { next; # Skip these lines --- cut --- The mysql-test is currently somewhat disabled (see inside innodb_bug39438.test), after the above patch has been applied to the mysql source tree, the test can be enabled. rb://20 Reviewed by: Inaam, Calvin Approved by: Heikki ------------------------------------------------------------------------ r2720 | vasil | 2008-10-03 19:52:39 +0300 (Fri, 03 Oct 2008) | 8 lines Changed paths: M /branches/5.1/handler/ha_innodb.cc branches/5.1: Print a warning if an attempt is made to get the free space for a table whose .ibd file is missing or the tablespace has been discarded. This is a followup to r2719. Suggested by: Inaam ------------------------------------------------------------------------ r2721 | sunny | 2008-10-04 02:08:23 +0300 (Sat, 04 Oct 2008) | 6 lines Changed paths: M /branches/5.1/handler/ha_innodb.cc branches/5.1: We need to send the messages to the client because handler::get_auto_increment() doesn't allow a way to return the specific error for why it failed. rb://18 ------------------------------------------------------------------------ r2722 | sunny | 2008-10-04 02:48:04 +0300 (Sat, 04 Oct 2008) | 18 lines Changed paths: M /branches/5.1/dict/dict0mem.c M /branches/5.1/handler/ha_innodb.cc M /branches/5.1/include/dict0mem.h M /branches/5.1/include/row0mysql.h M /branches/5.1/mysql-test/innodb-autoinc.result M /branches/5.1/mysql-test/innodb-autoinc.test M /branches/5.1/row/row0mysql.c branches/5.1: This bug has always existed but was masked by other errors. The fix for bug# 38839 triggered this bug. When the offset and increment are > 1 we need to calculate the next value taking into consideration the two variables. Previously we simply assumed they were 1 particularly offset was never used. MySQL does its own calculation and that's probably why it seemed to work in the past. We would return what we thought was the correct next value and then MySQL would recalculate the actual value from that and return it to the caller (e.g., handler::write_row()). Several new tests have been added that try and catch some edge cases. The tests exposed a wrap around error in MySQL next value calculation which was filed as bug#39828. The tests will need to be updated once MySQL fix that bug. One good side effect of this fix is that dict_table_t size has been reduced by 8 bytes because we have moved the autoinc_increment field to the row_prebuilt_t structure. See review-board for a detailed discussion. rb://3 ------------------------------------------------------------------------
373 lines
13 KiB
Text
373 lines
13 KiB
Text
-- source include/have_innodb.inc
|
|
# embedded server ignores 'delayed', so skip this
|
|
-- source include/not_embedded.inc
|
|
|
|
--disable_warnings
|
|
drop table if exists t1;
|
|
--enable_warnings
|
|
|
|
#
|
|
# Bug #34335
|
|
#
|
|
CREATE TABLE t1 (c1 BIGINT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (9223372036854775807, null);
|
|
-- error ER_DUP_ENTRY,1062
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
#
|
|
## Test AUTOINC overflow
|
|
##
|
|
|
|
# TINYINT
|
|
CREATE TABLE t1 (c1 TINYINT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (127, null);
|
|
-- error ER_DUP_ENTRY,1062
|
|
-- warning ER_WARN_DATA_OUT_OF_RANGE,1264
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
CREATE TABLE t1 (c1 TINYINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (255, null);
|
|
-- error ER_DUP_ENTRY,1062
|
|
-- warning ER_WARN_DATA_OUT_OF_RANGE,1264
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
#
|
|
# SMALLINT
|
|
#
|
|
CREATE TABLE t1 (c1 SMALLINT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (32767, null);
|
|
-- error ER_DUP_ENTRY,1062
|
|
-- warning ER_WARN_DATA_OUT_OF_RANGE,1264
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
CREATE TABLE t1 (c1 SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (65535, null);
|
|
-- error ER_DUP_ENTRY,1062
|
|
-- warning ER_WARN_DATA_OUT_OF_RANGE,1264
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
#
|
|
# MEDIUMINT
|
|
#
|
|
CREATE TABLE t1 (c1 MEDIUMINT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (8388607, null);
|
|
-- error ER_DUP_ENTRY,1062
|
|
-- warning ER_WARN_DATA_OUT_OF_RANGE,1264
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
CREATE TABLE t1 (c1 MEDIUMINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (16777215, null);
|
|
-- error ER_DUP_ENTRY,1062
|
|
-- warning ER_WARN_DATA_OUT_OF_RANGE,1264
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
#
|
|
# INT
|
|
#
|
|
CREATE TABLE t1 (c1 INT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (2147483647, null);
|
|
-- error ER_DUP_ENTRY,1062
|
|
-- warning ER_WARN_DATA_OUT_OF_RANGE,1264
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
CREATE TABLE t1 (c1 INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (4294967295, null);
|
|
-- error ER_DUP_ENTRY,1062
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
#
|
|
# BIGINT
|
|
#
|
|
CREATE TABLE t1 (c1 BIGINT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (9223372036854775807, null);
|
|
-- error ER_DUP_ENTRY,1062
|
|
-- warning ER_WARN_DATA_OUT_OF_RANGE,1264
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
CREATE TABLE t1 (c1 BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (18446744073709551615, null);
|
|
-- error ER_AUTOINC_READ_FAILED,1467
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# Bug 37531
|
|
# After truncate, auto_increment behaves incorrectly for InnoDB
|
|
#
|
|
CREATE TABLE t1(c1 INT PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (1), (2), (3);
|
|
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
|
SELECT c1 FROM t1;
|
|
SHOW CREATE TABLE t1;
|
|
TRUNCATE TABLE t1;
|
|
SHOW CREATE TABLE t1;
|
|
INSERT INTO t1 VALUES (1), (2), (3);
|
|
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
|
SELECT c1 FROM t1;
|
|
SHOW CREATE TABLE t1;
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# Deleting all records should not reset the AUTOINC counter.
|
|
#
|
|
CREATE TABLE t1(c1 INT PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (1), (2), (3);
|
|
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
|
SELECT c1 FROM t1;
|
|
SHOW CREATE TABLE t1;
|
|
DELETE FROM t1;
|
|
SHOW CREATE TABLE t1;
|
|
INSERT INTO t1 VALUES (1), (2), (3);
|
|
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
|
SELECT c1 FROM t1;
|
|
SHOW CREATE TABLE t1;
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# Bug 38839
|
|
# Reset the last value generated at end of statement
|
|
#
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, c2 INT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (NULL, 1);
|
|
DELETE FROM t1 WHERE c1 = 1;
|
|
INSERT INTO t1 VALUES (2,1);
|
|
INSERT INTO t1 VALUES (NULL,8);
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
# Bug 38839 -- same as above but for multi value insert
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, c2 INT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (NULL, 1);
|
|
DELETE FROM t1 WHERE c1 = 1;
|
|
INSERT INTO t1 VALUES (2,1), (NULL, 8);
|
|
INSERT INTO t1 VALUES (NULL,9);
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# Test changes to AUTOINC next value calculation
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=100, @@SESSION.AUTO_INCREMENT_OFFSET=10;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (NULL),(5),(NULL);
|
|
INSERT INTO t1 VALUES (250),(NULL);
|
|
SELECT * FROM t1;
|
|
INSERT INTO t1 VALUES (1000);
|
|
SET @@INSERT_ID=400;
|
|
INSERT INTO t1 VALUES(NULL),(NULL);
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
# Test with SIGNED INT column, by inserting a 0 for the first column value
|
|
# 0 is treated in the same was NULL.
|
|
# Reset the AUTOINC session variables
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
|
SET @@INSERT_ID=1;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES(0);
|
|
SELECT * FROM t1;
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=100, @@SESSION.AUTO_INCREMENT_OFFSET=10;
|
|
INSERT INTO t1 VALUES (-1), (NULL),(2),(NULL);
|
|
INSERT INTO t1 VALUES (250),(NULL);
|
|
SELECT * FROM t1;
|
|
SET @@INSERT_ID=400;
|
|
# Duplicate error expected here for autoinc_lock_mode != TRADITIONAL
|
|
-- error ER_DUP_ENTRY,1062
|
|
INSERT INTO t1 VALUES(NULL),(NULL);
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
# Test with SIGNED INT column
|
|
# Reset the AUTOINC session variables
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
|
SET @@INSERT_ID=1;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES(-1);
|
|
SELECT * FROM t1;
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=100, @@SESSION.AUTO_INCREMENT_OFFSET=10;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
INSERT INTO t1 VALUES (-2), (NULL),(2),(NULL);
|
|
INSERT INTO t1 VALUES (250),(NULL);
|
|
SELECT * FROM t1;
|
|
INSERT INTO t1 VALUES (1000);
|
|
SET @@INSERT_ID=400;
|
|
INSERT INTO t1 VALUES(NULL),(NULL);
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
# Test with UNSIGNED INT column, single insert
|
|
# The sign in the value is ignored and a new column value is generated
|
|
# Reset the AUTOINC session variables
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
|
SET @@INSERT_ID=1;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1 (c1 INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES(-1);
|
|
SELECT * FROM t1;
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=100, @@SESSION.AUTO_INCREMENT_OFFSET=10;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
INSERT INTO t1 VALUES (-2);
|
|
INSERT INTO t1 VALUES (NULL);
|
|
INSERT INTO t1 VALUES (2);
|
|
INSERT INTO t1 VALUES (NULL);
|
|
INSERT INTO t1 VALUES (250);
|
|
INSERT INTO t1 VALUES (NULL);
|
|
SELECT * FROM t1;
|
|
INSERT INTO t1 VALUES (1000);
|
|
SET @@INSERT_ID=400;
|
|
INSERT INTO t1 VALUES(NULL);
|
|
INSERT INTO t1 VALUES(NULL);
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
# Test with UNSIGNED INT column, multi-value inserts
|
|
# The sign in the value is ignored and a new column value is generated
|
|
# Reset the AUTOINC session variables
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
|
SET @@INSERT_ID=1;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1 (c1 INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES(-1);
|
|
SELECT * FROM t1;
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=100, @@SESSION.AUTO_INCREMENT_OFFSET=10;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
INSERT INTO t1 VALUES (-2),(NULL),(2),(NULL);
|
|
INSERT INTO t1 VALUES (250),(NULL);
|
|
SELECT * FROM t1;
|
|
INSERT INTO t1 VALUES (1000);
|
|
SET @@INSERT_ID=400;
|
|
# Duplicate error expected here for autoinc_lock_mode != TRADITIONAL
|
|
-- error ER_DUP_ENTRY,1062
|
|
INSERT INTO t1 VALUES(NULL),(NULL);
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# Check for overflow handling when increment is > 1
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
|
SET @@INSERT_ID=1;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1 (c1 BIGINT AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
|
# TODO: Fix the autoinc init code
|
|
# We have to do this because of a bug in the AUTOINC init code.
|
|
INSERT INTO t1 VALUES(NULL);
|
|
INSERT INTO t1 VALUES (9223372036854775794); -- 2^63 - 14
|
|
SELECT * FROM t1;
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=2, @@SESSION.AUTO_INCREMENT_OFFSET=10;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
# This should just fit
|
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# Check for overflow handling when increment and offser are > 1
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
|
SET @@INSERT_ID=1;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1 (c1 BIGINT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
|
# TODO: Fix the autoinc init code
|
|
# We have to do this because of a bug in the AUTOINC init code.
|
|
INSERT INTO t1 VALUES(NULL);
|
|
INSERT INTO t1 VALUES (18446744073709551603); -- 2^64 - 13
|
|
SELECT * FROM t1;
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=2, @@SESSION.AUTO_INCREMENT_OFFSET=10;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
# This should fail because of overflow but it doesn't, it seems to be
|
|
# a MySQL server bug. It wraps around to 0 for the last value.
|
|
# See MySQL Bug# 39828
|
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# Check for overflow handling when increment and offset are odd numbers
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
|
SET @@INSERT_ID=1;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1 (c1 BIGINT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
|
# TODO: Fix the autoinc init code
|
|
# We have to do this because of a bug in the AUTOINC init code.
|
|
INSERT INTO t1 VALUES(NULL);
|
|
INSERT INTO t1 VALUES (18446744073709551603); -- 2^64 - 13
|
|
SELECT * FROM t1;
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=5, @@SESSION.AUTO_INCREMENT_OFFSET=7;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
# This should fail because of overflow but it doesn't. It fails with
|
|
# a duplicate entry message because of a MySQL server bug, it wraps
|
|
# around. See MySQL Bug# 39828, once MySQL fix the bug we can replace
|
|
# the ER_DUP_ENTRY, 1062 below with the appropriate error message
|
|
-- error ER_DUP_ENTRY,1062
|
|
INSERT INTO t1 VALUES (NULL),(NULL), (NULL);
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
|
|
# Check for overflow handling when increment and offset are odd numbers
|
|
# and check for large -ve numbers
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
|
SET @@INSERT_ID=1;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1 (c1 BIGINT AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
|
# TODO: Fix the autoinc init code
|
|
# We have to do this because of a bug in the AUTOINC init code.
|
|
INSERT INTO t1 VALUES(NULL);
|
|
INSERT INTO t1 VALUES(-9223372036854775806); -- -2^63 + 2
|
|
INSERT INTO t1 VALUES(-9223372036854775807); -- -2^63 + 1
|
|
INSERT INTO t1 VALUES(-9223372036854775808); -- -2^63
|
|
SELECT * FROM t1;
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=3, @@SESSION.AUTO_INCREMENT_OFFSET=3;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
INSERT INTO t1 VALUES (NULL),(NULL), (NULL);
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
#
|
|
# Check for overflow handling when increment and offset are very
|
|
# large numbers 2^60
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
|
SET @@INSERT_ID=1;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1 (c1 BIGINT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
|
# TODO: Fix the autoinc init code
|
|
# We have to do this because of a bug in the AUTOINC init code.
|
|
INSERT INTO t1 VALUES(NULL);
|
|
INSERT INTO t1 VALUES (18446744073709551610); -- 2^64 - 2
|
|
SELECT * FROM t1;
|
|
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1152921504606846976, @@SESSION.AUTO_INCREMENT_OFFSET=1152921504606846976;
|
|
SHOW VARIABLES LIKE "%auto_inc%";
|
|
# This should fail because of overflow but it doesn't. It wraps around
|
|
# and the autoinc values look bogus too.
|
|
# See MySQL Bug# 39828, once MySQL fix the bug we can enable the error
|
|
# code expected test.
|
|
# -- error ER_AUTOINC_READ_FAILED,1467
|
|
INSERT INTO t1 VALUES (NULL),(NULL), (NULL);
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|