MOON
Server: Apache/2.2.31 (Unix) mod_ssl/2.2.31 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4
System: Linux csr818.wilogic.com 2.6.18-419.el5xen #1 SMP Fri Feb 24 22:50:37 UTC 2017 x86_64
User: obrechts (544)
PHP: 5.4.45
Disabled: NONE
Upload Files
File: //usr/share/mysql-test/suite/binlog/t/binlog_sf.test
-- source include/have_log_bin.inc

# We change binlog format inside the test, so no need to re-run with
# more than one binlog_format.
-- source include/have_binlog_format_statement.inc

# Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
# BUG#41166 stored function requires "deterministic" if binlog_format is "statement"

# save status

let $oblf=`select @@SESSION.BINLOG_FORMAT`;
let $otfc=`select @@log_bin_trust_function_creators`;

set global log_bin_trust_function_creators=0;



# fail *on definition*

set binlog_format=STATEMENT;

delimiter |;
--error ER_BINLOG_UNSAFE_ROUTINE
create function fn16456()
       returns int
begin
       return unix_timestamp();
end|
delimiter ;|



# force in definition, so we can see whether we fail on call

set global log_bin_trust_function_creators=1;

delimiter |;
create function fn16456()
       returns int
begin
       return unix_timestamp();
end|
delimiter ;|

set global log_bin_trust_function_creators=0;



# allow funcall in RBR

set binlog_format=ROW;

--replace_column 1 timestamp
select fn16456();



# fail funcall in SBR

set binlog_format=STATEMENT;

--error ER_BINLOG_UNSAFE_ROUTINE
select fn16456();



# clean

drop function fn16456;



# success in definition with deterministic

set global log_bin_trust_function_creators=0;

delimiter |;
create function fn16456()
       returns int deterministic
begin
       return unix_timestamp();
end|
delimiter ;|



# allow funcall in RBR

set binlog_format=ROW;

--replace_column 1 timestamp
select fn16456();



# allow funcall in SBR

set binlog_format=STATEMENT;

--replace_column 1 timestamp
select fn16456();



# clean

drop function fn16456;


# success in definition with NO SQL

set global log_bin_trust_function_creators=0;

delimiter |;
create function fn16456()
       returns int no sql
begin
       return unix_timestamp();
end|
delimiter ;|



# allow funcall in RBR

set binlog_format=ROW;

--replace_column 1 timestamp
select fn16456();



# allow funcall in SBR

set binlog_format=STATEMENT;

--replace_column 1 timestamp
select fn16456();


# clean

drop function fn16456;



# success in definition with reads sql data

set global log_bin_trust_function_creators=0;

delimiter |;
create function fn16456()
       returns int reads sql data
begin
       return unix_timestamp();
end|
delimiter ;|



# allow funcall in RBR

set binlog_format=ROW;

--replace_column 1 timestamp
select fn16456();



# allow funcall in SBR

set binlog_format=STATEMENT;

--replace_column 1 timestamp
select fn16456();



# clean

drop function fn16456;



# restore status

--disable_query_log
eval set binlog_format=$oblf;
eval set global log_bin_trust_function_creators=$otfc;
--enable_query_log