mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Fix when using auto_increment and last_insert_id() in the same insert statement.
This commit is contained in:
15
mysql-test/r/rpl_insert_id.result
Normal file
15
mysql-test/r/rpl_insert_id.result
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
b c
|
||||||
|
1 4
|
||||||
|
a
|
||||||
|
10
|
||||||
|
11
|
||||||
|
12
|
||||||
|
13
|
||||||
|
b c
|
||||||
|
5 0
|
||||||
|
6 11
|
39
mysql-test/t/rpl_insert_id.test
Normal file
39
mysql-test/t/rpl_insert_id.test
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#see if queries that use both
|
||||||
|
#auto_increment and LAST_INSERT_ID()
|
||||||
|
#are replicated well
|
||||||
|
source include/master-slave.inc;
|
||||||
|
connection master;
|
||||||
|
drop table if exists t1;
|
||||||
|
create table t1(a int auto_increment, key(a));
|
||||||
|
create table t2(b int auto_increment, c int, key(b));
|
||||||
|
insert into t1 values (1),(2),(3);
|
||||||
|
insert into t1 values (null);
|
||||||
|
insert into t2 values (null,last_insert_id());
|
||||||
|
save_master_pos;
|
||||||
|
connection slave;
|
||||||
|
sync_with_master;
|
||||||
|
select * from t1;
|
||||||
|
select * from t2;
|
||||||
|
connection master;
|
||||||
|
#check if multi-line inserts,
|
||||||
|
#which set last_insert_id to the first id inserted,
|
||||||
|
#are replicated the same way
|
||||||
|
drop table t1;
|
||||||
|
drop table t2;
|
||||||
|
create table t1(a int auto_increment, key(a));
|
||||||
|
create table t2(b int auto_increment, c int, key(b));
|
||||||
|
insert into t1 values (10);
|
||||||
|
insert into t1 values (null),(null),(null);
|
||||||
|
insert into t2 values (5,0);
|
||||||
|
insert into t2 values (null,last_insert_id());
|
||||||
|
save_master_pos;
|
||||||
|
connection slave;
|
||||||
|
sync_with_master;
|
||||||
|
select * from t1;
|
||||||
|
select * from t2;
|
||||||
|
connection master;
|
||||||
|
drop table t1;
|
||||||
|
drop table t2;
|
||||||
|
save_master_pos;
|
||||||
|
connection slave;
|
||||||
|
sync_with_master;
|
@ -697,7 +697,7 @@ bool MYSQL_LOG::write(Query_log_event* event_info)
|
|||||||
|
|
||||||
if (thd->last_insert_id_used)
|
if (thd->last_insert_id_used)
|
||||||
{
|
{
|
||||||
Intvar_log_event e((uchar)LAST_INSERT_ID_EVENT, thd->last_insert_id);
|
Intvar_log_event e((uchar)LAST_INSERT_ID_EVENT, thd->current_insert_id);
|
||||||
if(thd->server_id)
|
if(thd->server_id)
|
||||||
e.server_id = thd->server_id;
|
e.server_id = thd->server_id;
|
||||||
if (e.write(file))
|
if (e.write(file))
|
||||||
|
@ -522,26 +522,19 @@ void close_temporary_tables(THD *thd)
|
|||||||
{
|
{
|
||||||
TABLE *table,*next;
|
TABLE *table,*next;
|
||||||
char *query, *end;
|
char *query, *end;
|
||||||
const uint init_query_buf_size = 11; // "drop table "
|
|
||||||
uint query_buf_size;
|
uint query_buf_size;
|
||||||
bool found_user_tables = 0;
|
bool found_user_tables = 0;
|
||||||
|
|
||||||
LINT_INIT(end);
|
LINT_INIT(end);
|
||||||
query_buf_size = init_query_buf_size;
|
|
||||||
|
|
||||||
for (table=thd->temporary_tables ; table ; table=table->next)
|
if (!thd->temporary_tables)
|
||||||
{
|
|
||||||
query_buf_size += table->key_length;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (query_buf_size == init_query_buf_size)
|
|
||||||
return; // no tables to close
|
return; // no tables to close
|
||||||
|
|
||||||
|
query_buf_size= 11; // "drop table "
|
||||||
|
for (table=thd->temporary_tables ; table ; table=table->next)
|
||||||
|
query_buf_size+= table->key_length +1;
|
||||||
|
|
||||||
if ((query = alloc_root(&thd->mem_root, query_buf_size)))
|
if ((query = alloc_root(&thd->mem_root, query_buf_size)))
|
||||||
{
|
end= strmov(query, "drop table ");
|
||||||
memcpy(query, "drop table ", init_query_buf_size);
|
|
||||||
end = query + init_query_buf_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (table=thd->temporary_tables ; table ; table=next)
|
for (table=thd->temporary_tables ; table ; table=next)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user