Added THD::binlog_table_should_be_logged() to simplify some code

- Added missing test for binlog_filter to ALTER TABLE
This commit is contained in:
Monty 2020-06-18 11:49:07 +03:00
parent 1a49c5eb4d
commit 00bd52b147
4 changed files with 21 additions and 15 deletions

View File

@ -5964,11 +5964,8 @@ int THD::decide_logging_format(TABLE_LIST *tables)
} }
#endif /* WITH_WSREP */ #endif /* WITH_WSREP */
if ((WSREP_EMULATE_BINLOG_NNULL(this) || if (WSREP_EMULATE_BINLOG_NNULL(this) ||
(mysql_bin_log.is_open() && binlog_table_should_be_logged(&db))
(variables.option_bits & OPTION_BIN_LOG))) &&
!(wsrep_binlog_format() == BINLOG_FORMAT_STMT &&
!binlog_filter->db_ok(db.str)))
{ {
if (is_bulk_op()) if (is_bulk_op())
{ {
@ -6492,6 +6489,21 @@ exit:;
} }
#ifndef MYSQL_CLIENT #ifndef MYSQL_CLIENT
/**
Check if we should log a table DDL to the binlog
@@return true yes
@@return false no
*/
bool THD::binlog_table_should_be_logged(const LEX_CSTRING *db)
{
return (mysql_bin_log.is_open() &&
(variables.option_bits & OPTION_BIN_LOG) &&
(wsrep_binlog_format() != BINLOG_FORMAT_STMT ||
binlog_filter->db_ok(db->str)));
}
/* /*
Template member function for ensuring that there is an rows log Template member function for ensuring that there is an rows log
event of the apropriate type before proceeding. event of the apropriate type before proceeding.

View File

@ -2699,6 +2699,7 @@ public:
{ {
binlog_table_maps= 0; binlog_table_maps= 0;
} }
bool binlog_table_should_be_logged(const LEX_CSTRING *db);
#endif /* MYSQL_CLIENT */ #endif /* MYSQL_CLIENT */

View File

@ -4802,10 +4802,7 @@ bool binlog_create_table(THD *thd, TABLE *table)
if (thd->variables.binlog_format == BINLOG_FORMAT_ROW && if (thd->variables.binlog_format == BINLOG_FORMAT_ROW &&
table->s->tmp_table) table->s->tmp_table)
return 0; return 0;
if (!mysql_bin_log.is_open() || if (!thd->binlog_table_should_be_logged(&table->s->db))
!(thd->variables.option_bits & OPTION_BIN_LOG) ||
(thd->wsrep_binlog_format() == BINLOG_FORMAT_STMT &&
!binlog_filter->db_ok(table->s->db.str)))
return 0; return 0;
/* /*
@ -4834,10 +4831,7 @@ bool binlog_drop_table(THD *thd, TABLE *table)
/* Don't log temporary tables in row format */ /* Don't log temporary tables in row format */
if (!table->s->table_creation_was_logged) if (!table->s->table_creation_was_logged)
return 0; return 0;
if (!mysql_bin_log.is_open() || if (!thd->binlog_table_should_be_logged(&table->s->db))
!(thd->variables.option_bits & OPTION_BIN_LOG) ||
(thd->wsrep_binlog_format() == BINLOG_FORMAT_STMT &&
!binlog_filter->db_ok(table->s->db.str)))
return 0; return 0;
query.append("DROP "); query.append("DROP ");

View File

@ -10708,8 +10708,7 @@ do_continue:;
if ((table->file->partition_ht()->flags & if ((table->file->partition_ht()->flags &
HTON_TABLE_MAY_NOT_EXIST_ON_SLAVE) && HTON_TABLE_MAY_NOT_EXIST_ON_SLAVE) &&
(table->file->partition_ht() != new_table->file->partition_ht()) && (table->file->partition_ht() != new_table->file->partition_ht()) &&
(mysql_bin_log.is_open() && thd->binlog_table_should_be_logged(&new_table->s->db))
(thd->variables.option_bits & OPTION_BIN_LOG)))
{ {
/* /*
We new_table is marked as internal temp table, but we want to have We new_table is marked as internal temp table, but we want to have