mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
0fdcf49189
Backport from 5.1 a fix to make this test deterministic mysql-test/r/rpl_misc_functions.result: Backport from 5.1 a fix to make this test deterministic mysql-test/t/rpl_misc_functions.test: Backport from 5.1 a fix to make this test deterministic
114 lines
3.4 KiB
Text
114 lines
3.4 KiB
Text
#
|
|
# Test of replicating some difficult functions
|
|
#
|
|
source include/master-slave.inc;
|
|
|
|
create table t1(id int, i int, r1 int, r2 int, p varchar(100));
|
|
insert into t1 values(1, connection_id(), 0, 0, "");
|
|
# don't put rand and password in the same query, to see if they replicate
|
|
# independently
|
|
# Pure rand test
|
|
insert into t1 values(2, 0, rand()*1000, rand()*1000, "");
|
|
# change the rand suite on the master (we do this because otherwise password()
|
|
# benefits from the fact that the above rand() is well replicated :
|
|
# it picks the same sequence element, which hides a possible bug in password() replication.
|
|
set sql_log_bin=0;
|
|
insert into t1 values(6, 0, rand(), rand(), "");
|
|
delete from t1 where id=6;
|
|
set sql_log_bin=1;
|
|
# Pure password test
|
|
insert into t1 values(3, 0, 0, 0, password('does_this_work?'));
|
|
# "altogether now"
|
|
insert into t1 values(4, connection_id(), rand()*1000, rand()*1000, password('does_this_still_work?'));
|
|
select * into outfile 'rpl_misc_functions.outfile' from t1;
|
|
sync_slave_with_master;
|
|
create table t2 like t1;
|
|
# read the values from the master table
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
eval load data local infile '$MYSQLTEST_VARDIR/master-data/test/rpl_misc_functions.outfile' into table t2;
|
|
# compare them with the replica; the SELECT below should return no row
|
|
select * from t1, t2 where (t1.id=t2.id) and not(t1.i=t2.i and t1.r1=t2.r1 and t1.r2=t2.r2 and t1.p=t2.p);
|
|
|
|
connection master;
|
|
drop table t1;
|
|
|
|
# End of 4.1 tests
|
|
|
|
#
|
|
# BUG#25543 test calling rand() multiple times on the master in
|
|
# a stored procedure.
|
|
#
|
|
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS t1;
|
|
--enable_warnings
|
|
|
|
CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
col_a DOUBLE DEFAULT NULL);
|
|
|
|
DELIMITER |;
|
|
|
|
# Use a SP that calls rand() multiple times
|
|
CREATE PROCEDURE test_replication_sp1()
|
|
BEGIN
|
|
INSERT INTO t1 (col_a) VALUES (rand()), (rand());
|
|
INSERT INTO t1 (col_a) VALUES (rand());
|
|
END|
|
|
|
|
# Use a SP that calls another SP to call rand() multiple times
|
|
CREATE PROCEDURE test_replication_sp2()
|
|
BEGIN
|
|
CALL test_replication_sp1();
|
|
CALL test_replication_sp1();
|
|
END|
|
|
|
|
# Use a SF that calls rand() multiple times
|
|
CREATE FUNCTION test_replication_sf() RETURNS DOUBLE DETERMINISTIC
|
|
BEGIN
|
|
RETURN (rand() + rand());
|
|
END|
|
|
|
|
DELIMITER ;|
|
|
|
|
# Exercise the functions and procedures then compare the results on
|
|
# the master to those on the slave.
|
|
CALL test_replication_sp1();
|
|
CALL test_replication_sp2();
|
|
INSERT INTO t1 (col_a) VALUES (test_replication_sf());
|
|
INSERT INTO t1 (col_a) VALUES (test_replication_sf());
|
|
INSERT INTO t1 (col_a) VALUES (test_replication_sf());
|
|
|
|
--sync_slave_with_master
|
|
|
|
# Dump table on slave
|
|
select * from t1 into outfile "../tmp/t1_slave.txt";
|
|
|
|
# Load data from slave into temp table on master
|
|
connection master;
|
|
create temporary table t1_slave select * from t1 where 1=0;
|
|
load data infile '../tmp/t1_slave.txt' into table t1_slave;
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/t1_slave.txt
|
|
|
|
# Compare master and slave temp table, use subtraction
|
|
# for floating point comparison of "double"
|
|
select count(*) into @aux from t1 join t1_slave using (id)
|
|
where ABS(t1.col_a - t1_slave.col_a) < 0.0000001 ;
|
|
SELECT @aux;
|
|
if (`SELECT @aux <> 12 OR @aux IS NULL`)
|
|
{
|
|
--echo # ERROR: We expected to get count(*) = 12.
|
|
SELECT id, col_a FROM t1;
|
|
SELECT id, col_a FROM t1_slave;
|
|
--echo # abort
|
|
exit;
|
|
}
|
|
|
|
# Cleanup
|
|
connection master;
|
|
DROP TABLE t1, t1_slave;
|
|
DROP PROCEDURE test_replication_sp1;
|
|
DROP PROCEDURE test_replication_sp2;
|
|
DROP FUNCTION test_replication_sf;
|
|
--sync_slave_with_master
|
|
|
|
|