diff --git a/mysql-test/r/auto_increment.result b/mysql-test/r/auto_increment.result index e79e6aab56b..2facb504294 100644 --- a/mysql-test/r/auto_increment.result +++ b/mysql-test/r/auto_increment.result @@ -105,3 +105,41 @@ Table Op Msg_type Msg_text test.t1 check warning Found row where the auto_increment column has the value 0 test.t1 check status OK drop table t1; +create table t1 (i tinyint unsigned not null auto_increment primary key); +insert into t1 set i = 254; +insert into t1 set i = null; +select last_insert_id(); +last_insert_id() +255 +insert into t1 set i = null; +Duplicate entry '255' for key 1 +select last_insert_id(); +last_insert_id() +255 +drop table t1; +create table t1 (i tinyint unsigned not null auto_increment, key (i)); +insert into t1 set i = 254; +insert into t1 set i = null; +select last_insert_id(); +last_insert_id() +255 +insert into t1 set i = null; +select last_insert_id(); +last_insert_id() +255 +drop table t1; +create table t1 (i tinyint unsigned not null auto_increment primary key, b int, unique (b)); +insert into t1 values (NULL, 10); +select last_insert_id(); +last_insert_id() +1 +insert into t1 values (NULL, 15); +select last_insert_id(); +last_insert_id() +2 +insert into t1 values (NULL, 10); +Duplicate entry '10' for key 2 +select last_insert_id(); +last_insert_id() +3 +drop table t1; diff --git a/mysql-test/t/auto_increment.test b/mysql-test/t/auto_increment.test index d7f67fe80d4..63fdfded6d0 100644 --- a/mysql-test/t/auto_increment.test +++ b/mysql-test/t/auto_increment.test @@ -72,3 +72,33 @@ select * from t1; check table t1; drop table t1; +# +# last_insert_id() madness +# +create table t1 (i tinyint unsigned not null auto_increment primary key); +insert into t1 set i = 254; +insert into t1 set i = null; +select last_insert_id(); +--error 1062 +insert into t1 set i = null; +select last_insert_id(); +drop table t1; + +create table t1 (i tinyint unsigned not null auto_increment, key (i)); +insert into t1 set i = 254; +insert into t1 set i = null; +select last_insert_id(); +insert into t1 set i = null; +select last_insert_id(); +drop table t1; + +create table t1 (i tinyint unsigned not null auto_increment primary key, b int, unique (b)); +insert into t1 values (NULL, 10); +select last_insert_id(); +insert into t1 values (NULL, 15); +select last_insert_id(); +--error 1062 +insert into t1 values (NULL, 10); +select last_insert_id(); +drop table t1; + diff --git a/sql/handler.cc b/sql/handler.cc index 5353e78cd11..e288d590e88 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -660,8 +660,8 @@ void handler::update_auto_increment() thd->next_insert_id=0; // Clear after use else nr=get_auto_increment(); - thd->insert_id((ulonglong) nr); - table->next_number_field->store(nr); + if (!table->next_number_field->store(nr)) + thd->insert_id((ulonglong) nr); auto_increment_column_changed=1; DBUG_VOID_RETURN; }