summaryrefslogtreecommitdiff
path: root/mysql-test/r/rpl_sp.result
diff options
context:
space:
mode:
authorunknown <guilhem@mysql.com>2006-02-18 17:26:30 +0100
committerunknown <guilhem@mysql.com>2006-02-18 17:26:30 +0100
commit8470ae9cb1327ee5089b98a148e26bb207662fd7 (patch)
treef116e5166e64745d3a2d9e1b36b23de4e8815782 /mysql-test/r/rpl_sp.result
parentcefc0b6dffcf3f7cd0e1ee7ebc6dd14eca622757 (diff)
downloadmariadb-git-8470ae9cb1327ee5089b98a148e26bb207662fd7.tar.gz
Fix for BUG#14769 "Function fails to replicate if fails half-way (slave stops)":
if the function, invoked in a non-binlogged caller (e.g. SELECT, DO), failed half-way on the master, slave would stop and complain that error code between him and master mismatch. To solve this, when a stored function is invoked in a non-binlogged caller (e.g. SELECT, DO), we binlog the function call as SELECT instead of as DO (see revision comment of sp_head.cc for more). And: minor wording change in the help text. This cset will cause conflicts in 5.1, I'll merge. mysql-test/r/rpl_sp.result: result update mysql-test/t/rpl_sp-slave.opt: bug just fixed so option not needed mysql-test/t/rpl_sp.test: test for more half-failed functions with DO and SELECT, to test the bug of this changeset. cleanup at the end. sql/mysqld.cc: function -> stored function (change suggested by Paul) sql/sp_head.cc: When a function updates data and is called from a non-binlogged statement (SELECT, DO), we binlog it as SELECT myfunc(), and not DO myfunc() like before.
Diffstat (limited to 'mysql-test/r/rpl_sp.result')
-rw-r--r--mysql-test/r/rpl_sp.result21
1 files changed, 13 insertions, 8 deletions
diff --git a/mysql-test/r/rpl_sp.result b/mysql-test/r/rpl_sp.result
index 7180b677b8e..a42c33ce333 100644
--- a/mysql-test/r/rpl_sp.result
+++ b/mysql-test/r/rpl_sp.result
@@ -233,20 +233,25 @@ end @ # #
delete from t2;
alter table t2 add unique (a);
drop function fn1;
-create function fn1()
+create function fn1(x int)
returns int
begin
-insert into t2 values(20),(20);
+insert into t2 values(x),(x);
return 10;
end|
-select fn1();
+do fn1(100);
+Warnings:
+Error 1062 Duplicate entry '100' for key 1
+select fn1(20);
ERROR 23000: Duplicate entry '20' for key 1
select * from t2;
a
20
+100
select * from t2;
a
20
+100
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
delete from t1;
@@ -324,7 +329,7 @@ insert into t1 values (x);
return x+2;
end
master-bin.000001 # Query 1 # use `mysqltest1`; delete t1,t2 from t1,t2
-master-bin.000001 # Query 1 # use `mysqltest1`; DO `fn1`(20)
+master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `fn1`(20)
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(fn1(21))
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
master-bin.000001 # Query 1 # use `mysqltest1`; create function fn1()
@@ -351,13 +356,14 @@ end
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t2
master-bin.000001 # Query 1 # use `mysqltest1`; alter table t2 add unique (a)
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
-master-bin.000001 # Query 1 # use `mysqltest1`; create function fn1()
+master-bin.000001 # Query 1 # use `mysqltest1`; create function fn1(x int)
returns int
begin
-insert into t2 values(20),(20);
+insert into t2 values(x),(x);
return 10;
end
-master-bin.000001 # Query 1 # use `mysqltest1`; DO `fn1`()
+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`; 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)
@@ -415,4 +421,3 @@ col
test
DROP PROCEDURE p1;
drop table t1;
-reset master;