mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
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/r/sp.result: Auto merged mysql-test/t/func_time.test: Auto merged mysql-test/t/sp.test: Auto merged sql/item_func.cc: Auto merged sql/sql_parse.cc: Auto merged
This commit is contained in:
commit
e46dbc9b52
26 changed files with 143 additions and 73 deletions
|
@ -1060,6 +1060,7 @@ Note 1003 select timestampdiff(WEEK,_latin1'2001-02-01',_latin1'2001-05-01') AS
|
|||
select time_format('100:00:00', '%H %k %h %I %l');
|
||||
time_format('100:00:00', '%H %k %h %I %l')
|
||||
100 100 04 04 4
|
||||
SET GLOBAL log_bin_trust_function_creators = 1;
|
||||
create table t1 (a timestamp default '2005-05-05 01:01:01',
|
||||
b timestamp default '2005-05-05 01:01:01');
|
||||
drop function if exists t_slow_sysdate;
|
||||
|
@ -1083,6 +1084,7 @@ a != b
|
|||
drop trigger t_before;
|
||||
drop function t_slow_sysdate;
|
||||
drop table t1;
|
||||
SET GLOBAL log_bin_trust_function_creators = 0;
|
||||
create table t1 (a datetime, i int, b datetime);
|
||||
insert into t1 select sysdate(), sleep(1), sysdate() from dual;
|
||||
select a != b from t1;
|
||||
|
|
|
@ -679,10 +679,11 @@ insert into t1 values (null,null);
|
|||
ERROR 23000: Column 's1' cannot be null
|
||||
drop table t1;
|
||||
drop procedure if exists fn3;
|
||||
create function fn3 () returns point return GeomFromText("point(1 1)");
|
||||
create function fn3 () returns point deterministic return GeomFromText("point(1 1)");
|
||||
show create function fn3;
|
||||
Function sql_mode Create Function
|
||||
fn3 CREATE DEFINER=`root`@`localhost` FUNCTION `fn3`() RETURNS point
|
||||
DETERMINISTIC
|
||||
return GeomFromText("point(1 1)")
|
||||
select astext(fn3());
|
||||
astext(fn3())
|
||||
|
|
|
@ -365,13 +365,14 @@ insert into mysql.user select * from t1;
|
|||
drop table t1, t2;
|
||||
drop database TESTDB;
|
||||
flush privileges;
|
||||
SET GLOBAL log_bin_trust_function_creators = 1;
|
||||
grant all privileges on test.* to `a@`@localhost;
|
||||
grant execute on * to `a@`@localhost;
|
||||
create table t2 (s1 int);
|
||||
insert into t2 values (1);
|
||||
drop function if exists f2;
|
||||
create function f2 () returns int begin declare v int; select s1 from t2
|
||||
into v; return v; end//
|
||||
create function f2 () returns int
|
||||
begin declare v int; select s1 from t2 into v; return v; end//
|
||||
select f2();
|
||||
f2()
|
||||
1
|
||||
|
@ -379,3 +380,4 @@ drop function f2;
|
|||
drop table t2;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM `a@`@localhost;
|
||||
drop user `a@`@localhost;
|
||||
SET GLOBAL log_bin_trust_function_creators = 0;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
drop table if exists t1;
|
||||
SET GLOBAL log_bin_trust_function_creators = 1;
|
||||
create table t1 (col1 integer primary key, col2 integer) engine=innodb;
|
||||
insert t1 values (1,100);
|
||||
create function f1 () returns integer begin
|
||||
|
@ -18,3 +19,4 @@ rollback;
|
|||
rollback;
|
||||
drop table t1;
|
||||
drop function f1;
|
||||
SET GLOBAL log_bin_trust_function_creators = 0;
|
||||
|
|
|
@ -1500,9 +1500,9 @@ create procedure proc_1() reset query cache;
|
|||
call proc_1();
|
||||
call proc_1();
|
||||
call proc_1();
|
||||
create function func_1() returns int begin reset query cache; return 1; end|
|
||||
create function func_1() returns int deterministic begin reset query cache; return 1; end|
|
||||
ERROR 0A000: RESET is not allowed in stored function or trigger
|
||||
create function func_1() returns int begin call proc_1(); return 1; end|
|
||||
create function func_1() returns int deterministic begin call proc_1(); return 1; end|
|
||||
select func_1(), func_1(), func_1() from dual;
|
||||
ERROR 0A000: RESET is not allowed in stored function or trigger
|
||||
drop function func_1;
|
||||
|
|
|
@ -1077,10 +1077,12 @@ create procedure `p1`()
|
|||
begin
|
||||
select a, f1() from t1;
|
||||
end//
|
||||
SET GLOBAL log_bin_trust_function_creators = 1;
|
||||
call p1()//
|
||||
a f1()
|
||||
1 2
|
||||
2 2
|
||||
SET GLOBAL log_bin_trust_function_creators = 0;
|
||||
drop procedure p1//
|
||||
drop function f1//
|
||||
drop table t1//
|
||||
|
|
|
@ -314,6 +314,7 @@ drop procedure f2;
|
|||
drop procedure f3;
|
||||
drop procedure f4;
|
||||
drop table t1;
|
||||
SET GLOBAL log_bin_trust_function_creators = 1;
|
||||
reset query cache;
|
||||
drop function if exists f1;
|
||||
create table t1 (id int);
|
||||
|
@ -345,3 +346,4 @@ id
|
|||
drop table t1;
|
||||
drop function f1;
|
||||
set GLOBAL query_cache_size=0;
|
||||
SET GLOBAL log_bin_trust_function_creators = 0;
|
||||
|
|
23
mysql-test/r/rpl_sf.result
Normal file
23
mysql-test/r/rpl_sf.result
Normal file
|
@ -0,0 +1,23 @@
|
|||
set global log_bin_trust_function_creators=0;
|
||||
set binlog_format=STATEMENT;
|
||||
create function fn16456()
|
||||
returns int
|
||||
begin
|
||||
return unix_timestamp();
|
||||
end|
|
||||
ERROR HY000: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
|
||||
set global log_bin_trust_function_creators=1;
|
||||
create function fn16456()
|
||||
returns int
|
||||
begin
|
||||
return unix_timestamp();
|
||||
end|
|
||||
set global log_bin_trust_function_creators=0;
|
||||
set binlog_format=ROW;
|
||||
select fn16456();
|
||||
fn16456()
|
||||
timestamp
|
||||
set binlog_format=STATEMENT;
|
||||
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;
|
|
@ -124,9 +124,6 @@ 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;
|
||||
|
@ -255,15 +252,6 @@ 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: TRIGGER command denied to user 'zedjzlcsjhd'@'localhost' for table 't1'
|
||||
delete from t1;
|
||||
|
@ -376,12 +364,6 @@ 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)
|
||||
|
|
|
@ -10,6 +10,7 @@ drop function if exists f1;
|
|||
drop table if exists t1,t2;
|
||||
drop view if exists v1;
|
||||
create table t1 (a int);
|
||||
SET GLOBAL log_bin_trust_function_creators = 1;
|
||||
create procedure p1()
|
||||
begin
|
||||
declare spv int default 0;
|
||||
|
@ -234,3 +235,4 @@ drop table t1;
|
|||
drop function f1;
|
||||
drop function f2;
|
||||
drop procedure p1;
|
||||
SET GLOBAL log_bin_trust_function_creators = 0;
|
||||
|
|
|
@ -243,7 +243,7 @@ set x = (select sum(t.i) from test.t2 t);
|
|||
insert into test.t1 values (id, x);
|
||||
end|
|
||||
drop procedure if exists sub3|
|
||||
create function sub3(i int) returns int
|
||||
create function sub3(i int) returns int deterministic
|
||||
return i+1|
|
||||
call sub1("sub1a", (select 7))|
|
||||
call sub1("sub1b", (select max(i) from t2))|
|
||||
|
|
|
@ -269,6 +269,7 @@ select * from t1;
|
|||
convert_tz(NULL, NULL, NULL)
|
||||
NULL
|
||||
drop table t1;
|
||||
SET GLOBAL log_bin_trust_function_creators = 1;
|
||||
create table t1 (ldt datetime, udt datetime);
|
||||
create function f1(i datetime) returns datetime
|
||||
return convert_tz(i, 'UTC', 'Europe/Moscow');
|
||||
|
@ -283,3 +284,4 @@ ldt ldt2
|
|||
2006-04-19 16:30:00 2006-04-19 16:30:00
|
||||
drop table t1;
|
||||
drop function f1;
|
||||
SET GLOBAL log_bin_trust_function_creators = 0;
|
||||
|
|
|
@ -586,6 +586,8 @@ select time_format('100:00:00', '%H %k %h %I %l');
|
|||
# Bug #12562: Make SYSDATE behave like it does in Oracle: always the current
|
||||
# time, regardless of magic to make NOW() always the same for the
|
||||
# entirety of a statement.
|
||||
SET GLOBAL log_bin_trust_function_creators = 1;
|
||||
|
||||
create table t1 (a timestamp default '2005-05-05 01:01:01',
|
||||
b timestamp default '2005-05-05 01:01:01');
|
||||
delimiter //;
|
||||
|
@ -615,6 +617,8 @@ drop trigger t_before;
|
|||
drop function t_slow_sysdate;
|
||||
drop table t1;
|
||||
|
||||
SET GLOBAL log_bin_trust_function_creators = 0;
|
||||
|
||||
create table t1 (a datetime, i int, b datetime);
|
||||
insert into t1 select sysdate(), sleep(1), sysdate() from dual;
|
||||
select a != b from t1;
|
||||
|
|
|
@ -393,7 +393,7 @@ drop table t1;
|
|||
--disable_warnings
|
||||
drop procedure if exists fn3;
|
||||
--enable_warnings
|
||||
create function fn3 () returns point return GeomFromText("point(1 1)");
|
||||
create function fn3 () returns point deterministic return GeomFromText("point(1 1)");
|
||||
show create function fn3;
|
||||
select astext(fn3());
|
||||
drop function fn3;
|
||||
|
|
|
@ -484,6 +484,8 @@ flush privileges;
|
|||
# BUG#13310 incorrect user parsing by SP
|
||||
#
|
||||
|
||||
SET GLOBAL log_bin_trust_function_creators = 1;
|
||||
|
||||
grant all privileges on test.* to `a@`@localhost;
|
||||
grant execute on * to `a@`@localhost;
|
||||
connect (bug13310,localhost,'a@',,test);
|
||||
|
@ -494,11 +496,10 @@ insert into t2 values (1);
|
|||
drop function if exists f2;
|
||||
--enable_warnings
|
||||
delimiter //;
|
||||
create function f2 () returns int begin declare v int; select s1 from t2
|
||||
into v; return v; end//
|
||||
create function f2 () returns int
|
||||
begin declare v int; select s1 from t2 into v; return v; end//
|
||||
delimiter ;//
|
||||
select f2();
|
||||
|
||||
drop function f2;
|
||||
drop table t2;
|
||||
disconnect bug13310;
|
||||
|
@ -506,3 +507,5 @@ disconnect bug13310;
|
|||
connection default;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM `a@`@localhost;
|
||||
drop user `a@`@localhost;
|
||||
|
||||
SET GLOBAL log_bin_trust_function_creators = 0;
|
||||
|
|
|
@ -13,6 +13,7 @@ connect (b,localhost,root,,);
|
|||
# BUG#11238 - in prelocking mode SELECT .. FOR UPDATE is changed to
|
||||
# non-blocking SELECT
|
||||
#
|
||||
SET GLOBAL log_bin_trust_function_creators = 1;
|
||||
create table t1 (col1 integer primary key, col2 integer) engine=innodb;
|
||||
insert t1 values (1,100);
|
||||
delimiter |;
|
||||
|
@ -38,3 +39,4 @@ drop table t1;
|
|||
drop function f1;
|
||||
disconnect a;
|
||||
disconnect b;
|
||||
SET GLOBAL log_bin_trust_function_creators = 0;
|
||||
|
|
|
@ -1559,8 +1559,8 @@ call proc_1();
|
|||
call proc_1();
|
||||
delimiter |;
|
||||
--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
|
||||
create function func_1() returns int begin reset query cache; return 1; end|
|
||||
create function func_1() returns int begin call proc_1(); return 1; end|
|
||||
create function func_1() returns int deterministic begin reset query cache; return 1; end|
|
||||
create function func_1() returns int deterministic begin call proc_1(); return 1; end|
|
||||
delimiter ;|
|
||||
--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
|
||||
select func_1(), func_1(), func_1() from dual;
|
||||
|
|
|
@ -788,7 +788,9 @@ create procedure `p1`()
|
|||
begin
|
||||
select a, f1() from t1;
|
||||
end//
|
||||
SET GLOBAL log_bin_trust_function_creators = 1;
|
||||
call p1()//
|
||||
SET GLOBAL log_bin_trust_function_creators = 0;
|
||||
drop procedure p1//
|
||||
drop function f1//
|
||||
|
||||
|
|
|
@ -183,6 +183,8 @@ drop table t1;
|
|||
#
|
||||
# bug#14767: INSERT in SF + concurrent SELECT with query cache
|
||||
#
|
||||
SET GLOBAL log_bin_trust_function_creators = 1;
|
||||
|
||||
reset query cache;
|
||||
--disable_warnings
|
||||
drop function if exists f1;
|
||||
|
@ -222,3 +224,4 @@ disconnect con2;
|
|||
connection default;
|
||||
|
||||
set GLOBAL query_cache_size=0;
|
||||
SET GLOBAL log_bin_trust_function_creators = 0;
|
||||
|
|
68
mysql-test/t/rpl_sf.test
Normal file
68
mysql-test/t/rpl_sf.test
Normal file
|
@ -0,0 +1,68 @@
|
|||
# Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
|
||||
|
||||
# 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_ROW_RBR_TO_SBR
|
||||
select fn16456();
|
||||
|
||||
|
||||
|
||||
# restore status
|
||||
|
||||
drop function fn16456;
|
||||
|
||||
--disable_query_log
|
||||
eval set binlog_format=$oblf;
|
||||
eval set global log_bin_trust_function_creators=$otfc;
|
||||
--enable_query_log
|
|
@ -173,15 +173,6 @@ 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;
|
||||
|
@ -326,25 +317,6 @@ 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;
|
||||
|
@ -555,5 +527,5 @@ set global log_bin_trust_function_creators=0;
|
|||
connection master;
|
||||
set global log_bin_trust_function_creators=0;
|
||||
--echo End of 5.0 tests
|
||||
--echo End of 5.1 tests
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
|
|
@ -20,6 +20,8 @@ drop view if exists v1;
|
|||
--enable_warnings
|
||||
create table t1 (a int);
|
||||
|
||||
SET GLOBAL log_bin_trust_function_creators = 1;
|
||||
|
||||
# 1. Test simple variables use.
|
||||
delimiter //;
|
||||
create procedure p1()
|
||||
|
@ -205,3 +207,5 @@ drop function f1;
|
|||
drop function f2;
|
||||
drop procedure p1;
|
||||
sync_slave_with_master;
|
||||
|
||||
SET GLOBAL log_bin_trust_function_creators = 0;
|
||||
|
|
|
@ -358,7 +358,7 @@ end|
|
|||
--disable_warnings
|
||||
drop procedure if exists sub3|
|
||||
--enable_warnings
|
||||
create function sub3(i int) returns int
|
||||
create function sub3(i int) returns int deterministic
|
||||
return i+1|
|
||||
|
||||
call sub1("sub1a", (select 7))|
|
||||
|
|
|
@ -228,6 +228,8 @@ drop table t1;
|
|||
# Test for bug #11081 "Using a CONVERT_TZ function in a stored function
|
||||
# or trigger fails".
|
||||
#
|
||||
SET GLOBAL log_bin_trust_function_creators = 1;
|
||||
|
||||
create table t1 (ldt datetime, udt datetime);
|
||||
create function f1(i datetime) returns datetime
|
||||
return convert_tz(i, 'UTC', 'Europe/Moscow');
|
||||
|
@ -241,4 +243,6 @@ select ldt, f1(udt) as ldt2 from t1;
|
|||
drop table t1;
|
||||
drop function f1;
|
||||
|
||||
SET GLOBAL log_bin_trust_function_creators = 0;
|
||||
|
||||
# End of 5.0 tests
|
||||
|
|
|
@ -5003,7 +5003,7 @@ Item_func_sp::execute_impl(THD *thd, Field *return_value_fld)
|
|||
Throw an error if a non-deterministic function is called while
|
||||
statement-based replication (SBR) is active.
|
||||
*/
|
||||
if (!m_sp->m_chistics->detistic &&
|
||||
if (!m_sp->m_chistics->detistic && !trust_function_creators &&
|
||||
(mysql_bin_log.is_open() &&
|
||||
thd->variables.binlog_format == BINLOG_FORMAT_STMT))
|
||||
{
|
||||
|
|
|
@ -4576,18 +4576,6 @@ 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)
|
||||
|
|
Loading…
Reference in a new issue