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) ?
|
((thd->client_capabilities & CLIENT_FOUND_ROWS) ?
|
||||||
info.touched : info.updated);
|
info.touched : info.updated);
|
||||||
id= autoinc_value_of_first_inserted_row > 0 ?
|
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);
|
::send_ok(thd, (ulong) thd->row_count_func, id, buff);
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
@ -15241,6 +15241,22 @@ static void test_mysql_insert_id()
|
|||||||
myquery(rc);
|
myquery(rc);
|
||||||
res= mysql_insert_id(mysql);
|
res= mysql_insert_id(mysql);
|
||||||
DIE_UNLESS(res == 0);
|
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'");
|
rc= mysql_query(mysql, "insert into t1 select null,'d'");
|
||||||
myquery(rc);
|
myquery(rc);
|
||||||
res= mysql_insert_id(mysql);
|
res= mysql_insert_id(mysql);
|
||||||
|
Reference in New Issue
Block a user