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
85cff45e
Commit
85cff45e
authored
Apr 09, 2009
by
He Zhenxing
Browse files
Options
Browse Files
Download
Plain Diff
Manually merge BUG#37145 to 5.1-bugteam
parents
440858b8
51a91166
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
682 additions
and
25 deletions
+682
-25
mysql-test/include/diff_master_slave.inc
mysql-test/include/diff_master_slave.inc
+21
-0
mysql-test/include/kill_query.inc
mysql-test/include/kill_query.inc
+68
-0
mysql-test/include/kill_query_and_diff_master_slave.inc
mysql-test/include/kill_query_and_diff_master_slave.inc
+43
-0
mysql-test/mysql-test-run.pl
mysql-test/mysql-test-run.pl
+11
-2
mysql-test/suite/rpl/r/rpl_killed_ddl.result
mysql-test/suite/rpl/r/rpl_killed_ddl.result
+169
-0
mysql-test/suite/rpl/r/rpl_name_const.result
mysql-test/suite/rpl/r/rpl_name_const.result
+0
-0
mysql-test/suite/rpl/t/rpl_killed_ddl-master.opt
mysql-test/suite/rpl/t/rpl_killed_ddl-master.opt
+1
-0
mysql-test/suite/rpl/t/rpl_killed_ddl.test
mysql-test/suite/rpl/t/rpl_killed_ddl.test
+352
-0
mysql-test/suite/rpl/t/rpl_name_const.test
mysql-test/suite/rpl/t/rpl_name_const.test
+0
-0
sql/sp.cc
sql/sp.cc
+2
-1
sql/sql_acl.cc
sql/sql_acl.cc
+2
-1
sql/sql_base.cc
sql/sql_base.cc
+3
-13
sql/sql_db.cc
sql/sql_db.cc
+6
-5
sql/sql_table.cc
sql/sql_table.cc
+3
-2
sql/sql_view.cc
sql/sql_view.cc
+1
-1
No files found.
mysql-test/include/diff_master_slave.inc
0 → 100644
View file @
85cff45e
# ==== Purpose ====
#
# Diff the output of a statement on master and slave
#
# ==== Usage =====
#
# let $diff_statement= SELECT * FROM t1 WHERE a < 100;
# source include/diff_master_slave.inc;
--
echo
source
include
/
diff_master_slave
.
inc
;
disable_query_log
;
disable_result_log
;
exec
$MYSQL
test
-
e
"
$diff_statement
"
>
$MYSQLTEST_VARDIR
/
tmp
/
diff_master
.
out
;
sync_slave_with_master
;
exec
$MYSQL_SLAVE
test
-
e
"
$diff_statement
"
>
$MYSQLTEST_VARDIR
/
tmp
/
diff_slave
.
out
;
diff_files
$MYSQLTEST_VARDIR
/
tmp
/
diff_master
.
out
$MYSQLTEST_VARDIR
/
tmp
/
diff_slave
.
out
;
enable_result_log
;
enable_query_log
;
mysql-test/include/kill_query.inc
0 → 100644
View file @
85cff45e
# ==== Purpose ====
#
# Kill a query in the master connection, and then try to reap the
# result of the killed query.
#
# ==== Usage ====
#
# The following variables should be set before sourcing this file.
#
# $debug_lock: name of the debug user lock, if set, will release/lock
# the specified debug lock accordingly, and before
# sourcing this, connection 'master' should get the user
# lock and run a query in another thread, which will
# block before creating statement event.
#
# $connection_name: name of the connection that is waiting for the
# lock, this can not be 'master'
#
# $connection_id: id of the connection that is waiting for the lock
#
# Example:
# let $debug_lock=;
# connection master1;
# let $connection_name= master1;
# let $connection_id= `SELECT CONNECTION_ID()`;
# send CREATE TABLE t1;
# source kill_query.inc;
#
# let $debug_lock= "debug_lock.before_query_log_event";
# connection master;
# eval SELECT GET_LOCK($debug_lock, 10);
# connection master1;
# let $connection_name= master1;
# let $connection_id= `SELECT CONNECTION_ID()`;
# send CREATE TABLE t1;
# source kill_query.inc;
--
echo
source
include
/
kill_query
.
inc
;
disable_query_log
;
disable_result_log
;
connection
master
;
# kill the query that is waiting
eval
kill
query
$connection_id
;
if
(
`SELECT '$debug_lock' != ''`
)
{
# release the lock to allow binlog continue
eval
SELECT
RELEASE_LOCK
(
$debug_lock
);
}
# reap the result of the waiting query
connection
$connection_name
;
error
0
,
1317
,
1307
,
1306
,
1334
,
1305
;
reap
;
connection
master
;
if
(
`SELECT '$debug_lock' != ''`
)
{
# get lock again to make the next query wait
eval
SELECT
GET_LOCK
(
$debug_lock
,
10
);
}
connection
$connection_name
;
enable_query_log
;
enable_result_log
;
mysql-test/include/kill_query_and_diff_master_slave.inc
0 → 100644
View file @
85cff45e
# ==== Purpose ====
#
# Kill a query, sync master with slave, and diff the output of a
# statement on master and slave to check if statement is correctly
# replicated.
#
# ==== Usage ====
#
# connection <CONNECTION>;
# let $connection_name=<CONNECTION>
# let $connection_id=`SELECT CONNECTION_ID()`;
# let $diff_statement=<SQL COMMAND>;
# send <SQL COMMAND>;
# source include/kill_query_and_diff_master_slave.inc;
#
# Note: <CONNECTION> must not be 'master'.
#
# See also kill_query.inc and diff_master_slave.inc for more
# information
source
include
/
kill_query
.
inc
;
# Release the debug lock if used, so that the statements in
# diff_master_slave.inc will not be blocked.
connection
master
;
disable_query_log
;
disable_result_log
;
if
(
`SELECT '$debug_lock' != ''`
)
{
eval
SELECT
RELEASE_LOCK
(
$debug_lock
);
}
enable_result_log
;
enable_query_log
;
source
include
/
diff_master_slave
.
inc
;
# Acquire the debug lock again if used
connection
master
;
disable_query_log
;
disable_result_log
;
if
(
`SELECT '$debug_lock' !=
''`
)
{
eval
SELECT
GET_LOCK
(
$debug_lock
,
10
);
}
enable_result_log
;
enable_query_log
;
connection
$connection_name
;
mysql-test/mysql-test-run.pl
View file @
85cff45e
...
@@ -1600,14 +1600,22 @@ sub mysql_fix_arguments () {
...
@@ -1600,14 +1600,22 @@ sub mysql_fix_arguments () {
}
}
sub
client_arguments
($)
{
sub
client_arguments
($
;$
) {
my
$client_name
=
shift
;
my
$client_name
=
shift
;
my
$group_suffix
=
shift
;
my
$client_exe
=
mtr_exe_exists
("
$path_client_bindir
/
$client_name
");
my
$client_exe
=
mtr_exe_exists
("
$path_client_bindir
/
$client_name
");
my
$args
;
my
$args
;
mtr_init_args
(
\
$args
);
mtr_init_args
(
\
$args
);
mtr_add_arg
(
$args
,
"
--defaults-file=%s
",
$path_config_file
);
mtr_add_arg
(
$args
,
"
--defaults-file=%s
",
$path_config_file
);
client_debug_arg
(
$args
,
$client_name
);
if
(
defined
(
$group_suffix
))
{
mtr_add_arg
(
$args
,
"
--defaults-group-suffix=%s
",
$group_suffix
);
client_debug_arg
(
$args
,
"
$client_name
-
$group_suffix
");
}
else
{
client_debug_arg
(
$args
,
$client_name
);
}
return
mtr_args2str
(
$client_exe
,
@$args
);
return
mtr_args2str
(
$client_exe
,
@$args
);
}
}
...
@@ -1858,6 +1866,7 @@ sub environment_setup {
...
@@ -1858,6 +1866,7 @@ sub environment_setup {
$ENV
{'
MYSQL_SHOW
'}
=
client_arguments
("
mysqlshow
");
$ENV
{'
MYSQL_SHOW
'}
=
client_arguments
("
mysqlshow
");
$ENV
{'
MYSQL_BINLOG
'}
=
client_arguments
("
mysqlbinlog
");
$ENV
{'
MYSQL_BINLOG
'}
=
client_arguments
("
mysqlbinlog
");
$ENV
{'
MYSQL
'}
=
client_arguments
("
mysql
");
$ENV
{'
MYSQL
'}
=
client_arguments
("
mysql
");
$ENV
{'
MYSQL_SLAVE
'}
=
client_arguments
("
mysql
",
"
.2
");
$ENV
{'
MYSQL_UPGRADE
'}
=
client_arguments
("
mysql_upgrade
");
$ENV
{'
MYSQL_UPGRADE
'}
=
client_arguments
("
mysql_upgrade
");
$ENV
{'
MYSQLADMIN
'}
=
native_path
(
$exe_mysqladmin
);
$ENV
{'
MYSQLADMIN
'}
=
native_path
(
$exe_mysqladmin
);
$ENV
{'
MYSQL_CLIENT_TEST
'}
=
mysql_client_test_arguments
();
$ENV
{'
MYSQL_CLIENT_TEST
'}
=
mysql_client_test_arguments
();
...
...
mysql-test/suite/rpl/r/rpl_killed_ddl.result
0 → 100644
View file @
85cff45e
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
DROP DATABASE IF EXISTS d1;
DROP DATABASE IF EXISTS d2;
DROP DATABASE IF EXISTS d3;
DROP DATABASE IF EXISTS d4;
DROP EVENT IF EXISTS e1;
DROP EVENT IF EXISTS e2;
DROP EVENT IF EXISTS e3;
DROP EVENT IF EXISTS e4;
DROP FUNCTION IF EXISTS f1;
DROP FUNCTION IF EXISTS f2;
DROP FUNCTION IF EXISTS f3;
DROP FUNCTION IF EXISTS f4;
DROP SERVER IF EXISTS s1;
DROP SERVER IF EXISTS s2;
DROP SERVER IF EXISTS s3;
DROP SERVER IF EXISTS s4;
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;
DROP TABLE IF EXISTS t3;
DROP TABLE IF EXISTS t4;
DROP PROCEDURE IF EXISTS p1;
DROP PROCEDURE IF EXISTS p2;
DROP PROCEDURE IF EXISTS p3;
DROP PROCEDURE IF EXISTS p4;
DROP TRIGGER IF EXISTS tr1;
DROP TRIGGER IF EXISTS tr2;
DROP TRIGGER IF EXISTS tr3;
DROP TRIGGER IF EXISTS tr4;
CREATE DATABASE d1;
CREATE EVENT e1
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
DO INSERT INTO test.t1 VALUES (1);
CREATE FUNCTION f1 () RETURNS INT DETERMINISTIC
RETURN 1;
CREATE PROCEDURE p1 (OUT rows INT)
BEGIN
SELECT COUNT(*) INTO rows FROM t1;
END;
//
CREATE SERVER s1
FOREIGN DATA WRAPPER mysql
OPTIONS (USER 'user1', HOST '192.168.1.106', DATABASE 'test');
CREATE TABLE t1 (a int);
CREATE TABLE t3 (a int);
CREATE TRIGGER tr1 BEFORE INSERT ON t1
FOR EACH ROW BEGIN
DELETE FROM t4 WHERE a=NEW.a;
END;
//
CREATE INDEX i1 ON t1 (a);
CREATE VIEW v1 AS SELECT a FROM t1 WHERE a < 100;
[on master]
[on master1]
CREATE DATABASE d2;
source include/kill_query.inc;
source include/diff_master_slave.inc;
DROP DATABASE d1;
source include/kill_query.inc;
source include/diff_master_slave.inc;
DROP DATABASE d2;
source include/kill_query.inc;
source include/diff_master_slave.inc;
CREATE EVENT e2
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
DO INSERT INTO test.t1 VALUES (2);
source include/kill_query.inc;
source include/diff_master_slave.inc;
DROP EVENT e1;
source include/kill_query.inc;
source include/diff_master_slave.inc;
DROP EVENT IF EXISTS e2;
source include/kill_query.inc;
source include/diff_master_slave.inc;
CREATE FUNCTION f2 () RETURNS INT DETERMINISTIC
RETURN 1;
source include/kill_query.inc;
source include/diff_master_slave.inc;
ALTER FUNCTION f1 SQL SECURITY INVOKER;
source include/kill_query.inc;
source include/diff_master_slave.inc;
DROP FUNCTION f1;
source include/kill_query.inc;
source include/diff_master_slave.inc;
CREATE PROCEDURE p2 (OUT rows INT)
BEGIN
SELECT COUNT(*) INTO rows FROM t2;
END;
//
source include/kill_query.inc;
source include/diff_master_slave.inc;
ALTER PROCEDURE p1 SQL SECURITY INVOKER COMMENT 'return rows of table t1';
source include/kill_query.inc;
source include/diff_master_slave.inc;
DROP PROCEDURE p1;
source include/kill_query.inc;
source include/diff_master_slave.inc;
CREATE TABLE t2 (b int);
source include/kill_query.inc;
source include/diff_master_slave.inc;
ALTER TABLE t1 ADD (d int);
source include/kill_query.inc;
source include/diff_master_slave.inc;
RENAME TABLE t3 TO t4;
source include/kill_query.inc;
source include/diff_master_slave.inc;
CREATE INDEX i2 on t1 (a);
source include/kill_query.inc;
source include/diff_master_slave.inc;
DROP INDEX i1 on t1;
source include/kill_query.inc;
source include/diff_master_slave.inc;
CREATE TRIGGER tr2 BEFORE INSERT ON t4
FOR EACH ROW BEGIN
DELETE FROM t1 WHERE a=NEW.a;
END;
//
source include/kill_query.inc;
source include/diff_master_slave.inc;
DROP TRIGGER tr1;
source include/kill_query.inc;
source include/diff_master_slave.inc;
DROP TRIGGER IF EXISTS tr2;
source include/kill_query.inc;
source include/diff_master_slave.inc;
CREATE VIEW v2 AS SELECT a FROM t1 WHERE a > 100;
source include/kill_query.inc;
source include/diff_master_slave.inc;
DROP VIEW v1;
source include/kill_query.inc;
source include/diff_master_slave.inc;
DROP VIEW IF EXISTS v2;
source include/kill_query.inc;
source include/diff_master_slave.inc;
DROP TABLE t1;
source include/kill_query.inc;
source include/diff_master_slave.inc;
DROP TABLE IF EXISTS t2;
source include/kill_query.inc;
source include/diff_master_slave.inc;
DROP DATABASE IF EXISTS d1;
DROP DATABASE IF EXISTS d2;
DROP DATABASE IF EXISTS d3;
DROP DATABASE IF EXISTS d4;
DROP EVENT IF EXISTS e1;
DROP EVENT IF EXISTS e2;
DROP EVENT IF EXISTS e3;
DROP EVENT IF EXISTS e4;
DROP FUNCTION IF EXISTS f1;
DROP FUNCTION IF EXISTS f2;
DROP FUNCTION IF EXISTS f3;
DROP FUNCTION IF EXISTS f4;
DROP SERVER IF EXISTS s1;
DROP SERVER IF EXISTS s2;
DROP SERVER IF EXISTS s3;
DROP SERVER IF EXISTS s4;
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;
DROP TABLE IF EXISTS t3;
DROP TABLE IF EXISTS t4;
DROP PROCEDURE IF EXISTS p1;
DROP PROCEDURE IF EXISTS p2;
DROP PROCEDURE IF EXISTS p3;
DROP PROCEDURE IF EXISTS p4;
mysql-test/r/rpl_name_const.result
→
mysql-test/
suite/rpl/
r/rpl_name_const.result
View file @
85cff45e
File moved
mysql-test/suite/rpl/t/rpl_killed_ddl-master.opt
0 → 100644
View file @
85cff45e
--debug=d,debug_lock_before_query_log_event
mysql-test/suite/rpl/t/rpl_killed_ddl.test
0 → 100644
View file @
85cff45e
# ==== Purpose ====
#
# This test check if DDL statements are correctly binlogged when the
# thread is killed
#
# ==== Method ====
#
# Start a DDL query and kill it, check if the error code of the binlog
# event is correct.
#
# DDL statements tested:
# CREATE/ALTER/RENAME/DROP DATABASE
# CREATE/ALTER/DROP EVENT
# CREATE/ALTER/DROP FUNCTION
# CREATE/ALTER/DROP PROCEDURE
# CREATE/ALTER/DROP SERVER
# CREATE/ALTER/RENAME/DROP TABLE
# CREATE/DROP TRIGGER
# CREATE/ALTER/DROP VIEW
#
# ==== Bugs =====
#
# BUG#37145
#
# ==== TODO ====
#
# There are some part of the test are temporarily disabled because of
# the following bugs, please enable then once they get fixed:
# - BUG#44041
# - BUG#43353
# - BUG#25705
# - BUG#44171
source
include
/
have_debug
.
inc
;
source
include
/
master
-
slave
.
inc
;
# Use the DBUG_SYNC_POINT to make sure the thread running the DDL is
# waiting before creating the query log event
let
$debug_lock
=
"debug_lock.before_query_log_event"
;
######## INITIALIZATION ########
disable_warnings
;
DROP
DATABASE
IF
EXISTS
d1
;
DROP
DATABASE
IF
EXISTS
d2
;
DROP
DATABASE
IF
EXISTS
d3
;
DROP
DATABASE
IF
EXISTS
d4
;
DROP
EVENT
IF
EXISTS
e1
;
DROP
EVENT
IF
EXISTS
e2
;
DROP
EVENT
IF
EXISTS
e3
;
DROP
EVENT
IF
EXISTS
e4
;
DROP
FUNCTION
IF
EXISTS
f1
;
DROP
FUNCTION
IF
EXISTS
f2
;
DROP
FUNCTION
IF
EXISTS
f3
;
DROP
FUNCTION
IF
EXISTS
f4
;
DROP
SERVER
IF
EXISTS
s1
;
DROP
SERVER
IF
EXISTS
s2
;
DROP
SERVER
IF
EXISTS
s3
;
DROP
SERVER
IF
EXISTS
s4
;
DROP
TABLE
IF
EXISTS
t1
;
DROP
TABLE
IF
EXISTS
t2
;
DROP
TABLE
IF
EXISTS
t3
;
DROP
TABLE
IF
EXISTS
t4
;
DROP
PROCEDURE
IF
EXISTS
p1
;
DROP
PROCEDURE
IF
EXISTS
p2
;
DROP
PROCEDURE
IF
EXISTS
p3
;
DROP
PROCEDURE
IF
EXISTS
p4
;
DROP
TRIGGER
IF
EXISTS
tr1
;
DROP
TRIGGER
IF
EXISTS
tr2
;
DROP
TRIGGER
IF
EXISTS
tr3
;
DROP
TRIGGER
IF
EXISTS
tr4
;
enable_warnings
;
CREATE
DATABASE
d1
;
CREATE
EVENT
e1
ON
SCHEDULE
AT
CURRENT_TIMESTAMP
+
INTERVAL
1
DAY
DO
INSERT
INTO
test
.
t1
VALUES
(
1
);
CREATE
FUNCTION
f1
()
RETURNS
INT
DETERMINISTIC
RETURN
1
;
DELIMITER
//;
CREATE
PROCEDURE
p1
(
OUT
rows
INT
)
BEGIN
SELECT
COUNT
(
*
)
INTO
rows
FROM
t1
;
END
;
//
DELIMITER
;
//
CREATE
SERVER
s1
FOREIGN
DATA
WRAPPER
mysql
OPTIONS
(
USER
'user1'
,
HOST
'192.168.1.106'
,
DATABASE
'test'
);
CREATE
TABLE
t1
(
a
int
);
CREATE
TABLE
t3
(
a
int
);
DELIMITER
//;
CREATE
TRIGGER
tr1
BEFORE
INSERT
ON
t1
FOR
EACH
ROW
BEGIN
DELETE
FROM
t4
WHERE
a
=
NEW
.
a
;
END
;
//
DELIMITER
;
//
CREATE
INDEX
i1
ON
t1
(
a
);
CREATE
VIEW
v1
AS
SELECT
a
FROM
t1
WHERE
a
<
100
;
sync_slave_with_master
;
connection
master1
;
let
$connection_name
=
master1
;
let
$connection_id
=
`SELECT CONNECTION_ID()`
;
connection
master
;
echo
[
on
master
];
# This will block the execution of a statement at the DBUG_SYNC_POINT
# with given lock name
if
(
`SELECT '$debug_lock' != ''`
)
{
disable_query_log
;
disable_result_log
;
eval
SELECT
IS_FREE_LOCK
(
$debug_lock
);
eval
SELECT
GET_LOCK
(
$debug_lock
,
10
);
eval
SELECT
IS_FREE_LOCK
(
$debug_lock
);
enable_query_log
;
enable_result_log
;
}
######## START TEST ########
connection
master1
;
echo
[
on
master1
];
disable_warnings
;
######## DATABASE ########
let
$diff_statement
=
SHOW
DATABASES
LIKE
'd%'
;
send
CREATE
DATABASE
d2
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
# Temporarily disabled, see BUG#44041, the ALTER DATABASE can affect the
# collation of other database on slave
#send ALTER DATABASE d1
# DEFAULT CHARACTER SET = 'utf8';
#source include/kill_query_and_diff_master_slave.inc;
send
DROP
DATABASE
d1
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
send
DROP
DATABASE
d2
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
######## EVENT ########
let
$diff_statement
=
SELECT
event_name
,
event_body
,
execute_at
FROM
information_schema
.
events
where
event_name
like
'e%'
;
send
CREATE
EVENT
e2
ON
SCHEDULE
AT
CURRENT_TIMESTAMP
+
INTERVAL
1
DAY
DO
INSERT
INTO
test
.
t1
VALUES
(
2
);
source
include
/
kill_query_and_diff_master_slave
.
inc
;
# Temporarily disabled because of BUG#44171, killing ALTER EVENT can
# crash the server
#send ALTER EVENT e1
# ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 DAY;
#source include/kill_query_and_diff_master_slave.inc;
send
DROP
EVENT
e1
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
send
DROP
EVENT
IF
EXISTS
e2
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
######## FUNCTION ########
let
$diff_statement
=
SHOW
FUNCTION
STATUS
LIKE
'f%'
;
send
CREATE
FUNCTION
f2
()
RETURNS
INT
DETERMINISTIC
RETURN
1
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
send
ALTER
FUNCTION
f1
SQL
SECURITY
INVOKER
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
# function f1 probably does not exist because the ALTER query was
# killed
send
DROP
FUNCTION
f1
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
# function f2 probably does not exist because the CREATE query was
# killed
#
# Temporarily disabled. Because of BUG#43353, KILL the query may
# result in function not found, and for 5.1, DROP statements will be
# logged if the function is not found on master, so the following DROP
# FUNCTION statement may be interrupted and not drop the function on
# master, but still get logged and executed on slave and cause
# inconsistence. Also disable the following DROP PROCEDURE IF EXITS
# below.
#send DROP FUNCTION IF EXISTS f2;
#source include/kill_query_and_diff_master_slave.inc;
######## PROCEDURE ########
let
$diff_statement
=
SHOW
PROCEDURE
STATUS
LIKE
'p%'
;
DELIMITER
//;
send
CREATE
PROCEDURE
p2
(
OUT
rows
INT
)
BEGIN
SELECT
COUNT
(
*
)
INTO
rows
FROM
t2
;
END
;
//
DELIMITER
;
//
source
include
/
kill_query_and_diff_master_slave
.
inc
;
send
ALTER
PROCEDURE
p1
SQL
SECURITY
INVOKER
COMMENT
'return rows of table t1'
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
send
DROP
PROCEDURE
p1
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
# Temporarily disabled, see comment above for DROP FUNCTION IF EXISTS
#send DROP PROCEDURE IF EXISTS p2;
#source include/kill_query_and_diff_master_slave.inc;
######## TABLE ########
let
$diff_statement
=
SHOW
TABLES
LIKE
't%'
;
send
CREATE
TABLE
t2
(
b
int
);
source
include
/
kill_query_and_diff_master_slave
.
inc
;
send
ALTER
TABLE
t1
ADD
(
d
int
);
source
include
/
kill_query_and_diff_master_slave
.
inc
;
send
RENAME
TABLE
t3
TO
t4
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
######## INDEX ########
let
$diff_statement
=
SHOW
INDEX
FROM
t1
;
send
CREATE
INDEX
i2
on
t1
(
a
);
source
include
/
kill_query_and_diff_master_slave
.
inc
;
send
DROP
INDEX
i1
on
t1
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
######## SERVER ########
# Tempoarily disabled, see bug#25705
# let $diff_statement= SELECT * FROM mysql.server WHERE name like 's%';
# send CREATE SERVER s2
# FOREIGN DATA WRAPPER mysql
# OPTIONS (USER 'user2', HOST '192.168.1.108', DATABASE 'test');
# source include/kill_query_and_diff_master_slave.inc;
# send ALTER SERVER s1
# OPTIONS (DATABASE 'test1');
# source include/kill_query_and_diff_master_slave.inc;
# send DROP SERVER s1;
# source include/kill_query_and_diff_master_slave.inc;
# send DROP SERVER IF EXIST s1;
# source include/kill_query_and_diff_master_slave.inc;
######## TRIGGER ########
let
$diff_statement
=
SHOW
TRIGGERS
LIKE
'v%'
;
DELIMITER
//;
send
CREATE
TRIGGER
tr2
BEFORE
INSERT
ON
t4
FOR
EACH
ROW
BEGIN
DELETE
FROM
t1
WHERE
a
=
NEW
.
a
;
END
;
//
DELIMITER
;
//
source
include
/
kill_query_and_diff_master_slave
.
inc
;
send
DROP
TRIGGER
tr1
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
send
DROP
TRIGGER
IF
EXISTS
tr2
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
######## VIEW ########
let
$diff_statement
=
SHOW
TABLES
LIKE
'v%'
;
send
CREATE
VIEW
v2
AS
SELECT
a
FROM
t1
WHERE
a
>
100
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
send
DROP
VIEW
v1
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
send
DROP
VIEW
IF
EXISTS
v2
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
######## DROP TABLE ########
let
$diff_statement
=
SHOW
TABLES
LIKE
't%'
;
send
DROP
TABLE
t1
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
send
DROP
TABLE
IF
EXISTS
t2
;
source
include
/
kill_query_and_diff_master_slave
.
inc
;
######## CLEAN UP ########
connection
master
;
# The DROP statements above are killed during the process, so they
# does not make sure the objects are dropped.
disable_warnings
;
DROP
DATABASE
IF
EXISTS
d1
;
DROP
DATABASE
IF
EXISTS
d2
;
DROP
DATABASE
IF
EXISTS
d3
;
DROP
DATABASE
IF
EXISTS
d4
;
DROP
EVENT
IF
EXISTS
e1
;
DROP
EVENT
IF
EXISTS
e2
;
DROP
EVENT
IF
EXISTS
e3
;
DROP
EVENT
IF
EXISTS
e4
;
DROP
FUNCTION
IF
EXISTS
f1
;
DROP
FUNCTION
IF
EXISTS
f2
;
DROP
FUNCTION
IF
EXISTS
f3
;
DROP
FUNCTION
IF
EXISTS
f4
;
DROP
SERVER
IF
EXISTS
s1
;
DROP
SERVER
IF
EXISTS
s2
;
DROP
SERVER
IF
EXISTS
s3
;
DROP
SERVER
IF
EXISTS
s4
;
DROP
TABLE
IF
EXISTS
t1
;
DROP
TABLE
IF
EXISTS
t2
;
DROP
TABLE
IF
EXISTS
t3
;
DROP
TABLE
IF
EXISTS
t4
;
DROP
PROCEDURE
IF
EXISTS
p1
;
DROP
PROCEDURE
IF
EXISTS
p2
;
DROP
PROCEDURE
IF
EXISTS
p3
;
DROP
PROCEDURE
IF
EXISTS
p4
;
enable_warnings
;
mysql-test/t/rpl_name_const.test
→
mysql-test/
suite/rpl/
t/rpl_name_const.test
View file @
85cff45e
File moved
sql/sp.cc
View file @
85cff45e
...
@@ -940,7 +940,8 @@ sp_create_routine(THD *thd, int type, sp_head *sp)
...
@@ -940,7 +940,8 @@ sp_create_routine(THD *thd, int type, sp_head *sp)
thd
->
variables
.
sql_mode
=
saved_mode
;
thd
->
variables
.
sql_mode
=
saved_mode
;
/* Such a statement can always go directly to binlog, no trans cache */
/* Such a statement can always go directly to binlog, no trans cache */
thd
->
binlog_query
(
THD
::
MYSQL_QUERY_TYPE
,
thd
->
binlog_query
(
THD
::
MYSQL_QUERY_TYPE
,
log_query
.
c_ptr
(),
log_query
.
length
(),
FALSE
,
FALSE
);
log_query
.
c_ptr
(),
log_query
.
length
(),
FALSE
,
FALSE
,
THD
::
NOT_KILLED
);
thd
->
variables
.
sql_mode
=
0
;
thd
->
variables
.
sql_mode
=
0
;
}
}
...
...
sql/sql_acl.cc
View file @
85cff45e
...
@@ -1647,7 +1647,8 @@ bool change_password(THD *thd, const char *host, const char *user,
...
@@ -1647,7 +1647,8 @@ bool change_password(THD *thd, const char *host, const char *user,
acl_user
->
host
.
hostname
?
acl_user
->
host
.
hostname
:
""
,
acl_user
->
host
.
hostname
?
acl_user
->
host
.
hostname
:
""
,
new_password
));
new_password
));
thd
->
clear_error
();
thd
->
clear_error
();
thd
->
binlog_query
(
THD
::
MYSQL_QUERY_TYPE
,
buff
,
query_length
,
FALSE
,
FALSE
);
thd
->
binlog_query
(
THD
::
MYSQL_QUERY_TYPE
,
buff
,
query_length
,
FALSE
,
FALSE
,
THD
::
NOT_KILLED
);
}
}
end:
end:
close_thread_tables
(
thd
);
close_thread_tables
(
thd
);
...
...
sql/sql_base.cc
View file @
85cff45e
...
@@ -1541,19 +1541,8 @@ void close_temporary_tables(THD *thd)
...
@@ -1541,19 +1541,8 @@ void close_temporary_tables(THD *thd)
thd
->
variables
.
character_set_client
=
system_charset_info
;
thd
->
variables
.
character_set_client
=
system_charset_info
;
Query_log_event
qinfo
(
thd
,
s_query
.
ptr
(),
Query_log_event
qinfo
(
thd
,
s_query
.
ptr
(),
s_query
.
length
()
-
1
/* to remove trailing ',' */
,
s_query
.
length
()
-
1
/* to remove trailing ',' */
,
0
,
FALSE
);
0
,
FALSE
,
THD
::
NOT_KILLED
);
thd
->
variables
.
character_set_client
=
cs_save
;
thd
->
variables
.
character_set_client
=
cs_save
;
/*
Imagine the thread had created a temp table, then was doing a
SELECT, and the SELECT was killed. Then it's not clever to
mark the statement above as "killed", because it's not really
a statement updating data, and there are 99.99% chances it
will succeed on slave. If a real update (one updating a
persistent table) was killed on the master, then this real
update will be logged with error_code=killed, rightfully
causing the slave to stop.
*/
qinfo
.
error_code
=
0
;
mysql_bin_log
.
write
(
&
qinfo
);
mysql_bin_log
.
write
(
&
qinfo
);
thd
->
variables
.
pseudo_thread_id
=
save_pseudo_thread_id
;
thd
->
variables
.
pseudo_thread_id
=
save_pseudo_thread_id
;
}
}
...
@@ -4017,7 +4006,8 @@ retry:
...
@@ -4017,7 +4006,8 @@ retry:
end
=
strxmov
(
strmov
(
query
,
"DELETE FROM `"
),
end
=
strxmov
(
strmov
(
query
,
"DELETE FROM `"
),
share
->
db
.
str
,
"`.`"
,
share
->
table_name
.
str
,
"`"
,
NullS
);
share
->
db
.
str
,
"`.`"
,
share
->
table_name
.
str
,
"`"
,
NullS
);
thd
->
binlog_query
(
THD
::
STMT_QUERY_TYPE
,
thd
->
binlog_query
(
THD
::
STMT_QUERY_TYPE
,
query
,
(
ulong
)(
end
-
query
),
FALSE
,
FALSE
);
query
,
(
ulong
)(
end
-
query
),
FALSE
,
FALSE
,
THD
::
NOT_KILLED
);
my_free
(
query
,
MYF
(
0
));
my_free
(
query
,
MYF
(
0
));
}
}
else
else
...
...
sql/sql_db.cc
View file @
85cff45e
...
@@ -181,7 +181,7 @@ uchar* dboptions_get_key(my_dbopt_t *opt, size_t *length,
...
@@ -181,7 +181,7 @@ uchar* dboptions_get_key(my_dbopt_t *opt, size_t *length,
static
inline
void
write_to_binlog
(
THD
*
thd
,
char
*
query
,
uint
q_len
,
static
inline
void
write_to_binlog
(
THD
*
thd
,
char
*
query
,
uint
q_len
,
char
*
db
,
uint
db_len
)
char
*
db
,
uint
db_len
)
{
{
Query_log_event
qinfo
(
thd
,
query
,
q_len
,
0
,
0
);
Query_log_event
qinfo
(
thd
,
query
,
q_len
,
0
,
0
,
THD
::
NOT_KILLED
);
qinfo
.
error_code
=
0
;
qinfo
.
error_code
=
0
;
qinfo
.
db
=
db
;
qinfo
.
db
=
db
;
qinfo
.
db_len
=
db_len
;
qinfo
.
db_len
=
db_len
;
...
@@ -724,7 +724,7 @@ int mysql_create_db(THD *thd, char *db, HA_CREATE_INFO *create_info,
...
@@ -724,7 +724,7 @@ int mysql_create_db(THD *thd, char *db, HA_CREATE_INFO *create_info,
if
(
mysql_bin_log
.
is_open
())
if
(
mysql_bin_log
.
is_open
())
{
{
Query_log_event
qinfo
(
thd
,
query
,
query_length
,
0
,
Query_log_event
qinfo
(
thd
,
query
,
query_length
,
0
,
/* suppress_use */
TRUE
);
/* suppress_use */
TRUE
,
THD
::
NOT_KILLED
);
/*
/*
Write should use the database being created as the "current
Write should use the database being created as the "current
...
@@ -812,7 +812,7 @@ bool mysql_alter_db(THD *thd, const char *db, HA_CREATE_INFO *create_info)
...
@@ -812,7 +812,7 @@ bool mysql_alter_db(THD *thd, const char *db, HA_CREATE_INFO *create_info)
if
(
mysql_bin_log
.
is_open
())
if
(
mysql_bin_log
.
is_open
())
{
{
Query_log_event
qinfo
(
thd
,
thd
->
query
,
thd
->
query_length
,
0
,
Query_log_event
qinfo
(
thd
,
thd
->
query
,
thd
->
query_length
,
0
,
/* suppress_use */
TRUE
);
/* suppress_use */
TRUE
,
THD
::
NOT_KILLED
);
/*
/*
Write should use the database being created as the "current
Write should use the database being created as the "current
...
@@ -959,7 +959,7 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
...
@@ -959,7 +959,7 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
if
(
mysql_bin_log
.
is_open
())
if
(
mysql_bin_log
.
is_open
())
{
{
Query_log_event
qinfo
(
thd
,
query
,
query_length
,
0
,
Query_log_event
qinfo
(
thd
,
query
,
query_length
,
0
,
/* suppress_use */
TRUE
);
/* suppress_use */
TRUE
,
THD
::
NOT_KILLED
);
/*
/*
Write should use the database being created as the "current
Write should use the database being created as the "current
database" and not the threads current database, which is the
database" and not the threads current database, which is the
...
@@ -1958,7 +1958,8 @@ bool mysql_upgrade_db(THD *thd, LEX_STRING *old_db)
...
@@ -1958,7 +1958,8 @@ bool mysql_upgrade_db(THD *thd, LEX_STRING *old_db)
/* Step8: logging */
/* Step8: logging */
if
(
mysql_bin_log
.
is_open
())
if
(
mysql_bin_log
.
is_open
())
{
{
Query_log_event
qinfo
(
thd
,
thd
->
query
,
thd
->
query_length
,
0
,
TRUE
);
Query_log_event
qinfo
(
thd
,
thd
->
query
,
thd
->
query_length
,
0
,
TRUE
,
THD
::
NOT_KILLED
);
thd
->
clear_error
();
thd
->
clear_error
();
mysql_bin_log
.
write
(
&
qinfo
);
mysql_bin_log
.
write
(
&
qinfo
);
}
}
...
...
sql/sql_table.cc
View file @
85cff45e
...
@@ -1463,7 +1463,7 @@ void write_bin_log(THD *thd, bool clear_error,
...
@@ -1463,7 +1463,7 @@ void write_bin_log(THD *thd, bool clear_error,
if
(
clear_error
)
if
(
clear_error
)
thd
->
clear_error
();
thd
->
clear_error
();
thd
->
binlog_query
(
THD
::
STMT_QUERY_TYPE
,
thd
->
binlog_query
(
THD
::
STMT_QUERY_TYPE
,
query
,
query_length
,
FALSE
,
FALSE
);
query
,
query_length
,
FALSE
,
FALSE
,
THD
::
NOT_KILLED
);
}
}
}
}
...
@@ -6165,7 +6165,8 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
...
@@ -6165,7 +6165,8 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
if
(
mysql_bin_log
.
is_open
())
if
(
mysql_bin_log
.
is_open
())
{
{
thd
->
clear_error
();
thd
->
clear_error
();
Query_log_event
qinfo
(
thd
,
thd
->
query
,
thd
->
query_length
,
0
,
FALSE
);
Query_log_event
qinfo
(
thd
,
thd
->
query
,
thd
->
query_length
,
0
,
FALSE
,
THD
::
NOT_KILLED
);
mysql_bin_log
.
write
(
&
qinfo
);
mysql_bin_log
.
write
(
&
qinfo
);
}
}
my_ok
(
thd
);
my_ok
(
thd
);
...
...
sql/sql_view.cc
View file @
85cff45e
...
@@ -662,7 +662,7 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views,
...
@@ -662,7 +662,7 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views,
buff
.
append
(
views
->
source
.
str
,
views
->
source
.
length
);
buff
.
append
(
views
->
source
.
str
,
views
->
source
.
length
);
thd
->
binlog_query
(
THD
::
STMT_QUERY_TYPE
,
thd
->
binlog_query
(
THD
::
STMT_QUERY_TYPE
,
buff
.
ptr
(),
buff
.
length
(),
FALSE
,
FALSE
);
buff
.
ptr
(),
buff
.
length
(),
FALSE
,
FALSE
,
THD
::
NOT_KILLED
);
}
}
VOID
(
pthread_mutex_unlock
(
&
LOCK_open
));
VOID
(
pthread_mutex_unlock
(
&
LOCK_open
));
...
...
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