diff options
author | Dmitry Shulga <Dmitry.Shulga@oracle.com> | 2011-05-27 18:42:28 +0700 |
---|---|---|
committer | Dmitry Shulga <Dmitry.Shulga@oracle.com> | 2011-05-27 18:42:28 +0700 |
commit | c34a99b8b91dbf4c61c0c659d11ff7d62f0e2ffb (patch) | |
tree | c1f9ac889f06425764a59c638f9df97659d53aba /sql/events.cc | |
parent | 20791d83dec2736bdc6ff7dfc2f3365595c1fd00 (diff) | |
parent | 56a735b78226f6de336c520936df3485d929d685 (diff) | |
download | mariadb-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.cc | 53 |
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 */ |