Merge 10.4 into 10.5
This commit is contained in:
commit
a3dd7ea09f
@ -674,10 +674,10 @@ extern void my_mutex_end(void);
|
|||||||
by GCC 12.3.0, GCC 13.2.0, or clang 16.0.6
|
by GCC 12.3.0, GCC 13.2.0, or clang 16.0.6
|
||||||
would fail ./mtr main.1st when the stack size is 5 MiB.
|
would fail ./mtr main.1st when the stack size is 5 MiB.
|
||||||
The minimum is more than 6 MiB for CMAKE_BUILD_TYPE=RelWithDebInfo and
|
The minimum is more than 6 MiB for CMAKE_BUILD_TYPE=RelWithDebInfo and
|
||||||
more than 8 MiB for CMAKE_BUILD_TYPE=Debug.
|
more than 10 MiB for CMAKE_BUILD_TYPE=Debug.
|
||||||
Let us add some safety margin.
|
Let us add some safety margin.
|
||||||
*/
|
*/
|
||||||
# define DEFAULT_THREAD_STACK (10L<<20)
|
# define DEFAULT_THREAD_STACK (11L<<20)
|
||||||
# else
|
# else
|
||||||
# define DEFAULT_THREAD_STACK (292*1024L) /* 299008 */
|
# define DEFAULT_THREAD_STACK (292*1024L) /* 299008 */
|
||||||
# endif
|
# endif
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
# In embedded server we don't really have a control over stack usage
|
# In embedded server we don't really have a control over stack usage
|
||||||
-- source include/not_embedded.inc
|
-- source include/not_embedded.inc
|
||||||
|
-- source include/not_asan.inc
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug#21476: Lost Database Connection During Query
|
# Bug#21476: Lost Database Connection During Query
|
||||||
|
101
mysql-test/main/lotofstack.result
Normal file
101
mysql-test/main/lotofstack.result
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
create function bug10100f(prm int) returns int
|
||||||
|
begin
|
||||||
|
if prm > 1 then
|
||||||
|
return prm * bug10100f(prm - 1);
|
||||||
|
end if;
|
||||||
|
return 1;
|
||||||
|
end|
|
||||||
|
set statement sql_mode = '' for
|
||||||
|
create procedure bug10100p(prm int, inout res int)
|
||||||
|
begin
|
||||||
|
set res = res * prm;
|
||||||
|
if prm > 1 then
|
||||||
|
call bug10100p(prm - 1, res);
|
||||||
|
end if;
|
||||||
|
end|
|
||||||
|
set statement sql_mode = '' for
|
||||||
|
create procedure bug10100t(prm int)
|
||||||
|
begin
|
||||||
|
declare res int;
|
||||||
|
set res = 1;
|
||||||
|
call bug10100p(prm, res);
|
||||||
|
select res;
|
||||||
|
end|
|
||||||
|
create table t3 (a int)|
|
||||||
|
insert into t3 values (0)|
|
||||||
|
create view v1 as select a from t3|
|
||||||
|
create procedure bug10100pt(level int, lim int)
|
||||||
|
begin
|
||||||
|
if level < lim then
|
||||||
|
update t3 set a=level;
|
||||||
|
FLUSH TABLES;
|
||||||
|
call bug10100pt(level+1, lim);
|
||||||
|
else
|
||||||
|
select * from t3;
|
||||||
|
end if;
|
||||||
|
end|
|
||||||
|
create procedure bug10100pv(level int, lim int)
|
||||||
|
begin
|
||||||
|
if level < lim then
|
||||||
|
update v1 set a=level;
|
||||||
|
FLUSH TABLES;
|
||||||
|
call bug10100pv(level+1, lim);
|
||||||
|
else
|
||||||
|
select * from v1;
|
||||||
|
end if;
|
||||||
|
end|
|
||||||
|
prepare stmt2 from "select * from t3;";
|
||||||
|
create procedure bug10100pd(level int, lim int)
|
||||||
|
begin
|
||||||
|
if level < lim then
|
||||||
|
select level;
|
||||||
|
prepare stmt1 from "update t3 set a=a+2";
|
||||||
|
execute stmt1;
|
||||||
|
FLUSH TABLES;
|
||||||
|
execute stmt1;
|
||||||
|
FLUSH TABLES;
|
||||||
|
execute stmt1;
|
||||||
|
FLUSH TABLES;
|
||||||
|
deallocate prepare stmt1;
|
||||||
|
execute stmt2;
|
||||||
|
select * from t3;
|
||||||
|
call bug10100pd(level+1, lim);
|
||||||
|
else
|
||||||
|
execute stmt2;
|
||||||
|
end if;
|
||||||
|
end|
|
||||||
|
create procedure bug10100pc(level int, lim int)
|
||||||
|
begin
|
||||||
|
declare lv int;
|
||||||
|
declare c cursor for select a from t3;
|
||||||
|
open c;
|
||||||
|
if level < lim then
|
||||||
|
select level;
|
||||||
|
fetch c into lv;
|
||||||
|
select lv;
|
||||||
|
update t3 set a=level+lv;
|
||||||
|
FLUSH TABLES;
|
||||||
|
call bug10100pc(level+1, lim);
|
||||||
|
else
|
||||||
|
select * from t3;
|
||||||
|
end if;
|
||||||
|
close c;
|
||||||
|
end|
|
||||||
|
set @@max_sp_recursion_depth=255|
|
||||||
|
set @var=1|
|
||||||
|
call bug10100p(255, @var)|
|
||||||
|
call bug10100pt(1,255)|
|
||||||
|
call bug10100pv(1,255)|
|
||||||
|
call bug10100pd(1,255)|
|
||||||
|
call bug10100pc(1,255)|
|
||||||
|
set @@max_sp_recursion_depth=0|
|
||||||
|
deallocate prepare stmt2|
|
||||||
|
drop function bug10100f|
|
||||||
|
drop procedure bug10100p|
|
||||||
|
drop procedure bug10100t|
|
||||||
|
drop procedure bug10100pt|
|
||||||
|
drop procedure bug10100pv|
|
||||||
|
drop procedure bug10100pd|
|
||||||
|
drop procedure bug10100pc|
|
||||||
|
drop view v1|
|
||||||
|
drop table t3|
|
133
mysql-test/main/lotofstack.test
Normal file
133
mysql-test/main/lotofstack.test
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
#
|
||||||
|
# For tests that need a lot of stack - they likely won't work under ASAN
|
||||||
|
#
|
||||||
|
source include/not_asan.inc;
|
||||||
|
source include/not_embedded.inc;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#10100 function (and stored procedure?) recursivity problem
|
||||||
|
#
|
||||||
|
# routines with simple recursion
|
||||||
|
delimiter |;
|
||||||
|
create function bug10100f(prm int) returns int
|
||||||
|
begin
|
||||||
|
if prm > 1 then
|
||||||
|
return prm * bug10100f(prm - 1);
|
||||||
|
end if;
|
||||||
|
return 1;
|
||||||
|
end|
|
||||||
|
set statement sql_mode = '' for
|
||||||
|
create procedure bug10100p(prm int, inout res int)
|
||||||
|
begin
|
||||||
|
set res = res * prm;
|
||||||
|
if prm > 1 then
|
||||||
|
call bug10100p(prm - 1, res);
|
||||||
|
end if;
|
||||||
|
end|
|
||||||
|
set statement sql_mode = '' for
|
||||||
|
create procedure bug10100t(prm int)
|
||||||
|
begin
|
||||||
|
declare res int;
|
||||||
|
set res = 1;
|
||||||
|
call bug10100p(prm, res);
|
||||||
|
select res;
|
||||||
|
end|
|
||||||
|
|
||||||
|
# a procedure which use tables and recursion
|
||||||
|
create table t3 (a int)|
|
||||||
|
insert into t3 values (0)|
|
||||||
|
create view v1 as select a from t3|
|
||||||
|
create procedure bug10100pt(level int, lim int)
|
||||||
|
begin
|
||||||
|
if level < lim then
|
||||||
|
update t3 set a=level;
|
||||||
|
FLUSH TABLES;
|
||||||
|
call bug10100pt(level+1, lim);
|
||||||
|
else
|
||||||
|
select * from t3;
|
||||||
|
end if;
|
||||||
|
end|
|
||||||
|
# view & recursion
|
||||||
|
create procedure bug10100pv(level int, lim int)
|
||||||
|
begin
|
||||||
|
if level < lim then
|
||||||
|
update v1 set a=level;
|
||||||
|
FLUSH TABLES;
|
||||||
|
call bug10100pv(level+1, lim);
|
||||||
|
else
|
||||||
|
select * from v1;
|
||||||
|
end if;
|
||||||
|
end|
|
||||||
|
# dynamic sql & recursion
|
||||||
|
prepare stmt2 from "select * from t3;";
|
||||||
|
create procedure bug10100pd(level int, lim int)
|
||||||
|
begin
|
||||||
|
if level < lim then
|
||||||
|
select level;
|
||||||
|
prepare stmt1 from "update t3 set a=a+2";
|
||||||
|
execute stmt1;
|
||||||
|
FLUSH TABLES;
|
||||||
|
execute stmt1;
|
||||||
|
FLUSH TABLES;
|
||||||
|
execute stmt1;
|
||||||
|
FLUSH TABLES;
|
||||||
|
deallocate prepare stmt1;
|
||||||
|
execute stmt2;
|
||||||
|
select * from t3;
|
||||||
|
call bug10100pd(level+1, lim);
|
||||||
|
else
|
||||||
|
execute stmt2;
|
||||||
|
end if;
|
||||||
|
end|
|
||||||
|
# cursor & recursion
|
||||||
|
create procedure bug10100pc(level int, lim int)
|
||||||
|
begin
|
||||||
|
declare lv int;
|
||||||
|
declare c cursor for select a from t3;
|
||||||
|
open c;
|
||||||
|
if level < lim then
|
||||||
|
select level;
|
||||||
|
fetch c into lv;
|
||||||
|
select lv;
|
||||||
|
update t3 set a=level+lv;
|
||||||
|
FLUSH TABLES;
|
||||||
|
call bug10100pc(level+1, lim);
|
||||||
|
else
|
||||||
|
select * from t3;
|
||||||
|
end if;
|
||||||
|
close c;
|
||||||
|
end|
|
||||||
|
|
||||||
|
# end of the stack checking
|
||||||
|
set @@max_sp_recursion_depth=255|
|
||||||
|
set @var=1|
|
||||||
|
# disable log because error about stack overrun contains numbers which
|
||||||
|
# depend on a system
|
||||||
|
-- disable_ps_protocol
|
||||||
|
-- disable_result_log
|
||||||
|
-- error ER_STACK_OVERRUN_NEED_MORE
|
||||||
|
call bug10100p(255, @var)|
|
||||||
|
-- error ER_STACK_OVERRUN_NEED_MORE
|
||||||
|
call bug10100pt(1,255)|
|
||||||
|
-- error ER_STACK_OVERRUN_NEED_MORE
|
||||||
|
call bug10100pv(1,255)|
|
||||||
|
-- error ER_STACK_OVERRUN_NEED_MORE
|
||||||
|
call bug10100pd(1,255)|
|
||||||
|
-- error ER_STACK_OVERRUN_NEED_MORE
|
||||||
|
call bug10100pc(1,255)|
|
||||||
|
-- enable_result_log
|
||||||
|
-- enable_ps_protocol
|
||||||
|
set @@max_sp_recursion_depth=0|
|
||||||
|
|
||||||
|
deallocate prepare stmt2|
|
||||||
|
|
||||||
|
drop function bug10100f|
|
||||||
|
drop procedure bug10100p|
|
||||||
|
drop procedure bug10100t|
|
||||||
|
drop procedure bug10100pt|
|
||||||
|
drop procedure bug10100pv|
|
||||||
|
drop procedure bug10100pd|
|
||||||
|
drop procedure bug10100pc|
|
||||||
|
drop view v1|
|
||||||
|
drop table t3|
|
||||||
|
delimiter ;|
|
@ -1,7 +1,5 @@
|
|||||||
set @old_concurrent_insert= @@global.concurrent_insert;
|
set @old_concurrent_insert= @@global.concurrent_insert;
|
||||||
set @@global.concurrent_insert= 0;
|
set @@global.concurrent_insert= 0;
|
||||||
drop table if exists t1,t3;
|
|
||||||
drop procedure if exists bug4902|
|
|
||||||
create procedure bug4902()
|
create procedure bug4902()
|
||||||
begin
|
begin
|
||||||
show grants for 'root'@'localhost';
|
show grants for 'root'@'localhost';
|
||||||
@ -15,7 +13,6 @@ Grants for root@localhost
|
|||||||
GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` WITH GRANT OPTION
|
GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` WITH GRANT OPTION
|
||||||
GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION
|
GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION
|
||||||
drop procedure bug4902|
|
drop procedure bug4902|
|
||||||
drop procedure if exists bug4902_2|
|
|
||||||
create procedure bug4902_2()
|
create procedure bug4902_2()
|
||||||
begin
|
begin
|
||||||
show processlist;
|
show processlist;
|
||||||
@ -23,13 +20,10 @@ end|
|
|||||||
call bug4902_2()|
|
call bug4902_2()|
|
||||||
show warnings|
|
show warnings|
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Note 1305 PROCEDURE test.bug4902_2 does not exist
|
|
||||||
call bug4902_2()|
|
call bug4902_2()|
|
||||||
show warnings|
|
show warnings|
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Note 1305 PROCEDURE test.bug4902_2 does not exist
|
|
||||||
drop procedure bug4902_2|
|
drop procedure bug4902_2|
|
||||||
drop procedure if exists bug6807|
|
|
||||||
create procedure bug6807()
|
create procedure bug6807()
|
||||||
begin
|
begin
|
||||||
declare a int;
|
declare a int;
|
||||||
@ -42,116 +36,6 @@ ERROR 70100: Query execution was interrupted
|
|||||||
call bug6807()|
|
call bug6807()|
|
||||||
ERROR 70100: Query execution was interrupted
|
ERROR 70100: Query execution was interrupted
|
||||||
drop procedure bug6807|
|
drop procedure bug6807|
|
||||||
drop function if exists bug10100f|
|
|
||||||
drop procedure if exists bug10100p|
|
|
||||||
drop procedure if exists bug10100t|
|
|
||||||
drop procedure if exists bug10100pt|
|
|
||||||
drop procedure if exists bug10100pv|
|
|
||||||
drop procedure if exists bug10100pd|
|
|
||||||
drop procedure if exists bug10100pc|
|
|
||||||
create function bug10100f(prm int) returns int
|
|
||||||
begin
|
|
||||||
if prm > 1 then
|
|
||||||
return prm * bug10100f(prm - 1);
|
|
||||||
end if;
|
|
||||||
return 1;
|
|
||||||
end|
|
|
||||||
set statement sql_mode = '' for
|
|
||||||
create procedure bug10100p(prm int, inout res int)
|
|
||||||
begin
|
|
||||||
set res = res * prm;
|
|
||||||
if prm > 1 then
|
|
||||||
call bug10100p(prm - 1, res);
|
|
||||||
end if;
|
|
||||||
end|
|
|
||||||
set statement sql_mode = '' for
|
|
||||||
create procedure bug10100t(prm int)
|
|
||||||
begin
|
|
||||||
declare res int;
|
|
||||||
set res = 1;
|
|
||||||
call bug10100p(prm, res);
|
|
||||||
select res;
|
|
||||||
end|
|
|
||||||
create table t3 (a int)|
|
|
||||||
insert into t3 values (0)|
|
|
||||||
create view v1 as select a from t3|
|
|
||||||
create procedure bug10100pt(level int, lim int)
|
|
||||||
begin
|
|
||||||
if level < lim then
|
|
||||||
update t3 set a=level;
|
|
||||||
FLUSH TABLES;
|
|
||||||
call bug10100pt(level+1, lim);
|
|
||||||
else
|
|
||||||
select * from t3;
|
|
||||||
end if;
|
|
||||||
end|
|
|
||||||
create procedure bug10100pv(level int, lim int)
|
|
||||||
begin
|
|
||||||
if level < lim then
|
|
||||||
update v1 set a=level;
|
|
||||||
FLUSH TABLES;
|
|
||||||
call bug10100pv(level+1, lim);
|
|
||||||
else
|
|
||||||
select * from v1;
|
|
||||||
end if;
|
|
||||||
end|
|
|
||||||
prepare stmt2 from "select * from t3;";
|
|
||||||
create procedure bug10100pd(level int, lim int)
|
|
||||||
begin
|
|
||||||
if level < lim then
|
|
||||||
select level;
|
|
||||||
prepare stmt1 from "update t3 set a=a+2";
|
|
||||||
execute stmt1;
|
|
||||||
FLUSH TABLES;
|
|
||||||
execute stmt1;
|
|
||||||
FLUSH TABLES;
|
|
||||||
execute stmt1;
|
|
||||||
FLUSH TABLES;
|
|
||||||
deallocate prepare stmt1;
|
|
||||||
execute stmt2;
|
|
||||||
select * from t3;
|
|
||||||
call bug10100pd(level+1, lim);
|
|
||||||
else
|
|
||||||
execute stmt2;
|
|
||||||
end if;
|
|
||||||
end|
|
|
||||||
create procedure bug10100pc(level int, lim int)
|
|
||||||
begin
|
|
||||||
declare lv int;
|
|
||||||
declare c cursor for select a from t3;
|
|
||||||
open c;
|
|
||||||
if level < lim then
|
|
||||||
select level;
|
|
||||||
fetch c into lv;
|
|
||||||
select lv;
|
|
||||||
update t3 set a=level+lv;
|
|
||||||
FLUSH TABLES;
|
|
||||||
call bug10100pc(level+1, lim);
|
|
||||||
else
|
|
||||||
select * from t3;
|
|
||||||
end if;
|
|
||||||
close c;
|
|
||||||
end|
|
|
||||||
set @@max_sp_recursion_depth=255|
|
|
||||||
set @var=1|
|
|
||||||
call bug10100p(255, @var)|
|
|
||||||
call bug10100pt(1,255)|
|
|
||||||
call bug10100pv(1,255)|
|
|
||||||
call bug10100pd(1,255)|
|
|
||||||
call bug10100pc(1,255)|
|
|
||||||
set @@max_sp_recursion_depth=0|
|
|
||||||
deallocate prepare stmt2|
|
|
||||||
drop function bug10100f|
|
|
||||||
drop procedure bug10100p|
|
|
||||||
drop procedure bug10100t|
|
|
||||||
drop procedure bug10100pt|
|
|
||||||
drop procedure bug10100pv|
|
|
||||||
drop procedure bug10100pd|
|
|
||||||
drop procedure bug10100pc|
|
|
||||||
drop view v1|
|
|
||||||
drop table t3|
|
|
||||||
drop procedure if exists bug15298_1;
|
|
||||||
drop procedure if exists bug15298_2;
|
|
||||||
create user 'mysqltest_1'@'localhost';
|
create user 'mysqltest_1'@'localhost';
|
||||||
grant all privileges on test.* to 'mysqltest_1'@'localhost';
|
grant all privileges on test.* to 'mysqltest_1'@'localhost';
|
||||||
create procedure 15298_1 () sql security definer show grants for current_user;
|
create procedure 15298_1 () sql security definer show grants for current_user;
|
||||||
@ -170,8 +54,6 @@ disconnect con1;
|
|||||||
drop user mysqltest_1@localhost;
|
drop user mysqltest_1@localhost;
|
||||||
drop procedure 15298_1;
|
drop procedure 15298_1;
|
||||||
drop procedure 15298_2;
|
drop procedure 15298_2;
|
||||||
drop table if exists t1;
|
|
||||||
drop procedure if exists p1;
|
|
||||||
create table t1 (value varchar(15));
|
create table t1 (value varchar(15));
|
||||||
create procedure p1() update t1 set value='updated' where value='old';
|
create procedure p1() update t1 set value='updated' where value='old';
|
||||||
call p1();
|
call p1();
|
||||||
@ -283,7 +165,6 @@ disconnect con2;
|
|||||||
# functions in databases which names contained dot.
|
# functions in databases which names contained dot.
|
||||||
#
|
#
|
||||||
connection default;
|
connection default;
|
||||||
DROP DATABASE IF EXISTS `my.db`;
|
|
||||||
create database `my.db`;
|
create database `my.db`;
|
||||||
use `my.db`;
|
use `my.db`;
|
||||||
CREATE FUNCTION f1(a int) RETURNS INT RETURN a;
|
CREATE FUNCTION f1(a int) RETURNS INT RETURN a;
|
||||||
|
@ -7,19 +7,12 @@ set @@global.concurrent_insert= 0;
|
|||||||
# Save the initial number of concurrent sessions
|
# Save the initial number of concurrent sessions
|
||||||
--source include/count_sessions.inc
|
--source include/count_sessions.inc
|
||||||
|
|
||||||
--disable_warnings
|
|
||||||
drop table if exists t1,t3;
|
|
||||||
--enable_warnings
|
|
||||||
delimiter |;
|
delimiter |;
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug#4902 Stored procedure with SHOW WARNINGS leads to packet error
|
# Bug#4902 Stored procedure with SHOW WARNINGS leads to packet error
|
||||||
#
|
#
|
||||||
# Added tests for show grants command
|
# Added tests for show grants command
|
||||||
--disable_warnings
|
|
||||||
drop procedure if exists bug4902|
|
|
||||||
--enable_warnings
|
|
||||||
create procedure bug4902()
|
create procedure bug4902()
|
||||||
begin
|
begin
|
||||||
show grants for 'root'@'localhost';
|
show grants for 'root'@'localhost';
|
||||||
@ -38,9 +31,6 @@ call bug4902()|
|
|||||||
drop procedure bug4902|
|
drop procedure bug4902|
|
||||||
|
|
||||||
# We need separate SP for SHOW PROCESSLIST since we want use replace_column
|
# We need separate SP for SHOW PROCESSLIST since we want use replace_column
|
||||||
--disable_warnings
|
|
||||||
drop procedure if exists bug4902_2|
|
|
||||||
--enable_warnings
|
|
||||||
create procedure bug4902_2()
|
create procedure bug4902_2()
|
||||||
begin
|
begin
|
||||||
show processlist;
|
show processlist;
|
||||||
@ -58,9 +48,6 @@ drop procedure bug4902_2|
|
|||||||
#
|
#
|
||||||
# Bug#6807 Stored procedure crash if CREATE PROCEDURE ... KILL QUERY
|
# Bug#6807 Stored procedure crash if CREATE PROCEDURE ... KILL QUERY
|
||||||
#
|
#
|
||||||
--disable_warnings
|
|
||||||
drop procedure if exists bug6807|
|
|
||||||
--enable_warnings
|
|
||||||
create procedure bug6807()
|
create procedure bug6807()
|
||||||
begin
|
begin
|
||||||
declare a int;
|
declare a int;
|
||||||
@ -77,150 +64,11 @@ call bug6807()|
|
|||||||
|
|
||||||
drop procedure bug6807|
|
drop procedure bug6807|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Bug#10100 function (and stored procedure?) recursivity problem
|
|
||||||
#
|
|
||||||
--disable_warnings
|
|
||||||
drop function if exists bug10100f|
|
|
||||||
drop procedure if exists bug10100p|
|
|
||||||
drop procedure if exists bug10100t|
|
|
||||||
drop procedure if exists bug10100pt|
|
|
||||||
drop procedure if exists bug10100pv|
|
|
||||||
drop procedure if exists bug10100pd|
|
|
||||||
drop procedure if exists bug10100pc|
|
|
||||||
--enable_warnings
|
|
||||||
# routines with simple recursion
|
|
||||||
create function bug10100f(prm int) returns int
|
|
||||||
begin
|
|
||||||
if prm > 1 then
|
|
||||||
return prm * bug10100f(prm - 1);
|
|
||||||
end if;
|
|
||||||
return 1;
|
|
||||||
end|
|
|
||||||
set statement sql_mode = '' for
|
|
||||||
create procedure bug10100p(prm int, inout res int)
|
|
||||||
begin
|
|
||||||
set res = res * prm;
|
|
||||||
if prm > 1 then
|
|
||||||
call bug10100p(prm - 1, res);
|
|
||||||
end if;
|
|
||||||
end|
|
|
||||||
set statement sql_mode = '' for
|
|
||||||
create procedure bug10100t(prm int)
|
|
||||||
begin
|
|
||||||
declare res int;
|
|
||||||
set res = 1;
|
|
||||||
call bug10100p(prm, res);
|
|
||||||
select res;
|
|
||||||
end|
|
|
||||||
|
|
||||||
# a procedure which use tables and recursion
|
|
||||||
create table t3 (a int)|
|
|
||||||
insert into t3 values (0)|
|
|
||||||
create view v1 as select a from t3|
|
|
||||||
create procedure bug10100pt(level int, lim int)
|
|
||||||
begin
|
|
||||||
if level < lim then
|
|
||||||
update t3 set a=level;
|
|
||||||
FLUSH TABLES;
|
|
||||||
call bug10100pt(level+1, lim);
|
|
||||||
else
|
|
||||||
select * from t3;
|
|
||||||
end if;
|
|
||||||
end|
|
|
||||||
# view & recursion
|
|
||||||
create procedure bug10100pv(level int, lim int)
|
|
||||||
begin
|
|
||||||
if level < lim then
|
|
||||||
update v1 set a=level;
|
|
||||||
FLUSH TABLES;
|
|
||||||
call bug10100pv(level+1, lim);
|
|
||||||
else
|
|
||||||
select * from v1;
|
|
||||||
end if;
|
|
||||||
end|
|
|
||||||
# dynamic sql & recursion
|
|
||||||
prepare stmt2 from "select * from t3;";
|
|
||||||
create procedure bug10100pd(level int, lim int)
|
|
||||||
begin
|
|
||||||
if level < lim then
|
|
||||||
select level;
|
|
||||||
prepare stmt1 from "update t3 set a=a+2";
|
|
||||||
execute stmt1;
|
|
||||||
FLUSH TABLES;
|
|
||||||
execute stmt1;
|
|
||||||
FLUSH TABLES;
|
|
||||||
execute stmt1;
|
|
||||||
FLUSH TABLES;
|
|
||||||
deallocate prepare stmt1;
|
|
||||||
execute stmt2;
|
|
||||||
select * from t3;
|
|
||||||
call bug10100pd(level+1, lim);
|
|
||||||
else
|
|
||||||
execute stmt2;
|
|
||||||
end if;
|
|
||||||
end|
|
|
||||||
# cursor & recursion
|
|
||||||
create procedure bug10100pc(level int, lim int)
|
|
||||||
begin
|
|
||||||
declare lv int;
|
|
||||||
declare c cursor for select a from t3;
|
|
||||||
open c;
|
|
||||||
if level < lim then
|
|
||||||
select level;
|
|
||||||
fetch c into lv;
|
|
||||||
select lv;
|
|
||||||
update t3 set a=level+lv;
|
|
||||||
FLUSH TABLES;
|
|
||||||
call bug10100pc(level+1, lim);
|
|
||||||
else
|
|
||||||
select * from t3;
|
|
||||||
end if;
|
|
||||||
close c;
|
|
||||||
end|
|
|
||||||
|
|
||||||
# end of the stack checking
|
|
||||||
set @@max_sp_recursion_depth=255|
|
|
||||||
set @var=1|
|
|
||||||
# disable log because error about stack overrun contains numbers which
|
|
||||||
# depend on a system
|
|
||||||
-- disable_result_log
|
|
||||||
-- error ER_STACK_OVERRUN_NEED_MORE
|
|
||||||
call bug10100p(255, @var)|
|
|
||||||
-- error ER_STACK_OVERRUN_NEED_MORE
|
|
||||||
call bug10100pt(1,255)|
|
|
||||||
-- error ER_STACK_OVERRUN_NEED_MORE
|
|
||||||
call bug10100pv(1,255)|
|
|
||||||
-- error ER_STACK_OVERRUN_NEED_MORE
|
|
||||||
call bug10100pd(1,255)|
|
|
||||||
-- error ER_STACK_OVERRUN_NEED_MORE
|
|
||||||
call bug10100pc(1,255)|
|
|
||||||
-- enable_result_log
|
|
||||||
set @@max_sp_recursion_depth=0|
|
|
||||||
|
|
||||||
deallocate prepare stmt2|
|
|
||||||
|
|
||||||
drop function bug10100f|
|
|
||||||
drop procedure bug10100p|
|
|
||||||
drop procedure bug10100t|
|
|
||||||
drop procedure bug10100pt|
|
|
||||||
drop procedure bug10100pv|
|
|
||||||
drop procedure bug10100pd|
|
|
||||||
drop procedure bug10100pc|
|
|
||||||
drop view v1|
|
|
||||||
drop table t3|
|
|
||||||
|
|
||||||
delimiter ;|
|
delimiter ;|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug#15298 SHOW GRANTS FOR CURRENT_USER: Incorrect output in DEFINER context
|
# Bug#15298 SHOW GRANTS FOR CURRENT_USER: Incorrect output in DEFINER context
|
||||||
#
|
#
|
||||||
--disable_warnings
|
|
||||||
drop procedure if exists bug15298_1;
|
|
||||||
drop procedure if exists bug15298_2;
|
|
||||||
--enable_warnings
|
|
||||||
create user 'mysqltest_1'@'localhost';
|
create user 'mysqltest_1'@'localhost';
|
||||||
grant all privileges on test.* to 'mysqltest_1'@'localhost';
|
grant all privileges on test.* to 'mysqltest_1'@'localhost';
|
||||||
create procedure 15298_1 () sql security definer show grants for current_user;
|
create procedure 15298_1 () sql security definer show grants for current_user;
|
||||||
@ -240,11 +88,6 @@ drop procedure 15298_2;
|
|||||||
# Bug#29936 Stored Procedure DML ignores low_priority_updates setting
|
# Bug#29936 Stored Procedure DML ignores low_priority_updates setting
|
||||||
#
|
#
|
||||||
|
|
||||||
--disable_warnings
|
|
||||||
drop table if exists t1;
|
|
||||||
drop procedure if exists p1;
|
|
||||||
--enable_warnings
|
|
||||||
|
|
||||||
create table t1 (value varchar(15));
|
create table t1 (value varchar(15));
|
||||||
create procedure p1() update t1 set value='updated' where value='old';
|
create procedure p1() update t1 set value='updated' where value='old';
|
||||||
|
|
||||||
@ -409,10 +252,6 @@ DROP FUNCTION f1;
|
|||||||
|
|
||||||
connection default;
|
connection default;
|
||||||
|
|
||||||
--disable_warnings
|
|
||||||
DROP DATABASE IF EXISTS `my.db`;
|
|
||||||
--enable_warnings
|
|
||||||
|
|
||||||
create database `my.db`;
|
create database `my.db`;
|
||||||
use `my.db`;
|
use `my.db`;
|
||||||
|
|
||||||
|
@ -24,4 +24,4 @@ galera_sst_mysqldump_with_key : MDEV-32782 galera_sst_mysqldump_with_key test fa
|
|||||||
mdev-31285 : MDEV-25089 Assertion `error.len > 0' failed in galera::ReplicatorSMM::handle_apply_error()
|
mdev-31285 : MDEV-25089 Assertion `error.len > 0' failed in galera::ReplicatorSMM::handle_apply_error()
|
||||||
galera_var_ignore_apply_errors : MENT-1997 galera_var_ignore_apply_errors test freezes
|
galera_var_ignore_apply_errors : MENT-1997 galera_var_ignore_apply_errors test freezes
|
||||||
MW-402 : temporarily disabled at the request of Codership
|
MW-402 : temporarily disabled at the request of Codership
|
||||||
MDEV-22232 : temporarily disabled at the request of Codership
|
galera_desync_overlapped : MDEV-21538 galera_desync_overlapped MTR failed: Result content mismatch
|
||||||
|
36
mysql-test/suite/galera/r/MDEV-31272.result
Normal file
36
mysql-test/suite/galera/r/MDEV-31272.result
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
connection node_2;
|
||||||
|
connection node_1;
|
||||||
|
connection node_1;
|
||||||
|
CREATE TABLE t1 (f1 int primary key, f2 int);
|
||||||
|
INSERT INTO t1 VALUES (1,0);
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t1 VALUES (2,4),(1,1);
|
||||||
|
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||||
|
COMMIT;
|
||||||
|
Writesets replicated (expect 0)
|
||||||
|
0
|
||||||
|
connection node_1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
f1 f2
|
||||||
|
1 0
|
||||||
|
connection node_2;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
f1 f2
|
||||||
|
1 0
|
||||||
|
DROP TABLE t1;
|
||||||
|
connection node_1;
|
||||||
|
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 INTEGER);
|
||||||
|
INSERT INTO t1 VALUES (1,0);
|
||||||
|
INSERT INTO t1 VALUES (2,4), (1,1);
|
||||||
|
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||||
|
Writesets replicated (expect 0)
|
||||||
|
0
|
||||||
|
connection node_1;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
f1 f2
|
||||||
|
1 0
|
||||||
|
connection node_2;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
f1 f2
|
||||||
|
1 0
|
||||||
|
DROP TABLE t1;
|
5
mysql-test/suite/galera/t/MDEV-31272.combinations
Normal file
5
mysql-test/suite/galera/t/MDEV-31272.combinations
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[binlogon]
|
||||||
|
log-bin
|
||||||
|
log-slave-updates=ON
|
||||||
|
|
||||||
|
[binlogoff]
|
58
mysql-test/suite/galera/t/MDEV-31272.test
Normal file
58
mysql-test/suite/galera/t/MDEV-31272.test
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#
|
||||||
|
# MDEV-31272: Statement rollback causes empty writeset replication
|
||||||
|
#
|
||||||
|
|
||||||
|
--source include/galera_cluster.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Case 1: Multi statement transaction
|
||||||
|
#
|
||||||
|
--connection node_1
|
||||||
|
CREATE TABLE t1 (f1 int primary key, f2 int);
|
||||||
|
INSERT INTO t1 VALUES (1,0);
|
||||||
|
|
||||||
|
--let $replicated_old = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_replicated'`
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO t1 VALUES (2,4),(1,1);
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
--let $replicated_new = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_replicated'`
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
--eval SELECT $replicated_new - $replicated_old AS 'Writesets replicated (expect 0)';
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
--connection node_1
|
||||||
|
SELECT * FROM t1;
|
||||||
|
--connection node_2
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Case 2: autocommit statement
|
||||||
|
#
|
||||||
|
--connection node_1
|
||||||
|
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 INTEGER);
|
||||||
|
INSERT INTO t1 VALUES (1,0);
|
||||||
|
|
||||||
|
--let $replicated_old = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_replicated'`
|
||||||
|
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO t1 VALUES (2,4), (1,1);
|
||||||
|
|
||||||
|
--let $replicated_new = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_replicated'`
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
--eval SELECT $replicated_new - $replicated_old AS 'Writesets replicated (expect 0)';
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
--connection node_1
|
||||||
|
SELECT * FROM t1;
|
||||||
|
--connection node_2
|
||||||
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
@ -11,7 +11,3 @@
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
|
|
||||||
mdev_6832: wsrep_provider is read-only for security reasons
|
|
||||||
MDEV-23092: wsrep_provider is read-only for security reasons
|
|
||||||
wsrep_variables_no_provider: wsrep_provider is read-only for security reasons
|
|
||||||
MDEV-22443: it is no longer allowed enable wsrep_on if wsrep_provider is 'none'
|
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
SET SESSION wsrep_sync_wait=15;
|
|
||||||
SET SESSION wsrep_on=1;
|
|
||||||
START TRANSACTION READ WRITE;
|
|
@ -1,13 +0,0 @@
|
|||||||
SET COLLATION_CONNECTION='utf16le_bin';
|
|
||||||
SET GLOBAL wsrep_provider='/invalid/path/libgalera_smm.so';
|
|
||||||
ERROR 42000: Variable 'wsrep_provider' can't be set to the value of '/'
|
|
||||||
SET GLOBAL wsrep_cluster_address='OFF';
|
|
||||||
SET GLOBAL wsrep_slave_threads=10;
|
|
||||||
SELECT 1;
|
|
||||||
1
|
|
||||||
1
|
|
||||||
SET GLOBAL wsrep_cluster_address='gcomm://';
|
|
||||||
SET GLOBAL wsrep_slave_threads=DEFAULT;
|
|
||||||
CALL mtr.add_suppression("wsrep_load()");
|
|
||||||
CALL mtr.add_suppression("Failed to create a new provider");
|
|
||||||
CALL mtr.add_suppression("Failed to load provider");
|
|
@ -1,11 +0,0 @@
|
|||||||
#
|
|
||||||
# MDEV-6832: ER_LOCK_WAIT_TIMEOUT on SHOW STATUS
|
|
||||||
#
|
|
||||||
SHOW STATUS LIKE 'wsrep_ready';
|
|
||||||
Variable_name Value
|
|
||||||
wsrep_ready ON
|
|
||||||
SHOW STATUS LIKE 'wsrep_ready';
|
|
||||||
Variable_name Value
|
|
||||||
wsrep_ready OFF
|
|
||||||
SET @@global.wsrep_cluster_address='gcomm://';
|
|
||||||
# End of test.
|
|
@ -1,44 +0,0 @@
|
|||||||
SELECT @@wsrep_on;
|
|
||||||
@@wsrep_on
|
|
||||||
1
|
|
||||||
SET @wsrep_slave_threads_global_saved = @@global.wsrep_slave_threads;
|
|
||||||
SET @wsrep_debug_saved = @@global.wsrep_debug;
|
|
||||||
SET @wsrep_provider_options_saved= @@global.wsrep_provider_options;
|
|
||||||
SET @wsrep_cluster_address_saved= @@global.wsrep_cluster_address;
|
|
||||||
SET GLOBAL wsrep_provider=none;
|
|
||||||
SET SESSION wsrep_trx_fragment_size=DEFAULT;
|
|
||||||
ERROR HY000: Incorrect arguments to SET
|
|
||||||
SELECT @@session.wsrep_trx_fragment_size;
|
|
||||||
@@session.wsrep_trx_fragment_size
|
|
||||||
0
|
|
||||||
SET GLOBAL wsrep_start_position='12345678-1234-1234-1234-123456789012:100';
|
|
||||||
ERROR 42000: Variable 'wsrep_start_position' can't be set to the value of '12345678-1234-1234-1234-123456789012:100'
|
|
||||||
SHOW WARNINGS;
|
|
||||||
Level Code Message
|
|
||||||
Warning 1231 Cannot set 'wsrep_start_position' because wsrep is switched off or provider is not loaded
|
|
||||||
Error 1231 Variable 'wsrep_start_position' can't be set to the value of '12345678-1234-1234-1234-123456789012:100'
|
|
||||||
SELECT @@global.wsrep_start_position;
|
|
||||||
@@global.wsrep_start_position
|
|
||||||
00000000-0000-0000-0000-000000000000:-1
|
|
||||||
SET GLOBAL wsrep_debug=1;
|
|
||||||
Warnings:
|
|
||||||
Warning 1231 Setting 'wsrep_debug' has no effect because wsrep is switched off
|
|
||||||
SELECT @@global.wsrep_debug;
|
|
||||||
@@global.wsrep_debug
|
|
||||||
NONE
|
|
||||||
SET GLOBAL wsrep_slave_threads=5;
|
|
||||||
SELECT @@global.wsrep_slave_threads;
|
|
||||||
@@global.wsrep_slave_threads
|
|
||||||
5
|
|
||||||
SET GLOBAL wsrep_desync=1;
|
|
||||||
ERROR HY000: WSREP (galera) not started
|
|
||||||
SELECT @@global.wsrep_desync;
|
|
||||||
@@global.wsrep_desync
|
|
||||||
0
|
|
||||||
SET SESSION wsrep_trx_fragment_unit='rows';
|
|
||||||
ERROR HY000: Incorrect arguments to SET
|
|
||||||
SELECT @@session.wsrep_trx_fragment_unit;
|
|
||||||
@@session.wsrep_trx_fragment_unit
|
|
||||||
rows
|
|
||||||
SET @@global.wsrep_slave_threads = @wsrep_slave_threads_global_saved;
|
|
||||||
SET @@global.wsrep_debug = @wsrep_debug_saved;
|
|
@ -1,8 +0,0 @@
|
|||||||
!include ../my.cnf
|
|
||||||
|
|
||||||
[mysqld.1]
|
|
||||||
wsrep-on=OFF
|
|
||||||
binlog-format=ROW
|
|
||||||
wsrep-provider=none
|
|
||||||
wsrep-cluster-address='gcomm://'
|
|
||||||
innodb_autoinc_lock_mode=2
|
|
@ -1,12 +0,0 @@
|
|||||||
#
|
|
||||||
# MDEV-22443: terminate called after throwing an instance of
|
|
||||||
# 'wsrep::runtime_error' in std::terminate on START TRANSACTION
|
|
||||||
#
|
|
||||||
|
|
||||||
--source include/have_innodb.inc
|
|
||||||
--source include/have_wsrep.inc
|
|
||||||
--source include/have_binlog_format_row.inc
|
|
||||||
|
|
||||||
SET SESSION wsrep_sync_wait=15;
|
|
||||||
SET SESSION wsrep_on=1;
|
|
||||||
START TRANSACTION READ WRITE;
|
|
@ -1,8 +0,0 @@
|
|||||||
!include ../my.cnf
|
|
||||||
|
|
||||||
[mysqld.1]
|
|
||||||
wsrep-on=OFF
|
|
||||||
binlog-format=ROW
|
|
||||||
wsrep-provider=none
|
|
||||||
wsrep-cluster-address='gcomm://'
|
|
||||||
innodb_autoinc_lock_mode=2
|
|
@ -1,22 +0,0 @@
|
|||||||
#
|
|
||||||
# MDEV-23092: SIGABRT in wsrep::server_state::provider when setting
|
|
||||||
# invalid wsrep_provider (on optimized builds)
|
|
||||||
#
|
|
||||||
|
|
||||||
--source include/have_innodb.inc
|
|
||||||
--source include/have_wsrep.inc
|
|
||||||
--source include/have_binlog_format_row.inc
|
|
||||||
|
|
||||||
SET COLLATION_CONNECTION='utf16le_bin';
|
|
||||||
--error 1231
|
|
||||||
SET GLOBAL wsrep_provider='/invalid/path/libgalera_smm.so';
|
|
||||||
SET GLOBAL wsrep_cluster_address='OFF';
|
|
||||||
SET GLOBAL wsrep_slave_threads=10;
|
|
||||||
SELECT 1;
|
|
||||||
|
|
||||||
SET GLOBAL wsrep_cluster_address='gcomm://';
|
|
||||||
SET GLOBAL wsrep_slave_threads=DEFAULT;
|
|
||||||
|
|
||||||
CALL mtr.add_suppression("wsrep_load()");
|
|
||||||
CALL mtr.add_suppression("Failed to create a new provider");
|
|
||||||
CALL mtr.add_suppression("Failed to load provider");
|
|
@ -1,7 +0,0 @@
|
|||||||
!include ../my.cnf
|
|
||||||
|
|
||||||
[mysqld.1]
|
|
||||||
wsrep-on=ON
|
|
||||||
wsrep-provider=@ENV.WSREP_PROVIDER
|
|
||||||
wsrep-cluster-address=gcomm://
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
|||||||
--source include/have_innodb.inc
|
|
||||||
--source include/have_wsrep_provider.inc
|
|
||||||
--source include/have_binlog_format_row.inc
|
|
||||||
|
|
||||||
--echo #
|
|
||||||
--echo # MDEV-6832: ER_LOCK_WAIT_TIMEOUT on SHOW STATUS
|
|
||||||
--echo #
|
|
||||||
|
|
||||||
SHOW STATUS LIKE 'wsrep_ready';
|
|
||||||
--disable_query_log
|
|
||||||
eval SET @@global.wsrep_provider='$WSREP_PROVIDER';
|
|
||||||
--enable_query_log
|
|
||||||
SHOW STATUS LIKE 'wsrep_ready';
|
|
||||||
SET @@global.wsrep_cluster_address='gcomm://';
|
|
||||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
|
||||||
--source include/wait_condition.inc
|
|
||||||
--echo # End of test.
|
|
@ -1,12 +0,0 @@
|
|||||||
# Use default setting for mysqld processes
|
|
||||||
!include include/default_mysqld.cnf
|
|
||||||
|
|
||||||
[mysqld.1]
|
|
||||||
wsrep-on=ON
|
|
||||||
binlog-format=ROW
|
|
||||||
wsrep-provider=@ENV.WSREP_PROVIDER
|
|
||||||
wsrep-cluster-address='gcomm://'
|
|
||||||
#galera_port=@OPT.port
|
|
||||||
#ist_port=@OPT.port
|
|
||||||
#sst_port=@OPT.port
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
|||||||
--source include/have_wsrep.inc
|
|
||||||
--source include/have_innodb.inc
|
|
||||||
|
|
||||||
SELECT @@wsrep_on;
|
|
||||||
|
|
||||||
SET @wsrep_slave_threads_global_saved = @@global.wsrep_slave_threads;
|
|
||||||
SET @wsrep_debug_saved = @@global.wsrep_debug;
|
|
||||||
SET @wsrep_provider_options_saved= @@global.wsrep_provider_options;
|
|
||||||
SET @wsrep_cluster_address_saved= @@global.wsrep_cluster_address;
|
|
||||||
|
|
||||||
SET GLOBAL wsrep_provider=none;
|
|
||||||
|
|
||||||
--error ER_WRONG_ARGUMENTS
|
|
||||||
SET SESSION wsrep_trx_fragment_size=DEFAULT;
|
|
||||||
SELECT @@session.wsrep_trx_fragment_size;
|
|
||||||
--error ER_WRONG_VALUE_FOR_VAR
|
|
||||||
SET GLOBAL wsrep_start_position='12345678-1234-1234-1234-123456789012:100';
|
|
||||||
SHOW WARNINGS;
|
|
||||||
SELECT @@global.wsrep_start_position;
|
|
||||||
SET GLOBAL wsrep_debug=1;
|
|
||||||
SELECT @@global.wsrep_debug;
|
|
||||||
SET GLOBAL wsrep_slave_threads=5;
|
|
||||||
SELECT @@global.wsrep_slave_threads;
|
|
||||||
--error ER_WRONG_ARGUMENTS
|
|
||||||
SET GLOBAL wsrep_desync=1;
|
|
||||||
SELECT @@global.wsrep_desync;
|
|
||||||
--error ER_WRONG_ARGUMENTS
|
|
||||||
SET SESSION wsrep_trx_fragment_unit='rows';
|
|
||||||
SELECT @@session.wsrep_trx_fragment_unit;
|
|
||||||
|
|
||||||
--disable_query_log
|
|
||||||
eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
|
|
||||||
SET GLOBAL wsrep_cluster_address= @wsrep_cluster_address_saved;
|
|
||||||
SET GLOBAL wsrep_provider_options= @wsrep_provider_options_saved;
|
|
||||||
--source include/galera_wait_ready.inc
|
|
||||||
SET @@global.wsrep_slave_threads = @wsrep_slave_threads_global_saved;
|
|
||||||
SET @@global.wsrep_debug = @wsrep_debug_saved;
|
|
||||||
--enable_query_log
|
|
@ -11188,6 +11188,15 @@ IO_CACHE *wsrep_get_cache(THD * thd, bool is_transactional)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wsrep_is_binlog_cache_empty(THD *thd)
|
||||||
|
{
|
||||||
|
binlog_cache_mngr *cache_mngr=
|
||||||
|
(binlog_cache_mngr *) thd_get_ha_data(thd, binlog_hton);
|
||||||
|
if (cache_mngr)
|
||||||
|
return cache_mngr->trx_cache.empty() && cache_mngr->stmt_cache.empty();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void wsrep_thd_binlog_trx_reset(THD * thd)
|
void wsrep_thd_binlog_trx_reset(THD * thd)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("wsrep_thd_binlog_trx_reset");
|
DBUG_ENTER("wsrep_thd_binlog_trx_reset");
|
||||||
|
@ -1248,6 +1248,7 @@ static inline TC_LOG *get_tc_log_implementation()
|
|||||||
|
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
IO_CACHE* wsrep_get_cache(THD *, bool);
|
IO_CACHE* wsrep_get_cache(THD *, bool);
|
||||||
|
bool wsrep_is_binlog_cache_empty(THD *);
|
||||||
void wsrep_thd_binlog_trx_reset(THD * thd);
|
void wsrep_thd_binlog_trx_reset(THD * thd);
|
||||||
void wsrep_thd_binlog_stmt_rollback(THD * thd);
|
void wsrep_thd_binlog_stmt_rollback(THD * thd);
|
||||||
#endif /* WITH_WSREP */
|
#endif /* WITH_WSREP */
|
||||||
|
@ -91,7 +91,13 @@ static inline bool wsrep_is_real(THD* thd, bool all)
|
|||||||
*/
|
*/
|
||||||
static inline bool wsrep_has_changes(THD* thd)
|
static inline bool wsrep_has_changes(THD* thd)
|
||||||
{
|
{
|
||||||
return (thd->wsrep_trx().is_empty() == false);
|
// Transaction has changes to replicate if it
|
||||||
|
// has appended one or more certification keys,
|
||||||
|
// and has actual changes to replicate in binlog
|
||||||
|
// cache. Except for streaming replication,
|
||||||
|
// where commit message may have no payload.
|
||||||
|
return !thd->wsrep_trx().is_empty() &&
|
||||||
|
(!wsrep_is_binlog_cache_empty(thd) || thd->wsrep_trx().is_streaming());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
23
storage/spider/mysql-test/spider/bugfix/r/mdev_32986.result
Normal file
23
storage/spider/mysql-test/spider/bugfix/r/mdev_32986.result
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#
|
||||||
|
# MDEV-32907
|
||||||
|
#
|
||||||
|
for master_1
|
||||||
|
for child2
|
||||||
|
for child3
|
||||||
|
CREATE SERVER srv FOREIGN DATA WRAPPER mysql
|
||||||
|
OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root');
|
||||||
|
create table t2 (c varchar(16));
|
||||||
|
create table t1 (c varchar(16)) ENGINE=Spider
|
||||||
|
COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"';
|
||||||
|
insert into t1 values ('TestSpiderRegex');
|
||||||
|
select c from t1 where c regexp '(Test|Spider|Regex)';
|
||||||
|
c
|
||||||
|
TestSpiderRegex
|
||||||
|
drop table t1, t2;
|
||||||
|
drop server srv;
|
||||||
|
for master_1
|
||||||
|
for child2
|
||||||
|
for child3
|
||||||
|
#
|
||||||
|
# end of test mdev_32907
|
||||||
|
#
|
28
storage/spider/mysql-test/spider/bugfix/t/mdev_32986.test
Normal file
28
storage/spider/mysql-test/spider/bugfix/t/mdev_32986.test
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
--echo #
|
||||||
|
--echo # MDEV-32907
|
||||||
|
--echo #
|
||||||
|
--disable_query_log
|
||||||
|
--disable_result_log
|
||||||
|
--source ../../t/test_init.inc
|
||||||
|
--enable_result_log
|
||||||
|
--enable_query_log
|
||||||
|
evalp CREATE SERVER srv FOREIGN DATA WRAPPER mysql
|
||||||
|
OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root');
|
||||||
|
|
||||||
|
create table t2 (c varchar(16));
|
||||||
|
create table t1 (c varchar(16)) ENGINE=Spider
|
||||||
|
COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"';
|
||||||
|
|
||||||
|
insert into t1 values ('TestSpiderRegex');
|
||||||
|
select c from t1 where c regexp '(Test|Spider|Regex)';
|
||||||
|
drop table t1, t2;
|
||||||
|
drop server srv;
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
--disable_result_log
|
||||||
|
--source ../../t/test_deinit.inc
|
||||||
|
--enable_result_log
|
||||||
|
--enable_query_log
|
||||||
|
--echo #
|
||||||
|
--echo # end of test mdev_32907
|
||||||
|
--echo #
|
@ -6040,12 +6040,17 @@ int spider_db_mbase_util::print_item_func(
|
|||||||
item_count -= 2;
|
item_count -= 2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (func_name_length == 6 &&
|
} else if (func_name_length == 6)
|
||||||
!strncasecmp("istrue", func_name, func_name_length)
|
{
|
||||||
) {
|
if (!strncasecmp("istrue", func_name, func_name_length))
|
||||||
|
{
|
||||||
last_str= SPIDER_SQL_IS_TRUE_STR;
|
last_str= SPIDER_SQL_IS_TRUE_STR;
|
||||||
last_str_length= SPIDER_SQL_IS_TRUE_LEN;
|
last_str_length= SPIDER_SQL_IS_TRUE_LEN;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
else if (!strncasecmp("regexp", func_name, func_name_length))
|
||||||
|
/* Keep the infix expression */
|
||||||
|
break;
|
||||||
} else if (func_name_length == 7)
|
} else if (func_name_length == 7)
|
||||||
{
|
{
|
||||||
if (!strncasecmp("isfalse", func_name, func_name_length))
|
if (!strncasecmp("isfalse", func_name, func_name_length))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user