summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/extra/rpl_tests/rpl_current_user.test127
-rw-r--r--mysql-test/suite/rpl/r/rpl_binlog_grant.result42
-rw-r--r--mysql-test/suite/rpl/r/rpl_events.result42
-rw-r--r--mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_sp.result16
-rw-r--r--mysql-test/suite/rpl/r/rpl_user.result1755
-rw-r--r--mysql-test/suite/rpl/t/rpl_binlog_grant.test8
-rw-r--r--mysql-test/suite/rpl/t/rpl_events.test82
-rw-r--r--mysql-test/suite/rpl/t/rpl_user.test83
9 files changed, 2114 insertions, 45 deletions
diff --git a/mysql-test/extra/rpl_tests/rpl_current_user.test b/mysql-test/extra/rpl_tests/rpl_current_user.test
new file mode 100644
index 00000000000..7ec38e0c151
--- /dev/null
+++ b/mysql-test/extra/rpl_tests/rpl_current_user.test
@@ -0,0 +1,127 @@
+--let $count=1
+connection master;
+
+if (`SELECT '$diff_table' = ''`)
+{
+ let $diff_table= mysql.user;
+}
+
+--echo
+--echo
+--echo
+--echo TEST STATEMENT: '$statement'
+--echo --------------------------------------------------------------------------
+
+if (`SELECT '$diff_columns' = ''`)
+{
+ eval CREATE VIEW test.bug48321_v1 AS SELECT user FROM $diff_table
+ WHERE user LIKE 'bug48321%';
+}
+
+if (`SELECT '$diff_columns' <> ''`)
+{
+ eval CREATE VIEW test.bug48321_v1 AS SELECT user, $diff_columns
+ FROM $diff_table WHERE user LIKE 'bug48321%';
+}
+
+while (`SELECT $count < 6`)
+{
+ --echo
+ --echo TEST STATEMENT: '$statement'
+ --echo CASE $count:
+ --echo -------
+
+ let $user2= 'bug48321_2'@'localhost';
+ let $user3= 'bug48321_3'@'localhost';
+
+ let $user1= CURRENT_USER();
+ if (`SELECT '$action'='RENAME'`)
+ {
+ let $user1= $user1 TO 'bug48321_4'@'localhost';
+ let $user2= $user2 TO 'bug48321_5'@'localhost';
+ let $user3= $user3 TO 'bug48321_6'@'localhost';
+ }
+
+ if (`SELECT '$action'='GRANT'`)
+ {
+ let $user1= $user1 IDENTIFIED BY 'user1';
+ let $user3= $user3 IDENTIFIED BY '';
+ }
+
+ if (`SELECT $count=1`)
+ {
+ --echo # Only CURRENT_USER() in the user list of the test statement.
+ let $users_list= $user1;
+ }
+
+ if (`SELECT $count=2`)
+ {
+ --echo # Two users are in the test statement, CURRENT_USER is the first one.
+ let $users_list= $user1, $user2;
+ }
+
+ if (`SELECT $count=3`)
+ {
+ --echo # Two users are in the test statement, CURRENT_USER is the last one.
+ let $users_list= $user2, $user1;
+ }
+
+ if (`SELECT $count=4`)
+ {
+ --echo # Three users are in the test statement, CURRENT_USER is the second one.
+ let $users_list= $user2, $user1, $user3;
+ }
+
+ if (`SELECT $count=5`)
+ {
+ --echo # CURRENT_USER is not in the test statement.
+ let $users_list= $user2, $user3;
+ }
+
+ --echo users_list= $users_list
+ --echo
+ --echo # Connect to master with user1, so user1 always is the current user,
+ --echo # when test statement is runing.
+ eval GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+ eval CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+ if (`SELECT '$action'='REVOKE'`)
+ {
+ --echo
+ --echo # Grant some privileges to users at first when testing
+ --echo # 'REVOKE ...' statement.
+ eval GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+ 'bug48321_3'@'localhost' WITH GRANT OPTION;
+ eval GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+ 'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+ }
+
+ connect (conn1, 127.0.0.1, 'bug48321_1'@'localhost',,);
+ connection conn1;
+ --echo
+ let $temp= `SELECT "$statement"`;
+ eval $temp;
+ --echo
+
+ disconnect conn1;
+
+ connection master;
+ sync_slave_with_master;
+
+ connection master;
+ let $diff_table_1= master:test.bug48321_v1;
+ let $diff_table_2= slave:test.bug48321_v1;
+ source include/diff_tables.inc;
+ --echo
+
+ --echo # Delete all bug48321% users
+ connection master;
+ DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+ DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+ FLUSH PRIVILEGES;
+
+ inc $count;
+}
+DROP VIEW test.bug48321_v1;
diff --git a/mysql-test/suite/rpl/r/rpl_binlog_grant.result b/mysql-test/suite/rpl/r/rpl_binlog_grant.result
index 4a789f361c6..adf2175f3bb 100644
--- a/mysql-test/suite/rpl/r/rpl_binlog_grant.result
+++ b/mysql-test/suite/rpl/r/rpl_binlog_grant.result
@@ -17,16 +17,15 @@ show grants for x@y;
Grants for x@y
GRANT USAGE ON *.* TO 'x'@'y'
GRANT SELECT ON `d1`.`t` TO 'x'@'y'
-show binlog events;
+show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 106 Server ver: VERSION, Binlog ver: 4
-master-bin.000001 106 Query 1 193 drop database if exists d1
-master-bin.000001 193 Query 1 272 create database d1
-master-bin.000001 272 Query 1 370 use `d1`; create table t (s1 int) engine=innodb
-master-bin.000001 370 Query 1 436 BEGIN
-master-bin.000001 436 Query 1 521 use `d1`; insert into t values (1)
-master-bin.000001 521 Xid 1 548 COMMIT /* XID */
-master-bin.000001 548 Query 1 633 use `d1`; grant select on t to x@y
+master-bin.000001 # Query # # drop database if exists d1
+master-bin.000001 # Query # # create database d1
+master-bin.000001 # Query # # use `d1`; create table t (s1 int) engine=innodb
+master-bin.000001 # Query # # BEGIN
+master-bin.000001 # Query # # use `d1`; insert into t values (1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `d1`; grant select on t to 'x'@'y'
start transaction;
insert into t values (2);
revoke select on t from x@y;
@@ -38,19 +37,18 @@ s1
show grants for x@y;
Grants for x@y
GRANT USAGE ON *.* TO 'x'@'y'
-show binlog events;
+show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 106 Server ver: VERSION, Binlog ver: 4
-master-bin.000001 106 Query 1 193 drop database if exists d1
-master-bin.000001 193 Query 1 272 create database d1
-master-bin.000001 272 Query 1 370 use `d1`; create table t (s1 int) engine=innodb
-master-bin.000001 370 Query 1 436 BEGIN
-master-bin.000001 436 Query 1 521 use `d1`; insert into t values (1)
-master-bin.000001 521 Xid 1 548 COMMIT /* XID */
-master-bin.000001 548 Query 1 633 use `d1`; grant select on t to x@y
-master-bin.000001 633 Query 1 699 BEGIN
-master-bin.000001 699 Query 1 784 use `d1`; insert into t values (2)
-master-bin.000001 784 Xid 1 811 COMMIT /* XID */
-master-bin.000001 811 Query 1 899 use `d1`; revoke select on t from x@y
+master-bin.000001 # Query # # drop database if exists d1
+master-bin.000001 # Query # # create database d1
+master-bin.000001 # Query # # use `d1`; create table t (s1 int) engine=innodb
+master-bin.000001 # Query # # BEGIN
+master-bin.000001 # Query # # use `d1`; insert into t values (1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `d1`; grant select on t to 'x'@'y'
+master-bin.000001 # Query # # BEGIN
+master-bin.000001 # Query # # use `d1`; insert into t values (2)
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `d1`; revoke select on t from 'x'@'y'
drop user x@y;
drop database d1;
diff --git a/mysql-test/suite/rpl/r/rpl_events.result b/mysql-test/suite/rpl/r/rpl_events.result
index b3fd85d7e28..206ec52718c 100644
--- a/mysql-test/suite/rpl/r/rpl_events.result
+++ b/mysql-test/suite/rpl/r/rpl_events.result
@@ -251,3 +251,45 @@ DROP EVENT event44331_1;
DROP EVENT event44331_2;
DROP EVENT event44331_3;
DROP EVENT event44331_4;
+DROP VIEW IF EXISTS events_view;
+DROP EVENT IF EXISTS event48321_1;
+DROP EVENT IF EXISTS event48321_2;
+DROP EVENT IF EXISTS event48321_3;
+DROP EVENT IF EXISTS event48321_4;
+CREATE VIEW events_view AS
+SELECT EVENT_SCHEMA, EVENT_NAME, DEFINER FROM INFORMATION_SCHEMA.EVENTS
+WHERE EVENT_NAME LIKE 'event48321%';
+CREATE DEFINER=CURRENT_USER() /*!50000 EVENT event48321_1 */
+ON SCHEDULE AT CURRENT_TIMESTAMP
+ON COMPLETION PRESERVE DISABLE
+DO SELECT 48321 as BUG;
+CREATE DEFINER=CURRENT_USER() EVENT event48321_2
+ON SCHEDULE AT CURRENT_TIMESTAMP
+ON COMPLETION PRESERVE DISABLE
+DO SELECT 48321 as BUG;
+CREATE /*!50000 DEFINER=CURRENT_USER() */ EVENT event48321_3
+ON SCHEDULE AT CURRENT_TIMESTAMP
+ON COMPLETION PRESERVE DISABLE
+DO SELECT 48321 as BUG;
+Comparing tables master:test.events_view and slave:test.events_view
+ALTER DEFINER=CURRENT_USER() EVENT event48321_1 RENAME TO event48321_4;
+ALTER DEFINER=CURRENT_USER() EVENT event48321_2
+ON SCHEDULE AT CURRENT_TIMESTAMP
+ON COMPLETION PRESERVE DISABLE
+DO SELECT 48321 as BUG;
+ALTER /*!50000 DEFINER=CURRENT_USER() */ EVENT event48321_3
+ON SCHEDULE AT CURRENT_TIMESTAMP
+ON COMPLETION PRESERVE DISABLE
+DO SELECT 48321 as BUG;
+Comparing tables master:test.events_view and slave:test.events_view
+ALTER /*!50000 DEFINER=CURRENT_USER() */ EVENT event48321_3
+ON SCHEDULE AT CURRENT_TIMESTAMP
+ON COMPLETION PRESERVE DISABLE
+DO SELECT 48321 as BUG; ALTER EVENT event48321_2 ENABLE |
+Comparing tables master:test.events_view and slave:test.events_view
+ALTER EVENT event48321_3 ENABLE;
+Comparing tables master:test.events_view and slave:test.events_view
+DROP EVENT event48321_4;
+DROP EVENT event48321_2;
+DROP EVENT event48321_3;
+DROP VIEW events_view;
diff --git a/mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result b/mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result
index fbfebbaa590..74ebb3be948 100644
--- a/mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result
+++ b/mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result
@@ -750,7 +750,7 @@ test_rpl e2 root@localhost SYSTEM RECURRING NULL 1 # # NULL ENABLED 1 latin1 lat
USE test_rpl;
SHOW EVENTS;
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
-test_rpl e2 @ SYSTEM RECURRING NULL 1 # # NULL SLAVESIDE_DISABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci
+test_rpl e2 root@localhost SYSTEM RECURRING NULL 1 # # NULL SLAVESIDE_DISABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci
==========MASTER==========
SELECT COUNT(*) FROM t1;
COUNT(*)
@@ -1079,7 +1079,7 @@ master-bin.000001 # Query 1 # BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(1, 'test1')
master-bin.000001 # Xid 1 # #
master-bin.000001 # Query 1 # use `test_rpl`; CREATE DEFINER=`root`@`localhost` EVENT e1 ON SCHEDULE EVERY '1' SECOND COMMENT 'e_second_comment' DO DELETE FROM t1
-master-bin.000001 # Query 1 # use `test_rpl`; ALTER EVENT e1 RENAME TO e2
+master-bin.000001 # Query 1 # use `test_rpl`; ALTER DEFINER=`root`@`localhost` EVENT e1 RENAME TO e2
master-bin.000001 # Query 1 # use `test_rpl`; DROP EVENT e2
master-bin.000001 # Query 1 # BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
diff --git a/mysql-test/suite/rpl/r/rpl_sp.result b/mysql-test/suite/rpl/r/rpl_sp.result
index 7fedaf4c1ef..02a5f33c843 100644
--- a/mysql-test/suite/rpl/r/rpl_sp.result
+++ b/mysql-test/suite/rpl/r/rpl_sp.result
@@ -433,9 +433,9 @@ master-bin.000001 # Query 1 # use `mysqltest1`; create table t2 like t1
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo3`()
DETERMINISTIC
insert into t1 values (15)
-master-bin.000001 # Query 1 # use `mysqltest1`; grant CREATE ROUTINE, EXECUTE on mysqltest1.* to "zedjzlcsjhd"@127.0.0.1
-master-bin.000001 # Query 1 # use `mysqltest1`; grant SELECT on mysqltest1.t1 to "zedjzlcsjhd"@127.0.0.1
-master-bin.000001 # Query 1 # use `mysqltest1`; grant SELECT, INSERT on mysqltest1.t2 to "zedjzlcsjhd"@127.0.0.1
+master-bin.000001 # Query 1 # use `mysqltest1`; grant CREATE ROUTINE, EXECUTE on mysqltest1.* to 'zedjzlcsjhd'@'127.0.0.1'
+master-bin.000001 # Query 1 # use `mysqltest1`; grant SELECT on mysqltest1.t1 to 'zedjzlcsjhd'@'127.0.0.1'
+master-bin.000001 # Query 1 # use `mysqltest1`; grant SELECT, INSERT on mysqltest1.t2 to 'zedjzlcsjhd'@'127.0.0.1'
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` PROCEDURE `foo4`()
DETERMINISTIC
begin
@@ -510,7 +510,7 @@ select * from t1
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
master-bin.000001 # Query 1 # drop database mysqltest1
-master-bin.000001 # Query 1 # drop user "zedjzlcsjhd"@127.0.0.1
+master-bin.000001 # Query 1 # DROP USER 'zedjzlcsjhd'@'127.0.0.1'
master-bin.000001 # Query 1 # use `test`; drop function if exists f1
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
READS SQL DATA
@@ -675,13 +675,13 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `foo3`()
insert into t1 values (15)
/*!*/;
SET TIMESTAMP=t/*!*/;
-grant CREATE ROUTINE, EXECUTE on mysqltest1.* to "zedjzlcsjhd"@127.0.0.1
+grant CREATE ROUTINE, EXECUTE on mysqltest1.* to 'zedjzlcsjhd'@'127.0.0.1'
/*!*/;
SET TIMESTAMP=t/*!*/;
-grant SELECT on mysqltest1.t1 to "zedjzlcsjhd"@127.0.0.1
+grant SELECT on mysqltest1.t1 to 'zedjzlcsjhd'@'127.0.0.1'
/*!*/;
SET TIMESTAMP=t/*!*/;
-grant SELECT, INSERT on mysqltest1.t2 to "zedjzlcsjhd"@127.0.0.1
+grant SELECT, INSERT on mysqltest1.t2 to 'zedjzlcsjhd'@'127.0.0.1'
/*!*/;
SET TIMESTAMP=t/*!*/;
CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` PROCEDURE `foo4`()
@@ -842,7 +842,7 @@ SET TIMESTAMP=t/*!*/;
drop database mysqltest1
/*!*/;
SET TIMESTAMP=t/*!*/;
-drop user "zedjzlcsjhd"@127.0.0.1
+DROP USER 'zedjzlcsjhd'@'127.0.0.1'
/*!*/;
use test/*!*/;
SET TIMESTAMP=t/*!*/;
diff --git a/mysql-test/suite/rpl/r/rpl_user.result b/mysql-test/suite/rpl/r/rpl_user.result
index a98e7e9ca55..b1f1d73cf86 100644
--- a/mysql-test/suite/rpl/r/rpl_user.result
+++ b/mysql-test/suite/rpl/r/rpl_user.result
@@ -39,7 +39,1754 @@ show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # use `test`; create user 'foo'@'fakehost'
master-bin.000001 # Query # # use `test`; create user 'foo'@'fakehost', 'bar'@'fakehost'
-master-bin.000001 # Query # # use `test`; rename user 'foo'@'fakehost' to 'foofoo'@'fakehost'
-master-bin.000001 # Query # # use `test`; rename user 'not_exist_user1'@'fakehost' to 'foobar'@'fakehost', 'bar'@'fakehost' to 'barbar'@'fakehost'
-master-bin.000001 # Query # # use `test`; drop user 'foofoo'@'fakehost'
-master-bin.000001 # Query # # use `test`; drop user 'not_exist_user1'@'fakehost', 'barbar'@'fakehost'
+master-bin.000001 # Query # # use `test`; RENAME USER 'foo'@'fakehost' TO 'foofoo'@'fakehost'
+master-bin.000001 # Query # # use `test`; RENAME USER 'not_exist_user1'@'fakehost' TO 'foobar'@'fakehost', 'bar'@'fakehost' TO 'barbar'@'fakehost'
+master-bin.000001 # Query # # use `test`; DROP USER 'foofoo'@'fakehost'
+master-bin.000001 # Query # # use `test`; DROP USER 'not_exist_user1'@'fakehost', 'barbar'@'fakehost'
+
+
+
+TEST STATEMENT: 'RENAME USER $users_list'
+--------------------------------------------------------------------------
+CREATE VIEW test.bug48321_v1 AS SELECT user FROM mysql.user
+WHERE user LIKE 'bug48321%';
+
+TEST STATEMENT: 'RENAME USER $users_list'
+CASE 1:
+-------
+# Only CURRENT_USER() in the user list of the test statement.
+users_list= CURRENT_USER() TO 'bug48321_4'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+RENAME USER CURRENT_USER() TO 'bug48321_4'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'RENAME USER $users_list'
+CASE 2:
+-------
+# Two users are in the test statement, CURRENT_USER is the first one.
+users_list= CURRENT_USER() TO 'bug48321_4'@'localhost', 'bug48321_2'@'localhost' TO 'bug48321_5'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+RENAME USER CURRENT_USER() TO 'bug48321_4'@'localhost', 'bug48321_2'@'localhost' TO 'bug48321_5'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'RENAME USER $users_list'
+CASE 3:
+-------
+# Two users are in the test statement, CURRENT_USER is the last one.
+users_list= 'bug48321_2'@'localhost' TO 'bug48321_5'@'localhost', CURRENT_USER() TO 'bug48321_4'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+RENAME USER 'bug48321_2'@'localhost' TO 'bug48321_5'@'localhost', CURRENT_USER() TO 'bug48321_4'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'RENAME USER $users_list'
+CASE 4:
+-------
+# Three users are in the test statement, CURRENT_USER is the second one.
+users_list= 'bug48321_2'@'localhost' TO 'bug48321_5'@'localhost', CURRENT_USER() TO 'bug48321_4'@'localhost', 'bug48321_3'@'localhost' TO 'bug48321_6'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+RENAME USER 'bug48321_2'@'localhost' TO 'bug48321_5'@'localhost', CURRENT_USER() TO 'bug48321_4'@'localhost', 'bug48321_3'@'localhost' TO 'bug48321_6'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'RENAME USER $users_list'
+CASE 5:
+-------
+# CURRENT_USER is not in the test statement.
+users_list= 'bug48321_2'@'localhost' TO 'bug48321_5'@'localhost', 'bug48321_3'@'localhost' TO 'bug48321_6'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+RENAME USER 'bug48321_2'@'localhost' TO 'bug48321_5'@'localhost', 'bug48321_3'@'localhost' TO 'bug48321_6'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+DROP VIEW test.bug48321_v1;
+
+
+
+TEST STATEMENT: 'DROP USER $users_list'
+--------------------------------------------------------------------------
+CREATE VIEW test.bug48321_v1 AS SELECT user FROM mysql.user
+WHERE user LIKE 'bug48321%';
+
+TEST STATEMENT: 'DROP USER $users_list'
+CASE 1:
+-------
+# Only CURRENT_USER() in the user list of the test statement.
+users_list= CURRENT_USER()
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+DROP USER CURRENT_USER();
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'DROP USER $users_list'
+CASE 2:
+-------
+# Two users are in the test statement, CURRENT_USER is the first one.
+users_list= CURRENT_USER(), 'bug48321_2'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+DROP USER CURRENT_USER(), 'bug48321_2'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'DROP USER $users_list'
+CASE 3:
+-------
+# Two users are in the test statement, CURRENT_USER is the last one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER()
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+DROP USER 'bug48321_2'@'localhost', CURRENT_USER();
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'DROP USER $users_list'
+CASE 4:
+-------
+# Three users are in the test statement, CURRENT_USER is the second one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER(), 'bug48321_3'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+DROP USER 'bug48321_2'@'localhost', CURRENT_USER(), 'bug48321_3'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'DROP USER $users_list'
+CASE 5:
+-------
+# CURRENT_USER is not in the test statement.
+users_list= 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+DROP USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+DROP VIEW test.bug48321_v1;
+DROP PROCEDURE IF EXISTS f1;
+CREATE PROCEDURE p1() SELECT 1;
+
+
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM $users_list'
+--------------------------------------------------------------------------
+CREATE VIEW test.bug48321_v1 AS SELECT user, Select_priv, Update_priv, Create_priv, Drop_priv, Grant_priv
+FROM mysql.user WHERE user LIKE 'bug48321%';
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM $users_list'
+CASE 1:
+-------
+# Only CURRENT_USER() in the user list of the test statement.
+users_list= CURRENT_USER()
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM CURRENT_USER();
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM $users_list'
+CASE 2:
+-------
+# Two users are in the test statement, CURRENT_USER is the first one.
+users_list= CURRENT_USER(), 'bug48321_2'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM CURRENT_USER(), 'bug48321_2'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM $users_list'
+CASE 3:
+-------
+# Two users are in the test statement, CURRENT_USER is the last one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER()
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'bug48321_2'@'localhost', CURRENT_USER();
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM $users_list'
+CASE 4:
+-------
+# Three users are in the test statement, CURRENT_USER is the second one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER(), 'bug48321_3'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'bug48321_2'@'localhost', CURRENT_USER(), 'bug48321_3'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM $users_list'
+CASE 5:
+-------
+# CURRENT_USER is not in the test statement.
+users_list= 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+DROP VIEW test.bug48321_v1;
+
+
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM $users_list /*With comment*/'
+--------------------------------------------------------------------------
+CREATE VIEW test.bug48321_v1 AS SELECT user, Select_priv, Update_priv, Create_priv, Drop_priv, Grant_priv
+FROM mysql.user WHERE user LIKE 'bug48321%';
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM $users_list /*With comment*/'
+CASE 1:
+-------
+# Only CURRENT_USER() in the user list of the test statement.
+users_list= CURRENT_USER()
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM CURRENT_USER() /*With comment*/;
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM $users_list /*With comment*/'
+CASE 2:
+-------
+# Two users are in the test statement, CURRENT_USER is the first one.
+users_list= CURRENT_USER(), 'bug48321_2'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM CURRENT_USER(), 'bug48321_2'@'localhost' /*With comment*/;
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM $users_list /*With comment*/'
+CASE 3:
+-------
+# Two users are in the test statement, CURRENT_USER is the last one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER()
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'bug48321_2'@'localhost', CURRENT_USER() /*With comment*/;
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM $users_list /*With comment*/'
+CASE 4:
+-------
+# Three users are in the test statement, CURRENT_USER is the second one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER(), 'bug48321_3'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'bug48321_2'@'localhost', CURRENT_USER(), 'bug48321_3'@'localhost' /*With comment*/;
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM $users_list /*With comment*/'
+CASE 5:
+-------
+# CURRENT_USER is not in the test statement.
+users_list= 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'bug48321_2'@'localhost', 'bug48321_3'@'localhost' /*With comment*/;
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+DROP VIEW test.bug48321_v1;
+
+
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM /*With comment*/ $users_list'
+--------------------------------------------------------------------------
+CREATE VIEW test.bug48321_v1 AS SELECT user, Select_priv, Update_priv, Create_priv, Drop_priv, Grant_priv
+FROM mysql.user WHERE user LIKE 'bug48321%';
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM /*With comment*/ $users_list'
+CASE 1:
+-------
+# Only CURRENT_USER() in the user list of the test statement.
+users_list= CURRENT_USER()
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM /*With comment*/ CURRENT_USER();
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM /*With comment*/ $users_list'
+CASE 2:
+-------
+# Two users are in the test statement, CURRENT_USER is the first one.
+users_list= CURRENT_USER(), 'bug48321_2'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM /*With comment*/ CURRENT_USER(), 'bug48321_2'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM /*With comment*/ $users_list'
+CASE 3:
+-------
+# Two users are in the test statement, CURRENT_USER is the last one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER()
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM /*With comment*/ 'bug48321_2'@'localhost', CURRENT_USER();
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM /*With comment*/ $users_list'
+CASE 4:
+-------
+# Three users are in the test statement, CURRENT_USER is the second one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER(), 'bug48321_3'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM /*With comment*/ 'bug48321_2'@'localhost', CURRENT_USER(), 'bug48321_3'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM /*With comment*/ $users_list'
+CASE 5:
+-------
+# CURRENT_USER is not in the test statement.
+users_list= 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM /*With comment*/ 'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+DROP VIEW test.bug48321_v1;
+
+
+
+TEST STATEMENT: 'REVOKE SELECT, UPDATE, CREATE, DROP ON TABLE *.* FROM $users_list'
+--------------------------------------------------------------------------
+CREATE VIEW test.bug48321_v1 AS SELECT user, Select_priv, Update_priv, Create_priv, Drop_priv
+FROM mysql.user WHERE user LIKE 'bug48321%';
+
+TEST STATEMENT: 'REVOKE SELECT, UPDATE, CREATE, DROP ON TABLE *.* FROM $users_list'
+CASE 1:
+-------
+# Only CURRENT_USER() in the user list of the test statement.
+users_list= CURRENT_USER()
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE SELECT, UPDATE, CREATE, DROP ON TABLE *.* FROM CURRENT_USER();
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE SELECT, UPDATE, CREATE, DROP ON TABLE *.* FROM $users_list'
+CASE 2:
+-------
+# Two users are in the test statement, CURRENT_USER is the first one.
+users_list= CURRENT_USER(), 'bug48321_2'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE SELECT, UPDATE, CREATE, DROP ON TABLE *.* FROM CURRENT_USER(), 'bug48321_2'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE SELECT, UPDATE, CREATE, DROP ON TABLE *.* FROM $users_list'
+CASE 3:
+-------
+# Two users are in the test statement, CURRENT_USER is the last one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER()
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE SELECT, UPDATE, CREATE, DROP ON TABLE *.* FROM 'bug48321_2'@'localhost', CURRENT_USER();
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE SELECT, UPDATE, CREATE, DROP ON TABLE *.* FROM $users_list'
+CASE 4:
+-------
+# Three users are in the test statement, CURRENT_USER is the second one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER(), 'bug48321_3'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE SELECT, UPDATE, CREATE, DROP ON TABLE *.* FROM 'bug48321_2'@'localhost', CURRENT_USER(), 'bug48321_3'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE SELECT, UPDATE, CREATE, DROP ON TABLE *.* FROM $users_list'
+CASE 5:
+-------
+# CURRENT_USER is not in the test statement.
+users_list= 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE SELECT, UPDATE, CREATE, DROP ON TABLE *.* FROM 'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+DROP VIEW test.bug48321_v1;
+
+
+
+TEST STATEMENT: 'REVOKE CREATE ROUTINE ON *.* FROM $users_list'
+--------------------------------------------------------------------------
+CREATE VIEW test.bug48321_v1 AS SELECT user, Create_routine_priv
+FROM mysql.user WHERE user LIKE 'bug48321%';
+
+TEST STATEMENT: 'REVOKE CREATE ROUTINE ON *.* FROM $users_list'
+CASE 1:
+-------
+# Only CURRENT_USER() in the user list of the test statement.
+users_list= CURRENT_USER()
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE CREATE ROUTINE ON *.* FROM CURRENT_USER();
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE CREATE ROUTINE ON *.* FROM $users_list'
+CASE 2:
+-------
+# Two users are in the test statement, CURRENT_USER is the first one.
+users_list= CURRENT_USER(), 'bug48321_2'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE CREATE ROUTINE ON *.* FROM CURRENT_USER(), 'bug48321_2'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE CREATE ROUTINE ON *.* FROM $users_list'
+CASE 3:
+-------
+# Two users are in the test statement, CURRENT_USER is the last one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER()
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE CREATE ROUTINE ON *.* FROM 'bug48321_2'@'localhost', CURRENT_USER();
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE CREATE ROUTINE ON *.* FROM $users_list'
+CASE 4:
+-------
+# Three users are in the test statement, CURRENT_USER is the second one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER(), 'bug48321_3'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE CREATE ROUTINE ON *.* FROM 'bug48321_2'@'localhost', CURRENT_USER(), 'bug48321_3'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE CREATE ROUTINE ON *.* FROM $users_list'
+CASE 5:
+-------
+# CURRENT_USER is not in the test statement.
+users_list= 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE CREATE ROUTINE ON *.* FROM 'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+DROP VIEW test.bug48321_v1;
+
+
+
+TEST STATEMENT: 'REVOKE ALTER ROUTINE, EXECUTE ON PROCEDURE p1 FROM $users_list'
+--------------------------------------------------------------------------
+CREATE VIEW test.bug48321_v1 AS SELECT user, Routine_name, Proc_priv
+FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+
+TEST STATEMENT: 'REVOKE ALTER ROUTINE, EXECUTE ON PROCEDURE p1 FROM $users_list'
+CASE 1:
+-------
+# Only CURRENT_USER() in the user list of the test statement.
+users_list= CURRENT_USER()
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALTER ROUTINE, EXECUTE ON PROCEDURE p1 FROM CURRENT_USER();
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE ALTER ROUTINE, EXECUTE ON PROCEDURE p1 FROM $users_list'
+CASE 2:
+-------
+# Two users are in the test statement, CURRENT_USER is the first one.
+users_list= CURRENT_USER(), 'bug48321_2'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALTER ROUTINE, EXECUTE ON PROCEDURE p1 FROM CURRENT_USER(), 'bug48321_2'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE ALTER ROUTINE, EXECUTE ON PROCEDURE p1 FROM $users_list'
+CASE 3:
+-------
+# Two users are in the test statement, CURRENT_USER is the last one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER()
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALTER ROUTINE, EXECUTE ON PROCEDURE p1 FROM 'bug48321_2'@'localhost', CURRENT_USER();
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE ALTER ROUTINE, EXECUTE ON PROCEDURE p1 FROM $users_list'
+CASE 4:
+-------
+# Three users are in the test statement, CURRENT_USER is the second one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER(), 'bug48321_3'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALTER ROUTINE, EXECUTE ON PROCEDURE p1 FROM 'bug48321_2'@'localhost', CURRENT_USER(), 'bug48321_3'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'REVOKE ALTER ROUTINE, EXECUTE ON PROCEDURE p1 FROM $users_list'
+CASE 5:
+-------
+# CURRENT_USER is not in the test statement.
+users_list= 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+# Grant some privileges to users at first when testing
+# 'REVOKE ...' statement.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost',
+'bug48321_3'@'localhost' WITH GRANT OPTION;
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_1'@'localhost',
+'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+REVOKE ALTER ROUTINE, EXECUTE ON PROCEDURE p1 FROM 'bug48321_2'@'localhost', 'bug48321_3'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+DROP VIEW test.bug48321_v1;
+
+
+
+TEST STATEMENT: 'GRANT ALL PRIVILEGES ON *.* TO $users_list WITH GRANT OPTION'
+--------------------------------------------------------------------------
+CREATE VIEW test.bug48321_v1 AS SELECT user, Select_priv, Update_priv, Create_priv, Drop_priv, Grant_priv, Password
+FROM mysql.user WHERE user LIKE 'bug48321%';
+
+TEST STATEMENT: 'GRANT ALL PRIVILEGES ON *.* TO $users_list WITH GRANT OPTION'
+CASE 1:
+-------
+# Only CURRENT_USER() in the user list of the test statement.
+users_list= CURRENT_USER() IDENTIFIED BY 'user1'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT ALL PRIVILEGES ON *.* TO CURRENT_USER() IDENTIFIED BY 'user1' WITH GRANT OPTION;
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT ALL PRIVILEGES ON *.* TO $users_list WITH GRANT OPTION'
+CASE 2:
+-------
+# Two users are in the test statement, CURRENT_USER is the first one.
+users_list= CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_2'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT ALL PRIVILEGES ON *.* TO CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_2'@'localhost' WITH GRANT OPTION;
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT ALL PRIVILEGES ON *.* TO $users_list WITH GRANT OPTION'
+CASE 3:
+-------
+# Two users are in the test statement, CURRENT_USER is the last one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1' WITH GRANT OPTION;
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT ALL PRIVILEGES ON *.* TO $users_list WITH GRANT OPTION'
+CASE 4:
+-------
+# Three users are in the test statement, CURRENT_USER is the second one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_3'@'localhost' IDENTIFIED BY ''
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_3'@'localhost' IDENTIFIED BY '' WITH GRANT OPTION;
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT ALL PRIVILEGES ON *.* TO $users_list WITH GRANT OPTION'
+CASE 5:
+-------
+# CURRENT_USER is not in the test statement.
+users_list= 'bug48321_2'@'localhost', 'bug48321_3'@'localhost' IDENTIFIED BY ''
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost', 'bug48321_3'@'localhost' IDENTIFIED BY '' WITH GRANT OPTION;
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+DROP VIEW test.bug48321_v1;
+
+
+
+TEST STATEMENT: 'GRANT ALL PRIVILEGES ON *.* TO $users_list /* With Comment */ WITH GRANT OPTION'
+--------------------------------------------------------------------------
+CREATE VIEW test.bug48321_v1 AS SELECT user, Select_priv, Update_priv, Create_priv, Drop_priv, Grant_priv, Password
+FROM mysql.user WHERE user LIKE 'bug48321%';
+
+TEST STATEMENT: 'GRANT ALL PRIVILEGES ON *.* TO $users_list /* With Comment */ WITH GRANT OPTION'
+CASE 1:
+-------
+# Only CURRENT_USER() in the user list of the test statement.
+users_list= CURRENT_USER() IDENTIFIED BY 'user1'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT ALL PRIVILEGES ON *.* TO CURRENT_USER() IDENTIFIED BY 'user1' /* With Comment */ WITH GRANT OPTION;
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT ALL PRIVILEGES ON *.* TO $users_list /* With Comment */ WITH GRANT OPTION'
+CASE 2:
+-------
+# Two users are in the test statement, CURRENT_USER is the first one.
+users_list= CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_2'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT ALL PRIVILEGES ON *.* TO CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_2'@'localhost' /* With Comment */ WITH GRANT OPTION;
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT ALL PRIVILEGES ON *.* TO $users_list /* With Comment */ WITH GRANT OPTION'
+CASE 3:
+-------
+# Two users are in the test statement, CURRENT_USER is the last one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1' /* With Comment */ WITH GRANT OPTION;
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT ALL PRIVILEGES ON *.* TO $users_list /* With Comment */ WITH GRANT OPTION'
+CASE 4:
+-------
+# Three users are in the test statement, CURRENT_USER is the second one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_3'@'localhost' IDENTIFIED BY ''
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_3'@'localhost' IDENTIFIED BY '' /* With Comment */ WITH GRANT OPTION;
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT ALL PRIVILEGES ON *.* TO $users_list /* With Comment */ WITH GRANT OPTION'
+CASE 5:
+-------
+# CURRENT_USER is not in the test statement.
+users_list= 'bug48321_2'@'localhost', 'bug48321_3'@'localhost' IDENTIFIED BY ''
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_2'@'localhost', 'bug48321_3'@'localhost' IDENTIFIED BY '' /* With Comment */ WITH GRANT OPTION;
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+DROP VIEW test.bug48321_v1;
+
+
+
+TEST STATEMENT: 'GRANT SELECT, UPDATE, CREATE, DROP ON TABLE *.* TO $users_list'
+--------------------------------------------------------------------------
+CREATE VIEW test.bug48321_v1 AS SELECT user, Select_priv, Update_priv, Create_priv, Drop_priv, Password
+FROM mysql.user WHERE user LIKE 'bug48321%';
+
+TEST STATEMENT: 'GRANT SELECT, UPDATE, CREATE, DROP ON TABLE *.* TO $users_list'
+CASE 1:
+-------
+# Only CURRENT_USER() in the user list of the test statement.
+users_list= CURRENT_USER() IDENTIFIED BY 'user1'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT SELECT, UPDATE, CREATE, DROP ON TABLE *.* TO CURRENT_USER() IDENTIFIED BY 'user1';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT SELECT, UPDATE, CREATE, DROP ON TABLE *.* TO $users_list'
+CASE 2:
+-------
+# Two users are in the test statement, CURRENT_USER is the first one.
+users_list= CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_2'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT SELECT, UPDATE, CREATE, DROP ON TABLE *.* TO CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_2'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT SELECT, UPDATE, CREATE, DROP ON TABLE *.* TO $users_list'
+CASE 3:
+-------
+# Two users are in the test statement, CURRENT_USER is the last one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT SELECT, UPDATE, CREATE, DROP ON TABLE *.* TO 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT SELECT, UPDATE, CREATE, DROP ON TABLE *.* TO $users_list'
+CASE 4:
+-------
+# Three users are in the test statement, CURRENT_USER is the second one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_3'@'localhost' IDENTIFIED BY ''
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT SELECT, UPDATE, CREATE, DROP ON TABLE *.* TO 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_3'@'localhost' IDENTIFIED BY '';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT SELECT, UPDATE, CREATE, DROP ON TABLE *.* TO $users_list'
+CASE 5:
+-------
+# CURRENT_USER is not in the test statement.
+users_list= 'bug48321_2'@'localhost', 'bug48321_3'@'localhost' IDENTIFIED BY ''
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT SELECT, UPDATE, CREATE, DROP ON TABLE *.* TO 'bug48321_2'@'localhost', 'bug48321_3'@'localhost' IDENTIFIED BY '';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+DROP VIEW test.bug48321_v1;
+
+
+
+TEST STATEMENT: 'GRANT CREATE ROUTINE ON *.* TO $users_list'
+--------------------------------------------------------------------------
+CREATE VIEW test.bug48321_v1 AS SELECT user, Create_routine_priv
+FROM mysql.user WHERE user LIKE 'bug48321%';
+
+TEST STATEMENT: 'GRANT CREATE ROUTINE ON *.* TO $users_list'
+CASE 1:
+-------
+# Only CURRENT_USER() in the user list of the test statement.
+users_list= CURRENT_USER() IDENTIFIED BY 'user1'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT CREATE ROUTINE ON *.* TO CURRENT_USER() IDENTIFIED BY 'user1';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT CREATE ROUTINE ON *.* TO $users_list'
+CASE 2:
+-------
+# Two users are in the test statement, CURRENT_USER is the first one.
+users_list= CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_2'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT CREATE ROUTINE ON *.* TO CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_2'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT CREATE ROUTINE ON *.* TO $users_list'
+CASE 3:
+-------
+# Two users are in the test statement, CURRENT_USER is the last one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT CREATE ROUTINE ON *.* TO 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT CREATE ROUTINE ON *.* TO $users_list'
+CASE 4:
+-------
+# Three users are in the test statement, CURRENT_USER is the second one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_3'@'localhost' IDENTIFIED BY ''
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT CREATE ROUTINE ON *.* TO 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_3'@'localhost' IDENTIFIED BY '';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT CREATE ROUTINE ON *.* TO $users_list'
+CASE 5:
+-------
+# CURRENT_USER is not in the test statement.
+users_list= 'bug48321_2'@'localhost', 'bug48321_3'@'localhost' IDENTIFIED BY ''
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT CREATE ROUTINE ON *.* TO 'bug48321_2'@'localhost', 'bug48321_3'@'localhost' IDENTIFIED BY '';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+DROP VIEW test.bug48321_v1;
+DROP PROCEDURE p1;
+
+
+
+TEST STATEMENT: 'GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO $users_list'
+--------------------------------------------------------------------------
+CREATE VIEW test.bug48321_v1 AS SELECT user, Routine_name, Proc_priv
+FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+
+TEST STATEMENT: 'GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO $users_list'
+CASE 1:
+-------
+# Only CURRENT_USER() in the user list of the test statement.
+users_list= CURRENT_USER() IDENTIFIED BY 'user1'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO CURRENT_USER() IDENTIFIED BY 'user1';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO $users_list'
+CASE 2:
+-------
+# Two users are in the test statement, CURRENT_USER is the first one.
+users_list= CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_2'@'localhost'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_2'@'localhost';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO $users_list'
+CASE 3:
+-------
+# Two users are in the test statement, CURRENT_USER is the last one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1'
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO $users_list'
+CASE 4:
+-------
+# Three users are in the test statement, CURRENT_USER is the second one.
+users_list= 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_3'@'localhost' IDENTIFIED BY ''
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_2'@'localhost', CURRENT_USER() IDENTIFIED BY 'user1', 'bug48321_3'@'localhost' IDENTIFIED BY '';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+
+TEST STATEMENT: 'GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO $users_list'
+CASE 5:
+-------
+# CURRENT_USER is not in the test statement.
+users_list= 'bug48321_2'@'localhost', 'bug48321_3'@'localhost' IDENTIFIED BY ''
+
+# Connect to master with user1, so user1 always is the current user,
+# when test statement is runing.
+GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1'@'localhost'
+ WITH GRANT OPTION;
+CREATE USER 'bug48321_2'@'localhost', 'bug48321_3'@'localhost'
+ IDENTIFIED BY 'user3';
+
+GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO 'bug48321_2'@'localhost', 'bug48321_3'@'localhost' IDENTIFIED BY '';
+
+Comparing tables master:test.bug48321_v1 and slave:test.bug48321_v1
+
+# Delete all bug48321% users
+DELETE FROM mysql.user WHERE user LIKE 'bug48321%';
+DELETE FROM mysql.procs_priv WHERE user LIKE 'bug48321%';
+FLUSH PRIVILEGES;
+DROP VIEW test.bug48321_v1;
diff --git a/mysql-test/suite/rpl/t/rpl_binlog_grant.test b/mysql-test/suite/rpl/t/rpl_binlog_grant.test
index 31163927ce2..64f4e8b2eeb 100644
--- a/mysql-test/suite/rpl/t/rpl_binlog_grant.test
+++ b/mysql-test/suite/rpl/t/rpl_binlog_grant.test
@@ -25,9 +25,7 @@ grant select on t to x@y;
#
rollback;
show grants for x@y;
---replace_result $VERSION VERSION
---replace_regex /\/\* xid=.* \*\//\/* XID *\//
-show binlog events;
+--source include/show_binlog_events.inc
start transaction;
insert into t values (2);
revoke select on t from x@y;
@@ -37,9 +35,7 @@ revoke select on t from x@y;
commit;
select * from t;
show grants for x@y;
---replace_result $VERSION VERSION
---replace_regex /\/\* xid=.* \*\//\/* XID *\//
-show binlog events;
+--source include/show_binlog_events.inc
drop user x@y;
drop database d1;
--sync_slave_with_master
diff --git a/mysql-test/suite/rpl/t/rpl_events.test b/mysql-test/suite/rpl/t/rpl_events.test
index 7720ad6658c..25976f779e3 100644
--- a/mysql-test/suite/rpl/t/rpl_events.test
+++ b/mysql-test/suite/rpl/t/rpl_events.test
@@ -105,3 +105,85 @@ DROP EVENT event44331_2;
DROP EVENT event44331_3;
DROP EVENT event44331_4;
sync_slave_with_master;
+
+#
+# BUG#48321
+# This test verifies if the definer is consistent between master and slave,
+# when the event is created or altered with the DEFINER clause that the
+# DEFINER is set to CURRENT_USER()
+#
+connection master;
+--disable_warnings
+DROP VIEW IF EXISTS events_view;
+DROP EVENT IF EXISTS event48321_1;
+DROP EVENT IF EXISTS event48321_2;
+DROP EVENT IF EXISTS event48321_3;
+DROP EVENT IF EXISTS event48321_4;
+--enable_warnings
+
+CREATE VIEW events_view AS
+ SELECT EVENT_SCHEMA, EVENT_NAME, DEFINER FROM INFORMATION_SCHEMA.EVENTS
+ WHERE EVENT_NAME LIKE 'event48321%';
+let $diff_table_1= master:test.events_view;
+let $diff_table_2= slave:test.events_view;
+
+CREATE DEFINER=CURRENT_USER() /*!50000 EVENT event48321_1 */
+ ON SCHEDULE AT CURRENT_TIMESTAMP
+ ON COMPLETION PRESERVE DISABLE
+ DO SELECT 48321 as BUG;
+
+CREATE DEFINER=CURRENT_USER() EVENT event48321_2
+ ON SCHEDULE AT CURRENT_TIMESTAMP
+ ON COMPLETION PRESERVE DISABLE
+ DO SELECT 48321 as BUG;
+
+CREATE /*!50000 DEFINER=CURRENT_USER() */ EVENT event48321_3
+ ON SCHEDULE AT CURRENT_TIMESTAMP
+ ON COMPLETION PRESERVE DISABLE
+ DO SELECT 48321 as BUG;
+sync_slave_with_master;
+
+--source include/diff_tables.inc
+
+connection master;
+ALTER DEFINER=CURRENT_USER() EVENT event48321_1 RENAME TO event48321_4;
+
+ALTER DEFINER=CURRENT_USER() EVENT event48321_2
+ ON SCHEDULE AT CURRENT_TIMESTAMP
+ ON COMPLETION PRESERVE DISABLE
+ DO SELECT 48321 as BUG;
+
+ALTER /*!50000 DEFINER=CURRENT_USER() */ EVENT event48321_3
+ ON SCHEDULE AT CURRENT_TIMESTAMP
+ ON COMPLETION PRESERVE DISABLE
+ DO SELECT 48321 as BUG;
+sync_slave_with_master;
+
+--source include/diff_tables.inc
+
+# Two statements in on query
+connection master;
+DELIMITER |;
+ALTER /*!50000 DEFINER=CURRENT_USER() */ EVENT event48321_3
+ ON SCHEDULE AT CURRENT_TIMESTAMP
+ ON COMPLETION PRESERVE DISABLE
+ DO SELECT 48321 as BUG; ALTER EVENT event48321_2 ENABLE |
+DELIMITER ;|
+sync_slave_with_master;
+
+--source include/diff_tables.inc
+
+#No Event boday
+connection master;
+ALTER EVENT event48321_3 ENABLE;
+sync_slave_with_master;
+
+--source include/diff_tables.inc
+
+connection master;
+DROP EVENT event48321_4;
+DROP EVENT event48321_2;
+DROP EVENT event48321_3;
+DROP VIEW events_view;
+--source include/master-slave-end.inc
+
diff --git a/mysql-test/suite/rpl/t/rpl_user.test b/mysql-test/suite/rpl/t/rpl_user.test
index b8fe41d03c4..2adb822839a 100644
--- a/mysql-test/suite/rpl/t/rpl_user.test
+++ b/mysql-test/suite/rpl/t/rpl_user.test
@@ -54,8 +54,85 @@ drop user 'not_exist_user1'@'fakehost', 'not_exist_user2'@'fakehost';
sync_slave_with_master;
select Host,User from mysql.user where Host='fakehost';
-#
-# show the binlog events on the master
-#
connection master;
source include/show_binlog_events.inc;
+
+#
+# BUG#48321
+#
+let $action= RENAME;
+let $statement= RENAME USER \$users_list;
+source extra/rpl_tests/rpl_current_user.test;
+
+let $action= DROP;
+let $statement= DROP USER \$users_list;
+source extra/rpl_tests/rpl_current_user.test;
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS f1;
+--enable_warnings
+CREATE PROCEDURE p1() SELECT 1;
+#REVOKE ALL PRIVILEGES
+let $action= REVOKE;
+let $diff_columns= Select_priv, Update_priv, Create_priv, Drop_priv, Grant_priv;
+let $statement= REVOKE ALL PRIVILEGES, GRANT OPTION FROM \$users_list;
+source extra/rpl_tests/rpl_current_user.test;
+
+#REVOKE ALL PRIVILEGES with comment
+let $action= REVOKE;
+let $diff_columns= Select_priv, Update_priv, Create_priv, Drop_priv, Grant_priv;
+let $statement= REVOKE ALL PRIVILEGES, GRANT OPTION FROM \$users_list /*With comment*/;
+source extra/rpl_tests/rpl_current_user.test;
+
+#REVOKE ALL PRIVILEGES with comment
+let $action= REVOKE;
+let $diff_columns= Select_priv, Update_priv, Create_priv, Drop_priv, Grant_priv;
+let $statement= REVOKE ALL PRIVILEGES, GRANT OPTION FROM /*With comment*/ \$users_list;
+source extra/rpl_tests/rpl_current_user.test;
+
+let $diff_columns= Select_priv, Update_priv, Create_priv, Drop_priv;
+#REVOKE ON TABLE
+let $statement= REVOKE SELECT, UPDATE, CREATE, DROP ON TABLE *.* FROM \$users_list;
+source extra/rpl_tests/rpl_current_user.test;
+
+#REVOKE ON CREATE ROUTINE
+let $diff_columns= Create_routine_priv;
+let $statement= REVOKE CREATE ROUTINE ON *.* FROM \$users_list;
+source extra/rpl_tests/rpl_current_user.test;
+
+#REVOKE ON ROUTINE
+let $diff_table= mysql.procs_priv;
+let $diff_columns= Routine_name, Proc_priv;
+let $statement= REVOKE ALTER ROUTINE, EXECUTE ON PROCEDURE p1 FROM \$users_list;
+source extra/rpl_tests/rpl_current_user.test;
+
+let $diff_table= mysql.user;
+#GRANT ALL PRIVILEGES
+let $action= GRANT;
+let $diff_columns= Select_priv, Update_priv, Create_priv, Drop_priv, Grant_priv, Password;
+let $statement= GRANT ALL PRIVILEGES ON *.* TO \$users_list WITH GRANT OPTION;
+source extra/rpl_tests/rpl_current_user.test;
+
+#GRANT ALL PRIVILEGES with comment
+let $action= GRANT;
+let $diff_columns= Select_priv, Update_priv, Create_priv, Drop_priv, Grant_priv, Password;
+let $statement= GRANT ALL PRIVILEGES ON *.* TO \$users_list /* With Comment */ WITH GRANT OPTION;
+source extra/rpl_tests/rpl_current_user.test;
+
+#GRANT ON TABLE
+let $diff_columns= Select_priv, Update_priv, Create_priv, Drop_priv, Password;
+let $statement= GRANT SELECT, UPDATE, CREATE, DROP ON TABLE *.* TO \$users_list;
+source extra/rpl_tests/rpl_current_user.test;
+
+#GRANT ON CREATE ROUTINE
+let $diff_columns= Create_routine_priv;
+let $statement= GRANT CREATE ROUTINE ON *.* TO \$users_list;
+source extra/rpl_tests/rpl_current_user.test;
+
+#GRANT ON ROUTINE
+let $diff_table= mysql.procs_priv;
+let $diff_columns= Routine_name, Proc_priv;
+let $statement= GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO \$users_list;
+
+DROP PROCEDURE p1;
+source extra/rpl_tests/rpl_current_user.test;