summaryrefslogtreecommitdiff
path: root/sql/set_var.cc
diff options
context:
space:
mode:
authorGuangbao Ni <gni@mysql.com>2009-03-05 18:39:02 +0000
committerGuangbao Ni <gni@mysql.com>2009-03-05 18:39:02 +0000
commit4f0f021c3387d621a3334c97ff3a0ee394ced040 (patch)
tree4a34d85213232465f79f705a4e0e5e1c7dbd0aac /sql/set_var.cc
parent16c0631f0b785e82aef63429b5a4e7179b8aa52e (diff)
downloadmariadb-git-4f0f021c3387d621a3334c97ff3a0ee394ced040.tar.gz
BUG#41980 SBL, INSERT .. SELECT .. LIMIT = ERROR, even when @@SQL_LOG_BIN is 0 !
When binlog_format is STATEMENT and the statement is unsafe before, the unsafe warning/error message was issued without checking whether the SQL_LOG_BIN was turned on or not. Fixed with adding a sql_log_bin_toplevel flag in THD to check whether SQL_LOG_BIN is ON in current session whatever the current is in sp or not. mysql-test/suite/binlog/r/binlog_unsafe.result: Test case result for unsafe warning/error message mysql-test/suite/binlog/t/binlog_unsafe.test: Test case for unsafe message warning/error sql/set_var.cc: Adding a function set_option_log_bin_bit() which specailly handles to the change of SQL_LOG_BIN bit in order to set sql_log_bin_toplevel according to SQL_LOG_BIN current value at the same time. sql/sql_class.cc: Initialize the flag sql_log_bin_toplevel in THD::init(), and add the condition to check whether unsafe ror message was issued. sql/sql_class.h: Add a sql_log_bin_toplevel flag in THD to indicate whether the toplevel SQL_LOG_BIN is
Diffstat (limited to 'sql/set_var.cc')
-rw-r--r--sql/set_var.cc13
1 files changed, 12 insertions, 1 deletions
diff --git a/sql/set_var.cc b/sql/set_var.cc
index 7e2efd2d580..fbbb6a3f529 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -110,6 +110,7 @@ static void sys_default_init_connect(THD*, enum_var_type type);
static bool sys_update_init_slave(THD*, set_var*);
static void sys_default_init_slave(THD*, enum_var_type type);
static bool set_option_bit(THD *thd, set_var *var);
+static bool set_option_log_bin_bit(THD *thd, set_var *var);
static bool set_option_autocommit(THD *thd, set_var *var);
static int check_log_update(THD *thd, set_var *var);
static bool set_log_update(THD *thd, set_var *var);
@@ -731,7 +732,7 @@ static sys_var_thd_bit sys_log_update(&vars, "sql_log_update",
OPTION_BIN_LOG);
static sys_var_thd_bit sys_log_binlog(&vars, "sql_log_bin",
check_log_update,
- set_option_bit,
+ set_option_log_bin_bit,
OPTION_BIN_LOG);
static sys_var_thd_bit sys_sql_warnings(&vars, "sql_warnings", 0,
set_option_bit,
@@ -2963,6 +2964,16 @@ static bool set_option_bit(THD *thd, set_var *var)
return 0;
}
+/*
+ Functions to be only used to update thd->options OPTION_BIN_LOG bit
+*/
+static bool set_option_log_bin_bit(THD *thd, set_var *var)
+{
+ set_option_bit(thd, var);
+ if (!thd->in_sub_stmt)
+ thd->sql_log_bin_toplevel= thd->options & OPTION_BIN_LOG;
+ return 0;
+}
static bool set_option_autocommit(THD *thd, set_var *var)
{