summaryrefslogtreecommitdiff
path: root/sql/sql_lex.h
diff options
context:
space:
mode:
authorunknown <Li-Bing.Song@sun.com>2010-01-30 20:49:25 +0800
committerunknown <Li-Bing.Song@sun.com>2010-01-30 20:49:25 +0800
commitd9e9a73e8f1355a24b27d64d56d555d045ee0b4c (patch)
treefe4d6d50364d61bae44bb06b36e269c34dc713ab /sql/sql_lex.h
parentf51a45cdbb3c93dfd3b08fea0a6253c78f26cfae (diff)
downloadmariadb-git-d9e9a73e8f1355a24b27d64d56d555d045ee0b4c.tar.gz
Bug #48321 CURRENT_USER() incorrectly replicated for DROP/RENAME USER;
REVOKE/GRANT; ALTER EVENT. The following statements support the CURRENT_USER() where a user is needed. DROP USER RENAME USER CURRENT_USER() ... GRANT ... TO CURRENT_USER() REVOKE ... FROM CURRENT_USER() ALTER DEFINER = CURRENT_USER() EVENT but, When these statements are binlogged, CURRENT_USER() just is binlogged as 'CURRENT_USER()', it is not expanded to the real user name. When slave executes the log event, 'CURRENT_USER()' is expand to the user of slave SQL thread, but SQL thread's user name always NULL. This breaks the replication. After this patch, All above statements are rewritten when they are binlogged. The CURRENT_USER() is expanded to the real user's name and host.
Diffstat (limited to 'sql/sql_lex.h')
-rw-r--r--sql/sql_lex.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/sql/sql_lex.h b/sql/sql_lex.h
index 4e4794ef2cf..99f5257eb5e 100644
--- a/sql/sql_lex.h
+++ b/sql/sql_lex.h
@@ -1727,6 +1727,8 @@ typedef struct st_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.
@@ -1735,6 +1737,29 @@ typedef struct st_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