summaryrefslogtreecommitdiff
path: root/sql/event_data_objects.cc
diff options
context:
space:
mode:
authorkroki/tomash@moonlight.home <>2007-02-02 20:43:33 +0300
committerkroki/tomash@moonlight.home <>2007-02-02 20:43:33 +0300
commita4017eceb1d9fc59683682199b5cd91d91fa1e3c (patch)
tree2999e07bb4a34e881435544a05c901a008ca2b19 /sql/event_data_objects.cc
parent84ca9c72ca314f4d535593d12715c5ba2c6178e6 (diff)
downloadmariadb-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.cc21
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));