mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge 10.4 into 10.5
This commit is contained in:
@ -4906,12 +4906,6 @@ extern "C" int thd_slave_thread(const MYSQL_THD thd)
|
||||
}
|
||||
|
||||
|
||||
extern "C" int thd_rpl_stmt_based(const MYSQL_THD thd)
|
||||
{
|
||||
return thd &&
|
||||
!thd->is_current_stmt_binlog_format_row() &&
|
||||
!thd->is_current_stmt_binlog_disabled();
|
||||
}
|
||||
|
||||
|
||||
/* Returns high resolution timestamp for the start
|
||||
@ -6251,6 +6245,48 @@ int THD::decide_logging_format(TABLE_LIST *tables)
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
int THD::decide_logging_format_low(TABLE *table)
|
||||
{
|
||||
/*
|
||||
INSERT...ON DUPLICATE KEY UPDATE on a table with more than one unique keys
|
||||
can be unsafe.
|
||||
*/
|
||||
if(wsrep_binlog_format() <= BINLOG_FORMAT_STMT &&
|
||||
!is_current_stmt_binlog_format_row() &&
|
||||
!lex->is_stmt_unsafe() &&
|
||||
lex->sql_command == SQLCOM_INSERT &&
|
||||
lex->duplicates == DUP_UPDATE)
|
||||
{
|
||||
uint unique_keys= 0;
|
||||
uint keys= table->s->keys, i= 0;
|
||||
Field *field;
|
||||
for (KEY* keyinfo= table->s->key_info;
|
||||
i < keys && unique_keys <= 1; i++, keyinfo++)
|
||||
if (keyinfo->flags & HA_NOSAME &&
|
||||
!(keyinfo->key_part->field->flags & AUTO_INCREMENT_FLAG &&
|
||||
//User given auto inc can be unsafe
|
||||
!keyinfo->key_part->field->val_int()))
|
||||
{
|
||||
for (uint j= 0; j < keyinfo->user_defined_key_parts; j++)
|
||||
{
|
||||
field= keyinfo->key_part[j].field;
|
||||
if(!bitmap_is_set(table->write_set,field->field_index))
|
||||
goto exit;
|
||||
}
|
||||
unique_keys++;
|
||||
exit:;
|
||||
}
|
||||
|
||||
if (unique_keys > 1)
|
||||
{
|
||||
lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_INSERT_TWO_KEYS);
|
||||
binlog_unsafe_warning_flags|= lex->get_stmt_unsafe_flags();
|
||||
set_current_stmt_binlog_format_row_if_mixed();
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
Implementation of interface to write rows to the binary log through the
|
||||
|
Reference in New Issue
Block a user