mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
BUG#53437 @@session.sql_bin_log support in substatements is incorrect
The thd->variables.option_bits & OPTION_BIN_LOG is currently abused:
it's both a system variable and an implementation switch. The current
approach to this option bit breaks the session variable encapsulation.
Besides it is allowed to change @@session.sql_bin_log within a
transaction what may lead to not correctly logging a transaction.
To fix the problems, we created a thd->variables variable to represent
the "sql_log_bin" and prohibited its update inside a transaction or
sub-statement.
This commit is contained in:
@@ -4001,9 +4001,9 @@ thr_lock_type read_lock_type_for_table(THD *thd,
|
||||
prelocked mode we can't rely on OPTION_BIN_LOG flag in THD::options
|
||||
bitmap to determine that binary logging is turned on as this bit can
|
||||
be cleared before executing sub-statement. So instead we have to look
|
||||
at THD::sql_log_bin_toplevel member.
|
||||
at THD::variables::sql_log_bin member.
|
||||
*/
|
||||
bool log_on= mysql_bin_log.is_open() && thd->sql_log_bin_toplevel;
|
||||
bool log_on= mysql_bin_log.is_open() && thd->variables.sql_log_bin;
|
||||
ulong binlog_format= thd->variables.binlog_format;
|
||||
if ((log_on == FALSE) || (binlog_format == BINLOG_FORMAT_ROW) ||
|
||||
(table_list->table->s->table_category == TABLE_CATEGORY_LOG) ||
|
||||
|
||||
Reference in New Issue
Block a user