1
0
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:
kaa@kaamos.(none)
2008-03-05 16:02:33 +03:00
parent 5a4e12cb56
commit 80d89023ea
2 changed files with 18 additions and 1 deletions

View File

@ -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);
} }

View File

@ -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);