From: Date: March 12 2010 11:14am Subject: bzr commit into mysql-5.1-bugteam branch (mattias.jonsson:3395) List-Archive: http://lists.mysql.org/commits/103065 Message-Id: <20100312101453.0F12D77C84F@witty.localhost> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_gur6AeK7cb8pcJDh/lMViw)" --Boundary_(ID_gur6AeK7cb8pcJDh/lMViw) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///Users/mattiasj/clones/bzrroot/topush-51-bugteam/ based on revid:mattias.jonsson@stripped 3395 Mattias Jonsson 2010-03-12 [merge] merged modified: mysql-test/r/partition_error.result mysql-test/suite/parts/inc/partition_auto_increment.inc mysql-test/suite/parts/r/partition_auto_increment_archive.result mysql-test/suite/parts/r/partition_auto_increment_blackhole.result mysql-test/suite/parts/r/partition_auto_increment_innodb.result mysql-test/suite/parts/r/partition_auto_increment_memory.result mysql-test/suite/parts/r/partition_auto_increment_myisam.result mysql-test/suite/parts/r/partition_auto_increment_ndb.result mysql-test/t/partition_error.test sql/ha_partition.cc === modified file 'mysql-test/r/partition_error.result' --- a/mysql-test/r/partition_error.result 2009-12-13 20:29:50 +0000 +++ b/mysql-test/r/partition_error.result 2010-03-04 17:16:10 +0000 @@ -1,4 +1,46 @@ drop table if exists t1; +# +# Bug#50392: insert_id is not reset for partitioned tables +# auto_increment on duplicate entry +CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY); +SET INSERT_ID= 13; +INSERT INTO t1 VALUES (NULL); +SET INSERT_ID= 12; +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +ERROR 23000: Duplicate entry '13' for key 'PRIMARY' +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`a`) +) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (NULL); +SELECT * FROM t1; +a +12 +13 +14 +DROP TABLE t1; +CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY) PARTITION BY KEY(a); +SET INSERT_ID= 13; +INSERT INTO t1 VALUES (NULL); +SET INSERT_ID= 12; +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +ERROR 23000: Duplicate entry '13' for key 'PRIMARY' +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`a`) +) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) */ +INSERT INTO t1 VALUES (NULL); +SELECT * FROM t1; +a +12 +13 +14 +DROP TABLE t1; CREATE TABLE t1 (a INTEGER NOT NULL, PRIMARY KEY (a)); INSERT INTO t1 VALUES (1),(1); ERROR 23000: Duplicate entry '1' for key 'PRIMARY' === modified file 'mysql-test/suite/parts/inc/partition_auto_increment.inc' --- a/mysql-test/suite/parts/inc/partition_auto_increment.inc 2009-09-04 03:57:11 +0000 +++ b/mysql-test/suite/parts/inc/partition_auto_increment.inc 2010-03-04 17:16:10 +0000 @@ -42,6 +42,15 @@ if ($mysql_errno) INSERT INTO t1 VALUES (NULL); SET INSERT_ID = 30; INSERT INTO t1 VALUES (NULL); +SET INSERT_ID = 29; +-- error 0, ER_DUP_ENTRY, ER_DUP_KEY +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +if (!$mysql_errno) +{ + echo # ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY; + echo # mysql_errno: $mysql_errno; +} +INSERT INTO t1 VALUES (NULL); if (!$skip_update) { # InnoDB Does not handle this correctly, see bug#14793, bug#21641 @@ -601,6 +610,15 @@ SET INSERT_ID = 23; SHOW CREATE TABLE t1; INSERT INTO t1 (c1) VALUES (NULL); SHOW CREATE TABLE t1; +SET INSERT_ID = 22; +-- error 0, ER_DUP_ENTRY, ER_DUP_KEY +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +if (!$mysql_errno) +{ + echo # ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY; + echo # mysql_errno: $mysql_errno; +} +INSERT INTO t1 VALUES (NULL); SELECT * FROM t1 ORDER BY c1; DROP TABLE t1; === modified file 'mysql-test/suite/parts/r/partition_auto_increment_archive.result' --- a/mysql-test/suite/parts/r/partition_auto_increment_archive.result 2008-11-05 20:13:54 +0000 +++ b/mysql-test/suite/parts/r/partition_auto_increment_archive.result 2010-03-04 17:16:10 +0000 @@ -34,6 +34,9 @@ INSERT INTO t1 VALUES (NULL), (10), (NUL INSERT INTO t1 VALUES (NULL); SET INSERT_ID = 30; INSERT INTO t1 VALUES (NULL); +SET INSERT_ID = 29; +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +INSERT INTO t1 VALUES (NULL); SELECT * FROM t1 ORDER BY c1; c1 2 @@ -46,6 +49,7 @@ c1 21 22 30 +31 DROP TABLE t1; CREATE TABLE t1 ( c1 INT NOT NULL AUTO_INCREMENT, @@ -751,10 +755,15 @@ t1 CREATE TABLE `t1` ( ) ENGINE=ARCHIVE AUTO_INCREMENT=24 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (c1) PARTITIONS 2 */ +SET INSERT_ID = 22; +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +INSERT INTO t1 VALUES (NULL); SELECT * FROM t1 ORDER BY c1; c1 1 +22 23 +24 DROP TABLE t1; # Testing with FLUSH TABLE CREATE TABLE t1 ( === modified file 'mysql-test/suite/parts/r/partition_auto_increment_blackhole.result' --- a/mysql-test/suite/parts/r/partition_auto_increment_blackhole.result 2009-02-18 21:35:28 +0000 +++ b/mysql-test/suite/parts/r/partition_auto_increment_blackhole.result 2010-03-04 17:16:10 +0000 @@ -35,6 +35,11 @@ INSERT INTO t1 VALUES (NULL), (10), (NUL INSERT INTO t1 VALUES (NULL); SET INSERT_ID = 30; INSERT INTO t1 VALUES (NULL); +SET INSERT_ID = 29; +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +# ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY +# mysql_errno: 0 +INSERT INTO t1 VALUES (NULL); UPDATE t1 SET c1 = 50 WHERE c1 = 17; UPDATE t1 SET c1 = 51 WHERE c1 = 19; FLUSH TABLES; @@ -597,6 +602,11 @@ t1 CREATE TABLE `t1` ( ) ENGINE=BLACKHOLE AUTO_INCREMENT=24 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (c1) PARTITIONS 2 */ +SET INSERT_ID = 22; +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +# ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY +# mysql_errno: 0 +INSERT INTO t1 VALUES (NULL); SELECT * FROM t1 ORDER BY c1; c1 DROP TABLE t1; === modified file 'mysql-test/suite/parts/r/partition_auto_increment_innodb.result' --- a/mysql-test/suite/parts/r/partition_auto_increment_innodb.result 2009-09-04 03:57:11 +0000 +++ b/mysql-test/suite/parts/r/partition_auto_increment_innodb.result 2010-03-04 17:16:10 +0000 @@ -33,6 +33,9 @@ INSERT INTO t1 VALUES (NULL), (10), (NUL INSERT INTO t1 VALUES (NULL); SET INSERT_ID = 30; INSERT INTO t1 VALUES (NULL); +SET INSERT_ID = 29; +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +INSERT INTO t1 VALUES (NULL); UPDATE t1 SET c1 = 50 WHERE c1 = 17; UPDATE t1 SET c1 = 51 WHERE c1 = 19; FLUSH TABLES; @@ -40,7 +43,7 @@ UPDATE t1 SET c1 = 40 WHERE c1 = 50; SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1'; AUTO_INCREMENT -31 +32 UPDATE t1 SET c1 = NULL WHERE c1 = 4; Warnings: Warning 1048 Column 'c1' cannot be null @@ -60,6 +63,7 @@ c1 30 31 32 +33 40 51 DROP TABLE t1; @@ -771,10 +775,14 @@ t1 CREATE TABLE `t1` ( ) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (c1) PARTITIONS 2 */ +SET INSERT_ID = 22; +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +INSERT INTO t1 VALUES (NULL); SELECT * FROM t1 ORDER BY c1; c1 1 23 +24 DROP TABLE t1; # Testing with FLUSH TABLE CREATE TABLE t1 ( === modified file 'mysql-test/suite/parts/r/partition_auto_increment_memory.result' --- a/mysql-test/suite/parts/r/partition_auto_increment_memory.result 2009-09-04 03:57:11 +0000 +++ b/mysql-test/suite/parts/r/partition_auto_increment_memory.result 2010-03-04 17:16:10 +0000 @@ -33,6 +33,9 @@ INSERT INTO t1 VALUES (NULL), (10), (NUL INSERT INTO t1 VALUES (NULL); SET INSERT_ID = 30; INSERT INTO t1 VALUES (NULL); +SET INSERT_ID = 29; +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +INSERT INTO t1 VALUES (NULL); UPDATE t1 SET c1 = 50 WHERE c1 = 17; UPDATE t1 SET c1 = 51 WHERE c1 = 19; FLUSH TABLES; @@ -57,7 +60,9 @@ c1 21 22 23 +29 30 +31 40 51 52 @@ -797,10 +802,15 @@ t1 CREATE TABLE `t1` ( ) ENGINE=MEMORY AUTO_INCREMENT=24 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (c1) PARTITIONS 2 */ +SET INSERT_ID = 22; +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +INSERT INTO t1 VALUES (NULL); SELECT * FROM t1 ORDER BY c1; c1 1 +22 23 +24 DROP TABLE t1; # Testing with FLUSH TABLE CREATE TABLE t1 ( === modified file 'mysql-test/suite/parts/r/partition_auto_increment_myisam.result' --- a/mysql-test/suite/parts/r/partition_auto_increment_myisam.result 2009-09-04 03:57:11 +0000 +++ b/mysql-test/suite/parts/r/partition_auto_increment_myisam.result 2010-03-04 17:16:10 +0000 @@ -33,6 +33,9 @@ INSERT INTO t1 VALUES (NULL), (10), (NUL INSERT INTO t1 VALUES (NULL); SET INSERT_ID = 30; INSERT INTO t1 VALUES (NULL); +SET INSERT_ID = 29; +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +INSERT INTO t1 VALUES (NULL); UPDATE t1 SET c1 = 50 WHERE c1 = 17; UPDATE t1 SET c1 = 51 WHERE c1 = 19; FLUSH TABLES; @@ -57,7 +60,9 @@ c1 21 22 23 +29 30 +31 40 51 52 @@ -816,10 +821,15 @@ t1 CREATE TABLE `t1` ( ) ENGINE=MyISAM AUTO_INCREMENT=24 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (c1) PARTITIONS 2 */ +SET INSERT_ID = 22; +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +INSERT INTO t1 VALUES (NULL); SELECT * FROM t1 ORDER BY c1; c1 1 +22 23 +24 DROP TABLE t1; # Testing with FLUSH TABLE CREATE TABLE t1 ( === modified file 'mysql-test/suite/parts/r/partition_auto_increment_ndb.result' --- a/mysql-test/suite/parts/r/partition_auto_increment_ndb.result 2009-09-04 03:57:11 +0000 +++ b/mysql-test/suite/parts/r/partition_auto_increment_ndb.result 2010-03-04 17:16:10 +0000 @@ -34,6 +34,9 @@ INSERT INTO t1 VALUES (NULL), (10), (NUL INSERT INTO t1 VALUES (NULL); SET INSERT_ID = 30; INSERT INTO t1 VALUES (NULL); +SET INSERT_ID = 29; +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +INSERT INTO t1 VALUES (NULL); UPDATE t1 SET c1 = 50 WHERE c1 = 17; UPDATE t1 SET c1 = 51 WHERE c1 = 19; FLUSH TABLES; @@ -58,6 +61,7 @@ c1 21 22 23 +24 30 40 51 @@ -792,9 +796,13 @@ t1 CREATE TABLE `t1` ( ) ENGINE=ndbcluster DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (c1) PARTITIONS 2 */ +SET INSERT_ID = 22; +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +INSERT INTO t1 VALUES (NULL); SELECT * FROM t1 ORDER BY c1; c1 1 +2 23 DROP TABLE t1; # Testing with FLUSH TABLE === modified file 'mysql-test/t/partition_error.test' --- a/mysql-test/t/partition_error.test 2009-12-13 20:29:50 +0000 +++ b/mysql-test/t/partition_error.test 2010-03-04 17:16:10 +0000 @@ -8,6 +8,30 @@ drop table if exists t1; --enable_warnings +--echo # +--echo # Bug#50392: insert_id is not reset for partitioned tables +--echo # auto_increment on duplicate entry +CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY); +SET INSERT_ID= 13; +INSERT INTO t1 VALUES (NULL); +SET INSERT_ID= 12; +--error ER_DUP_ENTRY +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +SHOW CREATE TABLE t1; +INSERT INTO t1 VALUES (NULL); +SELECT * FROM t1; +DROP TABLE t1; +CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY) PARTITION BY KEY(a); +SET INSERT_ID= 13; +INSERT INTO t1 VALUES (NULL); +SET INSERT_ID= 12; +--error ER_DUP_ENTRY +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +SHOW CREATE TABLE t1; +INSERT INTO t1 VALUES (NULL); +SELECT * FROM t1; +DROP TABLE t1; + # # Bug#38719: Partitioning returns a different error code for a # duplicate key error === modified file 'sql/ha_partition.cc' --- a/sql/ha_partition.cc 2010-03-11 13:18:44 +0000 +++ b/sql/ha_partition.cc 2010-03-12 10:14:40 +0000 @@ -6455,9 +6455,22 @@ void ha_partition::release_auto_incremen ulonglong next_auto_inc_val; lock_auto_increment(); next_auto_inc_val= ha_data->next_auto_inc_val; + /* + If the current auto_increment values is lower than the reserved + value, and the reserved value was reserved by this thread, + we can lower the reserved value. + */ if (next_insert_id < next_auto_inc_val && auto_inc_interval_for_cur_row.maximum() >= next_auto_inc_val) - ha_data->next_auto_inc_val= next_insert_id; + { + THD *thd= ha_thd(); + /* + Check that we do not lower the value because of a failed insert + with SET INSERT_ID, i.e. forced/non generated values. + */ + if (thd->auto_inc_intervals_forced.maximum() < next_insert_id) + ha_data->next_auto_inc_val= next_insert_id; + } DBUG_PRINT("info", ("ha_data->next_auto_inc_val: %lu", (ulong) ha_data->next_auto_inc_val)); --Boundary_(ID_gur6AeK7cb8pcJDh/lMViw) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name*0="bzr/mattias.jonsson@stripped"; name*1=40-sb937552uv5z79lc.bundle Content-transfer-encoding: 7BIT Content-disposition: inline; filename*0="bzr/mattias.jonsson@stripped"; filename*1=40-sb937552uv5z79lc.bundle # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: mattias.jonsson@stripped # target_branch: file:///Users/mattiasj/clones/bzrroot/topush-51-\ # bugteam/ # testament_sha1: 756a9dd97114694408ffb14dba8624b04abb147c # timestamp: 2010-03-12 11:14:53 +0100 # source_branch: file:///Users/mattiasj/clones/bzrroot/topush-51-\ # bugteam_2/ # base_revision_id: mattias.jonsson@stripped\ # 3ui71whnvaqaxykn # # Begin bundle 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 OFCQxWaOng== --Boundary_(ID_gur6AeK7cb8pcJDh/lMViw)--