mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fix for bug #34889: mysql_client_test::test_mysql_insert_id test fails
sporadically Under some circumstances, the mysql_insert_id() value after SELECT ... INSERT could return a wrong value. This could happen when the last SELECT ... INSERT did not involve an AUTO_INCREMENT column, but the value of mysql_insert_id() was changed by some previous statements. Fixed by checking the value of thd->insert_id_used in select_insert::send_eof() and returning 0 for mysql_insert_id() if it is not set.
This commit is contained in:
@ -3006,7 +3006,8 @@ bool select_insert::send_eof()
|
||||
((thd->client_capabilities & CLIENT_FOUND_ROWS) ?
|
||||
info.touched : info.updated);
|
||||
id= autoinc_value_of_first_inserted_row > 0 ?
|
||||
autoinc_value_of_first_inserted_row : thd->last_insert_id;
|
||||
autoinc_value_of_first_inserted_row : thd->insert_id_used ?
|
||||
thd->last_insert_id : 0;
|
||||
::send_ok(thd, (ulong) thd->row_count_func, id, buff);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
@ -15241,6 +15241,22 @@ static void test_mysql_insert_id()
|
||||
myquery(rc);
|
||||
res= mysql_insert_id(mysql);
|
||||
DIE_UNLESS(res == 0);
|
||||
|
||||
/*
|
||||
Test for bug #34889: mysql_client_test::test_mysql_insert_id test fails
|
||||
sporadically
|
||||
*/
|
||||
rc= mysql_query(mysql, "create table t2 (f1 int not null primary key auto_increment, f2 varchar(255))");
|
||||
myquery(rc);
|
||||
rc= mysql_query(mysql, "insert into t2 values (null,'b')");
|
||||
myquery(rc);
|
||||
rc= mysql_query(mysql, "insert into t1 select 5,'c'");
|
||||
myquery(rc);
|
||||
res= mysql_insert_id(mysql);
|
||||
DIE_UNLESS(res == 0);
|
||||
rc= mysql_query(mysql, "drop table t2");
|
||||
myquery(rc);
|
||||
|
||||
rc= mysql_query(mysql, "insert into t1 select null,'d'");
|
||||
myquery(rc);
|
||||
res= mysql_insert_id(mysql);
|
||||
|
Reference in New Issue
Block a user