Merge tnurnberg@bk-internal.mysql.com:/home/bk/mysql-5.1-maint

into  salvation.intern.azundris.com:/home/tnurnberg/work/mysql-5.1-maint-16456
parents 46a599d8 c5c46ca4
...@@ -25,7 +25,6 @@ rpl_ndb_ddl : BUG#18946 result file needs update + test needs to ch ...@@ -25,7 +25,6 @@ rpl_ndb_ddl : BUG#18946 result file needs update + test needs to ch
rpl_ndb_innodb2ndb : Bug #19710 Cluster replication to partition table fails on DELETE FROM statement rpl_ndb_innodb2ndb : Bug #19710 Cluster replication to partition table fails on DELETE FROM statement
rpl_ndb_myisam2ndb : Bug #19710 Cluster replication to partition table fails on DELETE FROM statement rpl_ndb_myisam2ndb : Bug #19710 Cluster replication to partition table fails on DELETE FROM statement
rpl_row_blob_innodb : BUG#18980 2006-04-10 kent Test fails randomly rpl_row_blob_innodb : BUG#18980 2006-04-10 kent Test fails randomly
rpl_sp : BUG#16456 2006-02-16 jmiller
rpl_multi_engine : BUG#22583 2006-09-23 lars rpl_multi_engine : BUG#22583 2006-09-23 lars
# the below testcase have been reworked to avoid the bug, test contains comment, keep bug open # the below testcase have been reworked to avoid the bug, test contains comment, keep bug open
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
# still accepted (this test also checks that the new name is # still accepted (this test also checks that the new name is
# accepted). The old name could be removed in 5.1 or 6.0. # accepted). The old name could be removed in 5.1 or 6.0.
source include/have_binlog_format_mixed.inc;
source include/master-slave.inc; source include/master-slave.inc;
# we need a db != test, where we don't have automatic grants # we need a db != test, where we don't have automatic grants
...@@ -172,6 +173,15 @@ select * from mysql.proc where name="foo4" and db='mysqltest1'; ...@@ -172,6 +173,15 @@ select * from mysql.proc where name="foo4" and db='mysqltest1';
sync_slave_with_master; sync_slave_with_master;
select * from mysql.proc where name="foo4" and db='mysqltest1'; select * from mysql.proc where name="foo4" and db='mysqltest1';
# fail if non-deterministic SP is called in SBR, bug#16456
let $oblf=`select @@SESSION.BINLOG_FORMAT`;
set binlog_format=STATEMENT;
--error ER_BINLOG_ROW_RBR_TO_SBR
call foo();
--disable_query_log
eval set binlog_format=$oblf;
--enable_query_log
# ********************** PART 2 : FUNCTIONS *************** # ********************** PART 2 : FUNCTIONS ***************
connection master; connection master;
...@@ -316,10 +326,31 @@ sync_slave_with_master; ...@@ -316,10 +326,31 @@ sync_slave_with_master;
# check that this failed-in-the-middle replicated right: # check that this failed-in-the-middle replicated right:
select * from t2; select * from t2;
# fail if non-deterministic SF is called in SBR, bug#16456
connection master;
let $oblf=`select @@SESSION.BINLOG_FORMAT`;
set binlog_format=STATEMENT;
delimiter |;
create function fn16456()
returns int
begin
return unix_timestamp();
end|
delimiter ;|
--error ER_BINLOG_ROW_RBR_TO_SBR
select fn16456();
--disable_query_log
eval set binlog_format=$oblf;
--enable_query_log
drop function fn16456;
# ********************** PART 3 : TRIGGERS *************** # ********************** PART 3 : TRIGGERS ***************
connection con1; connection con1;
--error 1227 # now fails due to missing trigger grant (err 1142 i/o 1227) due to new
# check in sql_trigger.cc (v1.44) by anozdrin on 2006/02/01 --azundris
--error ER_TABLEACCESS_DENIED_ERROR
create trigger trg before insert on t1 for each row set new.a= 10; create trigger trg before insert on t1 for each row set new.a= 10;
connection master; connection master;
......
...@@ -4995,6 +4995,18 @@ Item_func_sp::execute_impl(THD *thd, Field *return_value_fld) ...@@ -4995,6 +4995,18 @@ Item_func_sp::execute_impl(THD *thd, Field *return_value_fld)
if (find_and_check_access(thd)) if (find_and_check_access(thd))
goto error; goto error;
/*
Throw an error if a non-deterministic function is called while
statement-based replication (SBR) is active.
*/
if (!m_sp->m_chistics->detistic &&
(mysql_bin_log.is_open() &&
thd->variables.binlog_format == BINLOG_FORMAT_STMT))
{
my_error(ER_BINLOG_ROW_RBR_TO_SBR, MYF(0));
goto error;
}
/* /*
Disable the binlogging if this is not a SELECT statement. If this is a Disable the binlogging if this is not a SELECT statement. If this is a
SELECT, leave binlogging on, so execute_function() code writes the SELECT, leave binlogging on, so execute_function() code writes the
......
...@@ -4576,6 +4576,18 @@ mysql_execute_command(THD *thd) ...@@ -4576,6 +4576,18 @@ mysql_execute_command(THD *thd)
goto error; goto error;
} }
/*
Throw an error if a non-deterministic procedure is called while
statement-based replication (SBR) is active.
*/
if (!sp->m_chistics->detistic &&
(mysql_bin_log.is_open() &&
thd->variables.binlog_format == BINLOG_FORMAT_STMT))
{
my_error(ER_BINLOG_ROW_RBR_TO_SBR, MYF(0));
goto error;
}
my_bool nsok= thd->net.no_send_ok; my_bool nsok= thd->net.no_send_ok;
thd->net.no_send_ok= TRUE; thd->net.no_send_ok= TRUE;
if (sp->m_flags & sp_head::MULTI_RESULTS) if (sp->m_flags & sp_head::MULTI_RESULTS)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment