mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
LAST_INSERT_ID() should not be set if we couldn't generate an auto_increment id.
This commit is contained in:
parent
dbebed97e4
commit
6bc7b3a6be
4 changed files with 29 additions and 3 deletions
|
@ -111,11 +111,16 @@ insert into t1 set i = null;
|
|||
select last_insert_id();
|
||||
last_insert_id()
|
||||
255
|
||||
insert into t1 set i = 254;
|
||||
ERROR 23000: Duplicate entry '254' for key 1
|
||||
select last_insert_id();
|
||||
last_insert_id()
|
||||
255
|
||||
insert into t1 set i = null;
|
||||
ERROR 23000: Duplicate entry '255' for key 1
|
||||
select last_insert_id();
|
||||
last_insert_id()
|
||||
255
|
||||
0
|
||||
drop table t1;
|
||||
create table t1 (i tinyint unsigned not null auto_increment, key (i));
|
||||
insert into t1 set i = 254;
|
||||
|
|
|
@ -80,6 +80,9 @@ insert into t1 set i = 254;
|
|||
insert into t1 set i = null;
|
||||
select last_insert_id();
|
||||
--error 1062
|
||||
insert into t1 set i = 254;
|
||||
select last_insert_id();
|
||||
--error 1062
|
||||
insert into t1 set i = null;
|
||||
select last_insert_id();
|
||||
drop table t1;
|
||||
|
@ -100,5 +103,6 @@ select last_insert_id();
|
|||
--error 1062
|
||||
insert into t1 values (NULL, 10);
|
||||
select last_insert_id();
|
||||
|
||||
drop table t1;
|
||||
|
||||
|
|
|
@ -709,6 +709,8 @@ void handler::update_auto_increment()
|
|||
nr=get_auto_increment();
|
||||
if (!table->next_number_field->store(nr))
|
||||
thd->insert_id((ulonglong) nr);
|
||||
else
|
||||
thd->insert_id(table->next_number_field->val_int());
|
||||
auto_increment_column_changed=1;
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
|
|
@ -503,8 +503,23 @@ public:
|
|||
#ifdef SIGNAL_WITH_VIO_CLOSE
|
||||
Vio* active_vio;
|
||||
#endif
|
||||
ulonglong next_insert_id,last_insert_id,current_insert_id,
|
||||
limit_found_rows;
|
||||
/*
|
||||
next_insert_id is set on SET INSERT_ID= #. This is used as the next
|
||||
generated auto_increment value in handler.cc
|
||||
*/
|
||||
ulonglong next_insert_id;
|
||||
/*
|
||||
The insert_id used for the last statement or set by SET LAST_INSERT_ID=#
|
||||
or SELECT LAST_INSERT_ID(#). Used for binary log and returned by
|
||||
LAST_INSERT_ID()
|
||||
*/
|
||||
ulonglong last_insert_id;
|
||||
/*
|
||||
Set to the first value that LAST_INSERT_ID() returned for the last
|
||||
statement. When this is set, last_insert_id_used is set to true.
|
||||
*/
|
||||
ulonglong current_insert_id;
|
||||
ulonglong limit_found_rows;
|
||||
ha_rows select_limit, offset_limit, cuted_fields,
|
||||
sent_row_count, examined_row_count;
|
||||
table_map used_tables;
|
||||
|
|
Loading…
Reference in a new issue