diff options
author | unknown <tnurnberg@salvation.intern.azundris.com> | 2006-11-15 01:58:11 +0100 |
---|---|---|
committer | unknown <tnurnberg@salvation.intern.azundris.com> | 2006-11-15 01:58:11 +0100 |
commit | f3a877abbc98c3535dd9494dd4c990a34cd9ca34 (patch) | |
tree | 522abe3e314f3a08cbd8378de88ae77db565473c | |
parent | 266bf3390c80e72fecdcec3712dfad18c4bf6b5b (diff) | |
parent | beea1235469f3de2d703e5a413f06675d9a67c48 (diff) | |
download | mariadb-git-f3a877abbc98c3535dd9494dd4c990a34cd9ca34.tar.gz |
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
mysql-test/r/func_time.result:
Auto merged
mysql-test/t/disabled.def:
Auto merged
sql/item_func.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
-rw-r--r-- | mysql-test/r/rpl_sp.result | 32 | ||||
-rw-r--r-- | mysql-test/t/disabled.def | 1 | ||||
-rw-r--r-- | mysql-test/t/rpl_sp.test | 33 | ||||
-rw-r--r-- | sql/item_func.cc | 12 | ||||
-rw-r--r-- | sql/sql_parse.cc | 12 |
5 files changed, 82 insertions, 8 deletions
diff --git a/mysql-test/r/rpl_sp.result b/mysql-test/r/rpl_sp.result index 261e7cb072c..acad2975055 100644 --- a/mysql-test/r/rpl_sp.result +++ b/mysql-test/r/rpl_sp.result @@ -104,10 +104,10 @@ begin insert into t2 values(20),(20); end| call foo4(); -ERROR 23000: Duplicate entry '20' for key 1 +ERROR 23000: Duplicate entry '20' for key 'a' show warnings; Level Code Message -Error 1062 Duplicate entry '20' for key 1 +Error 1062 Duplicate entry '20' for key 'a' select * from t2; a 20 @@ -124,6 +124,9 @@ select * from mysql.proc where name="foo4" and db='mysqltest1'; db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment select * from mysql.proc where name="foo4" and db='mysqltest1'; db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment +set binlog_format=STATEMENT; +call foo(); +ERROR HY000: Slave running with --log-slave-updates must use row-based binary logging to be able to replicate row-based binary log events drop procedure foo; drop procedure foo2; drop procedure foo3; @@ -181,7 +184,7 @@ end| ERROR HY000: You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable) set global log_bin_trust_routine_creators=1; Warnings: -Warning 1287 'log_bin_trust_routine_creators' is deprecated; use 'log_bin_trust_function_creators' instead +Warning 1541 The syntax 'log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use 'log_bin_trust_function_creators' instead set global log_bin_trust_function_creators=0; set global log_bin_trust_function_creators=1; set global log_bin_trust_function_creators=1; @@ -241,9 +244,9 @@ return 10; end| do fn1(100); Warnings: -Error 1062 Duplicate entry '100' for key 1 +Error 1062 Duplicate entry '100' for key 'a' select fn1(20); -ERROR 23000: Duplicate entry '20' for key 1 +ERROR 23000: Duplicate entry '20' for key 'a' select * from t2; a 20 @@ -252,8 +255,17 @@ select * from t2; a 20 100 +set binlog_format=STATEMENT; +create function fn16456() +returns int +begin +return unix_timestamp(); +end| +select fn16456(); +ERROR HY000: Slave running with --log-slave-updates must use row-based binary logging to be able to replicate row-based binary log events +drop function fn16456; create trigger trg before insert on t1 for each row set new.a= 10; -ERROR 42000: Access denied; you need the SUPER privilege for this operation +ERROR 42000: TRIGGER command denied to user 'zedjzlcsjhd'@'localhost' for table 't1' delete from t1; create trigger trg before insert on t1 for each row set new.a= 10; insert into t1 values (1); @@ -364,6 +376,12 @@ return 10; end master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `fn1`(100) master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `fn1`(20) +master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function fn16456() +returns int +begin +return unix_timestamp(); +end +master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn16456 master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1 master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` trigger trg before insert on t1 for each row set new.a= 10 master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (1) @@ -465,3 +483,5 @@ RETURN 0 DROP PROCEDURE p1; DROP FUNCTION f1; drop table t1; +End of 5.0 tests +End of 5.1 tests diff --git a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def index 0d3b7cdfdeb..51f9625e239 100644 --- a/mysql-test/t/disabled.def +++ b/mysql-test/t/disabled.def @@ -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_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_sp : BUG#16456 2006-02-16 jmiller 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 diff --git a/mysql-test/t/rpl_sp.test b/mysql-test/t/rpl_sp.test index 22ab72df104..7066a77b70e 100644 --- a/mysql-test/t/rpl_sp.test +++ b/mysql-test/t/rpl_sp.test @@ -8,6 +8,7 @@ # still accepted (this test also checks that the new name is # 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; # 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'; sync_slave_with_master; 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 *************** connection master; @@ -316,10 +326,31 @@ sync_slave_with_master; # check that this failed-in-the-middle replicated right: 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 *************** 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; connection master; diff --git a/sql/item_func.cc b/sql/item_func.cc index 5712ad38fa4..54f679bcf4c 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -4996,6 +4996,18 @@ Item_func_sp::execute_impl(THD *thd, Field *return_value_fld) 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 SELECT, leave binlogging on, so execute_function() code writes the function call into binlog. diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index d88478b9702..b56485b44bf 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -4576,6 +4576,18 @@ end_with_restore_list: 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; thd->net.no_send_ok= TRUE; if (sp->m_flags & sp_head::MULTI_RESULTS) |