diff options
author | kroki/tomash@moonlight.home <> | 2007-02-02 20:43:33 +0300 |
---|---|---|
committer | kroki/tomash@moonlight.home <> | 2007-02-02 20:43:33 +0300 |
commit | a4017eceb1d9fc59683682199b5cd91d91fa1e3c (patch) | |
tree | 2999e07bb4a34e881435544a05c901a008ca2b19 /sql/event_data_objects.cc | |
parent | 84ca9c72ca314f4d535593d12715c5ba2c6178e6 (diff) | |
download | mariadb-git-a4017eceb1d9fc59683682199b5cd91d91fa1e3c.tar.gz |
BUG#16425: Events: no DEFINER clause
There was already support for CREATE DEFINER=... EVENT syntax in the
parser, but DEFINER information was ignored.
This patch adds processing of DEFINER, and a new ALTER DEFINER=...
EVENT syntax.
Diffstat (limited to 'sql/event_data_objects.cc')
-rw-r--r-- | sql/event_data_objects.cc | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/sql/event_data_objects.cc b/sql/event_data_objects.cc index b1724a28820..42f8d2959b0 100644 --- a/sql/event_data_objects.cc +++ b/sql/event_data_objects.cc @@ -611,16 +611,18 @@ Event_parse_data::check_parse_data(THD *thd) void Event_parse_data::init_definer(THD *thd) { - int definer_user_len; - int definer_host_len; DBUG_ENTER("Event_parse_data::init_definer"); - DBUG_PRINT("info",("init definer_user thd->mem_root: 0x%lx " - "thd->sec_ctx->priv_user: 0x%lx", (long) thd->mem_root, - (long) thd->security_ctx->priv_user)); + DBUG_ASSERT(thd->lex->definer); + + const char *definer_user= thd->lex->definer->user.str; + const char *definer_host= thd->lex->definer->host.str; + int definer_user_len= thd->lex->definer->user.length; + int definer_host_len= thd->lex->definer->host.length; - definer_user_len= strlen(thd->security_ctx->priv_user); - definer_host_len= strlen(thd->security_ctx->priv_host); + DBUG_PRINT("info",("init definer_user thd->mem_root: 0x%lx " + "definer_user: 0x%lx", (long) thd->mem_root, + (long) definer_user)); /* + 1 for @ */ DBUG_PRINT("info",("init definer as whole")); @@ -628,12 +630,11 @@ Event_parse_data::init_definer(THD *thd) definer.str= thd->alloc(definer.length + 1); DBUG_PRINT("info",("copy the user")); - memcpy(definer.str, thd->security_ctx->priv_user, definer_user_len); + memcpy(definer.str, definer_user, definer_user_len); definer.str[definer_user_len]= '@'; DBUG_PRINT("info",("copy the host")); - memcpy(definer.str + definer_user_len + 1, thd->security_ctx->priv_host, - definer_host_len); + memcpy(definer.str + definer_user_len + 1, definer_host, definer_host_len); definer.str[definer.length]= '\0'; DBUG_PRINT("info",("definer [%s] initted", definer.str)); |