Bug #26921 Problem in mysql_insert_id() Embedded C API function.

client library only sets mysql->insert_id when query returned
no recordset. So the embedded library should behave the same way
parent 8c3d5135
...@@ -251,9 +251,11 @@ static my_bool emb_read_query_result(MYSQL *mysql) ...@@ -251,9 +251,11 @@ static my_bool emb_read_query_result(MYSQL *mysql)
mysql->warning_count= res->embedded_info->warning_count; mysql->warning_count= res->embedded_info->warning_count;
mysql->server_status= res->embedded_info->server_status; mysql->server_status= res->embedded_info->server_status;
mysql->field_count= res->fields; mysql->field_count= res->fields;
mysql->fields= res->embedded_info->fields_list; if (!(mysql->fields= res->embedded_info->fields_list))
{
mysql->affected_rows= res->embedded_info->affected_rows; mysql->affected_rows= res->embedded_info->affected_rows;
mysql->insert_id= res->embedded_info->insert_id; mysql->insert_id= res->embedded_info->insert_id;
}
mysql->net.last_errno= 0; mysql->net.last_errno= 0;
mysql->net.last_error[0]= 0; mysql->net.last_error[0]= 0;
mysql->info= 0; mysql->info= 0;
......
set autocommit=1;
reset master;
create table bug16206 (a int);
insert into bug16206 values(1);
start transaction;
insert into bug16206 values(2);
commit;
show binlog events;
Log_name Pos Event_type Server_id End_log_pos Info
f n Format_desc 1 n Server ver: VERSION, Binlog ver: 4
f n Query 1 n use `test`; create table bug16206 (a int)
f n Query 1 n use `test`; insert into bug16206 values(1)
f n Query 1 n use `test`; insert into bug16206 values(2)
drop table bug16206;
reset master;
create table bug16206 (a int) engine= bdb;
insert into bug16206 values(0);
insert into bug16206 values(1);
start transaction;
insert into bug16206 values(2);
commit;
insert into bug16206 values(3);
show binlog events;
Log_name Pos Event_type Server_id End_log_pos Info
f n Format_desc 1 n Server ver: VERSION, Binlog ver: 4
f n Query 1 n use `test`; create table bug16206 (a int) engine= bdb
f n Query 1 n use `test`; insert into bug16206 values(0)
f n Query 1 n use `test`; insert into bug16206 values(1)
f n Query 1 n use `test`; BEGIN
f n Query 1 n use `test`; insert into bug16206 values(2)
f n Query 1 n use `test`; COMMIT
f n Query 1 n use `test`; insert into bug16206 values(3)
drop table bug16206;
set autocommit=0;
End of 5.0 tests
-- source include/not_embedded.inc
-- source include/have_bdb.inc
#
# Bug #16206: Superfluous COMMIT event in binlog when updating BDB in autocommit mode
#
set autocommit=1;
let $VERSION=`select version()`;
reset master;
create table bug16206 (a int);
insert into bug16206 values(1);
start transaction;
insert into bug16206 values(2);
commit;
--replace_result $VERSION VERSION
--replace_column 1 f 2 n 5 n
show binlog events;
drop table bug16206;
reset master;
create table bug16206 (a int) engine= bdb;
insert into bug16206 values(0);
insert into bug16206 values(1);
start transaction;
insert into bug16206 values(2);
commit;
insert into bug16206 values(3);
--replace_result $VERSION VERSION
--replace_column 1 f 2 n 5 n
show binlog events;
drop table bug16206;
set autocommit=0;
--echo End of 5.0 tests
...@@ -15358,6 +15358,8 @@ static void test_bug21206() ...@@ -15358,6 +15358,8 @@ static void test_bug21206()
Test that client gets updated value of insert_id on UPDATE that uses Test that client gets updated value of insert_id on UPDATE that uses
LAST_INSERT_ID(expr). LAST_INSERT_ID(expr).
select_query added to test for bug
#26921 Problem in mysql_insert_id() Embedded C API function
*/ */
static void test_bug21726() static void test_bug21726()
{ {
...@@ -15370,6 +15372,8 @@ static void test_bug21726() ...@@ -15370,6 +15372,8 @@ static void test_bug21726()
const char *update_query= "UPDATE t1 SET i= LAST_INSERT_ID(i + 1)"; const char *update_query= "UPDATE t1 SET i= LAST_INSERT_ID(i + 1)";
int rc; int rc;
my_ulonglong insert_id; my_ulonglong insert_id;
const char *select_query= "SELECT * FROM t1";
MYSQL_RES *result;
DBUG_ENTER("test_bug21726"); DBUG_ENTER("test_bug21726");
myheader("test_bug21726"); myheader("test_bug21726");
...@@ -15386,6 +15390,13 @@ static void test_bug21726() ...@@ -15386,6 +15390,13 @@ static void test_bug21726()
insert_id= mysql_insert_id(mysql); insert_id= mysql_insert_id(mysql);
DIE_UNLESS(insert_id == 3); DIE_UNLESS(insert_id == 3);
rc= mysql_query(mysql, select_query);
myquery(rc);
insert_id= mysql_insert_id(mysql);
DIE_UNLESS(insert_id == 3);
result= mysql_store_result(mysql);
mysql_free_result(result);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
......
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