mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
LAST_INSERT_ID() should not be set if we couldn't generate an auto_increment id.
This commit is contained in:
@ -111,11 +111,16 @@ insert into t1 set i = null;
|
|||||||
select last_insert_id();
|
select last_insert_id();
|
||||||
last_insert_id()
|
last_insert_id()
|
||||||
255
|
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;
|
insert into t1 set i = null;
|
||||||
ERROR 23000: Duplicate entry '255' for key 1
|
ERROR 23000: Duplicate entry '255' for key 1
|
||||||
select last_insert_id();
|
select last_insert_id();
|
||||||
last_insert_id()
|
last_insert_id()
|
||||||
255
|
0
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (i tinyint unsigned not null auto_increment, key (i));
|
create table t1 (i tinyint unsigned not null auto_increment, key (i));
|
||||||
insert into t1 set i = 254;
|
insert into t1 set i = 254;
|
||||||
|
@ -80,6 +80,9 @@ insert into t1 set i = 254;
|
|||||||
insert into t1 set i = null;
|
insert into t1 set i = null;
|
||||||
select last_insert_id();
|
select last_insert_id();
|
||||||
--error 1062
|
--error 1062
|
||||||
|
insert into t1 set i = 254;
|
||||||
|
select last_insert_id();
|
||||||
|
--error 1062
|
||||||
insert into t1 set i = null;
|
insert into t1 set i = null;
|
||||||
select last_insert_id();
|
select last_insert_id();
|
||||||
drop table t1;
|
drop table t1;
|
||||||
@ -100,5 +103,6 @@ select last_insert_id();
|
|||||||
--error 1062
|
--error 1062
|
||||||
insert into t1 values (NULL, 10);
|
insert into t1 values (NULL, 10);
|
||||||
select last_insert_id();
|
select last_insert_id();
|
||||||
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
@ -709,6 +709,8 @@ void handler::update_auto_increment()
|
|||||||
nr=get_auto_increment();
|
nr=get_auto_increment();
|
||||||
if (!table->next_number_field->store(nr))
|
if (!table->next_number_field->store(nr))
|
||||||
thd->insert_id((ulonglong) nr);
|
thd->insert_id((ulonglong) nr);
|
||||||
|
else
|
||||||
|
thd->insert_id(table->next_number_field->val_int());
|
||||||
auto_increment_column_changed=1;
|
auto_increment_column_changed=1;
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
@ -503,8 +503,23 @@ public:
|
|||||||
#ifdef SIGNAL_WITH_VIO_CLOSE
|
#ifdef SIGNAL_WITH_VIO_CLOSE
|
||||||
Vio* active_vio;
|
Vio* active_vio;
|
||||||
#endif
|
#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,
|
ha_rows select_limit, offset_limit, cuted_fields,
|
||||||
sent_row_count, examined_row_count;
|
sent_row_count, examined_row_count;
|
||||||
table_map used_tables;
|
table_map used_tables;
|
||||||
|
Reference in New Issue
Block a user