summaryrefslogtreecommitdiff
path: root/sql/events.cc
diff options
context:
space:
mode:
authorDmitry Shulga <Dmitry.Shulga@oracle.com>2011-05-27 18:42:28 +0700
committerDmitry Shulga <Dmitry.Shulga@oracle.com>2011-05-27 18:42:28 +0700
commitc34a99b8b91dbf4c61c0c659d11ff7d62f0e2ffb (patch)
treec1f9ac889f06425764a59c638f9df97659d53aba /sql/events.cc
parent20791d83dec2736bdc6ff7dfc2f3365595c1fd00 (diff)
parent56a735b78226f6de336c520936df3485d929d685 (diff)
downloadmariadb-git-c34a99b8b91dbf4c61c0c659d11ff7d62f0e2ffb.tar.gz
Manual-merge of patch for bug#12546938 from mysql-5.1->mysql-5.5
Diffstat (limited to 'sql/events.cc')
-rw-r--r--sql/events.cc53
1 files changed, 29 insertions, 24 deletions
diff --git a/sql/events.cc b/sql/events.cc
index dca6421f584..819eca63e5c 100644
--- a/sql/events.cc
+++ b/sql/events.cc
@@ -284,6 +284,7 @@ create_query_string(THD *thd, String *buf)
return 0;
}
+
/**
Create a new event.
@@ -304,8 +305,8 @@ bool
Events::create_event(THD *thd, Event_parse_data *parse_data,
bool if_not_exists)
{
- int ret;
- bool save_binlog_row_based;
+ bool ret;
+ bool save_binlog_row_based, event_already_exists;
DBUG_ENTER("Events::create_event");
if (check_if_system_tables_error())
@@ -345,28 +346,32 @@ Events::create_event(THD *thd, Event_parse_data *parse_data,
DBUG_RETURN(TRUE);
/* On error conditions my_error() is called so no need to handle here */
- if (!(ret= db_repository->create_event(thd, parse_data, if_not_exists)))
+ if (!(ret= db_repository->create_event(thd, parse_data, if_not_exists,
+ &event_already_exists)))
{
Event_queue_element *new_element;
bool dropped= 0;
- if (!(new_element= new Event_queue_element()))
- ret= TRUE; // OOM
- else if ((ret= db_repository->load_named_event(thd, parse_data->dbname,
- parse_data->name,
- new_element)))
+ if (!event_already_exists)
{
- if (!db_repository->drop_event(thd, parse_data->dbname, parse_data->name,
- TRUE))
- dropped= 1;
- delete new_element;
- }
- else
- {
- /* TODO: do not ignore the out parameter and a possible OOM error! */
- bool created;
- if (event_queue)
- event_queue->create_event(thd, new_element, &created);
+ if (!(new_element= new Event_queue_element()))
+ ret= TRUE; // OOM
+ else if ((ret= db_repository->load_named_event(thd, parse_data->dbname,
+ parse_data->name,
+ new_element)))
+ {
+ if (!db_repository->drop_event(thd, parse_data->dbname, parse_data->name,
+ TRUE))
+ dropped= 1;
+ delete new_element;
+ }
+ else
+ {
+ /* TODO: do not ignore the out parameter and a possible OOM error! */
+ bool created;
+ if (event_queue)
+ event_queue->create_event(thd, new_element, &created);
+ }
}
/*
binlog the create event unless it's been successfully dropped
@@ -380,14 +385,14 @@ Events::create_event(THD *thd, Event_parse_data *parse_data,
{
sql_print_error("Event Error: An error occurred while creating query string, "
"before writing it into binary log.");
- ret= TRUE;
+ ret= true;
}
else
- {
- /* 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. */
+ /*
+ 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());
- }
}
}
/* Restore the state of binlog format */