mirror of
https://github.com/MariaDB/server.git
synced 2025-08-31 22:22:30 +03:00
WL#3339 (Issue warnings when statement-based replication may fail):
Fixing case where a false warning could be printed in mixed mode. Also fixing some test cases that generated different result files as a consequence of the patch.
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
drop table if exists t1;
|
drop table if exists t1,t2;
|
||||||
|
drop view if exists v1;
|
||||||
create table t1(n int not null, key(n), key(n), key(n), key(n));
|
create table t1(n int not null, key(n), key(n), key(n), key(n));
|
||||||
check table t1 extended;
|
check table t1 extended;
|
||||||
insert into t1 values (200000);
|
insert into t1 values (200000);
|
||||||
|
@@ -2,7 +2,8 @@ connect (con1,localhost,root,,);
|
|||||||
connect (con2,localhost,root,,);
|
connect (con2,localhost,root,,);
|
||||||
connection con1;
|
connection con1;
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
drop table if exists t1;
|
drop table if exists t1,t2;
|
||||||
|
drop view if exists v1;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
# Add a lot of keys to slow down check
|
# Add a lot of keys to slow down check
|
||||||
|
@@ -89,7 +89,9 @@ select export_set(3, _latin1'foo', _utf8'bar', ',', 4);
|
|||||||
#
|
#
|
||||||
# Test for BUG#9535
|
# Test for BUG#9535
|
||||||
#
|
#
|
||||||
|
--disable_warnings
|
||||||
create table t1 as select uuid(), length(uuid());
|
create table t1 as select uuid(), length(uuid());
|
||||||
|
--enable_warnings
|
||||||
show create table t1;
|
show create table t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
@@ -2873,6 +2873,27 @@ int THD::binlog_query(THD::enum_binlog_query_type qtype,
|
|||||||
if (int error= binlog_flush_pending_rows_event(TRUE))
|
if (int error= binlog_flush_pending_rows_event(TRUE))
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
|
|
||||||
|
/*
|
||||||
|
If we are in statement mode and trying to log an unsafe statement,
|
||||||
|
we should print a warning.
|
||||||
|
*/
|
||||||
|
if (lex->is_stmt_unsafe() &&
|
||||||
|
variables.binlog_format == BINLOG_FORMAT_STMT)
|
||||||
|
{
|
||||||
|
DBUG_ASSERT(this->query != NULL);
|
||||||
|
push_warning(this, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||||
|
ER_BINLOG_UNSAFE_STATEMENT,
|
||||||
|
ER(ER_BINLOG_UNSAFE_STATEMENT));
|
||||||
|
if (!(binlog_flags & BINLOG_FLAG_UNSAFE_STMT_PRINTED))
|
||||||
|
{
|
||||||
|
char warn_buf[MYSQL_ERRMSG_SIZE];
|
||||||
|
my_snprintf(warn_buf, MYSQL_ERRMSG_SIZE, "%s Statement: %s",
|
||||||
|
ER(ER_BINLOG_UNSAFE_STATEMENT), this->query);
|
||||||
|
sql_print_warning(warn_buf);
|
||||||
|
binlog_flags|= BINLOG_FLAG_UNSAFE_STMT_PRINTED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch (qtype) {
|
switch (qtype) {
|
||||||
case THD::ROW_QUERY_TYPE:
|
case THD::ROW_QUERY_TYPE:
|
||||||
if (current_stmt_binlog_row_based)
|
if (current_stmt_binlog_row_based)
|
||||||
@@ -2888,23 +2909,6 @@ int THD::binlog_query(THD::enum_binlog_query_type qtype,
|
|||||||
to how you treat this.
|
to how you treat this.
|
||||||
*/
|
*/
|
||||||
case THD::STMT_QUERY_TYPE:
|
case THD::STMT_QUERY_TYPE:
|
||||||
if (lex->is_stmt_unsafe())
|
|
||||||
{
|
|
||||||
DBUG_ASSERT(this->query != NULL);
|
|
||||||
push_warning(this, MYSQL_ERROR::WARN_LEVEL_WARN,
|
|
||||||
ER_BINLOG_UNSAFE_STATEMENT,
|
|
||||||
ER(ER_BINLOG_UNSAFE_STATEMENT));
|
|
||||||
if (!(binlog_flags & BINLOG_FLAG_UNSAFE_STMT_PRINTED))
|
|
||||||
{
|
|
||||||
|
|
||||||
char warn_buf[MYSQL_ERRMSG_SIZE];
|
|
||||||
my_snprintf(warn_buf, MYSQL_ERRMSG_SIZE, "%s Statement: %s",
|
|
||||||
ER(ER_BINLOG_UNSAFE_STATEMENT), this->query);
|
|
||||||
sql_print_warning(warn_buf);
|
|
||||||
binlog_flags|= BINLOG_FLAG_UNSAFE_STMT_PRINTED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The MYSQL_LOG::write() function will set the STMT_END_F flag and
|
The MYSQL_LOG::write() function will set the STMT_END_F flag and
|
||||||
flush the pending rows event if necessary.
|
flush the pending rows event if necessary.
|
||||||
|
Reference in New Issue
Block a user