mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug#7879: Using TL_READ_NO_INSERT locks instead of TL_READ locks when
reading tables in "complex" SQL statements. If inserts happen in a table being read, the statements have no serialization order and the change can therefore not be reproduced on the slave.
This commit is contained in:
@ -479,7 +479,10 @@ int mysql_multi_update(THD *thd,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
DBUG_PRINT("info",("setting table `%s` for read-only", tl->alias));
|
DBUG_PRINT("info",("setting table `%s` for read-only", tl->alias));
|
||||||
tl->lock_type= TL_READ;
|
// If we are using the binary log, we need TL_READ_NO_INSERT to get
|
||||||
|
// correct order of statements. Otherwise, we use a TL_READ lock to
|
||||||
|
// improve performance.
|
||||||
|
tl->lock_type= using_update_log ? TL_READ_NO_INSERT : TL_READ;
|
||||||
tl->updating= 0;
|
tl->updating= 0;
|
||||||
wants= SELECT_ACL;
|
wants= SELECT_ACL;
|
||||||
}
|
}
|
||||||
|
@ -822,7 +822,7 @@ create_select:
|
|||||||
SELECT_SYM
|
SELECT_SYM
|
||||||
{
|
{
|
||||||
LEX *lex=Lex;
|
LEX *lex=Lex;
|
||||||
lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ;
|
lex->lock_option= using_update_log ? TL_READ_NO_INSERT : TL_READ;
|
||||||
if (lex->sql_command == SQLCOM_INSERT)
|
if (lex->sql_command == SQLCOM_INSERT)
|
||||||
lex->sql_command= SQLCOM_INSERT_SELECT;
|
lex->sql_command= SQLCOM_INSERT_SELECT;
|
||||||
else if (lex->sql_command == SQLCOM_REPLACE)
|
else if (lex->sql_command == SQLCOM_REPLACE)
|
||||||
@ -1532,7 +1532,7 @@ select_part2:
|
|||||||
{
|
{
|
||||||
LEX *lex=Lex;
|
LEX *lex=Lex;
|
||||||
lex->lock_option=TL_READ;
|
lex->lock_option=TL_READ;
|
||||||
mysql_init_select(lex);
|
mysql_init_select(lex);
|
||||||
}
|
}
|
||||||
select_options select_item_list select_into select_lock_type;
|
select_options select_item_list select_into select_lock_type;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user