From: Luis Soares Date: June 27 2009 1:18pm Subject: bzr commit into mysql-5.1-bugteam branch (luis.soares:2981) Bug#42851 List-Archive: http://lists.mysql.com/commits/77391 X-Bug: 42851 Message-Id: <0KLW006JJFNHOC00@fe-emea-10.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_252KWb/7xzdlf/iEToZI8Q)" --Boundary_(ID_252KWb/7xzdlf/iEToZI8Q) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///home/lsoares/Workspace/mysql-server/bugfix/b42851/5.1-bt-push/ based on revid:davi.arnaut@stripped 2981 Luis Soares 2009-06-27 BUG#42851: Spurious "Statement is not safe to log in statement format." warnings Despite the fact that a statement would be filtered out from binlog, a warning would still be thrown if it was issued with the LIMIT. This patch addresses this issue by checking the filtering rules before printing out the warning. @ mysql-test/suite/binlog/t/binlog_stm_unsafe_warning-master.opt Parameter to filter out database: "b42851". @ mysql-test/suite/binlog/t/binlog_stm_unsafe_warning.test Added a new test case. @ sql/sql_class.cc Added filtering rules check to condition used to decide whether to printout warning or not. added: mysql-test/suite/binlog/r/binlog_stm_unsafe_warning.result mysql-test/suite/binlog/t/binlog_stm_unsafe_warning-master.opt mysql-test/suite/binlog/t/binlog_stm_unsafe_warning.test modified: sql/sql_class.cc === added file 'mysql-test/suite/binlog/r/binlog_stm_unsafe_warning.result' --- a/mysql-test/suite/binlog/r/binlog_stm_unsafe_warning.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/binlog/r/binlog_stm_unsafe_warning.result 2009-06-27 13:18:47 +0000 @@ -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; === added file 'mysql-test/suite/binlog/t/binlog_stm_unsafe_warning-master.opt' --- a/mysql-test/suite/binlog/t/binlog_stm_unsafe_warning-master.opt 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/binlog/t/binlog_stm_unsafe_warning-master.opt 2009-06-27 13:18:47 +0000 @@ -0,0 +1 @@ +--binlog-ignore-db=b42851 === added file 'mysql-test/suite/binlog/t/binlog_stm_unsafe_warning.test' --- a/mysql-test/suite/binlog/t/binlog_stm_unsafe_warning.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/binlog/t/binlog_stm_unsafe_warning.test 2009-06-27 13:18:47 +0000 @@ -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; === modified file 'sql/sql_class.cc' --- a/sql/sql_class.cc 2009-06-25 15:41:05 +0000 +++ b/sql/sql_class.cc 2009-06-27 13:18:47 +0000 @@ -27,6 +27,7 @@ #include "mysql_priv.h" #include "rpl_rli.h" +#include "rpl_filter.h" #include "rpl_record.h" #include "slave.h" #include @@ -3684,7 +3685,8 @@ int THD::binlog_query(THD::enum_binlog_q 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. --Boundary_(ID_252KWb/7xzdlf/iEToZI8Q) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/luis.soares@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/luis.soares@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: luis.soares@stripped # target_branch: file:///home/lsoares/Workspace/mysql-\ # server/bugfix/b42851/5.1-bt-push/ # testament_sha1: f1f3da7b626d47c9ce60d758dc1eb7fa09dbb31b # timestamp: 2009-06-27 14:18:52 +0100 # base_revision_id: davi.arnaut@stripped\ # d5k8ntkzlgwwuks1 # # Begin bundle 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 ikjPpKWoaqiPKih7VuLgL+X/xdyRThQkAMiKssA= --Boundary_(ID_252KWb/7xzdlf/iEToZI8Q)--