mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
A fix and a test case for Bug#12713 "Error in a stored function called from
a SELECT doesn't cause ROLLBACK of statem". The idea of the fix is to ensure that we always commit the current statement at the end of dispatch_command(). In order to not issue redundant disc syncs, an optimization of the two-phase commit protocol is implemented to bypass the two phase commit if the transaction is read-only.
This commit is contained in:
@ -28,7 +28,17 @@ bool mysql_do(THD *thd, List<Item> &values)
|
||||
while ((value = li++))
|
||||
value->val_int();
|
||||
free_underlaid_joins(thd, &thd->lex->select_lex);
|
||||
thd->clear_error(); // DO always is OK
|
||||
|
||||
if (thd->is_error())
|
||||
{
|
||||
/*
|
||||
Rollback the effect of the statement, since next instruction
|
||||
will clear the error and the rollback in the end of
|
||||
dispatch_command() won't work.
|
||||
*/
|
||||
ha_autocommit_or_rollback(thd, thd->is_error());
|
||||
thd->clear_error(); // DO always is OK
|
||||
}
|
||||
send_ok(thd);
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
Reference in New Issue
Block a user