# 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 $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 set binlog_format=STATEMENT; eval set global log_bin_trust_function_creators=$otfc; reset master; --enable_query_log