Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
f0936e94
Commit
f0936e94
authored
Mar 21, 2007
by
cbell/Chuck@mysql_cab_desk
Browse files
Options
Browse Files
Download
Plain Diff
Merge mysql_cab_desk.:C:/source/c++/mysql-5.0_BUG_25543
into mysql_cab_desk.:C:/source/c++/mysql-5.1_BUG_25543
parents
11d37efa
825ad05e
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
102 additions
and
4 deletions
+102
-4
mysql-test/r/rpl_misc_functions.result
mysql-test/r/rpl_misc_functions.result
+25
-2
mysql-test/t/rpl_misc_functions.test
mysql-test/t/rpl_misc_functions.test
+66
-2
sql/sql_class.cc
sql/sql_class.cc
+11
-0
No files found.
mysql-test/r/rpl_misc_functions.result
View file @
f0936e94
...
...
@@ -18,6 +18,29 @@ create table t2 like t1;
load data local infile 'MYSQLTEST_VARDIR/master-data/test/rpl_misc_functions.outfile' into table t2;
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);
id i r1 r2 p id i r1 r2 p
stop slave;
drop table t1;
drop table t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (col_a double default NULL);
CREATE PROCEDURE test_replication_sp1()
BEGIN
INSERT INTO t1 VALUES (rand()), (rand());
INSERT INTO t1 VALUES (rand());
END|
CREATE PROCEDURE test_replication_sp2()
BEGIN
CALL test_replication_sp1();
CALL test_replication_sp1();
END|
CREATE FUNCTION test_replication_sf() RETURNS DOUBLE DETERMINISTIC
BEGIN
RETURN (rand() + rand());
END|
CALL test_replication_sp1();
CALL test_replication_sp2();
INSERT INTO t1 VALUES (test_replication_sf());
INSERT INTO t1 VALUES (test_replication_sf());
INSERT INTO t1 VALUES (test_replication_sf());
DROP PROCEDURE IF EXISTS test_replication_sp1;
DROP PROCEDURE IF EXISTS test_replication_sp2;
DROP FUNCTION IF EXISTS test_replication_sf;
DROP TABLE IF EXISTS t1;
mysql-test/t/rpl_misc_functions.test
View file @
f0936e94
...
...
@@ -28,10 +28,74 @@ create table t2 like t1;
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
);
stop
slave
;
drop
table
t1
;
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
(
col_a
double
default
NULL
);
DELIMITER
|
;
# Use a SP that calls rand() multiple times
CREATE
PROCEDURE
test_replication_sp1
()
BEGIN
INSERT
INTO
t1
VALUES
(
rand
()),
(
rand
());
INSERT
INTO
t1
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
VALUES
(
test_replication_sf
());
INSERT
INTO
t1
VALUES
(
test_replication_sf
());
INSERT
INTO
t1
VALUES
(
test_replication_sf
());
# Record the results of the query on the master
--
exec
$MYSQL
--
port
=
$MASTER_MYPORT
test
-
e
"SELECT * FROM test.t1"
>
$MYSQLTEST_VARDIR
/
tmp
/
rpl_rand_master
.
sql
--
sync_slave_with_master
# Record the results of the query on the slave
--
exec
$MYSQL
--
port
=
$SLAVE_MYPORT
test
-
e
"SELECT * FROM test.t1"
>
$MYSQLTEST_VARDIR
/
tmp
/
rpl_rand_slave
.
sql
# Compare the results from the master to the slave.
--
exec
diff
$MYSQLTEST_VARDIR
/
tmp
/
rpl_rand_master
.
sql
$MYSQLTEST_VARDIR
/
tmp
/
rpl_rand_slave
.
sql
# Cleanup
--
disable_warnings
DROP
PROCEDURE
IF
EXISTS
test_replication_sp1
;
DROP
PROCEDURE
IF
EXISTS
test_replication_sp2
;
DROP
FUNCTION
IF
EXISTS
test_replication_sf
;
DROP
TABLE
IF
EXISTS
t1
;
--
enable_warnings
# If all is good, when can cleanup our dump files.
--
system
rm
$MYSQLTEST_VARDIR
/
tmp
/
rpl_rand_master
.
sql
--
system
rm
$MYSQLTEST_VARDIR
/
tmp
/
rpl_rand_slave
.
sql
sql/sql_class.cc
View file @
f0936e94
...
...
@@ -679,11 +679,22 @@ bool THD::store_globals()
void
THD
::
cleanup_after_query
()
{
/*
Reset rand_used so that detection of calls to rand() will save random
seeds if needed by the slave.
Do not reset rand_used if inside a stored function or trigger because
only the call to these operations is logged. Thus only the calling
statement needs to detect rand() calls made by its substatements. These
substatements must not set rand_used to 0 because it would remove the
detection of rand() by the calling statement.
*/
if
(
!
in_sub_stmt
)
/* stored functions and triggers are a special case */
{
/* Forget those values, for next binlogger: */
stmt_depends_on_first_successful_insert_id_in_prev_stmt
=
0
;
auto_inc_intervals_in_cur_stmt_for_binlog
.
empty
();
rand_used
=
0
;
}
if
(
first_successful_insert_id_in_cur_stmt
>
0
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment