Commit 710ffb2d authored by monty@mashka.mysql.fi's avatar monty@mashka.mysql.fi

Fix when using auto_increment and last_insert_id() in the same insert statement.

parent 9aa49681
a
1
2
3
4
b c
1 4
a
10
11
12
13
b c
5 0
6 11
#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) ...@@ -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) ...@@ -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)
{
query_buf_size += table->key_length;
}
if (query_buf_size == init_query_buf_size) if (!thd->temporary_tables)
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)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment