List:Commits« Previous MessageNext Message »
From:Alexander Nozdrin Date:January 30 2010 7:14pm
Subject:bzr commit into mysql-5.5-trunk branch (alik:2965)
View as plain text  
#At file:///mnt/raid/alik/MySQL/bzr/00.merges/mysql-trunk-merge/ based on revid:alik@stripped

 2965 Alexander Nozdrin	2010-01-30 [merge]
      Manual merge from mysql-5.1-bugteam.
      Conflicts:
        - mysql-test/collections/default.experimental
        - mysql-test/suite/rpl/r/rpl_binlog_grant.result
        - mysql-test/suite/rpl/r/rpl_sp.result
        - mysql-test/suite/rpl/t/rpl_binlog_grant.test
        - mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test

    added:
      mysql-test/extra/rpl_tests/rpl_current_user.test
      mysql-test/extra/rpl_tests/rpl_set_null.test
      mysql-test/std_data/bug47142_master-bin.000001
      mysql-test/suite/rpl/r/rpl_set_null_innodb.result
      mysql-test/suite/rpl/r/rpl_set_null_myisam.result
      mysql-test/suite/rpl/t/rpl_set_null_innodb.test
      mysql-test/suite/rpl/t/rpl_set_null_myisam.test
      mysql-test/suite/rpl_ndb/r/rpl_ndb_set_null.result
      mysql-test/suite/rpl_ndb/t/rpl_ndb_set_null.test
    modified:
      client/client_priv.h
      client/mysql.cc
      client/mysqldump.c
      include/my_stacktrace.h
      mysql-test/collections/default.experimental
      mysql-test/lib/v1/mysql-test-run.pl
      mysql-test/mysql-test-run.pl
      mysql-test/r/delete.result
      mysql-test/r/mysqlbinlog.result
      mysql-test/r/openssl_1.result
      mysql-test/r/select.result
      mysql-test/std_data/cacert.pem
      mysql-test/std_data/client-cert.pem
      mysql-test/std_data/client-key.pem
      mysql-test/std_data/server-cert.pem
      mysql-test/std_data/server-key.pem
      mysql-test/std_data/server8k-cert.pem
      mysql-test/std_data/server8k-key.pem
      mysql-test/suite/rpl/r/rpl_binlog_grant.result
      mysql-test/suite/rpl/r/rpl_events.result
      mysql-test/suite/rpl/r/rpl_get_master_version_and_clock.result
      mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result
      mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result
      mysql-test/suite/rpl/r/rpl_sp.result
      mysql-test/suite/rpl/r/rpl_stm_until.result
      mysql-test/suite/rpl/r/rpl_user.result
      mysql-test/suite/rpl/t/rpl_binlog_grant.test
      mysql-test/suite/rpl/t/rpl_events.test
      mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test
      mysql-test/suite/rpl/t/rpl_stm_until.test
      mysql-test/suite/rpl/t/rpl_user.test
      mysql-test/t/delete.test
      mysql-test/t/openssl_1.test
      mysql-test/t/select.test
      sql/events.cc
      sql/field.h
      sql/filesort.cc
      sql/item_strfunc.cc
      sql/item_strfunc.h
      sql/log_event.cc
      sql/log_event.h
      sql/mysql_priv.h
      sql/mysqld.cc
      sql/rpl_injector.cc
      sql/rpl_record.cc
      sql/sql_acl.cc
      sql/sql_db.cc
      sql/sql_lex.h
      sql/sql_parse.cc
      sql/sql_select.cc
      sql/sql_table.cc
      sql/sql_test.cc
      sql/sql_yacc.yy
=== modified file 'client/client_priv.h'
--- a/client/client_priv.h	2010-01-23 21:09:23 +0000
+++ b/client/client_priv.h	2010-01-30 19:13:36 +0000
@@ -37,7 +37,7 @@
 #define WARN_DEPRECATED(Ver,Old,New)                                      \
   do {                                                                    \
     printf("Warning: The option '%s' is deprecated and will be removed " \
-           "in MySQL %s. Please use %s instead.\n", (Old), (Ver), (New)); \
+           "in a future release. Please use %s instead.\n", (Old), (New)); \
   } while(0);
 
 enum options_client
@@ -57,7 +57,7 @@ enum options_client
   OPT_PROMPT, OPT_IGN_LINES,OPT_TRANSACTION,OPT_MYSQL_PROTOCOL,
   OPT_SHARED_MEMORY_BASE_NAME, OPT_FRM, OPT_SKIP_OPTIMIZATION,
   OPT_COMPATIBLE, OPT_RECONNECT, OPT_DELIMITER, OPT_SECURE_AUTH,
-  OPT_OPEN_FILES_LIMIT, OPT_SET_CHARSET, OPT_CREATE_OPTIONS, OPT_SERVER_ARG,
+  OPT_OPEN_FILES_LIMIT, OPT_SET_CHARSET, OPT_SERVER_ARG,
   OPT_POSITION, OPT_STOP_POSITION, OPT_START_DATETIME, OPT_STOP_DATETIME,
   OPT_SIGINT_IGNORE, OPT_HEXBLOB, OPT_ORDER_BY_PRIMARY, OPT_COUNT,
 #ifdef HAVE_NDBCLUSTER_DB
@@ -91,5 +91,6 @@ enum options_client
   OPT_WRITE_BINLOG, OPT_DUMP_DATE,
   OPT_INIT_COMMAND,
   OPT_FIRST_SLAVE,
+  OPT_ALL,
   OPT_MAX_CLIENT_OPTION
 };

