mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
merge: 5.1-bt bug branch --> 5.1-bt latest
This commit is contained in:
commit
40e87bcf2b
4 changed files with 107 additions and 1 deletions
30
mysql-test/suite/binlog/r/binlog_stm_unsafe_warning.result
Normal file
30
mysql-test/suite/binlog/r/binlog_stm_unsafe_warning.result
Normal file
|
@ -0,0 +1,30 @@
|
|||
### NOT filtered database => assertion: warnings ARE shown
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (a int, b int, primary key (a));
|
||||
INSERT INTO t1 VALUES (1,2), (2,3);
|
||||
UPDATE t1 SET b='4' WHERE a=1 LIMIT 1;
|
||||
Warnings:
|
||||
Note 1592 Statement may not be safe to log in statement format.
|
||||
UPDATE t1 SET b='5' WHERE a=2 ORDER BY a LIMIT 1;
|
||||
Warnings:
|
||||
Note 1592 Statement may not be safe to log in statement format.
|
||||
DROP TABLE t1;
|
||||
### NOT filtered database => assertion: binlog disabled and warnings ARE NOT shown
|
||||
SET SQL_LOG_BIN= 0;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (a int, b int, primary key (a));
|
||||
INSERT INTO t1 VALUES (1,2), (2,3);
|
||||
UPDATE t1 SET b='4' WHERE a=1 LIMIT 1;
|
||||
UPDATE t1 SET b='5' WHERE a=2 ORDER BY a LIMIT 1;
|
||||
DROP TABLE t1;
|
||||
SET SQL_LOG_BIN= 1;
|
||||
### FILTERED database => assertion: warnings ARE NOT shown
|
||||
CREATE DATABASE b42851;
|
||||
USE b42851;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (a int, b int, primary key (a));
|
||||
INSERT INTO t1 VALUES (1,2), (2,3);
|
||||
UPDATE t1 SET b='4' WHERE a=1 LIMIT 1;
|
||||
UPDATE t1 SET b='5' WHERE a=2 ORDER BY a LIMIT 1;
|
||||
DROP TABLE t1;
|
||||
DROP DATABASE b42851;
|
|
@ -0,0 +1 @@
|
|||
--binlog-ignore-db=b42851
|
73
mysql-test/suite/binlog/t/binlog_stm_unsafe_warning.test
Normal file
73
mysql-test/suite/binlog/t/binlog_stm_unsafe_warning.test
Normal file
|
@ -0,0 +1,73 @@
|
|||
# BUG#42851: Spurious "Statement is not safe to log in statement
|
||||
# format." warnings
|
||||
#
|
||||
# WHY
|
||||
# ===
|
||||
#
|
||||
# This test aims at checking that the fix that removes spurious
|
||||
# entries in the error log when the statement is filtered out from
|
||||
# binlog, is working.
|
||||
#
|
||||
# HOW
|
||||
# ===
|
||||
#
|
||||
# The test case is split into three assertions when issuing statements
|
||||
# containing LIMIT and ORDER BY:
|
||||
#
|
||||
# i) issue statements in database that is not filtered => check
|
||||
# that warnings ARE shown;
|
||||
#
|
||||
# ii) issue statements in database that is not filtered, but with
|
||||
# binlog disabled => check that warnings ARE NOT shown;
|
||||
#
|
||||
# iii) issue statements in database that is filtered => check that
|
||||
# warnings ARE NOT shown.
|
||||
|
||||
-- source include/have_log_bin.inc
|
||||
-- source include/have_binlog_format_statement.inc
|
||||
|
||||
-- echo ### NOT filtered database => assertion: warnings ARE shown
|
||||
|
||||
-- disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
-- enable_warnings
|
||||
|
||||
CREATE TABLE t1 (a int, b int, primary key (a));
|
||||
INSERT INTO t1 VALUES (1,2), (2,3);
|
||||
UPDATE t1 SET b='4' WHERE a=1 LIMIT 1;
|
||||
UPDATE t1 SET b='5' WHERE a=2 ORDER BY a LIMIT 1;
|
||||
DROP TABLE t1;
|
||||
|
||||
-- echo ### NOT filtered database => assertion: binlog disabled and warnings ARE NOT shown
|
||||
|
||||
SET SQL_LOG_BIN= 0;
|
||||
|
||||
-- disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
-- enable_warnings
|
||||
|
||||
CREATE TABLE t1 (a int, b int, primary key (a));
|
||||
INSERT INTO t1 VALUES (1,2), (2,3);
|
||||
UPDATE t1 SET b='4' WHERE a=1 LIMIT 1;
|
||||
UPDATE t1 SET b='5' WHERE a=2 ORDER BY a LIMIT 1;
|
||||
DROP TABLE t1;
|
||||
|
||||
SET SQL_LOG_BIN= 1;
|
||||
|
||||
-- echo ### FILTERED database => assertion: warnings ARE NOT shown
|
||||
|
||||
CREATE DATABASE b42851;
|
||||
USE b42851;
|
||||
|
||||
-- disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
-- enable_warnings
|
||||
|
||||
CREATE TABLE t1 (a int, b int, primary key (a));
|
||||
INSERT INTO t1 VALUES (1,2), (2,3);
|
||||
UPDATE t1 SET b='4' WHERE a=1 LIMIT 1;
|
||||
UPDATE t1 SET b='5' WHERE a=2 ORDER BY a LIMIT 1;
|
||||
DROP TABLE t1;
|
||||
|
||||
# clean up
|
||||
DROP DATABASE b42851;
|
|
@ -27,6 +27,7 @@
|
|||
|
||||
#include "mysql_priv.h"
|
||||
#include "rpl_rli.h"
|
||||
#include "rpl_filter.h"
|
||||
#include "rpl_record.h"
|
||||
#include "slave.h"
|
||||
#include <my_bitmap.h>
|
||||
|
@ -3684,7 +3685,8 @@ int THD::binlog_query(THD::enum_binlog_query_type qtype, char const *query_arg,
|
|||
we should print a warning.
|
||||
*/
|
||||
if (sql_log_bin_toplevel && lex->is_stmt_unsafe() &&
|
||||
variables.binlog_format == BINLOG_FORMAT_STMT)
|
||||
variables.binlog_format == BINLOG_FORMAT_STMT &&
|
||||
binlog_filter->db_ok(this->db))
|
||||
{
|
||||
/*
|
||||
A warning can be elevated a error when STRICT sql mode.
|
||||
|
|
Loading…
Add table
Reference in a new issue