diff --git a/mysql-test/r/archive.result b/mysql-test/r/archive.result index d15103be011..8ccd2f7e17f 100644 --- a/mysql-test/r/archive.result +++ b/mysql-test/r/archive.result @@ -12367,6 +12367,7 @@ INSERT INTO t5 VALUES (NULL, "foo"); INSERT INTO t5 VALUES (NULL, "foo"); INSERT INTO t5 VALUES (32, "foo"); INSERT INTO t5 VALUES (23, "foo"); +ERROR 23000: Can't write; duplicate key in table 't5' INSERT INTO t5 VALUES (NULL, "foo"); INSERT INTO t5 VALUES (NULL, "foo"); INSERT INTO t5 VALUES (3, "foo"); @@ -12380,7 +12381,6 @@ a b 4 foo 5 foo 32 foo -23 foo 33 foo 34 foo 35 foo diff --git a/mysql-test/t/archive.test b/mysql-test/t/archive.test index ddb313217a6..1f4cf6ea132 100644 --- a/mysql-test/t/archive.test +++ b/mysql-test/t/archive.test @@ -1379,6 +1379,7 @@ INSERT INTO t5 VALUES (NULL, "foo"); INSERT INTO t5 VALUES (NULL, "foo"); INSERT INTO t5 VALUES (NULL, "foo"); INSERT INTO t5 VALUES (32, "foo"); +--error 1022 INSERT INTO t5 VALUES (23, "foo"); INSERT INTO t5 VALUES (NULL, "foo"); INSERT INTO t5 VALUES (NULL, "foo"); diff --git a/storage/archive/ha_archive.cc b/storage/archive/ha_archive.cc index 6a03783ac3f..584de61ca10 100644 --- a/storage/archive/ha_archive.cc +++ b/storage/archive/ha_archive.cc @@ -784,23 +784,22 @@ int ha_archive::write_row(byte *buf) temp_auto= table->next_number_field->val_int(); /* - Simple optimization to see if we fail for duplicate key immediatly - because we have just given out this value. + We don't support decremening auto_increment. They make the performance + just cry. */ - if (temp_auto == share->archive_write.auto_increment && + if (temp_auto <= share->archive_write.auto_increment && mkey->flags & HA_NOSAME) { rc= HA_ERR_FOUND_DUPP_KEY; goto error; } +#ifdef DEAD_CODE /* Bad news, this will cause a search for the unique value which is very expensive since we will have to do a table scan which will lock up all other writers during this period. This could perhaps be optimized in the future. */ - if (temp_auto < share->archive_write.auto_increment && - mkey->flags & HA_NOSAME) { /* First we create a buffer that we can use for reading rows, and can pass @@ -838,6 +837,7 @@ int ha_archive::write_row(byte *buf) } } } +#endif else { if (temp_auto > share->archive_write.auto_increment)