=== modified file 'client/mysql.cc'
--- a/client/mysql.cc	2010-01-23 21:09:23 +0000
+++ b/client/mysql.cc	2010-01-30 19:13:36 +0000
@@ -1632,7 +1632,7 @@ get_one_option(int optid, const struct m
       init_tee(argument);
     break;
   case OPT_NOTEE:
-    printf("WARNING: option deprecated; use --disable-tee instead.\n");
+    WARN_DEPRECATED(VER_CELOSIA, "--no-tee", "--disable-tee");
     if (opt_outfile)
       end_tee();
     break;

=== modified file 'client/mysqldump.c'
--- a/client/mysqldump.c	2010-01-23 21:09:23 +0000
+++ b/client/mysqldump.c	2010-01-30 19:13:36 +0000
@@ -179,7 +179,7 @@ HASH ignore_table;
 
 static struct my_option my_long_options[] =
 {
-  {"all", 'a', "Deprecated. Use --create-options instead.",
+  {"all", OPT_ALL, "Deprecated. Use --create-options instead.",
    (uchar**) &create_options, (uchar**) &create_options, 0, GET_BOOL, NO_ARG, 1,
    0, 0, 0, 0, 0},
   {"all-databases", 'A',
@@ -230,7 +230,7 @@ static struct my_option my_long_options[
   {"compress", 'C', "Use compression in server/client protocol.",
    (uchar**) &opt_compress, (uchar**) &opt_compress, 0, GET_BOOL, NO_ARG, 0, 0, 0,
    0, 0, 0},
-  {"create-options", OPT_CREATE_OPTIONS,
+  {"create-options", 'a',
    "Include all MySQL specific create options.",
    (uchar**) &create_options, (uchar**) &create_options, 0, GET_BOOL, NO_ARG, 1,
    0, 0, 0, 0, 0},
@@ -268,7 +268,7 @@ static struct my_option my_long_options[
      (uchar**) &opt_events, (uchar**) &opt_events, 0, GET_BOOL,
      NO_ARG, 0, 0, 0, 0, 0, 0},
   {"extended-insert", 'e',
-   "Allows utilization of the new, much faster INSERT syntax.",
+   "Use multiple-row INSERT syntax that include several VALUES lists.",
    (uchar**) &extended_insert, (uchar**) &extended_insert, 0, GET_BOOL, NO_ARG,
    1, 0, 0, 0, 0, 0},
   {"fields-terminated-by", OPT_FTB,
@@ -762,6 +762,9 @@ get_one_option(int optid, const struct m
   case 'O':
     WARN_DEPRECATED(VER_CELOSIA, "--set-variable", "--variable-name=value");
     break;
+  case (int) OPT_ALL:
+    WARN_DEPRECATED(VER_CELOSIA, "--all", "--create-options");
+    break;
   case (int) OPT_FIRST_SLAVE:
     WARN_DEPRECATED(VER_CELOSIA, "--first-slave", "--lock-all-tables");
     break;

=== modified file 'include/my_stacktrace.h'
--- a/include/my_stacktrace.h	2009-12-06 18:01:11 +0000
+++ b/include/my_stacktrace.h	2010-01-27 10:42:20 +0000
@@ -23,7 +23,7 @@
     (defined(__alpha__) && defined(__GNUC__))
 #define HAVE_STACKTRACE 1
 #endif
-#elif defined(__WIN__) || defined(__sun)
+#elif defined(__WIN__) || defined(HAVE_PRINTSTACK)
 #define HAVE_STACKTRACE 1
 #endif
 

=== modified file 'mysql-test/collections/default.experimental'
--- a/mysql-test/collections/default.experimental	2010-01-28 18:49:00 +0000
+++ b/mysql-test/collections/default.experimental	2010-01-30 19:13:36 +0000
@@ -16,7 +16,6 @@ main.plugin                             
 main.signal_demo3 @solaris               # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
 main.sp @solaris                         # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
 
-rpl.rpl_get_master_version_and_clock*    # Bug#49191 2009-12-01 Daogang rpl_get_master_version_and_clock failed on PB2: COM_REGISTER_SLAVE failed
 rpl.rpl_heartbeat_basic                  # BUG#43828 2009-10-22 luis fails sporadically
 rpl.rpl_heartbeat_2slaves                # BUG#43828 2009-10-22 luis fails sporadically
 rpl.rpl_innodb_bug28430*                 # Bug#46029

=== added file 'mysql-test/extra/rpl_tests/rpl_current_user.test'
--- a/mysql-test/extra/rpl_tests/rpl_current_user.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/extra/rpl_tests/rpl_current_user.test	2010-01-30 12:49:25 +0000
@@ -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;

=== added file 'mysql-test/extra/rpl_tests/rpl_set_null.test'
--- a/mysql-test/extra/rpl_tests/rpl_set_null.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/extra/rpl_tests/rpl_set_null.test	2010-01-21 17:20:24 +0000
@@ -0,0 +1,86 @@
+# Both of the following tests check that comparison of binlog BI
+# against SE record will not fail due to remains from previous values
+# in the SE record (before a given field was set to null).
+#
+# In MIXED mode:
+# - Insert and update are executed as statements
+# - Delete is executed as a row event
+# - Assertion: checks that comparison will not fail because the update
+#              statement will clear the record contents for the nulled
+#              field. If data was not cleared, some engines may keep
+#              the value and return it later as garbage - despite the
+#              fact that field is null. This may cause slave to
+#              falsely fail in the comparison (memcmp would fail
+#              because of "garbage" in record data).
+#
+# In ROW mode:
+# - Insert, update and delete are executed as row events.
+# - Assertion: checks that comparison will not fail because the update
+#              rows event will clear the record contents before
+#              feeding the new value to the SE. This protects against
+#              SEs that do not clear record contents when storing
+#              nulled fields. If the engine did not clear the data it
+#              would cause slave to falsely fail in the comparison
+#              (memcmp would fail because of "garbage" in record
+#              data). This scenario is pretty much the same described
+#              above in MIXED mode, but checks different execution
+#              path in the slave.
+
+# BUG#49481: RBR: MyISAM and bit fields may cause slave to stop on
+#  delete cant find record
+
+-- source include/master-slave-reset.inc
+
+-- connection master
+-- eval CREATE TABLE t1 (c1 BIT, c2 INT) Engine=$engine
+INSERT INTO `t1` VALUES ( 1, 1 );
+UPDATE t1 SET c1=NULL where c2=1;
+-- sync_slave_with_master
+
+-- let $diff_table_1=master:test.t1
+-- let $diff_table_2=slave:test.t1
+-- source include/diff_tables.inc
+
+-- connection master
+# triggers switch to row mode when on mixed 
+DELETE FROM t1 WHERE c2=1 LIMIT 1;
+-- sync_slave_with_master
+
+-- let $diff_table_1=master:test.t1
+-- let $diff_table_2=slave:test.t1
+-- source include/diff_tables.inc
+
+-- connection master
+DROP TABLE t1;
+-- sync_slave_with_master
+
+-- source include/master-slave-reset.inc
+
+-- connection master
+
+# BUG#49482: RBR: Replication may break on deletes when MyISAM tables
+#  + char field are used
+
+-- eval CREATE TABLE t1 (c1 CHAR) Engine=$engine
+
+INSERT INTO t1 ( c1 ) VALUES ( 'w' ) ;
+SELECT * FROM t1;
+UPDATE t1 SET c1=NULL WHERE c1='w';
+-- sync_slave_with_master
+
+-- let $diff_table_1=master:test.t1
+-- let $diff_table_2=slave:test.t1
+-- source include/diff_tables.inc
+
+-- connection master
+# triggers switch to row mode when on mixed 
+DELETE FROM t1 LIMIT 2;
+-- sync_slave_with_master
+
+-- let $diff_table_1=master:test.t1
+-- let $diff_table_2=slave:test.t1
+-- source include/diff_tables.inc
+
+-- connection master
+DROP TABLE t1;
+-- sync_slave_with_master

=== modified file 'mysql-test/lib/v1/mysql-test-run.pl'
--- a/mysql-test/lib/v1/mysql-test-run.pl	2008-11-14 08:45:32 +0000
+++ b/mysql-test/lib/v1/mysql-test-run.pl	2010-01-27 15:32:59 +0000
@@ -1102,14 +1102,16 @@ sub command_line_setup () {
 
   if ( ! $opt_testcase_timeout )
   {
-    $opt_testcase_timeout= $default_testcase_timeout;
+    $opt_testcase_timeout=
+      $ENV{MTR_TESTCASE_TIMEOUT} || $default_testcase_timeout;
     $opt_testcase_timeout*= 10 if $opt_valgrind;
     $opt_testcase_timeout*= 10 if ($opt_debug and $glob_win32);
   }
 
   if ( ! $opt_suite_timeout )
   {
-    $opt_suite_timeout= $default_suite_timeout;
+    $opt_suite_timeout=
+      $ENV{MTR_SUITE_TIMEOUT} || $default_suite_timeout;
     $opt_suite_timeout*= 6 if $opt_valgrind;
     $opt_suite_timeout*= 6 if ($opt_debug and $glob_win32);
   }

=== modified file 'mysql-test/mysql-test-run.pl'
--- a/mysql-test/mysql-test-run.pl	2009-12-15 20:40:20 +0000
+++ b/mysql-test/mysql-test-run.pl	2010-01-30 19:13:36 +0000
@@ -198,10 +198,10 @@ my $opt_mark_progress;
 
 my $opt_sleep;
 
-my $opt_testcase_timeout=    15; # minutes
-my $opt_suite_timeout   =   300; # minutes
-my $opt_shutdown_timeout=    10; # seconds
-my $opt_start_timeout   =   180; # seconds
+my $opt_testcase_timeout= $ENV{MTR_TESTCASE_TIMEOUT} ||  15; # minutes
+my $opt_suite_timeout   = $ENV{MTR_SUITE_TIMEOUT}    || 300; # minutes
+my $opt_shutdown_timeout= $ENV{MTR_SHUTDOWN_TIMEOUT} ||  10; # seconds
+my $opt_start_timeout   = $ENV{MTR_START_TIMEOUT}    || 180; # seconds
 
 sub testcase_timeout { return $opt_testcase_timeout * 60; };
 sub suite_timeout { return $opt_suite_timeout * 60; };

=== modified file 'mysql-test/r/delete.result'
--- a/mysql-test/r/delete.result	2009-11-18 09:32:03 +0000
+++ b/mysql-test/r/delete.result	2010-01-29 09:36:28 +0000
@@ -337,3 +337,16 @@ END |
 DELETE IGNORE FROM t1;
 ERROR HY000: Can't update table 't1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
 DROP TABLE t1;
+#
+# Bug #49552 : sql_buffer_result cause crash + not found records 
+#   in multitable delete/subquery
+#
+CREATE TABLE t1(a INT);
+INSERT INTO t1 VALUES (1),(2),(3);
+SET SESSION SQL_BUFFER_RESULT=1;
+DELETE t1 FROM (SELECT SUM(a) a FROM t1) x,t1;
+SET SESSION SQL_BUFFER_RESULT=DEFAULT;
+SELECT * FROM t1;
+a
+DROP TABLE t1;
+End of 5.1 tests

=== modified file 'mysql-test/r/mysqlbinlog.result'
--- a/mysql-test/r/mysqlbinlog.result	2010-01-21 08:10:05 +0000
+++ b/mysql-test/r/mysqlbinlog.result	2010-01-27 12:23:28 +0000
@@ -93,7 +93,7 @@ ROLLBACK /* added by mysqlbinlog */;
 /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
 
 --- --position --
-Warning: The option '--position' is deprecated and will be removed in MySQL 5.6. Please use --start-position instead.
+Warning: The option '--position' is deprecated and will be removed in a future release. Please use --start-position instead.
 /*!40019 SET @@session.max_insert_delayed_threads=0*/;
 /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
 DELIMITER /*!*/;
@@ -194,7 +194,7 @@ ROLLBACK /* added by mysqlbinlog */;
 /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
 
 --- --position --
-Warning: The option '--position' is deprecated and will be removed in MySQL 5.6. Please use --start-position instead.
+Warning: The option '--position' is deprecated and will be removed in a future release. Please use --start-position instead.
 /*!40019 SET @@session.max_insert_delayed_threads=0*/;
 /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
 DELIMITER /*!*/;
@@ -235,7 +235,7 @@ DELIMITER ;
 # End of log file
 ROLLBACK /* added by mysqlbinlog */;
 /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
-Warning: The option '--position' is deprecated and will be removed in MySQL 5.6. Please use --start-position instead.
+Warning: The option '--position' is deprecated and will be removed in a future release. Please use --start-position instead.
 /*!40019 SET @@session.max_insert_delayed_threads=0*/;
 /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
 DELIMITER /*!*/;

=== modified file 'mysql-test/r/openssl_1.result'
--- a/mysql-test/r/openssl_1.result	2009-05-25 13:00:18 +0000
+++ b/mysql-test/r/openssl_1.result	2010-01-29 14:54:27 +0000
@@ -3,8 +3,8 @@ create table t1(f1 int);
 insert into t1 values (5);
 grant select on test.* to ssl_user1@localhost require SSL;
 grant select on test.* to ssl_user2@localhost require cipher "DHE-RSA-AES256-SHA";
-grant select on test.* to ssl_user3@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Uppsala/O=MySQL AB/emailAddress=abstract.mysql.developer@stripped";
-grant select on test.* to ssl_user4@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Uppsala/O=MySQL AB/emailAddress=abstract.mysql.developer@stripped" ISSUER "/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB";
+grant select on test.* to ssl_user3@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Uppsala/O=MySQL AB";
+grant select on test.* to ssl_user4@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Uppsala/O=MySQL AB" ISSUER "/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB";
 grant select on test.* to ssl_user5@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "xxx";
 flush privileges;
 connect(localhost,ssl_user5,,test,MASTER_PORT,MASTER_SOCKET);

=== modified file 'mysql-test/r/select.result'
--- a/mysql-test/r/select.result	2010-01-15 11:26:53 +0000
+++ b/mysql-test/r/select.result	2010-01-30 19:13:36 +0000
@@ -4526,6 +4526,69 @@ id	select_type	table	type	possible_keys	
 Warnings:
 Note	1003	select '2001-01-01 00:00:00' AS `a`,'2001-01-01 00:00:00' AS `a`,'2001-01-01 00:00:00' AS `a` from dual where 1
 DROP TABLE t1;
+#
+# Bug #49897: crash in ptr_compare when char(0) NOT NULL 
+# column is used for ORDER BY
+#
+SET @old_sort_buffer_size= @@session.sort_buffer_size;
+SET @@sort_buffer_size= 40000;
+CREATE TABLE t1(a CHAR(0) NOT NULL);
+INSERT INTO t1 VALUES (0), (0), (0);
+INSERT INTO t1 SELECT t11.a FROM t1 t11, t1 t12;
+INSERT INTO t1 SELECT t11.a FROM t1 t11, t1 t12;
+INSERT INTO t1 SELECT t11.a FROM t1 t11, t1 t12;
+EXPLAIN SELECT a FROM t1 ORDER BY a;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	24492	
+SELECT a FROM t1 ORDER BY a;
+DROP TABLE t1;
+CREATE TABLE t1(a CHAR(0) NOT NULL, b CHAR(0) NOT NULL, c int);
+INSERT INTO t1 VALUES (0, 0, 0), (0, 0, 2), (0, 0, 1);
+INSERT INTO t1 SELECT t11.a, t11.b, t11.c FROM t1 t11, t1 t12;
+INSERT INTO t1 SELECT t11.a, t11.b, t11.c FROM t1 t11, t1 t12;
+INSERT INTO t1 SELECT t11.a, t11.b, t11.c FROM t1 t11, t1 t12;
+EXPLAIN SELECT a FROM t1 ORDER BY a LIMIT 5;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	24492	
+SELECT a FROM t1 ORDER BY a LIMIT 5;
+a
+
+
+
+
+
+EXPLAIN SELECT * FROM t1 ORDER BY a, b LIMIT 5;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	24492	
+SELECT * FROM t1 ORDER BY a, b LIMIT 5;
+a	b	c
+		0
+		2
+		1
+		0
+		2
+EXPLAIN SELECT * FROM t1 ORDER BY a, b, c LIMIT 5;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	24492	Using filesort
+SELECT * FROM t1 ORDER BY a, b, c LIMIT 5;
+a	b	c
+		0
+		0
+		0
+		0
+		0
+EXPLAIN SELECT * FROM t1 ORDER BY c, a LIMIT 5;
+id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
+1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	24492	Using filesort
+SELECT * FROM t1 ORDER BY c, a LIMIT 5;
+a	b	c
+		0
+		0
+		0
+		0
+		0
+SET @@sort_buffer_size= @old_sort_buffer_size;
+DROP TABLE t1;
 End of 5.0 tests
 create table t1(a INT, KEY (a));
 INSERT INTO t1 VALUES (1),(2),(3),(4),(5);

=== added file 'mysql-test/std_data/bug47142_master-bin.000001'
Binary files a/mysql-test/std_data/bug47142_master-bin.000001	1970-01-01 00:00:00 +0000 and b/mysql-test/std_data/bug47142_master-bin.000001	2010-01-25 15:46:48 +0000 differ

=== modified file 'mysql-test/std_data/cacert.pem'
--- a/mysql-test/std_data/cacert.pem	2009-06-11 16:21:32 +0000
+++ b/mysql-test/std_data/cacert.pem	2010-01-29 14:54:27 +0000
@@ -1,17 +1,17 @@
 -----BEGIN CERTIFICATE-----
-MIICrTCCAhagAwIBAgIJAJXpePU0UOTVMA0GCSqGSIb3DQEBBQUAMEQxCzAJBgNV
+MIICrTCCAhagAwIBAgIJAMI7xZKjhrDbMA0GCSqGSIb3DQEBBAUAMEQxCzAJBgNV
 BAYTAlNFMRAwDgYDVQQIEwdVcHBzYWxhMRAwDgYDVQQHEwdVcHBzYWxhMREwDwYD
-VQQKEwhNeVNRTCBBQjAeFw0wOTAxMjgxMDQ5NDZaFw0xNDAxMjcxMDQ5NDZaMEQx
+VQQKEwhNeVNRTCBBQjAeFw0xMDAxMjkxMTQ3MTBaFw0xNTAxMjgxMTQ3MTBaMEQx
 CzAJBgNVBAYTAlNFMRAwDgYDVQQIEwdVcHBzYWxhMRAwDgYDVQQHEwdVcHBzYWxh
 MREwDwYDVQQKEwhNeVNRTCBBQjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-4XQHAe5R1+TXC8noZtWf+d5E0v1C59FWpn9SWEUCBjE5UiIwuJvi4Y+7xWGOXLAI
-/JzJx5gNXLBiTsE/zh0uX9fKlajLhxB0GN+QU0ZlpQ1BeYipEcNXeI/7cT499f6v
-XWabnTflivdCgHSWUOQ20/Lzs6kP6/e6OoZd/DPSjPECAwEAAaOBpjCBozAdBgNV
-HQ4EFgQU8uLqVWWkmuKsnZf1RWz294wRrd8wdAYDVR0jBG0wa4AU8uLqVWWkmuKs
-nZf1RWz294wRrd+hSKRGMEQxCzAJBgNVBAYTAlNFMRAwDgYDVQQIEwdVcHBzYWxh
-MRAwDgYDVQQHEwdVcHBzYWxhMREwDwYDVQQKEwhNeVNRTCBBQoIJAJXpePU0UOTV
-MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAMMTE5sDN+Z0ZlV7KvH3g
-6+aKvql8dTpRT3hYukeQlWua0nq74WPGVw0c4e/M/vbiMwmJcCYpB9pd4+dHqzSw
-aPyoenjY6UF8n7B4quWy3SIUk2LSHeJLW+kzJn2afN9gvipFhdVh/uU2TIyLGOur
-Z/vmJX2W7hF1uqPnbfa8Lrw=
+wQYsOEfrN4ESP3FjsI8cghE+tZVuyK2gck61lwieVxjgFMtBd65mI5a1y9pmlOI1
+yM4SB2Ppqcuw7/e1CdV1y7lvHrGNt5yqEHbN4QX1gvsN8TQauP/2WILturk4R4Hq
+rKg0ZySu7f1Xhl0ed9a48LpaEHD17IcxWEGMMJwAxF0CAwEAAaOBpjCBozAMBgNV
+HRMEBTADAQH/MB0GA1UdDgQWBBSvktYQ0ahLnyxyVKqty+WpBbBrDTB0BgNVHSME
+bTBrgBSvktYQ0ahLnyxyVKqty+WpBbBrDaFIpEYwRDELMAkGA1UEBhMCU0UxEDAO
+BgNVBAgTB1VwcHNhbGExEDAOBgNVBAcTB1VwcHNhbGExETAPBgNVBAoTCE15U1FM
+IEFCggkAwjvFkqOGsNswDQYJKoZIhvcNAQEEBQADgYEAdKN1PjwMHAKG2Ww1145g
+JQGBnKxSFOUaoSvkBi/4ntTM+ysnViWh7WvxyWjR9zU9arfr7aqsDeQxm0XDOqzj
+AQ/cQIla2/Li8tXyfc06bisH/IHRaSc2zWqioTKbEwMdVOdrvq4a8V8ic3xYyIWn
+7F4WeS07J8LKardSvM0+hOA=
 -----END CERTIFICATE-----

=== modified file 'mysql-test/std_data/client-cert.pem'
--- a/mysql-test/std_data/client-cert.pem	2009-06-11 16:21:32 +0000
+++ b/mysql-test/std_data/client-cert.pem	2010-01-29 14:54:27 +0000
@@ -1,55 +1,46 @@
 Certificate:
     Data:
-        Version: 3 (0x2)
-        Serial Number: 3 (0x3)
-        Signature Algorithm: sha1WithRSAEncryption
+        Version: 1 (0x0)
+        Serial Number: 1048577 (0x100001)
+        Signature Algorithm: md5WithRSAEncryption
         Issuer: C=SE, ST=Uppsala, L=Uppsala, O=MySQL AB
         Validity
-            Not Before: Jan 28 11:04:39 2009 GMT
-            Not After : Jan 28 11:04:39 2010 GMT
-        Subject: C=SE, ST=Uppsala, O=MySQL AB/emailAddress=abstract.mysql.developer@stripped
+            Not Before: Jan 29 11:50:22 2010 GMT
+            Not After : Jan 28 11:50:22 2015 GMT
+        Subject: C=SE, ST=Uppsala, O=MySQL AB
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (512 bit)
-                Modulus (512 bit):
-                    00:e1:52:30:2c:d9:be:64:28:91:5d:7a:fd:d9:e9:
-                    14:35:7a:d2:94:4e:91:46:e0:db:9f:6b:79:f4:4c:
-                    ac:6e:07:61:34:86:74:62:a7:a8:44:af:fa:87:87:
-                    a8:7d:42:61:ff:ab:50:d4:7b:bf:75:fa:d5:d5:b3:
-                    74:fb:56:1e:37
+                Public-Key: (1024 bit)
+                Modulus:
+                    00:cc:9a:37:49:13:66:dc:cf:e3:0b:13:a1:23:ed:
+                    78:db:4e:bd:11:f6:8c:0d:76:f9:a3:32:56:9a:f8:
+                    a1:21:6a:55:4e:4d:3f:e6:67:9d:26:99:b2:cd:a4:
+                    9a:d2:2b:59:5c:d7:8a:d3:60:68:f8:18:bd:c5:be:
+                    15:e1:2a:3c:a3:d4:61:cb:f5:11:94:17:81:81:f7:
+                    87:8c:f6:6a:d2:ee:d8:e6:77:f6:62:66:4d:2e:16:
+                    8d:08:81:4a:c9:c6:4b:31:e5:b9:c7:8a:84:96:48:
+                    a7:47:8c:0d:26:90:56:4e:e6:a5:6e:8c:b3:f2:9f:
+                    fc:3d:78:9b:49:6e:86:83:77
                 Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Basic Constraints: 
-                CA:FALSE
-            X509v3 Subject Key Identifier: 
-                58:30:B5:9B:2C:05:94:06:BA:3D:3C:F0:B2:CD:1D:67:65:E3:7F:85
-            X509v3 Authority Key Identifier: 
-                keyid:F2:E2:EA:55:65:A4:9A:E2:AC:9D:97:F5:45:6C:F6:F7:8C:11:AD:DF
-                DirName:/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB
-                serial:95:E9:78:F5:34:50:E4:D5
-
-    Signature Algorithm: sha1WithRSAEncryption
-        05:19:e3:13:14:fc:c5:28:bf:69:f8:00:b3:25:cb:bd:ca:9f:
-        2f:4c:b3:a8:04:11:f0:74:27:bd:82:2c:b4:49:9b:a7:59:f0:
-        f7:87:d1:e0:ba:99:a2:fe:4b:1d:10:6f:e4:a2:b3:cd:7f:8b:
-        68:31:46:ee:cd:9e:e2:47:e1:4c:fa:74:d1:e2:8b:cc:a0:4b:
-        a8:24:d1:a4:c3:6b:2a:c6:28:cd:41:e0:06:48:e6:cf:f2:3c:
-        ca:37:95:d7:29:64:6b:91:91:83:e7:ac:c8:0b:87:bc:da:a6:
-        aa:f1:44:43:c8:74:7b:15:26:91:2e:03:c4:71:50:6c:f8:68:
-        dc:8c
+    Signature Algorithm: md5WithRSAEncryption
+        5e:1f:a3:53:5f:24:13:1c:f8:28:32:b0:7f:69:69:f3:0e:c0:
+        34:87:10:03:7d:da:15:8b:bd:19:b8:1a:56:31:e7:85:49:81:
+        c9:7f:45:20:74:3e:89:c0:e0:26:84:51:cc:04:16:ce:69:99:
+        01:e1:26:99:b3:e3:f5:bd:ec:5f:a0:84:e4:38:da:75:78:7b:
+        89:9c:d2:cd:60:95:20:ba:8e:e3:7c:e6:df:76:3a:7c:89:77:
+        02:94:86:11:3a:c4:61:7d:6f:71:83:21:8a:17:fb:17:e2:ee:
+        02:6b:61:c1:b4:52:63:d7:d8:46:b2:c5:9c:6f:38:91:8a:35:
+        32:0b
 -----BEGIN CERTIFICATE-----
-MIICfzCCAeigAwIBAgIBAzANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJTRTEQ
-MA4GA1UECBMHVXBwc2FsYTEQMA4GA1UEBxMHVXBwc2FsYTERMA8GA1UEChMITXlT
-UUwgQUIwHhcNMDkwMTI4MTEwNDM5WhcNMTAwMTI4MTEwNDM5WjBlMQswCQYDVQQG
-EwJTRTEQMA4GA1UECBMHVXBwc2FsYTERMA8GA1UEChMITXlTUUwgQUIxMTAvBgkq
-hkiG9w0BCQEWImFic3RyYWN0Lm15c3FsLmRldmVsb3BlckBteXNxbC5jb20wXDAN
-BgkqhkiG9w0BAQEFAANLADBIAkEA4VIwLNm+ZCiRXXr92ekUNXrSlE6RRuDbn2t5
-9EysbgdhNIZ0YqeoRK/6h4eofUJh/6tQ1Hu/dfrV1bN0+1YeNwIDAQABo4GjMIGg
-MAkGA1UdEwQCMAAwHQYDVR0OBBYEFFgwtZssBZQGuj088LLNHWdl43+FMHQGA1Ud
-IwRtMGuAFPLi6lVlpJrirJ2X9UVs9veMEa3foUikRjBEMQswCQYDVQQGEwJTRTEQ
-MA4GA1UECBMHVXBwc2FsYTEQMA4GA1UEBxMHVXBwc2FsYTERMA8GA1UEChMITXlT
-UUwgQUKCCQCV6Xj1NFDk1TANBgkqhkiG9w0BAQUFAAOBgQAFGeMTFPzFKL9p+ACz
-Jcu9yp8vTLOoBBHwdCe9giy0SZunWfD3h9Hgupmi/ksdEG/korPNf4toMUbuzZ7i
-R+FM+nTR4ovMoEuoJNGkw2sqxijNQeAGSObP8jzKN5XXKWRrkZGD56zIC4e82qaq
-8URDyHR7FSaRLgPEcVBs+GjcjA==
+MIIB5zCCAVACAxAAATANBgkqhkiG9w0BAQQFADBEMQswCQYDVQQGEwJTRTEQMA4G
+A1UECBMHVXBwc2FsYTEQMA4GA1UEBxMHVXBwc2FsYTERMA8GA1UEChMITXlTUUwg
+QUIwHhcNMTAwMTI5MTE1MDIyWhcNMTUwMTI4MTE1MDIyWjAyMQswCQYDVQQGEwJT
+RTEQMA4GA1UECBMHVXBwc2FsYTERMA8GA1UEChMITXlTUUwgQUIwgZ8wDQYJKoZI
+hvcNAQEBBQADgY0AMIGJAoGBAMyaN0kTZtzP4wsToSPteNtOvRH2jA12+aMyVpr4
+oSFqVU5NP+ZnnSaZss2kmtIrWVzXitNgaPgYvcW+FeEqPKPUYcv1EZQXgYH3h4z2
+atLu2OZ39mJmTS4WjQiBSsnGSzHluceKhJZIp0eMDSaQVk7mpW6Ms/Kf/D14m0lu
+hoN3AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAXh+jU18kExz4KDKwf2lp8w7ANIcQ
+A33aFYu9GbgaVjHnhUmByX9FIHQ+icDgJoRRzAQWzmmZAeEmmbPj9b3sX6CE5Dja
+dXh7iZzSzWCVILqO43zm33Y6fIl3ApSGETrEYX1vcYMhihf7F+LuAmthwbRSY9fY
+RrLFnG84kYo1Mgs=
 -----END CERTIFICATE-----

=== modified file 'mysql-test/std_data/client-key.pem'
--- a/mysql-test/std_data/client-key.pem	2009-06-11 16:21:32 +0000
+++ b/mysql-test/std_data/client-key.pem	2010-01-29 14:54:27 +0000
@@ -1,9 +1,15 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIIBOQIBAAJBAOFSMCzZvmQokV16/dnpFDV60pROkUbg259refRMrG4HYTSGdGKn
-qESv+oeHqH1CYf+rUNR7v3X61dWzdPtWHjcCAwEAAQJAXYooM8ZlcuEgj+VKU1ee
-qyEFIMqJJxqcMk+E/nWCM96WxCP3zHNSrqNfSpI3ld7QzMwhdRz+gFLxT2gGNpIw
-MQIhAPxzM/lDihe67X3ADYtDl9ZjA8Pm430x9sXlcxI17tCZAiEA5H1SyFl4mUee
-9VnfSC2XGW7lwz72ZygfVX+b7tLWF08CIEh40gzW5MfXM+KLxdea+fXjyursV5ZT
-R6KcMiKiNQLRAiAcmHqlzFzFgisotai2Fc6VRkXHG7gmzOSvBJt1VjmpDQIge6jf
-2N7whTdvC4ferB+zUlgWQdyvx1c3T4gnt6PYdaY=
+MIICXQIBAAKBgQDMmjdJE2bcz+MLE6Ej7XjbTr0R9owNdvmjMlaa+KEhalVOTT/m
+Z50mmbLNpJrSK1lc14rTYGj4GL3FvhXhKjyj1GHL9RGUF4GB94eM9mrS7tjmd/Zi
+Zk0uFo0IgUrJxksx5bnHioSWSKdHjA0mkFZO5qVujLPyn/w9eJtJboaDdwIDAQAB
+AoGASqk/4We2En+93y3jkIO4pXafIe3w/3zZ7caRue1ehx4RUQh5d+95djuB9u7J
+HEZ7TpjM7QNyao5EueL6gvbxt0LXFvqAMni7yM9tt/HUYtHHPqYiRtUny9bKYFTm
+l8szCCMal/wD9GZU9ByHDNHm7tHUMyMhARNTYSgx+SERFmECQQD/6jJocC4SXf6f
+T3LqimWR02lbJ7qCoDgRglsUXh0zjrG+IIiAyE+QOCCx1GMe3Uw6bsIuYwdHT6as
+WcdPs04xAkEAzKulvEvLVvN5zfa/DTYRTV7jh6aDleOxjsD5oN/oJXoACnPzVuUL
+qQQMNtuAXm6Q1QItrRxpQsSKbY0UQka6JwJBAOSgoNoG5lIIYTKIMvzwGV+XBLeo
+HYsXgh+6Wo4uql3mLErUG78ZtWL9kc/tE4R+ZdyKGLaCR/1gXmH5bwN4B/ECQEBb
+uUH8k3REG4kojesZlVc+/00ojzgS4UKCa/yqa9VdB6ZBz8MDQydinnShkTwgiGpy
+xOoqhO753o2UT0qH8wECQQC99IEJWUnwvExVMkLaZH5NjAFJkb22sjkmuT11tAgU
+RQgOMoDOm6driojnOnDWOkx1r1Gy9NgMLooduja4v6cx
 -----END RSA PRIVATE KEY-----

=== modified file 'mysql-test/std_data/server-cert.pem'
--- a/mysql-test/std_data/server-cert.pem	2009-06-11 16:21:32 +0000
+++ b/mysql-test/std_data/server-cert.pem	2010-01-29 14:54:27 +0000
@@ -1,55 +1,41 @@
 Certificate:
     Data:
-        Version: 3 (0x2)
-        Serial Number: 1 (0x1)
-        Signature Algorithm: sha1WithRSAEncryption
+        Version: 1 (0x0)
+        Serial Number: 1048578 (0x100002)
+        Signature Algorithm: md5WithRSAEncryption
         Issuer: C=SE, ST=Uppsala, L=Uppsala, O=MySQL AB
         Validity
-            Not Before: Jan 28 10:55:13 2009 GMT
-            Not After : Jan 28 10:55:13 2010 GMT
-        Subject: C=SE, ST=Uppsala, O=MySQL AB, CN=localhost/emailAddress=abstract.mysql.developer@stripped
+            Not Before: Jan 29 11:56:49 2010 GMT
+            Not After : Jan 28 11:56:49 2015 GMT
+        Subject: C=SE, ST=Uppsala, O=MySQL AB, CN=localhost
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (512 bit)
-                Modulus (512 bit):
-                    00:b6:8f:e5:b7:b4:86:83:13:8a:f9:bf:63:cb:64:
-                    2d:b9:51:d1:de:ab:7b:45:1f:aa:b5:66:73:13:f9:
-                    a6:07:d5:ba:7c:fa:92:bd:37:e2:ad:87:db:3e:b6:
-                    6a:12:64:f8:ee:17:e3:15:06:2f:a8:82:68:bf:57:
-                    8d:c3:04:98:27
+                Public-Key: (512 bit)
+                Modulus:
+                    00:cd:e4:87:51:9d:72:11:a0:d1:fa:f3:92:8b:13:
+                    1c:eb:f7:e2:9a:2f:72:a8:d6:65:48:d1:69:af:1b:
+                    c0:4c:13:e5:60:60:51:41:e9:ab:a6:bc:13:bb:0c:
+                    5e:32:7c:d9:6c:9e:cd:05:24:84:78:db:80:91:2e:
+                    d8:88:2b:c2:ed
                 Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Basic Constraints: 
-                CA:FALSE
-            X509v3 Subject Key Identifier: 
-                D9:9A:B8:5F:22:EA:04:10:C8:25:7D:82:57:E6:2E:FD:19:29:E7:DA
-            X509v3 Authority Key Identifier: 
-                keyid:F2:E2:EA:55:65:A4:9A:E2:AC:9D:97:F5:45:6C:F6:F7:8C:11:AD:DF
-                DirName:/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB
-                serial:95:E9:78:F5:34:50:E4:D5
-
-    Signature Algorithm: sha1WithRSAEncryption
-        54:07:2d:21:0b:a5:af:3b:58:23:32:5e:56:7f:ab:58:63:48:
-        91:aa:38:90:89:16:f9:cc:bf:a4:0e:78:2b:9f:c5:1b:58:a6:
-        e6:08:8f:2e:ae:97:03:21:9b:f1:cd:c0:26:8f:1d:d7:28:27:
-        a0:8e:81:09:1b:1c:0f:c9:a5:41:3a:2d:44:3f:9c:fa:87:ff:
-        c8:4c:2b:44:f7:1b:c1:3e:4f:01:7f:e9:26:cc:9f:1c:06:b5:
-        0b:27:d1:10:90:be:93:0c:9c:e7:b0:d1:ea:27:99:4e:06:14:
-        0c:7a:e9:c1:52:c5:33:68:bc:61:0d:db:81:3b:57:48:57:bf:
-        42:9a
+    Signature Algorithm: md5WithRSAEncryption
+        73:ce:9c:6e:39:46:b4:14:be:da:3f:f3:1b:ba:90:bc:23:43:
+        d7:82:2a:70:4e:a6:d9:5a:65:5c:b7:df:71:df:75:77:c5:80:
+        a4:af:fa:d2:59:e2:fd:c9:9c:f0:98:95:8e:69:a9:8c:7c:d8:
+        6f:48:d2:e3:36:e0:cd:ff:3f:d1:a5:e6:ab:75:09:c4:50:10:
+        c4:96:dd:bf:3b:de:32:46:da:ca:4a:f1:d6:52:8a:33:2f:ab:
+        f5:2e:70:3f:d4:9c:be:00:c8:03:f9:39:8a:df:5b:70:3c:40:
+        ef:03:be:7c:3d:1d:32:32:f3:51:81:e2:83:30:6e:3d:38:9b:
+        fb:3c
 -----BEGIN CERTIFICATE-----
-MIICkzCCAfygAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJTRTEQ
-MA4GA1UECBMHVXBwc2FsYTEQMA4GA1UEBxMHVXBwc2FsYTERMA8GA1UEChMITXlT
-UUwgQUIwHhcNMDkwMTI4MTA1NTEzWhcNMTAwMTI4MTA1NTEzWjB5MQswCQYDVQQG
-EwJTRTEQMA4GA1UECBMHVXBwc2FsYTERMA8GA1UEChMITXlTUUwgQUIxEjAQBgNV
-BAMTCWxvY2FsaG9zdDExMC8GCSqGSIb3DQEJARYiYWJzdHJhY3QubXlzcWwuZGV2
-ZWxvcGVyQG15c3FsLmNvbTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC2j+W3tIaD
-E4r5v2PLZC25UdHeq3tFH6q1ZnMT+aYH1bp8+pK9N+Kth9s+tmoSZPjuF+MVBi+o
-gmi/V43DBJgnAgMBAAGjgaMwgaAwCQYDVR0TBAIwADAdBgNVHQ4EFgQU2Zq4XyLq
-BBDIJX2CV+Yu/Rkp59owdAYDVR0jBG0wa4AU8uLqVWWkmuKsnZf1RWz294wRrd+h
-SKRGMEQxCzAJBgNVBAYTAlNFMRAwDgYDVQQIEwdVcHBzYWxhMRAwDgYDVQQHEwdV
-cHBzYWxhMREwDwYDVQQKEwhNeVNRTCBBQoIJAJXpePU0UOTVMA0GCSqGSIb3DQEB
-BQUAA4GBAFQHLSELpa87WCMyXlZ/q1hjSJGqOJCJFvnMv6QOeCufxRtYpuYIjy6u
-lwMhm/HNwCaPHdcoJ6COgQkbHA/JpUE6LUQ/nPqH/8hMK0T3G8E+TwF/6SbMnxwG
-tQsn0RCQvpMMnOew0eonmU4GFAx66cFSxTNovGEN24E7V0hXv0Ka
+MIIBtzCCASACAxAAAjANBgkqhkiG9w0BAQQFADBEMQswCQYDVQQGEwJTRTEQMA4G
+A1UECBMHVXBwc2FsYTEQMA4GA1UEBxMHVXBwc2FsYTERMA8GA1UEChMITXlTUUwg
+QUIwHhcNMTAwMTI5MTE1NjQ5WhcNMTUwMTI4MTE1NjQ5WjBGMQswCQYDVQQGEwJT
+RTEQMA4GA1UECBMHVXBwc2FsYTERMA8GA1UEChMITXlTUUwgQUIxEjAQBgNVBAMT
+CWxvY2FsaG9zdDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDN5IdRnXIRoNH685KL
+Exzr9+KaL3Ko1mVI0WmvG8BME+VgYFFB6aumvBO7DF4yfNlsns0FJIR424CRLtiI
+K8LtAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAc86cbjlGtBS+2j/zG7qQvCND14Iq
+cE6m2VplXLffcd91d8WApK/60lni/cmc8JiVjmmpjHzYb0jS4zbgzf8/0aXmq3UJ
+xFAQxJbdvzveMkbaykrx1lKKMy+r9S5wP9ScvgDIA/k5it9bcDxA7wO+fD0dMjLz
+UYHigzBuPTib+zw=
 -----END CERTIFICATE-----

=== modified file 'mysql-test/std_data/server-key.pem'
--- a/mysql-test/std_data/server-key.pem	2009-06-11 16:21:32 +0000
+++ b/mysql-test/std_data/server-key.pem	2010-01-29 14:54:27 +0000
@@ -1,9 +1,9 @@
 -----BEGIN RSA PRIVATE KEY-----
-MIIBOQIBAAJBALaP5be0hoMTivm/Y8tkLblR0d6re0UfqrVmcxP5pgfVunz6kr03
-4q2H2z62ahJk+O4X4xUGL6iCaL9XjcMEmCcCAwEAAQJASA5VwgNb0CKHiPm0ntOk
-hG+54SRX3DmafEy6gRjZIl/bZ/asSLhXUZ+CeohyrQh7BZgYWvykd8pRISL9eKsU
-GQIhAOXkUrOtP/EtjyqNluEqZdG+RZi/7p61JS3Ce13Myu+LAiEAy0uMlV34AJpM
-b40FPKqlHxw8DD/Dt1iKhNVAg8+LDVUCIFjv7fbJDbW2VG63/Cj8CAwOukoP5rbL
-iaicVrHBKrllAiB9+MiaXeopZXNrxDS0jQFYr8Q9yt1aJVFgUkxx4Q9HKQIgZPs0
-KlF3NNNWw78INaAEkyf0IEssnLMsuoCWw0DIOak=
+MIIBOwIBAAJBAM3kh1GdchGg0frzkosTHOv34povcqjWZUjRaa8bwEwT5WBgUUHp
+q6a8E7sMXjJ82WyezQUkhHjbgJEu2Igrwu0CAwEAAQJBAJuwhFbF3NzRpBbEmnqJ
+4GPa1UJMQMLFJF+04tqj/HxJcAIVhOJhGmmtYNw1yjz/ZsPnfJCMz4eFOtdjvGtf
+peECIQDmFFg2WLvYo+2m9w9V7z4ZIkg7ixYkI/ObUUctfZkPOQIhAOUWnrvjFrAX
+bIvYT/YR50+3ZDLEc51XxNgJnWqWYl1VAiEAnTOFWgyivFC1DgF8PvDp8u5TgCt2
+A1d1GMgd490O+TECIC/WMl0/hTxOF9930vKqOGf//o9PUGkZq8QE9fcM4gtlAiAE
+iOcFpnLjtWj57jrhuw214ucnB5rklkQQe+AtcARNkg==
 -----END RSA PRIVATE KEY-----

=== modified file 'mysql-test/std_data/server8k-cert.pem'
--- a/mysql-test/std_data/server8k-cert.pem	2009-06-11 16:21:32 +0000
+++ b/mysql-test/std_data/server8k-cert.pem	2010-01-29 14:54:27 +0000
@@ -1,138 +1,125 @@
 Certificate:
     Data:
-        Version: 3 (0x2)
-        Serial Number: 4 (0x4)
-        Signature Algorithm: sha1WithRSAEncryption
+        Version: 1 (0x0)
+        Serial Number: 1048579 (0x100003)
+        Signature Algorithm: md5WithRSAEncryption
         Issuer: C=SE, ST=Uppsala, L=Uppsala, O=MySQL AB
         Validity
-            Not Before: Jan 28 11:12:27 2009 GMT
-            Not After : Jan 28 11:12:27 2010 GMT
+            Not Before: Jan 29 12:01:53 2010 GMT
+            Not After : Jan 28 12:01:53 2015 GMT
         Subject: C=SE, ST=Uppsala, O=MySQL AB, CN=server
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
-            RSA Public Key: (8192 bit)
-                Modulus (8192 bit):
-                    00:c0:8f:22:03:24:59:67:46:14:d6:8f:60:09:58:
-                    06:07:45:f1:78:71:55:f1:ea:b9:30:8a:cd:c3:3c:
-                    b9:bf:65:6e:18:ed:a0:b8:c9:19:56:6f:c4:90:19:
-                    c8:65:09:db:ff:bf:82:a1:08:ad:01:4f:5a:a3:d4:
-                    3d:78:7e:4b:4a:01:a4:7d:e8:7b:05:3e:7d:d8:b9:
-                    55:58:60:d6:1c:ce:e8:32:62:2c:19:60:f3:ed:05:
-                    99:6d:c9:77:07:2e:11:6d:0b:9a:c7:68:38:46:e8:
-                    fa:31:80:df:e8:79:f0:f1:fd:a9:94:c3:fa:0d:f5:
-                    78:ac:49:7e:d5:17:fd:e1:ee:44:f3:c7:0e:30:32:
-                    5d:a9:19:25:e4:bb:21:1d:fe:3c:84:48:40:f5:58:
-                    f4:bf:13:8c:85:68:bb:ec:f5:dd:c6:38:d1:b0:77:
-                    1f:a6:8e:4f:8d:e2:6f:49:74:f5:3f:90:65:8e:99:
-                    1e:59:9c:1c:b5:26:24:c4:b1:de:1e:fb:96:65:c4:
-                    31:14:1a:53:b8:5e:62:8a:c7:04:f7:b4:36:a4:af:
-                    07:c8:27:06:ed:dd:e6:f4:8c:62:f1:65:40:d0:9f:
-                    9f:a9:14:c8:8e:8b:74:d6:67:5a:d0:c9:4d:35:a1:
-                    d5:7b:39:3a:42:9f:e4:d0:f4:c6:0f:2e:42:30:4b:
-                    56:b2:3d:6d:8e:2d:58:c5:69:99:35:49:95:95:99:
-                    b6:87:29:2b:32:d1:50:08:cd:25:14:48:6d:10:99:
-                    85:61:3c:41:26:21:55:cc:1f:cf:ad:b0:2f:b9:89:
-                    d8:4e:a0:18:ff:75:1d:b6:97:7c:c5:fa:8b:dc:93:
-                    17:86:0a:64:d4:09:35:d5:83:34:6d:5c:6d:c6:8c:
-                    cd:b9:ec:c2:93:c6:c1:b7:cc:04:6f:22:e0:07:bf:
-                    e0:d9:9b:2f:d5:a0:50:cc:f9:f0:95:83:8f:f4:30:
-                    83:72:94:d7:b5:4b:da:cc:9f:54:3b:8d:78:77:0b:
-                    24:6c:0f:c2:96:61:96:2f:b8:5f:b5:7a:ab:7a:5b:
-                    97:7a:a9:ad:40:8b:f2:d6:c6:8d:81:d9:94:61:8f:
-                    9d:03:c5:b9:10:03:68:83:bf:04:81:cc:ac:bd:34:
-                    89:e8:d4:8d:43:20:e2:b6:a4:11:3d:15:2a:82:0c:
-                    d6:3a:6a:8c:62:d4:93:bc:c3:80:bf:1b:b4:2b:0a:
-                    7a:34:f0:cd:1e:82:3f:25:0f:d1:04:a8:0a:05:19:
-                    b0:d6:16:83:39:af:0b:45:7d:cb:14:7e:4d:aa:aa:
-                    c2:39:a8:46:38:ab:bd:ab:2a:bd:34:43:7f:da:25:
-                    de:2b:fb:69:3b:fe:3b:87:fd:98:94:76:4a:bf:04:
-                    a3:31:e3:3a:ff:6f:04:fa:fa:24:e4:2a:89:e9:0e:
-                    bf:44:4c:72:85:82:3c:89:4a:03:63:01:41:92:53:
-                    d0:82:60:6e:d8:ff:8c:a2:b4:1a:3b:20:6d:ae:74:
-                    92:30:4e:48:e3:51:a6:cb:73:97:06:13:03:32:23:
-                    9b:7d:a2:c7:3a:a9:af:97:8c:51:ed:fe:fa:b4:b4:
-                    1a:a3:87:fc:cf:8c:8e:e6:80:15:03:fd:fe:7d:bd:
-                    b1:76:f1:5f:b3:09:2b:4c:4d:a7:7c:b5:72:b1:d6:
-                    db:38:c0:67:a4:54:bc:87:09:a5:39:ba:1a:7e:3f:
-                    74:60:ad:3d:4b:be:94:53:f3:64:16:c7:33:35:ec:
-                    41:00:95:b6:de:99:62:a2:7a:28:9a:45:4d:fa:cd:
-                    a6:77:f6:de:58:72:50:c8:7d:69:38:db:07:04:84:
-                    d8:4d:39:f7:50:13:43:ae:2d:af:45:a4:2a:39:56:
-                    3c:b8:b7:d8:26:a4:36:c9:23:aa:aa:b8:49:0b:21:
-                    ba:9e:7a:2b:7f:4d:29:9f:0e:00:1e:b4:5e:a6:fa:
-                    49:fe:8d:e5:74:57:d8:ba:d9:92:2c:d2:ac:84:1d:
-                    f2:a6:a4:44:1c:bf:88:41:32:7e:d1:c3:2f:6e:bc:
-                    0f:5d:19:a6:8f:74:2b:67:ba:dd:a9:db:68:b5:ce:
-                    9d:25:48:df:54:08:d0:1d:4f:2e:5b:24:bc:05:0f:
-                    fb:58:46:fa:02:ca:53:93:29:cf:10:27:c2:a0:18:
-                    d0:f5:d4:b9:3c:5e:df:8e:6c:f5:7c:b9:b4:54:cc:
-                    39:16:5d:3c:da:96:b3:c3:6c:d4:70:5d:d3:30:a7:
-                    a6:bd:6f:dd:41:bc:a8:de:42:60:59:9a:85:25:0d:
-                    2a:45:c3:05:b4:6e:7a:4a:4d:ca:8c:0a:e5:6c:34:
-                    bc:20:9b:6d:4a:ca:ca:b6:a6:3a:a0:db:c3:0e:20:
-                    1a:12:1b:77:dd:cb:1d:7f:c3:0d:0d:e7:c1:fd:96:
-                    d2:c7:68:80:99:a0:d9:8a:33:21:a3:8b:a2:5a:a7:
-                    7e:27:06:02:7f:ed:60:11:37:34:54:17:7f:4d:90:
-                    14:1e:69:37:0d:ba:f0:2b:f0:a3:2d:62:79:c8:76:
-                    a8:ea:c8:e7:3b:1f:c6:4f:c2:0c:d7:ac:f0:77:53:
-                    5d:f0:50:b4:df:9b:03:ca:4d:41:e1:18:b2:25:30:
-                    86:1d:63:e5:67:b1:53:cd:6b:4e:83:1a:b9:5e:2d:
-                    05:15:6b:d4:8e:b1:97:fc:31:03:57:cb:bf:27:7f:
-                    cd:5f:27:7e:66:e7:3c:17:09:b6:11:2a:4f:33:cd:
-                    eb:1a:d3:6f:d5:15:8b:8b:ce:68:6b:7e:9a:95:e5:
-                    74:7f:17:57:d9
+                Public-Key: (8192 bit)
+                Modulus:
+                    00:ca:aa:1d:c4:11:ec:91:f0:c7:ff:5f:90:92:fc:
+                    40:0c:5e:b7:3d:00:c5:20:d5:0f:89:31:07:d7:41:
+                    4c:8b:60:80:aa:38:14:de:93:6b:9c:74:88:41:68:
+                    b5:02:41:01:2d:86:a2:7a:95:53:5e:7b:67:2f:6c:
+                    1e:29:51:f9:44:fd:4a:80:be:b2:23:a1:3e:1b:38:
+                    cf:88:c4:71:ee:f8:6b:41:c5:2d:c0:c3:52:ac:59:
+                    7d:81:34:19:95:32:b8:9a:51:b6:41:36:d4:c4:a1:
+                    ae:84:e6:38:b9:e8:bf:96:be:19:7a:6b:77:4d:e0:
+                    de:e6:b3:b6:6b:bc:3d:dd:68:bc:4b:c4:eb:f5:36:
+                    93:ed:56:a2:15:50:8a:10:e8:d6:22:ed:6c:b1:cd:
+                    c3:18:c9:f6:0a:e1:de:61:65:62:d6:14:41:8c:b5:
+                    fb:14:68:c1:cf:12:5d:41:21:9d:57:11:43:7d:bb:
+                    43:2c:21:bb:c3:44:7d:a8:cf:1f:c3:71:75:b5:47:
+                    c2:7d:ce:38:3c:73:64:9e:15:d8:a7:27:cf:bd:40:
+                    c8:45:08:e3:c8:39:a8:0b:8e:c2:5b:7b:f1:47:91:
+                    12:91:cc:e1:00:e0:94:5b:bd:32:e4:0c:8d:c3:be:
+                    cc:76:32:52:12:69:b0:18:e0:b0:c2:76:34:5a:5f:
+                    79:d9:f6:81:9d:02:0a:61:69:1c:33:ce:49:fa:76:
+                    03:1e:07:5b:27:0b:bf:34:9e:34:96:b8:03:9b:50:
+                    3a:6a:2f:17:7a:14:cf:65:63:00:37:52:a8:73:ce:
+                    4b:14:40:f4:d2:9a:56:54:33:b8:77:2e:42:5b:8f:
+                    ec:1f:18:f4:ad:ab:8a:4a:8d:6d:70:25:f3:58:e7:
+                    cb:66:51:14:7d:16:f4:eb:6d:56:76:76:51:6e:d6:
+                    1d:da:d3:8d:c0:64:5a:67:4e:af:e2:bf:33:d1:b8:
+                    f6:2a:fc:57:87:a7:35:5e:80:c9:ac:fc:87:c9:71:
+                    17:91:bf:b7:4d:a3:ed:3c:1b:27:f4:66:a0:f9:46:
+                    03:27:cc:ea:80:f6:4b:40:f6:41:94:cd:bd:0a:b3:
+                    ef:26:be:de:6f:69:ae:0f:3f:1c:55:63:33:90:9b:
+                    ed:ca:5a:12:4d:de:4b:06:c2:a2:92:b0:42:3d:31:
+                    af:a4:15:12:15:f8:8a:e9:88:8d:cf:fd:85:66:50:
+                    6f:11:f1:9f:48:f3:b5:ba:9d:86:68:24:a2:5d:a8:
+                    7c:54:42:fa:d8:b5:c5:f2:dd:0e:0f:d0:68:e4:54:
+                    7e:c5:b9:a0:9b:65:2d:77:f4:8f:b9:30:0a:d5:86:
+                    5c:ed:c9:7c:d1:da:9d:0d:63:50:ee:e5:1e:92:63:
+                    cc:a2:0c:e8:4a:96:02:4d:dc:8f:df:7c:8f:08:18:
+                    a8:30:88:d7:af:89:ad:fc:57:4b:10:f9:f1:cb:48:
+                    e8:b6:3b:c8:3f:fc:c2:d3:d1:4a:10:3c:1b:6b:64:
+                    dc:e5:65:1e:5b:b2:da:b1:e2:24:97:8f:ee:c0:4b:
+                    8e:18:83:7c:17:a6:3c:45:b3:60:06:23:f2:2f:18:
+                    13:9e:17:8a:c6:72:79:8c:4d:04:f3:9d:ea:e0:25:
+                    d3:33:8c:1e:11:47:63:1f:a5:45:3f:bd:85:b3:fe:
+                    a5:68:ee:48:b7:0c:a4:c9:7f:72:d0:75:66:9b:6a:
+                    f9:a0:50:f3:a8:59:6d:a3:dd:38:4f:70:2b:bb:ff:
+                    92:2e:71:ab:ef:e9:00:ed:0d:d1:b4:6f:f0:8e:b2:
+                    09:fb:4d:61:0d:d9:10:d5:54:11:cd:03:94:84:fd:
+                    a8:68:e4:45:6e:1e:6a:1e:2f:85:a1:6d:f5:b6:c0:
+                    f1:ee:f7:36:e9:fe:c2:f7:ad:cc:13:46:5b:88:42:
+                    f0:2d:1f:b5:0e:7e:b5:2b:e4:8d:ab:b9:87:30:6a:
+                    3d:12:f4:ad:f3:1c:ac:cc:1a:48:29:2a:96:7b:80:
+                    00:0b:6e:59:87:bf:a3:ca:70:99:1b:1c:fd:72:3d:
+                    b2:d3:94:4a:cf:55:75:be:1f:40:ec:55:35:48:2d:
+                    55:f0:00:da:3c:b0:60:ba:11:32:66:54:0b:be:06:
+                    a4:5e:b7:c9:59:bb:4d:f4:92:06:26:48:6e:c2:12:
+                    d4:7c:f0:20:b8:a2:e1:bc:6a:b6:19:0e:37:47:55:
+                    c9:f2:49:0d:96:75:a2:84:64:bf:34:fc:be:b2:41:
+                    e4:f5:88:eb:e1:b7:26:a5:e5:41:c2:20:0c:f6:e2:
+                    a8:a5:e7:76:54:a5:fb:4b:80:05:7d:18:85:7a:ba:
+                    bc:b7:ad:c0:2f:60:85:cc:15:12:1c:2f:0a:9e:f3:
+                    7c:40:cf:f4:3e:23:d2:95:ca:d0:06:58:52:f0:84:
+                    d8:0f:3d:eb:ff:12:68:94:79:8f:be:40:29:5f:98:
+                    c8:90:6c:05:2f:99:8c:2a:63:78:1f:23:b1:29:c5:
+                    e7:49:c9:b2:92:0f:53:0b:d5:71:28:17:c2:19:bf:
+                    60:bf:7c:87:a8:ab:c1:f4:0a:c1:b8:d2:68:ee:c1:
+                    ce:a7:13:13:17:6d:24:5d:a2:37:a6:d7:7d:48:8b:
+                    2b:74:2d:40:2e:ca:19:d5:b6:3e:6c:42:71:fa:cf:
+                    85:87:f9:de:80:73:8b:89:f4:70:f0:d8:d7:ff:40:
+                    41:9c:c7:15:6d:9b:6e:4c:b5:52:02:99:79:32:73:
+                    ca:26:a0:ac:31:6f:c4:b0:f5:da:bb:c2:1f:e0:9f:
+                    44:ba:25:f7:9f
                 Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Basic Constraints: 
-                CA:FALSE
-            X509v3 Subject Key Identifier: 
-                58:12:24:59:A7:3C:29:15:89:5A:C2:12:DB:E7:A5:42:10:21:B7:BA
-            X509v3 Authority Key Identifier: 
-                keyid:F2:E2:EA:55:65:A4:9A:E2:AC:9D:97:F5:45:6C:F6:F7:8C:11:AD:DF
-                DirName:/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB
-                serial:95:E9:78:F5:34:50:E4:D5
-
-    Signature Algorithm: sha1WithRSAEncryption
-        cd:cb:5c:83:35:ea:cb:cb:c3:a8:c3:95:e2:e6:6f:4d:d8:e4:
-        ee:41:dd:3f:35:82:ac:2f:fd:63:89:4f:3a:19:d7:81:75:b3:
-        a3:fc:36:b2:12:d5:c6:56:bc:13:60:37:33:6e:a0:d8:ae:7c:
-        88:f9:4b:ee:7b:1f:c8:f0:56:19:07:4d:bb:45:52:1c:78:81:
-        07:7c:13:86:b8:86:70:85:e4:71:25:58:78:d1:be:de:22:82:
-        6d:1a:4b:06:ac:f0:e8:50:87:c7:69:64:c2:61:43:cd:96:06:
-        a6:7e:09:a9:02:01:2a:a2:40:f3:cd:10:80:48:d0:34:55:40:
-        b9:ce
+    Signature Algorithm: md5WithRSAEncryption
+        08:75:dc:b9:3f:aa:b6:7e:81:7a:39:d1:ee:ed:44:b6:ce:1b:
+        37:c4:4c:19:d0:66:e6:eb:b5:4f:2a:ef:95:58:64:21:55:01:
+        12:30:ac:8a:95:d1:06:de:29:46:a4:f1:7d:7f:b0:1e:d2:4e:
+        fb:f6:fa:9a:74:be:85:62:db:0b:82:90:58:62:c5:5f:f1:80:
+        02:9f:c5:fb:f3:6b:b0:b4:3b:04:b1:e5:53:c2:d0:00:a1:1a:
+        9d:65:60:6f:73:98:67:e0:9c:c8:12:94:79:59:bf:43:7b:f5:
+        77:c8:8f:df:b1:cd:11:1c:01:19:99:c2:22:42:f7:41:ae:b4:
+        b8:1a
 -----BEGIN CERTIFICATE-----
-MIIGJTCCBY6gAwIBAgIBBDANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJTRTEQ
-MA4GA1UECBMHVXBwc2FsYTEQMA4GA1UEBxMHVXBwc2FsYTERMA8GA1UEChMITXlT
-UUwgQUIwHhcNMDkwMTI4MTExMjI3WhcNMTAwMTI4MTExMjI3WjBDMQswCQYDVQQG
-EwJTRTEQMA4GA1UECBMHVXBwc2FsYTERMA8GA1UEChMITXlTUUwgQUIxDzANBgNV
-BAMTBnNlcnZlcjCCBCIwDQYJKoZIhvcNAQEBBQADggQPADCCBAoCggQBAMCPIgMk
-WWdGFNaPYAlYBgdF8XhxVfHquTCKzcM8ub9lbhjtoLjJGVZvxJAZyGUJ2/+/gqEI
-rQFPWqPUPXh+S0oBpH3oewU+fdi5VVhg1hzO6DJiLBlg8+0FmW3JdwcuEW0Lmsdo
-OEbo+jGA3+h58PH9qZTD+g31eKxJftUX/eHuRPPHDjAyXakZJeS7IR3+PIRIQPVY
-9L8TjIVou+z13cY40bB3H6aOT43ib0l09T+QZY6ZHlmcHLUmJMSx3h77lmXEMRQa
-U7heYorHBPe0NqSvB8gnBu3d5vSMYvFlQNCfn6kUyI6LdNZnWtDJTTWh1Xs5OkKf
-5ND0xg8uQjBLVrI9bY4tWMVpmTVJlZWZtocpKzLRUAjNJRRIbRCZhWE8QSYhVcwf
-z62wL7mJ2E6gGP91HbaXfMX6i9yTF4YKZNQJNdWDNG1cbcaMzbnswpPGwbfMBG8i
-4Ae/4NmbL9WgUMz58JWDj/Qwg3KU17VL2syfVDuNeHcLJGwPwpZhli+4X7V6q3pb
-l3qprUCL8tbGjYHZlGGPnQPFuRADaIO/BIHMrL00iejUjUMg4rakET0VKoIM1jpq
-jGLUk7zDgL8btCsKejTwzR6CPyUP0QSoCgUZsNYWgzmvC0V9yxR+TaqqwjmoRjir
-vasqvTRDf9ol3iv7aTv+O4f9mJR2Sr8EozHjOv9vBPr6JOQqiekOv0RMcoWCPIlK
-A2MBQZJT0IJgbtj/jKK0Gjsgba50kjBOSONRpstzlwYTAzIjm32ixzqpr5eMUe3+
-+rS0GqOH/M+MjuaAFQP9/n29sXbxX7MJK0xNp3y1crHW2zjAZ6RUvIcJpTm6Gn4/
-dGCtPUu+lFPzZBbHMzXsQQCVtt6ZYqJ6KJpFTfrNpnf23lhyUMh9aTjbBwSE2E05
-91ATQ64tr0WkKjlWPLi32CakNskjqqq4SQshup56K39NKZ8OAB60Xqb6Sf6N5XRX
-2LrZkizSrIQd8qakRBy/iEEyftHDL268D10Zpo90K2e63anbaLXOnSVI31QI0B1P
-LlskvAUP+1hG+gLKU5MpzxAnwqAY0PXUuTxe345s9Xy5tFTMORZdPNqWs8Ns1HBd
-0zCnpr1v3UG8qN5CYFmahSUNKkXDBbRuekpNyowK5Ww0vCCbbUrKyramOqDbww4g
-GhIbd93LHX/DDQ3nwf2W0sdogJmg2YozIaOLolqnficGAn/tYBE3NFQXf02QFB5p
-Nw268Cvwoy1iech2qOrI5zsfxk/CDNes8HdTXfBQtN+bA8pNQeEYsiUwhh1j5Wex
-U81rToMauV4tBRVr1I6xl/wxA1fLvyd/zV8nfmbnPBcJthEqTzPN6xrTb9UVi4vO
-aGt+mpXldH8XV9kCAwEAAaOBozCBoDAJBgNVHRMEAjAAMB0GA1UdDgQWBBRYEiRZ
-pzwpFYlawhLb56VCECG3ujB0BgNVHSMEbTBrgBTy4upVZaSa4qydl/VFbPb3jBGt
-36FIpEYwRDELMAkGA1UEBhMCU0UxEDAOBgNVBAgTB1VwcHNhbGExEDAOBgNVBAcT
-B1VwcHNhbGExETAPBgNVBAoTCE15U1FMIEFCggkAlel49TRQ5NUwDQYJKoZIhvcN
-AQEFBQADgYEAzctcgzXqy8vDqMOV4uZvTdjk7kHdPzWCrC/9Y4lPOhnXgXWzo/w2
-shLVxla8E2A3M26g2K58iPlL7nsfyPBWGQdNu0VSHHiBB3wThriGcIXkcSVYeNG+
-3iKCbRpLBqzw6FCHx2lkwmFDzZYGpn4JqQIBKqJA880QgEjQNFVAuc4=
+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
+sc0RHAEZmcIiQvdBrrS4Gg==
 -----END CERTIFICATE-----

=== modified file 'mysql-test/std_data/server8k-key.pem'
--- a/mysql-test/std_data/server8k-key.pem	2009-06-11 16:21:32 +0000
+++ b/mysql-test/std_data/server8k-key.pem	2010-01-29 14:54:27 +0000
@@ -1,99 +1,99 @@
 -----BEGIN RSA PRIVATE KEY-----
-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
+MIISKgIBAAKCBAEAyqodxBHskfDH/1+QkvxADF63PQDFINUPiTEH10FMi2CAqjgU
+3pNrnHSIQWi1AkEBLYaiepVTXntnL2weKVH5RP1KgL6yI6E+GzjPiMRx7vhrQcUt
+wMNSrFl9gTQZlTK4mlG2QTbUxKGuhOY4uei/lr4Zemt3TeDe5rO2a7w93Wi8S8Tr
+9TaT7VaiFVCKEOjWIu1ssc3DGMn2CuHeYWVi1hRBjLX7FGjBzxJdQSGdVxFDfbtD
+LCG7w0R9qM8fw3F1tUfCfc44PHNknhXYpyfPvUDIRQjjyDmoC47CW3vxR5ESkczh
+AOCUW70y5AyNw77MdjJSEmmwGOCwwnY0Wl952faBnQIKYWkcM85J+nYDHgdbJwu/
+NJ40lrgDm1A6ai8XehTPZWMAN1Koc85LFED00ppWVDO4dy5CW4/sHxj0rauKSo1t
+cCXzWOfLZlEUfRb0621WdnZRbtYd2tONwGRaZ06v4r8z0bj2KvxXh6c1XoDJrPyH
+yXEXkb+3TaPtPBsn9Gag+UYDJ8zqgPZLQPZBlM29CrPvJr7eb2muDz8cVWMzkJvt
+yloSTd5LBsKikrBCPTGvpBUSFfiK6YiNz/2FZlBvEfGfSPO1up2GaCSiXah8VEL6
+2LXF8t0OD9Bo5FR+xbmgm2Utd/SPuTAK1YZc7cl80dqdDWNQ7uUekmPMogzoSpYC
+TdyP33yPCBioMIjXr4mt/FdLEPnxy0jotjvIP/zC09FKEDwba2Tc5WUeW7LaseIk
+l4/uwEuOGIN8F6Y8RbNgBiPyLxgTnheKxnJ5jE0E853q4CXTM4weEUdjH6VFP72F
+s/6laO5ItwykyX9y0HVmm2r5oFDzqFlto904T3Aru/+SLnGr7+kA7Q3RtG/wjrIJ
++01hDdkQ1VQRzQOUhP2oaORFbh5qHi+FoW31tsDx7vc26f7C963ME0ZbiELwLR+1
+Dn61K+SNq7mHMGo9EvSt8xyszBpIKSqWe4AAC25Zh7+jynCZGxz9cj2y05RKz1V1
+vh9A7FU1SC1V8ADaPLBguhEyZlQLvgakXrfJWbtN9JIGJkhuwhLUfPAguKLhvGq2
+GQ43R1XJ8kkNlnWihGS/NPy+skHk9Yjr4bcmpeVBwiAM9uKoped2VKX7S4AFfRiF
+erq8t63AL2CFzBUSHC8KnvN8QM/0PiPSlcrQBlhS8ITYDz3r/xJolHmPvkApX5jI
+kGwFL5mMKmN4HyOxKcXnScmykg9TC9VxKBfCGb9gv3yHqKvB9ArBuNJo7sHOpxMT
+F20kXaI3ptd9SIsrdC1ALsoZ1bY+bEJx+s+Fh/negHOLifRw8NjX/0BBnMcVbZtu
+TLVSApl5MnPKJqCsMW/EsPXau8If4J9EuiX3nwIDAQABAoIEAElnTjqq502AsV+c
+hGfId4ZDdAjjU4LtyJ+/I4DihM/ilxeQEnb/XDWhu4w9WXpEgyGzJvxRQ43wElKJ
+zW7X4voK58Yzy5++EhmX/QsjY8TTMz3yJf0wgawtCZkXfsCcS2KRf/qk2nGRwf0e
+yaMEWwhFOEMv01lgvjs/Ei55Usrz2Wd0HqaFKxUGkNQ5hJhVTOH/rqPDzAsZc0VD
+w+Dw8NhrI8bMTvF4c+IFW8NwYmWbuh87CTxdx30VPJI82ttWJ/UN1bLtU08J2IKt
+lPgOIl8ArMjcTGxD/cqZ3Wl3Pc/XCqvGUiSYMwP7Rgh1R4+DdtjEpxdGMmMAVuVI
+HPQyqpa4gv+UMqBPish0yjSuM7jXnztINOvg9Vk1sxC5AT9eaRltmiS1s+lVxe+T
+43ulf0ccYXJD/WclWSGCwloNFuokPIV+Lgo1pKsp4XDgoxQfkXwH8Q4dEqebY9rT
+Tv9FGb1bMbdl22X1oSu2lBltBZaB/QnruV7L2GaQ0tqLKizgBRuvZFSE+DWdMb6d
+9mnEB8LWtca/nzogXb5qv4GEMUX4FUAmSf1FnGWZwwDi1DFfJ860RVKf0xokGGQ3
+cm3H/F4veds88Z1hsAu0bG8h/bEAim+Whvag995cFHDD4on41KXW8wX1on9VFA1W
+CkaGUPhLRytXDBVCSJkOYYFSJlb2wqONiWe4Tn5hsantCfliTj/GVkgDq2h7dAGR
+WyoqTntJAv/xJsUOV9WmGXnWNeZX8BSO3P5dnXnMzhCWQGoprXmWFyJ3TYCJ2+CO
+rzkZbtuKvTvGc3sDJgrSVmmg0BrOkH+GyYVlJdTDBmfzoORludDCFHECa8oK7NwY
+t3o0eNlG6IqTxl2HIoPneW9nXFQtCXv6tpJjljwjlz5WpJG+kBW6bDedcxZu7olZ
+fqtnyZTB2SjzzbGdQ4JvFup8MxNyPvYiqumQXJgkyXFVDl/UFhjWuGe04i8NBJgJ
+xORcjfgLrKH1XKVBWPJdh/2YeUKIIvQ9RB4WVqXgGmD/21tgv1bVEMYabh23e/HE
+Fe1U2XQPJKxGCEtG6b4zhFP+PeZACS+Vk5IVJYK9n4SepPBPgX/wbJLOcKGpsKjp
+yx5WjopMO6T+VUV8HIduuZ+E8+uAILHDmo2Bq+LHblaxd4SkM0+hL2H36imK5CUO
+5fLuvHW88LvFtQw6xhP20s+BnmgzE5ZvNG4Iedkjvwe9HmdNDew0UYT5vNJN0ehh
+OlraBC++JYwEclrBD9SRvprT63XKDG735pPvzLQi7WKDCBn1/JEgxDIO8nkMewOZ
+FU48Mdmkn9wqPeIigQciwl62fuAQCGRG+RXMQqra4A1apqMZQEauTK50VhHDGdbc
+ye9LHaECggIBAO9lAzoYS/Lu0ticMt24P8BSbGdxSNIpEyIlTTs+7A0UjpfXsoK9
+4EJWZ7lhgbQh+SCTS662SeC+s8M6bT+3mELxUC5S/N3aCPyfjcM3JaoACkI9+VMn
+9otJZjAEwH7cNpMN0Xa8fHCEma3l3XKiVxEJbuJC86S5mpkjeXVnDajAidBtevBd
+LWJ9n2yXk+ZKUyI0mjpqItwUxOgQ/MOIvqAu66xyjg08/I1QQTuIrReAA+oaVKhp
+c42Ufn26hUhNrQCBAtMAO3VC/chciet6vEMNEM13GqLp4+PcPhRX90gO4+bNrScD
+WgiW/jc24CGan8gAenBWC/3l/C6JUsMp+ZYmPozsa0zo6edgiO/f2KXe5nP87wZT
+MxaYJgnyXJxMefI79kUHPrhpXZxuiSCEWLhCBN34Lhpr2L491i2g/FJj9i6N3EzE
+N3ic5Q63o4QFusjqIm3taQQFoGP2Cgg9owz5WJ0uRz/gtOE3XQiQA7+ozoAXOlTw
+pJK5MMtVrEoOLIbVJIpxfDcKDp3yorR8QCQLHgDBmFeNCDmk+7YP33dRIc/AVNLF
+q7cecqEc7D8AkXX8Q53GfCEg+uqbdeMQXK4BUE9iwRK9RiFhas/RJe73+Iio3S0L
+ekLpnnOfvk744ws+JWsLpsfC/ZE7OxBLPtq2xvGl/RT2G7tCjmpX3CbPAoICAQDY
+uOEJks2T105EcMPJjzNHCCqjK6S7qZaWkF3KT1Z0Mu5oUZwwHamsMg4BQJ2mjMrL
+fRBKfXQLA6vgE7zysw3F300RDxE1RVow5+JLDQ4bqupp27/M0a8fuwksyOdKHqCV
+YHzuTCxbVIFZawTjfOxJVXDHKCFCilfY1LsA+V+oFe3Ej8YYxWXkXA9ZLigpmt3s
+Wu6eFcZgF3utzIGjI6eP6lL5bWp6Bh9Avp2xrOvpFwE2m02Y7/Zom6MT4DXvByY2
+KHHQLsasEMpeLuxQXjLeTocwcxBwBFKhX95yFuv31k00VydT+NExtaZeUYi9l19J
+WmM4GjFjAqa3uUwMNVv5JfWtKMyk4FOox2XftLvMiIhV95B8hAGxtYr3hPkGg80O
+AWPq6OKUD332COXRaHkmL5aQdN3gP5zh9+rH6icLrrZbrQidVRyDw03doRoGrH7i
+ixXLyYoW80PHgqUDPohd5bFkZpi2vwXMl1YQ2TfN9TvYFSGme9YCm9ZuypnqauW/
+aAf0FI1MNwS+XDREtzPdFi0me6WxpKL4a2Z3GGNxIFuBjQ/uydWpjxkny9qI3KAp
+SgjI3kBUDGq3gf0R+Xo/d4d/4asK9Nv2Fi0X+RfGqioFaTbQl/1zhNdvhP9IcwEJ
+DLVQ3UhMdfg285RarC2Sihui0M8Smi9od9Dj6rdWMQKCAgEAiQVRFoRnnDGz/wVQ
+W/Wkj6jdoUuG+btG10lwbhOyuj3k6+Yqp4iUfoPENKgpu/eiB1InhGWT3Y5ph7m+
+ZDTqco56bTlUwIqWkDmmw3CiHy6MsKOWPFFoXQry8VMW9sWGex7yoDp8I07SQ2WJ
+HZ7rpLW4gMr/d25AnZxfXaJRgCBMAT9YmZFLc88hW99aaPproO1oxTyQnVVJ6uYm
+NqjjKv4QKJEc21jn2N5xp+iv4f6Evw65G/fXitbOm5oRxXOoLNyqyCie35wrc+37
+hwumC97DmkasuUiUBoy9/5jl0ZmsOiPJEsZpVvdNpD7FhJZjE++qJPgrPvTPJbe1
+5jz1PUrAjJqZQ9kgYC2x01JVR4NQdlz0VrNyT2FgjFrrRQ7E0bAeYh4meRjd2rat
+yC3YNgabkI0HnlnSIfl0yIMXSPUsKDNMP6gjc+aheI4FioBZC7xvXmn/rKynw+9E
+iLj2xWtGnBir8VTlUu8EUe1UJ/Qv1cL1wT5HhC95TTjJN03rkHUYyCDyjvIzsZX6
+KMHhWIAAeUBVuO7hIVVcOTXWmw2WA7o7ErTPdy13QN40Hk9t8pEkBn9f9vpQg83d
+aMypr3LTC80jY11wcZS3tSEpzCCkYVv91FV4cioTZmytWbg9A+dbNWzi1f22ctTr
+FoVrAXaSYie2trOy5bjPmPCW8qMCggIBALQUKymBSkDmTqqf6I+65ajIKGWdBizJ
+Jc/F9aj9c6DqER+tcFKq0ym6DdkMj/KsWnXrXXYH+DyOuGpg/EfOcEtS2P6rvmi9
+T8wDYg1qs6ZZxp5fcmgGc7Wx/FWyOj1kZZq5qhV4RgM9nJ1oR4+fZdcpn6RcvAZG
+XehWG20byVgpoIAL11cN7zRpKne32rd3b5/NjyjcfxGpcaNgovej0L/MvVV0jV0H
+aUCrIu1X+k6cRu3Q7hF+kwkpCcCiNS6AikfGI4wQ0hR3fy/zXXkKTMpcBglEEwyB
+Cwf8WSID2d79uvka0hr8TRc5ERyeMzkWZp7U9EzRtufGdDGFTqN2Uw4bdKCFnkYC
+AIHl7ciMrN+vM1n7c5uDNMUtTGOPojy/l8tjbFrtWBgfJ1Mg4ZW3cbNBJ6Kw+Qw0
+z28USYoEDp2uduiGRvo0lpUF29Wk37Nb8bLcTygeNxgK2u8Up3iipT0gdt4uQgbX
+g0IVHfayB6SjeS57oJJto85XHz7AKlSWroD1OGagDSifLtneU7AlanryymGHrI6H
+dsNkuqeLJFYDxQVI6UxJebiCpyxiPxwp9wtX8SS3SEyOZL5GzLn6ypGiCH1CTpW0
+EHHSy3V4DUGOc4w7eMirAnbSkxCfOmBA70NNw/uFY2XlQHKow0T0fImfKIeJagbT
+B0GPDYvUpLKBAoICAQCzYnq8xupXK7lvTLaj936qGSe54OC2sj9+UpsFiPxglNY2
+sO5zKWKyY7+rjK6zG2ciGfPEDsZNIqKw1W/KBfR2kRLqkt4bC3fSCvUztx0vtGUe
+veXlqiwETdE7RJXoaGJrgJArYJvpOd8PtWGeM+sSJNNrUlGlJnSiZ0CcypqUZgZL
+WzGFfLOQYAXCykdB1iZkBqU2C5wktvCb9sVz6G3TmAwSKTENOWWZWmh+W0J4pZFV
+ZEyvsxViJRQbwxa0kC0F5J/UtWZknO79/ZFj1H4jiAR45EjWHE+UZAkFwG8BSl54
+EKOx7GDanuRILr0dtbyi4d31nCYXdjs3x2+1N3exw4oKQIvNuF54WoowbNPu0kEb
+G+7/kLwcJqRnSV4AiLuMz5aOte7JJSw5tzgZZlAQwJO7IDfrLqodivcXF5yirwiF
+dyBpzSDmupy/aTHnCpT+l0H96jRU2awxaeRHZUqZog8gMHsslNVZEFvUFDJ7AUN/
+yyfUzJYjH18pZt0hS7jNb1O7KxZCkWGMiEcxHkgF/UINab5qruNBVKOkJ5vqGhYi
+uNkgeGsQtXJcpqMRRiVXJE0kE+26gk+iaYnBJN9jnwy8OEAlYFUHsbCPObe/vPMQ
+3RLl+ZoKdFkN/gTiy70wUTRVw+tWk+iAZc7GPX1CqDFOqGZ2t+xdF8hpsMtEww==
 -----END RSA PRIVATE KEY-----

=== modified file 'mysql-test/suite/rpl/r/rpl_binlog_grant.result'
--- a/mysql-test/suite/rpl/r/rpl_binlog_grant.result	2009-09-29 11:16:23 +0000
+++ b/mysql-test/suite/rpl/r/rpl_binlog_grant.result	2010-01-30 19:13:36 +0000
@@ -25,7 +25,7 @@ master-bin.000001	#	Query	#	#	use `d1`; 
 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	#	#	use `d1`; grant select on t to 'x'@'y'
 start transaction;
 insert into t values (2);
 revoke select on t from x@y;
@@ -45,10 +45,10 @@ master-bin.000001	#	Query	#	#	use `d1`; 
 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	#	#	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
+master-bin.000001	#	Query	#	#	use `d1`; revoke select on t from 'x'@'y'
 drop user x@y;
 drop database d1;

=== modified file 'mysql-test/suite/rpl/r/rpl_events.result'
--- a/mysql-test/suite/rpl/r/rpl_events.result	2009-08-31 02:26:01 +0000
+++ b/mysql-test/suite/rpl/r/rpl_events.result	2010-01-30 12:49:25 +0000
@@ -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;

=== modified file 'mysql-test/suite/rpl/r/rpl_get_master_version_and_clock.result'
--- a/mysql-test/suite/rpl/r/rpl_get_master_version_and_clock.result	2009-11-06 14:20:27 +0000
+++ b/mysql-test/suite/rpl/r/rpl_get_master_version_and_clock.result	2010-01-30 19:13:36 +0000
@@ -4,10 +4,9 @@ reset master;
 reset slave;
 drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
 start slave;
-call mtr.add_suppression("Get master clock failed with error: ");
-call mtr.add_suppression("Get master SERVER_ID failed with error: ");
-call mtr.add_suppression("Slave I/O: Master command COM_REGISTER_SLAVE failed: failed registering on master, reconnecting to try again");
+call mtr.add_suppression("Slave I/O: Master command COM_REGISTER_SLAVE failed: .*");
 call mtr.add_suppression("Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; .*");
+call mtr.add_suppression("Slave I/O thread .* register on master");
 SELECT IS_FREE_LOCK("debug_lock.before_get_UNIX_TIMESTAMP");
 IS_FREE_LOCK("debug_lock.before_get_UNIX_TIMESTAMP")
 1

=== modified file 'mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result'
--- a/mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result	2009-12-06 01:11:32 +0000
+++ b/mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result	2010-01-30 12:49:25 +0000
@@ -750,7 +750,7 @@ test_rpl	e2	root@localhost	SYSTEM	RECURR
 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

=== modified file 'mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result'
--- a/mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result	2010-01-22 09:37:44 +0000
+++ b/mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result	2010-01-27 12:23:28 +0000
@@ -152,7 +152,7 @@ c1	c3	c4	c5
 5	2006-02-22 00:00:00	Tested in Texas	11
 
 --- Test 2 position test --
-Warning: The option '--position' is deprecated and will be removed in MySQL 5.6. Please use --start-position instead.
+Warning: The option '--position' is deprecated and will be removed in a future release. Please use --start-position instead.
 /*!40019 SET @@session.max_insert_delayed_threads=0*/;
 /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
 DELIMITER /*!*/;
@@ -315,7 +315,7 @@ ROLLBACK /* added by mysqlbinlog */;
 /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
 
 --- Test 7 reading stdin w/position --
-Warning: The option '--position' is deprecated and will be removed in MySQL 5.6. Please use --start-position instead.
+Warning: The option '--position' is deprecated and will be removed in a future release. Please use --start-position instead.
 /*!40019 SET @@session.max_insert_delayed_threads=0*/;
 /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
 DELIMITER /*!*/;

=== added file 'mysql-test/suite/rpl/r/rpl_set_null_innodb.result'
--- a/mysql-test/suite/rpl/r/rpl_set_null_innodb.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/r/rpl_set_null_innodb.result	2010-01-21 17:20:24 +0000
@@ -0,0 +1,35 @@
+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;
+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;
+CREATE TABLE t1 (c1 BIT, c2 INT) Engine=InnoDB;
+INSERT INTO `t1` VALUES ( 1, 1 );
+UPDATE t1 SET c1=NULL where c2=1;
+Comparing tables master:test.t1 and slave:test.t1
+DELETE FROM t1 WHERE c2=1 LIMIT 1;
+Comparing tables master:test.t1 and slave:test.t1
+DROP TABLE t1;
+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;
+CREATE TABLE t1 (c1 CHAR) Engine=InnoDB;
+INSERT INTO t1 ( c1 ) VALUES ( 'w' ) ;
+SELECT * FROM t1;
+c1
+w
+UPDATE t1 SET c1=NULL WHERE c1='w';
+Comparing tables master:test.t1 and slave:test.t1
+DELETE FROM t1 LIMIT 2;
+Comparing tables master:test.t1 and slave:test.t1
+DROP TABLE t1;

=== added file 'mysql-test/suite/rpl/r/rpl_set_null_myisam.result'
--- a/mysql-test/suite/rpl/r/rpl_set_null_myisam.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/r/rpl_set_null_myisam.result	2010-01-21 17:20:24 +0000
@@ -0,0 +1,35 @@
+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;
+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;
+CREATE TABLE t1 (c1 BIT, c2 INT) Engine=MyISAM;
+INSERT INTO `t1` VALUES ( 1, 1 );
+UPDATE t1 SET c1=NULL where c2=1;
+Comparing tables master:test.t1 and slave:test.t1
+DELETE FROM t1 WHERE c2=1 LIMIT 1;
+Comparing tables master:test.t1 and slave:test.t1
+DROP TABLE t1;
+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;
+CREATE TABLE t1 (c1 CHAR) Engine=MyISAM;
+INSERT INTO t1 ( c1 ) VALUES ( 'w' ) ;
+SELECT * FROM t1;
+c1
+w
+UPDATE t1 SET c1=NULL WHERE c1='w';
+Comparing tables master:test.t1 and slave:test.t1
+DELETE FROM t1 LIMIT 2;
+Comparing tables master:test.t1 and slave:test.t1
+DROP TABLE t1;

=== modified file 'mysql-test/suite/rpl/r/rpl_sp.result'
--- a/mysql-test/suite/rpl/r/rpl_sp.result	2010-01-23 21:09:23 +0000
+++ b/mysql-test/suite/rpl/r/rpl_sp.result	2010-01-30 19:13:36 +0000
@@ -433,9 +433,9 @@ master-bin.000001	#	Query	#	#	use `mysql
 master-bin.000001	#	Query	#	#	use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo3`()
     DETERMINISTIC
 insert into t1 values (15)
-master-bin.000001	#	Query	#	#	use `mysqltest1`; grant CREATE ROUTINE, EXECUTE on mysqltest1.* to "zedjzlcsjhd"@127.0.0.1
-master-bin.000001	#	Query	#	#	use `mysqltest1`; grant SELECT on mysqltest1.t1 to "zedjzlcsjhd"@127.0.0.1
-master-bin.000001	#	Query	#	#	use `mysqltest1`; grant SELECT, INSERT on mysqltest1.t2 to "zedjzlcsjhd"@127.0.0.1
+master-bin.000001	#	Query	#	#	use `mysqltest1`; grant CREATE ROUTINE, EXECUTE on mysqltest1.* to 'zedjzlcsjhd'@'127.0.0.1'
+master-bin.000001	#	Query	#	#	use `mysqltest1`; grant SELECT on mysqltest1.t1 to 'zedjzlcsjhd'@'127.0.0.1'
+master-bin.000001	#	Query	#	#	use `mysqltest1`; grant SELECT, INSERT on mysqltest1.t2 to 'zedjzlcsjhd'@'127.0.0.1'
 master-bin.000001	#	Query	#	#	use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` PROCEDURE `foo4`()
     DETERMINISTIC
 begin
@@ -510,7 +510,7 @@ select * from t1
 master-bin.000001	#	Query	#	#	use `mysqltest1`; drop procedure foo
 master-bin.000001	#	Query	#	#	use `mysqltest1`; drop function fn1
 master-bin.000001	#	Query	#	#	drop database mysqltest1
-master-bin.000001	#	Query	#	#	drop user "zedjzlcsjhd"@127.0.0.1
+master-bin.000001	#	Query	#	#	DROP USER 'zedjzlcsjhd'@'127.0.0.1'
 master-bin.000001	#	Query	#	#	use `test`; drop function if exists f1
 master-bin.000001	#	Query	#	#	use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
     READS SQL DATA
@@ -675,13 +675,13 @@ CREATE DEFINER=`root`@`localhost` PROCED
 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/*!*/;

=== modified file 'mysql-test/suite/rpl/r/rpl_stm_until.result'
--- a/mysql-test/suite/rpl/r/rpl_stm_until.result	2009-12-16 13:47:07 +0000
+++ b/mysql-test/suite/rpl/r/rpl_stm_until.result	2010-01-30 19:13:36 +0000
@@ -248,3 +248,23 @@ one
 1
 drop table t1;
 start slave;
+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 table if exists t1;
+Warnings:
+Note	1051	Unknown table 't1'
+flush logs;
+stop slave;
+reset slave;
+start slave until master_log_file='master-bin.000001', master_log_pos=294 /* to stop right before DROP */;
+show tables /* t1 must exist */;
+Tables_in_test
+t1
+drop table t1;
+stop slave;
+reset slave;
+reset master;

=== modified file 'mysql-test/suite/rpl/r/rpl_user.result'
--- a/mysql-test/suite/rpl/r/rpl_user.result	2008-03-29 13:00:12 +0000
+++ b/mysql-test/suite/rpl/r/rpl_user.result	2010-01-30 12:49:25 +0000
@@ -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;

=== modified file 'mysql-test/suite/rpl/t/rpl_binlog_grant.test'
--- a/mysql-test/suite/rpl/t/rpl_binlog_grant.test	2009-09-29 11:16:23 +0000
+++ b/mysql-test/suite/rpl/t/rpl_binlog_grant.test	2010-01-30 19:13:36 +0000
@@ -25,7 +25,7 @@ grant select on t to x@y;
 #
 rollback;
 show grants for x@y;
-source include/show_binlog_events.inc;
+--source include/show_binlog_events.inc
 start transaction;
 insert into t values (2);
 revoke select on t from x@y;
@@ -35,7 +35,7 @@ revoke select on t from x@y;
 commit;
 select * from t;
 show grants for x@y;
-source include/show_binlog_events.inc;
+--source include/show_binlog_events.inc
 drop user x@y;
 drop database d1;
 --sync_slave_with_master

=== modified file 'mysql-test/suite/rpl/t/rpl_events.test'
--- a/mysql-test/suite/rpl/t/rpl_events.test	2009-08-31 02:26:01 +0000
+++ b/mysql-test/suite/rpl/t/rpl_events.test	2010-01-30 12:49:25 +0000
@@ -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
+

=== modified file 'mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test'
--- a/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test	2009-11-05 09:23:55 +0000
+++ b/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test	2010-01-30 19:13:36 +0000
@@ -17,14 +17,13 @@
 source include/master-slave.inc;
 source include/have_debug.inc;
 
+connection slave;
 call mtr.add_suppression("Slave I/O: .* failed with error: Lost connection to MySQL server at 'reading initial communication packet'");
-call mtr.add_suppression("Slave I/O: Master command COM_REGISTER_SLAVE failed: failed registering on master, reconnecting to try again");
-call mtr.add_suppression("Get master clock failed with error: ");
-call mtr.add_suppression("Get master SERVER_ID failed with error: ");
+call mtr.add_suppression("Slave I/O: Master command COM_REGISTER_SLAVE failed: .*");
 call mtr.add_suppression("Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; .*");
+call mtr.add_suppression("Slave I/O thread .* register on master");
 
 #Test case 1: Try to get the value of the UNIX_TIMESTAMP from master under network disconnection
-connection slave;
 let $debug_saved= `select @@global.debug`;
 
 let $debug_lock= "debug_lock.before_get_UNIX_TIMESTAMP";

=== added file 'mysql-test/suite/rpl/t/rpl_set_null_innodb.test'
--- a/mysql-test/suite/rpl/t/rpl_set_null_innodb.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_set_null_innodb.test	2010-01-21 17:20:24 +0000
@@ -0,0 +1,6 @@
+-- source include/have_binlog_format_mixed_or_row.inc
+-- source include/master-slave.inc
+-- source include/have_innodb.inc
+
+-- let $engine= InnoDB
+-- source extra/rpl_tests/rpl_set_null.test

=== added file 'mysql-test/suite/rpl/t/rpl_set_null_myisam.test'
--- a/mysql-test/suite/rpl/t/rpl_set_null_myisam.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_set_null_myisam.test	2010-01-21 17:20:24 +0000
@@ -0,0 +1,5 @@
+-- source include/have_binlog_format_mixed_or_row.inc
+-- source include/master-slave.inc
+
+-- let $engine= MyISAM
+-- source extra/rpl_tests/rpl_set_null.test

=== modified file 'mysql-test/suite/rpl/t/rpl_stm_until.test'
--- a/mysql-test/suite/rpl/t/rpl_stm_until.test	2009-12-14 16:32:22 +0000
+++ b/mysql-test/suite/rpl/t/rpl_stm_until.test	2010-01-27 17:27:49 +0000
@@ -161,4 +161,39 @@ connection slave;
 start slave;
 sync_with_master;
 
+ # Bug #47142  	"slave start until" stops 1 event too late in 4.1 to 5.0 replication
+#
+# testing fixes that refine the start position of prior-5.0 master's event
+# and by that provide correct execution of 
+# START SLAVE UNTIL ... master_log_pos= x;
+# Keep the test at the end of the file because it manipulates with binlog files 
+# to substitute the genuine one with a prepared on 4.1 server.
+#
+
+--source include/master-slave-reset.inc
+
+connection master;
+drop table if exists t1; # there is create table t1 in bug47142_master-bin.000001
+flush logs;
+let $MYSQLD_DATADIR= `select @@datadir`;
+--remove_file $MYSQLD_DATADIR/master-bin.000001
+--copy_file $MYSQL_TEST_DIR/std_data/bug47142_master-bin.000001 $MYSQLD_DATADIR/master-bin.000001
+
+connection slave;
+stop slave;
+reset slave;
+start slave until master_log_file='master-bin.000001', master_log_pos=294 /* to stop right before DROP */;
+--source include/wait_for_slave_sql_to_stop.inc
+
+show tables /* t1 must exist */;
+
+# clean-up of Bug #47142 testing
+
+drop table t1; # drop on slave only, master does not have t1. 
+stop slave;
+reset slave;
+
+connection master;
+reset master;
+
 # End of tests

=== modified file 'mysql-test/suite/rpl/t/rpl_user.test'
--- a/mysql-test/suite/rpl/t/rpl_user.test	2008-02-05 13:52:20 +0000
+++ b/mysql-test/suite/rpl/t/rpl_user.test	2010-01-30 12:49:25 +0000
@@ -54,8 +54,85 @@ drop user 'not_exist_user1'@'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;

=== added file 'mysql-test/suite/rpl_ndb/r/rpl_ndb_set_null.result'
--- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_set_null.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_set_null.result	2010-01-21 17:20:24 +0000
@@ -0,0 +1,35 @@
+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;
+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;
+CREATE TABLE t1 (c1 BIT, c2 INT) Engine=NDB;
+INSERT INTO `t1` VALUES ( 1, 1 );
+UPDATE t1 SET c1=NULL where c2=1;
+Comparing tables master:test.t1 and slave:test.t1
+DELETE FROM t1 WHERE c2=1 LIMIT 1;
+Comparing tables master:test.t1 and slave:test.t1
+DROP TABLE t1;
+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;
+CREATE TABLE t1 (c1 CHAR) Engine=NDB;
+INSERT INTO t1 ( c1 ) VALUES ( 'w' ) ;
+SELECT * FROM t1;
+c1
+w
+UPDATE t1 SET c1=NULL WHERE c1='w';
+Comparing tables master:test.t1 and slave:test.t1
+DELETE FROM t1 LIMIT 2;
+Comparing tables master:test.t1 and slave:test.t1
+DROP TABLE t1;

=== added file 'mysql-test/suite/rpl_ndb/t/rpl_ndb_set_null.test'
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_set_null.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_set_null.test	2010-01-21 17:20:24 +0000
@@ -0,0 +1,6 @@
+-- source include/have_ndb.inc
+-- source include/have_binlog_format_mixed_or_row.inc
+-- source include/ndb_master-slave.inc
+
+-- let $engine= NDB
+-- source extra/rpl_tests/rpl_set_null.test

=== modified file 'mysql-test/t/delete.test'
--- a/mysql-test/t/delete.test	2009-11-18 09:32:03 +0000
+++ b/mysql-test/t/delete.test	2010-01-29 09:36:28 +0000
@@ -357,4 +357,21 @@ END |
 --error ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG
 DELETE IGNORE FROM t1;
 
-DROP TABLE t1;
\ No newline at end of file
+DROP TABLE t1;
+
+
+--echo #
+--echo # Bug #49552 : sql_buffer_result cause crash + not found records 
+--echo #   in multitable delete/subquery
+--echo #
+
+CREATE TABLE t1(a INT);
+INSERT INTO t1 VALUES (1),(2),(3);
+SET SESSION SQL_BUFFER_RESULT=1;
+DELETE t1 FROM (SELECT SUM(a) a FROM t1) x,t1;
+
+SET SESSION SQL_BUFFER_RESULT=DEFAULT;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo End of 5.1 tests

=== modified file 'mysql-test/t/openssl_1.test'
--- a/mysql-test/t/openssl_1.test	2009-05-25 13:00:18 +0000
+++ b/mysql-test/t/openssl_1.test	2010-01-29 14:54:27 +0000
@@ -15,8 +15,8 @@ insert into t1 values (5);
 
 grant select on test.* to ssl_user1@localhost require SSL;
 grant select on test.* to ssl_user2@localhost require cipher "DHE-RSA-AES256-SHA";
-grant select on test.* to ssl_user3@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Uppsala/O=MySQL AB/emailAddress=abstract.mysql.developer@stripped";
-grant select on test.* to ssl_user4@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Uppsala/O=MySQL AB/emailAddress=abstract.mysql.developer@stripped" ISSUER "/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB";
+grant select on test.* to ssl_user3@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Uppsala/O=MySQL AB";
+grant select on test.* to ssl_user4@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Uppsala/O=MySQL AB" ISSUER "/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB";
 grant select on test.* to ssl_user5@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "xxx";
 flush privileges;
 

=== modified file 'mysql-test/t/select.test'
--- a/mysql-test/t/select.test	2010-01-15 11:26:53 +0000
+++ b/mysql-test/t/select.test	2010-01-30 19:13:36 +0000
@@ -3836,6 +3836,46 @@ EXPLAIN EXTENDED SELECT x.a, y.a, z.a FR
 DROP TABLE t1;
 
 
+--echo #
+--echo # Bug #49897: crash in ptr_compare when char(0) NOT NULL 
+--echo # column is used for ORDER BY
+--echo #
+SET @old_sort_buffer_size= @@session.sort_buffer_size;
+SET @@sort_buffer_size= 40000;
+
+CREATE TABLE t1(a CHAR(0) NOT NULL);
+--disable_warnings
+INSERT INTO t1 VALUES (0), (0), (0);
+--enable_warnings
+INSERT INTO t1 SELECT t11.a FROM t1 t11, t1 t12;
+INSERT INTO t1 SELECT t11.a FROM t1 t11, t1 t12;
+INSERT INTO t1 SELECT t11.a FROM t1 t11, t1 t12;
+EXPLAIN SELECT a FROM t1 ORDER BY a;
+--disable_result_log
+SELECT a FROM t1 ORDER BY a;
+--enable_result_log
+DROP TABLE t1;
+
+CREATE TABLE t1(a CHAR(0) NOT NULL, b CHAR(0) NOT NULL, c int);
+--disable_warnings
+INSERT INTO t1 VALUES (0, 0, 0), (0, 0, 2), (0, 0, 1);
+--enable_warnings
+INSERT INTO t1 SELECT t11.a, t11.b, t11.c FROM t1 t11, t1 t12;
+INSERT INTO t1 SELECT t11.a, t11.b, t11.c FROM t1 t11, t1 t12;
+INSERT INTO t1 SELECT t11.a, t11.b, t11.c FROM t1 t11, t1 t12;
+EXPLAIN SELECT a FROM t1 ORDER BY a LIMIT 5;
+SELECT a FROM t1 ORDER BY a LIMIT 5;
+EXPLAIN SELECT * FROM t1 ORDER BY a, b LIMIT 5;
+SELECT * FROM t1 ORDER BY a, b LIMIT 5;
+EXPLAIN SELECT * FROM t1 ORDER BY a, b, c LIMIT 5;
+SELECT * FROM t1 ORDER BY a, b, c LIMIT 5;
+EXPLAIN SELECT * FROM t1 ORDER BY c, a LIMIT 5;
+SELECT * FROM t1 ORDER BY c, a LIMIT 5;
+
+SET @@sort_buffer_size= @old_sort_buffer_size;
+DROP TABLE t1;
+
+
 --echo End of 5.0 tests
 
 #

=== modified file 'sql/events.cc'
--- a/sql/events.cc	2010-01-30 18:47:11 +0000
+++ b/sql/events.cc	2010-01-30 19:13:36 +0000
@@ -341,31 +341,48 @@ common_1_lev_code:
 }
 
 
-/**
-  Create a new query string for removing executable comments 
-  for avoiding leak and keeping consistency of the execution 
-  on master and slave.
-  
+/*
+  Binlog '{CREATE|ALTER} EVENT' statements.
+  Definer part is always rewritten, for definer can be CURRENT_USER() function.
+
   @param[in] thd                 Thread handler
-  @param[in] buf                 Query string
+  @param[in] create              CREATE or ALTER statement
 
   @return
-             0           ok
-             1           error
+             FASE           ok
+             TRUE           error
 */
-static int
-create_query_string(THD *thd, String *buf)
+static bool event_write_bin_log(THD *thd, bool create)
 {
-  /* Append the "CREATE" part of the query */
-  if (buf->append(STRING_WITH_LEN("CREATE ")))
-    return 1;
-  /* Append definer */
-  append_definer(thd, buf, &(thd->lex->definer->user), &(thd->lex->definer->host));
+  String log_query;
+  if (create)
+  {
+    /* Append the "CREATE" part of the query */
+    if (log_query.append(STRING_WITH_LEN("CREATE ")))
+      return TRUE;
+  }
+  else
+  {
+    /* Append the "ALETR " part of the query */
+    if (log_query.append(STRING_WITH_LEN("ALTER ")))
+      return TRUE;
+  }
+
+  /* Append definer
+     If the definer is not set or set to CURRENT_USER, the value of CURRENT_USER
+     will be written into the binary log as the definer for the SQL thread.
+   */
+  append_definer(thd, &log_query, &(thd->lex->definer->user),
+                 &(thd->lex->definer->host));
+
   /* Append the left part of thd->query after "DEFINER" part */
-  if (buf->append(thd->lex->stmt_definition_begin))
-    return 1;
- 
-  return 0;
+  if (log_query.append(thd->lex->stmt_definition_begin,
+                       thd->lex->stmt_definition_end -
+                       thd->lex->stmt_definition_begin))
+    return TRUE;
+
+  return write_bin_log(thd, TRUE, log_query.c_ptr_safe(), log_query.length())
+          != 0;
 }
 
 /**
@@ -380,8 +397,7 @@ create_query_string(THD *thd, String *bu
   @sa Events::drop_event for the notes about locking, pre-locking
   and Events DDL.
 
-  @retval  FALSE  OK
-  @retval  TRUE   Error (reported)
+  @retval  FALSE  OK @retval  TRUE   Error (reported)
 */
 
 bool
@@ -465,22 +481,7 @@ Events::create_event(THD *thd, Event_par
       binlog the create event unless it's been successfully dropped
     */
     if (!dropped)
-    {
-      /* Binlog the create event. */
-      DBUG_ASSERT(thd->query() && thd->query_length());
-      String log_query;
-      if (create_query_string(thd, &log_query))
-      {
-        sql_print_error("Event Error: An error occurred while creating query string, "
-                        "before writing it into binary log.");
-        /* Restore the state of binlog format */
-        thd->current_stmt_binlog_row_based= save_binlog_row_based;
-        DBUG_RETURN(TRUE);
-      }
-      /* If the definer is not set or set to CURRENT_USER, the value of CURRENT_USER 
-         will be written into the binary log as the definer for the SQL thread. */
-      ret= write_bin_log(thd, TRUE, log_query.c_ptr(), log_query.length());
-    }
+      ret= event_write_bin_log(thd, TRUE);
   }
   pthread_mutex_unlock(&LOCK_event_metadata);
   /* Restore the state of binlog format */
@@ -602,9 +603,7 @@ Events::update_event(THD *thd, Event_par
       if (event_queue)
         event_queue->update_event(thd, parse_data->dbname, parse_data->name,
                                   new_element);
-      /* Binlog the alter event. */
-      DBUG_ASSERT(thd->query() && thd->query_length());
-      ret= write_bin_log(thd, TRUE, thd->query(), thd->query_length());
+      ret= event_write_bin_log(thd, FALSE);
     }
   }
   pthread_mutex_unlock(&LOCK_event_metadata);

=== modified file 'sql/field.h'
--- a/sql/field.h	2009-12-11 09:39:38 +0000
+++ b/sql/field.h	2010-01-30 19:13:36 +0000
@@ -1929,7 +1929,12 @@ public:
   uint32 max_display_length() { return field_length; }
   uint size_of() const { return sizeof(*this); }
   Item_result result_type () const { return INT_RESULT; }
-  int reset(void) { bzero(ptr, bytes_in_rec); return 0; }
+  int reset(void) { 
+    bzero(ptr, bytes_in_rec); 
+    if (bit_ptr && (bit_len > 0))  // reset odd bits among null bits
+      clr_rec_bits(bit_ptr, bit_ofs, bit_len);
+    return 0; 
+  }
   int store(const char *to, uint length, CHARSET_INFO *charset);
   int store(double nr);
   int store(longlong nr, bool unsigned_val);

=== modified file 'sql/filesort.cc'
--- a/sql/filesort.cc	2009-02-17 12:24:09 +0000
+++ b/sql/filesort.cc	2010-01-30 19:13:36 +0000
@@ -145,6 +145,8 @@ ha_rows filesort(THD *thd, TABLE *table,
   error= 1;
   bzero((char*) &param,sizeof(param));
   param.sort_length= sortlength(thd, sortorder, s_length, &multi_byte_charset);
+  /* filesort cannot handle zero-length records. */
+  DBUG_ASSERT(param.sort_length);
   param.ref_length= table->file->ref_length;
   param.addon_field= 0;
   param.addon_length= 0;

=== modified file 'sql/item_strfunc.cc'
--- a/sql/item_strfunc.cc	2010-01-15 11:26:53 +0000
+++ b/sql/item_strfunc.cc	2010-01-30 19:13:36 +0000
@@ -42,6 +42,20 @@ C_MODE_END
 String my_empty_string("",default_charset_info);
 
 
+/*
+  Convert an array of bytes to a hexadecimal representation.
+
+  Used to generate a hexadecimal representation of a message digest.
+*/
+static void array_to_hex(char *to, const char *str, uint len)
+{
+  const char *str_end= str + len;
+  for (; str != str_end; ++str)
+  {
+    *to++= _dig_vec_lower[((uchar) *str) >> 4];
+    *to++= _dig_vec_lower[((uchar) *str) & 0x0F];
+  }
+}
 
 
 bool Item_str_func::fix_fields(THD *thd, Item **ref)
@@ -114,12 +128,7 @@ String *Item_func_md5::val_str(String *s
       null_value=1;
       return 0;
     }
-    sprintf((char *) str->ptr(),
-	    "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
-	    digest[0], digest[1], digest[2], digest[3],
-	    digest[4], digest[5], digest[6], digest[7],
-	    digest[8], digest[9], digest[10], digest[11],
-	    digest[12], digest[13], digest[14], digest[15]);
+    array_to_hex((char *) str->ptr(), (const char*) digest, 16);
     str->length((uint) 32);
     return str;
   }
@@ -160,15 +169,7 @@ String *Item_func_sha::val_str(String *s
     if (!( str->alloc(SHA1_HASH_SIZE*2) ||
            (mysql_sha1_result(&context,digest))))
     {
-      sprintf((char *) str->ptr(),
-      "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\
-%02x%02x%02x%02x%02x%02x%02x%02x",
-           digest[0], digest[1], digest[2], digest[3],
-           digest[4], digest[5], digest[6], digest[7],
-           digest[8], digest[9], digest[10], digest[11],
-           digest[12], digest[13], digest[14], digest[15],
-           digest[16], digest[17], digest[18], digest[19]);
-
+      array_to_hex((char *) str->ptr(), (const char*) digest, SHA1_HASH_SIZE);
       str->length((uint)  SHA1_HASH_SIZE*2);
       null_value=0;
       return str;
@@ -1764,19 +1765,19 @@ String *Item_func_encode::val_str(String
 
   null_value= 0;
   res= copy_if_not_alloced(str, res, res->length());
-  transform(res);
+  crypto_transform(res);
   sql_crypt.reinit();
 
   return res;
 }
 
-void Item_func_encode::transform(String *res)
+void Item_func_encode::crypto_transform(String *res)
 {
   sql_crypt.encode((char*) res->ptr(),res->length());
   res->set_charset(&my_charset_bin);
 }
 
-void Item_func_decode::transform(String *res)
+void Item_func_decode::crypto_transform(String *res)
 {
   sql_crypt.decode((char*) res->ptr(),res->length());
 }

=== modified file 'sql/item_strfunc.h'
--- a/sql/item_strfunc.h	2009-12-11 16:40:58 +0000
+++ b/sql/item_strfunc.h	2010-01-30 19:13:36 +0000
@@ -366,7 +366,7 @@ public:
   void fix_length_and_dec();
   const char *func_name() const { return "encode"; }
 protected:
-  virtual void transform(String *);
+  virtual void crypto_transform(String *);
 private:
   /** Provide a seed for the PRNG sequence. */
   bool seed();
@@ -379,7 +379,7 @@ public:
   Item_func_decode(Item *a, Item *seed): Item_func_encode(a, seed) {}
   const char *func_name() const { return "decode"; }
 protected:
-  void transform(String *);
+  void crypto_transform(String *);
 };
 
 

=== modified file 'sql/log_event.cc'
--- a/sql/log_event.cc	2010-01-30 18:47:11 +0000
+++ b/sql/log_event.cc	2010-01-30 19:13:36 +0000
@@ -2296,10 +2296,22 @@ bool Query_log_event::write(IO_CACHE* fi
     int8store(start, table_map_for_update);
     start+= 8;
   }
+  if (master_data_written != 0)
+  {
+    /*
+      Q_MASTER_DATA_WRITTEN_CODE only exists in relay logs where the master
+      has binlog_version<4 and the slave has binlog_version=4. See comment
+      for master_data_written in log_event.h for details.
+    */
+    *start++= Q_MASTER_DATA_WRITTEN_CODE;
+    int4store(start, master_data_written);
+    start+= 4;
+  }
+
   /*
     NOTE: When adding new status vars, please don't forget to update
-    the MAX_SIZE_LOG_EVENT_STATUS in log_event.h and update function
-    code_name in this file.
+    the MAX_SIZE_LOG_EVENT_STATUS in log_event.h and update the function
+    code_name() in this file.
    
     Here there could be code like
     if (command-line-option-which-says-"log_this_variable" && inited)
@@ -2375,7 +2387,8 @@ Query_log_event::Query_log_event(THD* th
    auto_increment_offset(thd_arg->variables.auto_increment_offset),
    lc_time_names_number(thd_arg->variables.lc_time_names->number),
    charset_database_number(0),
-   table_map_for_update((ulonglong)thd_arg->table_map_for_update)
+   table_map_for_update((ulonglong)thd_arg->table_map_for_update),
+   master_data_written(0)
 {
   time_t end_time;
 
@@ -2515,6 +2528,7 @@ code_name(int code)
   case Q_LC_TIME_NAMES_CODE: return "Q_LC_TIME_NAMES_CODE";
   case Q_CHARSET_DATABASE_CODE: return "Q_CHARSET_DATABASE_CODE";
   case Q_TABLE_MAP_FOR_UPDATE_CODE: return "Q_TABLE_MAP_FOR_UPDATE_CODE";
+  case Q_MASTER_DATA_WRITTEN_CODE: return "Q_MASTER_DATA_WRITTEN_CODE";
   }
   sprintf(buf, "CODE#%d", code);
   return buf;
@@ -2552,7 +2566,7 @@ Query_log_event::Query_log_event(const c
    flags2_inited(0), sql_mode_inited(0), charset_inited(0),
    auto_increment_increment(1), auto_increment_offset(1),
    time_zone_len(0), lc_time_names_number(0), charset_database_number(0),
-   table_map_for_update(0)
+   table_map_for_update(0), master_data_written(0)
 {
   ulong data_len;
   uint32 tmp;
@@ -2608,6 +2622,18 @@ Query_log_event::Query_log_event(const c
     DBUG_PRINT("info", ("Query_log_event has status_vars_len: %u",
                         (uint) status_vars_len));
     tmp-= 2;
+  } 
+  else
+  {
+    /*
+      server version < 5.0 / binlog_version < 4 master's event is 
+      relay-logged with storing the original size of the event in
+      Q_MASTER_DATA_WRITTEN_CODE status variable.
+      The size is to be restored at reading Q_MASTER_DATA_WRITTEN_CODE-marked
+      event from the relay log.
+    */
+    DBUG_ASSERT(description_event->binlog_version < 4);
+    master_data_written= data_written;
   }
   /*
     We have parsed everything we know in the post header for QUERY_EVENT,
@@ -2699,6 +2725,11 @@ Query_log_event::Query_log_event(const c
       table_map_for_update= uint8korr(pos);
       pos+= 8;
       break;
+    case Q_MASTER_DATA_WRITTEN_CODE:
+      CHECK_SPACE(pos, end, 4);
+      data_written= master_data_written= uint4korr(pos);
+      pos+= 4;
+      break;
     default:
       /* That's why you must write status vars in growing order of code */
       DBUG_PRINT("info",("Query_log_event has unknown status vars (first has\

=== modified file 'sql/log_event.h'
--- a/sql/log_event.h	2009-12-16 13:47:07 +0000
+++ b/sql/log_event.h	2010-01-30 19:13:36 +0000
@@ -264,7 +264,8 @@ struct sql_ex_info
                                    1 + 1 + 255    /* type, length, time_zone */ + \
                                    1 + 2          /* type, lc_time_names_number */ + \
                                    1 + 2          /* type, charset_database_number */ + \
-                                   1 + 8          /* type, table_map_for_update */)
+                                   1 + 8          /* type, table_map_for_update */ + \
+                                   1 + 4          /* type, master_data_written */)
 #define MAX_LOG_EVENT_HEADER   ( /* in order of Query_log_event::write */ \
   LOG_EVENT_HEADER_LEN + /* write_header */ \
   QUERY_HEADER_LEN     + /* write_data */   \
@@ -331,6 +332,10 @@ struct sql_ex_info
 
 #define Q_TABLE_MAP_FOR_UPDATE_CODE 9
 
+#define Q_MASTER_DATA_WRITTEN_CODE 10
+
+/* Intvar event post-header */
+
 /* Intvar event data */
 #define I_TYPE_OFFSET        0
 #define I_VAL_OFFSET         1
@@ -1641,6 +1646,16 @@ public:
     statement, for other query statements, this will be zero.
   */
   ulonglong table_map_for_update;
+  /*
+    Holds the original length of a Query_log_event that comes from a
+    master of version < 5.0 (i.e., binlog_version < 4). When the IO
+    thread writes the relay log, it augments the Query_log_event with a
+    Q_MASTER_DATA_WRITTEN_CODE status_var that holds the original event
+    length. This field is initialized to non-zero in the SQL thread when
+    it reads this augmented event. SQL thread does not write 
+    Q_MASTER_DATA_WRITTEN_CODE to the slave's server binlog.
+  */
+  uint32 master_data_written;
 
 #ifndef MYSQL_CLIENT
 

=== modified file 'sql/mysql_priv.h'
--- a/sql/mysql_priv.h	2010-01-30 18:47:11 +0000
+++ b/sql/mysql_priv.h	2010-01-30 19:13:36 +0000
@@ -134,7 +134,7 @@ char* query_table_status(THD *thd,const 
                         (Old), (Ver), (New));                                        \
     else                                                                             \
       sql_print_warning("The syntax '%s' is deprecated and will be removed "         \
-                        "in MySQL %s. Please use %s instead.", (Old), (Ver), (New)); \
+                        "in a future release. Please use %s instead.", (Old), (New)); \
   } while(0)
 
 extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *system_charset_info;

=== modified file 'sql/mysqld.cc'
--- a/sql/mysqld.cc	2010-01-23 21:09:23 +0000
+++ b/sql/mysqld.cc	2010-01-30 19:13:36 +0000
@@ -1978,10 +1978,10 @@ bool one_thread_per_connection_end(THD *
 
   /* It's safe to broadcast outside a lock (COND... is not deleted here) */
   DBUG_PRINT("signal", ("Broadcasting COND_thread_count"));
+  DBUG_LEAVE;                                   // Must match DBUG_ENTER()
   my_thread_end();
   (void) pthread_cond_broadcast(&COND_thread_count);
 
-  DBUG_LEAVE;                                   // Must match DBUG_ENTER()
   pthread_exit(0);
   return 0;                                     // Avoid compiler warnings
 }
@@ -5744,6 +5744,9 @@ enum options_mysqld
   OPT_TABLE_LOCK_WAIT_TIMEOUT,
   OPT_PLUGIN_LOAD,
   OPT_PLUGIN_DIR,
+  OPT_SYMBOLIC_LINKS,
+  OPT_WARNINGS,
+  OPT_RECORD_BUFFER_OLD,
   OPT_LOG_OUTPUT,
   OPT_PORT_OPEN_TIMEOUT,
   OPT_PROFILING,
@@ -6577,7 +6580,7 @@ log and this option does nothing anymore
   {"transaction-isolation", OPT_TX_ISOLATION,
    "Default transaction isolation level.", 0, 0, 0, GET_STR, REQUIRED_ARG, 0,
    0, 0, 0, 0, 0},
-  {"use-symbolic-links", 's', "Enable symbolic link support. Deprecated option; use --symbolic-links instead.",
+  {"use-symbolic-links", OPT_SYMBOLIC_LINKS, "Enable symbolic link support. Deprecated option; use --symbolic-links instead.",
    (uchar**) &my_use_symdir, (uchar**) &my_use_symdir, 0, GET_BOOL, NO_ARG,
    IF_PURIFY(0,1), 0, 0, 0, 0, 0},
   {"user", 'u', "Run mysqld daemon as user.", 0, 0, 0, GET_STR, REQUIRED_ARG,
@@ -6587,7 +6590,7 @@ log and this option does nothing anymore
    0, 0},
   {"version", 'V', "Output version information and exit.", 0, 0, 0, GET_NO_ARG,
    NO_ARG, 0, 0, 0, 0, 0, 0},
-  {"warnings", 'W', "Deprecated; use --log-warnings instead.",
+  {"warnings", OPT_WARNINGS, "Deprecated; use --log-warnings instead.",
    (uchar**) &global_system_variables.log_warnings,
    (uchar**) &max_system_variables.log_warnings, 0, GET_ULONG, OPT_ARG,
    1, 0, ULONG_MAX, 0, 0, 0},
@@ -6840,7 +6843,8 @@ The minimum value for this variable is 4
    (uchar**) &myisam_data_pointer_size, 0, GET_ULONG, REQUIRED_ARG,
    6, 2, 7, 0, 1, 0},
   {"myisam_max_extra_sort_file_size", OPT_MYISAM_MAX_EXTRA_SORT_FILE_SIZE,
-   "Deprecated option",
+   "This is a deprecated option that does nothing anymore.  It will be removed in MySQL " 
+   VER_CELOSIA,
    (uchar**) &global_system_variables.myisam_max_extra_sort_file_size,
    (uchar**) &max_system_variables.myisam_max_extra_sort_file_size,
    0, GET_ULL, REQUIRED_ARG, (ulonglong) MI_MAX_TEMP_LENGTH,
@@ -6997,8 +7001,8 @@ The minimum value for this variable is 4
    (uchar**) &max_system_variables.read_rnd_buff_size, 0,
    GET_ULONG, REQUIRED_ARG, 256*1024L, IO_SIZE*2+MALLOC_OVERHEAD,
    INT_MAX32, MALLOC_OVERHEAD, IO_SIZE, 0},
-  {"record_buffer", OPT_RECORD_BUFFER,
-   "Alias for read_buffer_size",
+  {"record_buffer", OPT_RECORD_BUFFER_OLD,
+   "Alias for read_buffer_size. This variable is deprecated and will be removed in a future release.",
    (uchar**) &global_system_variables.read_buff_size,
    (uchar**) &max_system_variables.read_buff_size,0, GET_ULONG, REQUIRED_ARG,
    128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, INT_MAX32, MALLOC_OVERHEAD, IO_SIZE, 0},
@@ -8067,6 +8071,9 @@ mysqld_get_one_option(int optid,
     print_version();
     exit(0);
 #endif /*EMBEDDED_LIBRARY*/
+  case OPT_WARNINGS:
+    WARN_DEPRECATED(NULL, VER_CELOSIA, "--warnings", "--log-warnings");
+    /* Note: fall-through to 'W' */
   case 'W':
     if (!argument)
       global_system_variables.log_warnings++;
@@ -8088,6 +8095,9 @@ mysqld_get_one_option(int optid,
   case (int) OPT_LOG_BIN_TRUST_FUNCTION_CREATORS_OLD:
     WARN_DEPRECATED(NULL, VER_CELOSIA, "--log-bin-trust-routine-creators", "--log-bin-trust-function-creators");
     break;
+  case (int) OPT_ENABLE_LOCK:
+    WARN_DEPRECATED(NULL, VER_CELOSIA, "--enable-locking", "--external-locking");
+    break;
   case (int) OPT_BIG_TABLES:
     thd_startup_options|=OPTION_BIG_TABLES;
     break;
@@ -8098,6 +8108,7 @@ mysqld_get_one_option(int optid,
     opt_myisam_log=1;
     break;
   case (int) OPT_UPDATE_LOG:
+    WARN_DEPRECATED(NULL, VER_CELOSIA, "--log-update", "--log-bin");
     opt_update_log=1;
     break;
   case (int) OPT_BIN_LOG:
@@ -8266,8 +8277,18 @@ mysqld_get_one_option(int optid,
                       "give threads different priorities.");
     break;
   case (int) OPT_SKIP_LOCK:
+    WARN_DEPRECATED(NULL, VER_CELOSIA, "--skip-locking", "--skip-external-locking");
     opt_external_locking=0;
     break;
+  case (int) OPT_SQL_BIN_UPDATE_SAME:
+    WARN_DEPRECATED(NULL, VER_CELOSIA, "--sql-bin-update-same", "the binary log");
+    break;
+  case (int) OPT_RECORD_BUFFER_OLD:
+    WARN_DEPRECATED(NULL, VER_CELOSIA, "record_buffer", "read_buffer_size");
+    break;
+  case (int) OPT_SYMBOLIC_LINKS:
+    WARN_DEPRECATED(NULL, VER_CELOSIA, "--use-symbolic-links", "--symbolic-links");
+    break;
   case (int) OPT_SKIP_HOST_CACHE:
     opt_specialflag|= SPECIAL_NO_HOST_CACHE;
     break;
@@ -8293,6 +8314,7 @@ mysqld_get_one_option(int optid,
     test_flags|=TEST_NO_STACKTRACE;
     break;
   case (int) OPT_SKIP_SYMLINKS:
+    WARN_DEPRECATED(NULL, VER_CELOSIA, "--skip-symlink", "--skip-symbolic-links");
     my_use_symdir=0;
     break;
   case (int) OPT_BIND_ADDRESS:
@@ -8368,6 +8390,9 @@ mysqld_get_one_option(int optid,
     server_id_supplied = 1;
     break;
   case OPT_DELAY_KEY_WRITE_ALL:
+    WARN_DEPRECATED(NULL, VER_CELOSIA, 
+                    "--delay-key-write-for-all-tables",
+                    "--delay-key-write=ALL");
     if (argument != disabled_my_option)
       argument= (char*) "ALL";
     /* Fall through */
@@ -8383,6 +8408,11 @@ mysqld_get_one_option(int optid,
       delay_key_write_options= (uint) type-1;
     }
     break;
+  case OPT_MYISAM_MAX_EXTRA_SORT_FILE_SIZE:
+    sql_print_warning("--myisam_max_extra_sort_file_size is deprecated and "
+                      "does nothing in this version.  It will be removed in "
+                      "a future release.");
+    break;
   case OPT_CHARSETS_DIR:
     strmake(mysql_charsets_dir, argument, sizeof(mysql_charsets_dir)-1);
     charsets_dir = mysql_charsets_dir;

=== modified file 'sql/rpl_injector.cc'
--- a/sql/rpl_injector.cc	2010-01-24 07:03:23 +0000
+++ b/sql/rpl_injector.cc	2010-01-28 21:51:40 +0000
@@ -114,8 +114,8 @@ int injector::transaction::write_row (se
 {
    DBUG_ENTER("injector::transaction::write_row(...)");
  
-   int error= 0;
-   if (error= check_state(ROW_STATE))
+   int error= check_state(ROW_STATE);
+   if (error)
      DBUG_RETURN(error);
 
    server_id_type save_id= m_thd->server_id;
@@ -133,8 +133,8 @@ int injector::transaction::delete_row(se
 {
    DBUG_ENTER("injector::transaction::delete_row(...)");
 
-   int error= 0;
-   if (error= check_state(ROW_STATE))
+   int error= check_state(ROW_STATE);
+   if (error)
      DBUG_RETURN(error);
 
    server_id_type save_id= m_thd->server_id;
@@ -152,8 +152,8 @@ int injector::transaction::update_row(se
 {
    DBUG_ENTER("injector::transaction::update_row(...)");
 
-   int error= 0;
-   if (error= check_state(ROW_STATE))
+   int error= check_state(ROW_STATE);
+   if (error)
      DBUG_RETURN(error);
 
    server_id_type save_id= m_thd->server_id;

=== modified file 'sql/rpl_record.cc'
--- a/sql/rpl_record.cc	2009-12-11 09:39:38 +0000
+++ b/sql/rpl_record.cc	2010-01-30 19:13:36 +0000
@@ -231,6 +231,22 @@ unpack_row(Relay_log_info const *rli,
         {
           DBUG_PRINT("debug", ("Was NULL; null mask: 0x%x; null bits: 0x%x",
                                null_mask, null_bits));
+          /** 
+            Calling reset just in case one is unpacking on top a 
+            record with data. 
+
+            This could probably go into set_null() but doing so, 
+            (i) triggers assertion in other parts of the code at 
+            the moment; (ii) it would make us reset the field,
+            always when setting null, which right now doesn't seem 
+            needed anywhere else except here.
+
+            TODO: maybe in the future we should consider moving 
+                  the reset to make it part of set_null. But then
+                  the assertions triggered need to be 
+                  addressed/revisited.
+           */
+          f->reset();
           f->set_null();
         }
         else
@@ -366,7 +382,6 @@ int prepare_record(TABLE *const table, 
   */
   for (Field **field_ptr= table->field+skip; *field_ptr; ++field_ptr)
   {
-    uint32 const mask= NOT_NULL_FLAG | NO_DEFAULT_VALUE_FLAG;
     Field *const f= *field_ptr;
     if ((f->flags &  NO_DEFAULT_VALUE_FLAG) &&
         (f->real_type() != MYSQL_TYPE_ENUM))

=== modified file 'sql/sql_acl.cc'
--- a/sql/sql_acl.cc	2010-01-30 18:47:11 +0000
+++ b/sql/sql_acl.cc	2010-01-30 19:13:36 +0000
@@ -194,6 +194,7 @@ static bool compare_hostname(const acl_h
 			     const char *ip);
 static my_bool acl_load(THD *thd, TABLE_LIST *tables);
 static my_bool grant_load(THD *thd, TABLE_LIST *tables);
+static bool acl_write_bin_log(THD *thd, List <LEX_USER> &list, bool clear_error);
 
 /*
   Convert scrambled password to binary form, according to scramble type, 
@@ -3228,7 +3229,8 @@ int mysql_table_grant(THD *thd, TABLE_LI
 
   if (!result) /* success */
   {
-    result= write_bin_log(thd, TRUE, thd->query(), thd->query_length());
+    if (acl_write_bin_log(thd, user_list, TRUE))
+      result= -1;
   }
 
   rw_unlock(&LOCK_grant);
@@ -3404,8 +3406,7 @@ bool mysql_routine_grant(THD *thd, TABLE
 
   if (write_to_binlog)
   {
-    if (write_bin_log(thd, FALSE, thd->query(), thd->query_length()))
-      result= TRUE;
+    result|= acl_write_bin_log(thd, user_list, FALSE);
   }
 
   rw_unlock(&LOCK_grant);
@@ -3534,7 +3535,7 @@ bool mysql_grant(THD *thd, const char *d
 
   if (!result)
   {
-    result= write_bin_log(thd, TRUE, thd->query(), thd->query_length());
+    result= acl_write_bin_log(thd, list, TRUE);
   }
 
   rw_unlock(&LOCK_grant);
@@ -5776,9 +5777,9 @@ static int handle_grant_data(TABLE_LIST 
 }
 
 
-static void append_user(String *str, LEX_USER *user)
+static void append_user(String *str, LEX_USER *user, bool comma= TRUE)
 {
-  if (str->length())
+  if (comma && str->length())
     str->append(',');
   str->append('\'');
   str->append(user->user.str);
@@ -5787,6 +5788,65 @@ static void append_user(String *str, LEX
   str->append('\'');
 }
 
+/*
+  The operations(DROP, RENAME, REVOKE, GRANT) will cause inconsistency between
+  master and slave, when CURRENT_USER() is used. To solve this problem, we
+  construct a new binlog statement in which CURRENT_USER() is replaced by
+  the real user name and host name.
+ */
+static bool acl_write_bin_log(THD *thd, List <LEX_USER> &list, bool clear_error)
+{
+  String log_query;
+  LEX *lex= thd->lex;
+  List_iterator <LEX_USER> user_list(list);
+  LEX_USER *user, *tmp_user;
+
+  if (!mysql_bin_log.is_open())
+    return FALSE;
+
+  if (log_query.append(lex->stmt_begin, lex->stmt_user_begin - lex->stmt_begin))
+    return TRUE;
+  while ((tmp_user= user_list++))
+  {
+    if (!(user= get_current_user(thd, tmp_user)))
+      continue;
+
+    /*
+      No User, but a password?
+      They did GRANT ... TO CURRENT_USER() IDENTIFIED BY ... !
+      Get the current user, and shallow-copy the new password to them!
+    */
+    if (!tmp_user->user.str && tmp_user->password.str)
+      user->password= tmp_user->password;
+
+    if (log_query.append(" ", 1))
+      return TRUE;
+    append_user(&log_query, user, FALSE);
+    /* Only 'GRANT' have password */
+    if (user->password.str)
+    {
+      if (log_query.append(STRING_WITH_LEN(" IDENTIFIED BY ")) ||
+                           log_query.append(STRING_WITH_LEN("PASSWORD ")) ||
+                           log_query.append("'", 1) ||
+                           log_query.append(user->password.str,
+                                            user->password.length) ||
+                           log_query.append("'", 1))
+        return TRUE;
+    }
+    if (log_query.append(",", 1))
+      return TRUE;
+  }
+  /* It is binlogged only when at least one user is in the query */
+  if (log_query.c_ptr()[log_query.length()-1] == ',')
+  {
+    log_query.length(log_query.length()-1);
+    if (log_query.append(lex->stmt_user_end, lex->stmt_end - lex->stmt_user_end))
+      return TRUE;
+    return write_bin_log(thd, clear_error, log_query.c_ptr_safe(),
+                         log_query.length()) != 0;
+  }
+  return FALSE;
+}
 
 /*
   Create a list of users.
@@ -5893,6 +5953,7 @@ bool mysql_drop_user(THD *thd, List <LEX
 {
   int result;
   String wrong_users;
+  String log_query;
   LEX_USER *user_name, *tmp_user_name;
   List_iterator <LEX_USER> user_list(list);
   TABLE_LIST tables[GRANT_TABLES];
@@ -5922,6 +5983,7 @@ bool mysql_drop_user(THD *thd, List <LEX
   rw_wrlock(&LOCK_grant);
   VOID(pthread_mutex_lock(&acl_cache->lock));
 
+  log_query.append(STRING_WITH_LEN("DROP USER"));
   while ((tmp_user_name= user_list++))
   {
     if (!(user_name= get_current_user(thd, tmp_user_name)))
@@ -5929,6 +5991,17 @@ bool mysql_drop_user(THD *thd, List <LEX
       result= TRUE;
       continue;
     }  
+
+    /*
+      The operation will cause inconsistency between master and slave, when
+      CURRENT_USER() is used. To solve this problem, we construct a new
+      binlog statement in which CURRENT_USER() is replaced by the real user
+      name and host name.
+     */
+    log_query.append(STRING_WITH_LEN(" "));
+    append_user(&log_query, user_name, FALSE);
+    log_query.append(STRING_WITH_LEN(","));
+
     if (handle_grant_data(tables, 1, user_name, NULL) <= 0)
     {
       append_user(&wrong_users, user_name);
@@ -5947,7 +6020,13 @@ bool mysql_drop_user(THD *thd, List <LEX
     my_error(ER_CANNOT_USER, MYF(0), "DROP USER", wrong_users.c_ptr_safe());
 
   if (some_users_deleted)
-    result |= write_bin_log(thd, FALSE, thd->query(), thd->query_length());
+  {
+    if (log_query.c_ptr()[log_query.length()-1] == ',')
+    {
+      log_query.length(log_query.length()-1);
+      result|= write_bin_log(thd, FALSE, log_query.c_ptr_safe(), log_query.length());
+    }
+  }
 
   rw_unlock(&LOCK_grant);
   close_thread_tables(thd);
@@ -5975,6 +6054,7 @@ bool mysql_rename_user(THD *thd, List <L
 {
   int result;
   String wrong_users;
+  String log_query;
   LEX_USER *user_from, *tmp_user_from;
   LEX_USER *user_to, *tmp_user_to;
   List_iterator <LEX_USER> user_list(list);
@@ -6002,6 +6082,7 @@ bool mysql_rename_user(THD *thd, List <L
   rw_wrlock(&LOCK_grant);
   VOID(pthread_mutex_lock(&acl_cache->lock));
 
+  log_query.append(STRING_WITH_LEN("RENAME USER"));
   while ((tmp_user_from= user_list++))
   {
     if (!(user_from= get_current_user(thd, tmp_user_from)))
@@ -6018,6 +6099,18 @@ bool mysql_rename_user(THD *thd, List <L
     DBUG_ASSERT(user_to != 0); /* Syntax enforces pairs of users. */
 
     /*
+      The operation will cause inconsistency between master and slave, when
+      CURRENT_USER() is used. To solve this problem, we construct a new
+      binlog statement in which CURRENT_USER() is replaced by the real user
+      name and host name.
+     */
+    log_query.append(STRING_WITH_LEN(" "));
+    append_user(&log_query, user_from, FALSE);
+    log_query.append(STRING_WITH_LEN(" TO "));
+    append_user(&log_query, user_to, FALSE);
+    log_query.append(STRING_WITH_LEN(","));
+
+    /*
       Search all in-memory structures and grant tables
       for a mention of the new user name.
     */
@@ -6038,9 +6131,15 @@ bool mysql_rename_user(THD *thd, List <L
 
   if (result)
     my_error(ER_CANNOT_USER, MYF(0), "RENAME USER", wrong_users.c_ptr_safe());
-  
-  if (some_users_renamed && mysql_bin_log.is_open())
-    result |= write_bin_log(thd, FALSE, thd->query(), thd->query_length());
+
+  if (some_users_renamed)
+  {
+    if (log_query.c_ptr()[log_query.length()-1] == ',')
+    {
+      log_query.length(log_query.length()-1);
+      result|= write_bin_log(thd, FALSE, log_query.c_ptr_safe(), log_query.length());
+    }
+  }
 
   rw_unlock(&LOCK_grant);
   close_thread_tables(thd);
@@ -6230,8 +6329,9 @@ bool mysql_revoke_all(THD *thd,  List <L
 
   VOID(pthread_mutex_unlock(&acl_cache->lock));
 
-  int binlog_error=
-    write_bin_log(thd, FALSE, thd->query(), thd->query_length());
+  int binlog_error= 0;
+  if (acl_write_bin_log(thd, list, FALSE))
+    binlog_error= 1;
 
   rw_unlock(&LOCK_grant);
   close_thread_tables(thd);

=== modified file 'sql/sql_db.cc'
--- a/sql/sql_db.cc	2010-01-30 18:47:11 +0000
+++ b/sql/sql_db.cc	2010-01-30 19:13:36 +0000
@@ -829,7 +829,7 @@ bool mysql_alter_db(THD *thd, const char
     qinfo.db_len = strlen(db);
 
     /* These DDL methods and logging protected with LOCK_mysql_create_db */
-    if (error= mysql_bin_log.write(&qinfo))
+    if ((error= mysql_bin_log.write(&qinfo)))
       goto exit;
   }
   my_ok(thd, result);

=== modified file 'sql/sql_lex.h'
--- a/sql/sql_lex.h	2009-11-03 11:37:02 +0000
+++ b/sql/sql_lex.h	2010-01-30 19:13:36 +0000
@@ -1799,6 +1799,8 @@ struct LEX: public Query_tables_list
       - CREATE TRIGGER (points to "TRIGGER");
       - CREATE PROCEDURE (points to "PROCEDURE");
       - CREATE FUNCTION (points to "FUNCTION" or "AGGREGATE");
+      - CREATE VIEW(points to "VIEW");
+      - CREATE EVENT(points to "EVENT");
 
     This pointer is required to add possibly omitted DEFINER-clause to the
     DDL-statement before dumping it to the binlog.
@@ -1807,6 +1809,29 @@ struct LEX: public Query_tables_list
 
   const char *stmt_definition_end;
 
+  /*
+    stmt_begin is intended to point to the begin of every statement.
+    It is now used in the following statements:
+      - GRANT ALL PRIVELEGES ON *.* (points to "GRANT");
+      - REVOKE ALL PRIVELEGES ON *.* (points to "REVOKE");
+   */
+  const char *stmt_begin;
+  const char *stmt_end;
+
+  /*
+    stmt_user_begin is intended to point to the begin of the user list in
+    the following statements:
+      - GRANT ALL PRIVELEGES ON *.* TO 'username'@'hostname'
+        (points to "'username'");
+      - REVOKE ALL PRIVELEGES ON *.* FROM 'username'@'hostname'
+        (points to "'username'");
+
+    these pointers are required to replace the CURRENT_USER()
+    function by the real user before dumping it to the binlog.
+   */
+  const char *stmt_user_begin;
+  const char *stmt_user_end;
+
   /**
     During name resolution search only in the table list given by 
     Name_resolution_context::first_name_resolution_table and

=== modified file 'sql/sql_parse.cc'
--- a/sql/sql_parse.cc	2010-01-30 18:47:11 +0000
+++ b/sql/sql_parse.cc	2010-01-30 19:13:36 +0000
@@ -3490,9 +3490,9 @@ end_with_restore_list:
 			select_lex->where,
 			0, (ORDER *)NULL, (ORDER *)NULL, (Item *)NULL,
 			(ORDER *)NULL,
-			select_lex->options | thd->options |
+			(select_lex->options | thd->options |
 			SELECT_NO_JOIN_CACHE | SELECT_NO_UNLOCK |
-                        OPTION_SETUP_TABLES_DONE,
+                        OPTION_SETUP_TABLES_DONE) & ~OPTION_BUFFER_RESULT,
 			del_result, unit, select_lex);
       res|= thd->is_error();
       MYSQL_MULTI_DELETE_DONE(res, del_result->num_deleted());
@@ -4127,7 +4127,7 @@ end_with_restore_list:
       */
       if (!lex->no_write_to_binlog && write_to_binlog)
       {
-        if (res= write_bin_log(thd, FALSE, thd->query(), thd->query_length()))
+        if ((res= write_bin_log(thd, FALSE, thd->query(), thd->query_length())))
           break;
       }
       my_ok(thd);

=== modified file 'sql/sql_select.cc'
--- a/sql/sql_select.cc	2010-01-23 21:09:23 +0000
+++ b/sql/sql_select.cc	2010-01-30 19:13:36 +0000
@@ -543,13 +543,26 @@ JOIN::prepare(Item ***rref_pointer_array
 
   if (order)
   {
+    bool real_order= FALSE;
     ORDER *ord;
     for (ord= order; ord; ord= ord->next)
     {
       Item *item= *ord->item;
+      /*
+        Disregard sort order if there's only "{VAR}CHAR(0) NOT NULL" fields
+        there. Such fields don't contain any data to sort.
+      */
+      if (!real_order &&
+          (item->type() != Item::Item::FIELD_ITEM ||
+           ((Item_field *) item)->field->maybe_null() ||
+           ((Item_field *) item)->field->sort_length()))
+        real_order= TRUE;
+
       if (item->with_sum_func && item->type() != Item::SUM_FUNC_ITEM)
         item->split_sum_func(thd, ref_pointer_array, all_fields);
     }
+    if (!real_order)
+      order= NULL;
   }
 
   if (having && having->with_sum_func)

=== modified file 'sql/sql_table.cc'
--- a/sql/sql_table.cc	2010-01-30 18:47:11 +0000
+++ b/sql/sql_table.cc	2010-01-30 19:13:36 +0000
@@ -6608,7 +6608,7 @@ bool mysql_alter_table(THD *thd,char *ne
         thd->clear_error();
         Query_log_event qinfo(thd, thd->query(), thd->query_length(),
                               0, FALSE, 0);
-        if (error= mysql_bin_log.write(&qinfo))
+        if ((error= mysql_bin_log.write(&qinfo)))
           goto view_err_unlock;
       }
       my_ok(thd);

=== modified file 'sql/sql_test.cc'
--- a/sql/sql_test.cc	2009-10-14 16:37:38 +0000
+++ b/sql/sql_test.cc	2010-01-30 19:13:36 +0000
@@ -168,6 +168,21 @@ TEST_join(JOIN *join)
   uint i,ref;
   DBUG_ENTER("TEST_join");
 
+  /*
+    Assemble results of all the calls to full_name() first,
+    in order not to garble the tabular output below.
+  */
+  String ref_key_parts[MAX_TABLES];
+  for (i= 0; i < join->tables; i++)
+  {
+    JOIN_TAB *tab= join->join_tab + i;
+    for (ref= 0; ref < tab->ref.key_parts; ref++)
+    {
+      ref_key_parts[i].append(tab->ref.items[ref]->full_name());
+      ref_key_parts[i].append("  ");
+    }
+  }
+
   DBUG_LOCK_FILE;
   VOID(fputs("\nInfo about JOIN\n",DBUG_FILE));
   for (i=0 ; i < join->tables ; i++)
@@ -199,13 +214,8 @@ TEST_join(JOIN *join)
     }
     if (tab->ref.key_parts)
     {
-      VOID(fputs("                  refs: ",DBUG_FILE));
-      for (ref=0 ; ref < tab->ref.key_parts ; ref++)
-      {
-	Item *item=tab->ref.items[ref];
-	fprintf(DBUG_FILE,"%s  ", item->full_name());
-      }
-      VOID(fputc('\n',DBUG_FILE));
+      fprintf(DBUG_FILE,
+              "                  refs:  %s\n", ref_key_parts[i].ptr());
     }
   }
   DBUG_UNLOCK_FILE;

=== modified file 'sql/sql_yacc.yy'
--- a/sql/sql_yacc.yy	2010-01-23 21:09:23 +0000
+++ b/sql/sql_yacc.yy	2010-01-30 19:13:36 +0000
@@ -1590,7 +1590,11 @@ opt_end_of_input:
         ;
 
 verb_clause:
-          statement
+          remember_name statement remember_end
+          {
+            Lex->stmt_begin= $1;
+            Lex->stmt_end= $3;
+          }
         | begin
         ;
 
@@ -6061,7 +6065,7 @@ alter:
           }
           view_tail
           {}
-        | ALTER definer_opt EVENT_SYM sp_name
+        | ALTER definer_opt remember_name EVENT_SYM sp_name
           {
             /* 
               It is safe to use Lex->spname because
@@ -6073,7 +6077,8 @@ alter:
 
             if (!(Lex->event_parse_data= Event_parse_data::new_instance(YYTHD)))
               MYSQL_YYABORT;
-            Lex->event_parse_data->identifier= $4;
+            Lex->event_parse_data->identifier= $5;
+            Lex->stmt_definition_begin= $3;
 
             Lex->sql_command= SQLCOM_ALTER_EVENT;
           }
@@ -6083,7 +6088,7 @@ alter:
           opt_ev_comment
           opt_ev_sql_stmt
           {
-            if (!($6 || $7 || $8 || $9 || $10))
+            if (!($7 || $8 || $9 || $10 || $11))
             {
               my_parse_error(ER(ER_SYNTAX_ERROR));
               MYSQL_YYABORT;
@@ -6144,7 +6149,16 @@ opt_ev_rename_to:
         ;
 
 opt_ev_sql_stmt:
-          /* empty*/ { $$= 0;}
+          /* empty*/
+          {
+            $$= 0;
+            /*
+              Lex->sp_head is not initialized when event body is empty.
+              So we can not use Lex->sp_head->set_stmt_end() to set
+              stmt_definition_end.
+             */
+            Lex->stmt_definition_end= (char*) YYLIP->get_cpp_tok_end();
+          }
         | DO_SYM ev_sql_stmt { $$= 1; }
         ;
 
@@ -11894,6 +11908,7 @@ user:
             $$->user = $1;
             $$->host.str= (char *) "%";
             $$->host.length= 1;
+            Lex->stmt_user_end= YYLIP->get_cpp_ptr();
 
             if (check_string_char_length(&$$->user, ER(ER_USERNAME),
                                          USERNAME_CHAR_LENGTH,
@@ -11906,6 +11921,7 @@ user:
             if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user))))
               MYSQL_YYABORT;
             $$->user = $1; $$->host=$3;
+            Lex->stmt_user_end= YYLIP->get_cpp_ptr();
 
             if (check_string_char_length(&$$->user, ER(ER_USERNAME),
                                          USERNAME_CHAR_LENGTH,
@@ -11915,6 +11931,7 @@ user:
           }
         | CURRENT_USER optional_braces
           {
+            Lex->stmt_user_end= YYLIP->get_cpp_ptr();
             if (!($$=(LEX_USER*) YYTHD->alloc(sizeof(st_lex_user))))
               MYSQL_YYABORT;
             /* 
@@ -13119,9 +13136,10 @@ user_list:
         ;
 
 grant_list:
+          { Lex->stmt_user_begin= YYLIP->get_cpp_ptr(); }
           grant_user
           {
-            if (Lex->users_list.push_back($1))
+            if (Lex->users_list.push_back($2))
               MYSQL_YYABORT;
           }
         | grant_list ',' grant_user
@@ -13134,6 +13152,7 @@ grant_list:
 grant_user:
           user IDENTIFIED_SYM BY TEXT_STRING
           {
+            Lex->stmt_user_end= YYLIP->get_cpp_ptr();
             $$=$1; $1->password=$4;
             if ($4.length)
             {
@@ -13160,7 +13179,10 @@ grant_user:
             }
           }
         | user IDENTIFIED_SYM BY PASSWORD TEXT_STRING
-          { $$= $1; $1->password= $5; }
+          {
+            Lex->stmt_user_end= YYLIP->get_cpp_ptr();
+            $$= $1; $1->password= $5;
+          }
         | user
           { $$= $1; $1->password= null_lex_str; }
         ;


Attachment: [text/bzr-bundle] bzr/alik@sun.com-20100130191336-i53i9wx67n81ridm.bundle
Thread
bzr commit into mysql-5.5-trunk branch (alik:2965)Alexander Nozdrin30 Jan