summaryrefslogtreecommitdiff
path: root/sql/events.cc
diff options
context:
space:
mode:
authorcbell/Chuck@mysql_cab_desk. <>2007-03-26 09:57:16 -0400
committercbell/Chuck@mysql_cab_desk. <>2007-03-26 09:57:16 -0400
commit71c4bd1f0add03542622e94c6d1394f6cbc48abc (patch)
treeeb834082bade798b379abe064b064f68b1949da4 /sql/events.cc
parent68cc7dde31b6cf1a72fea3e3e6d3aa62bd3bacf9 (diff)
parent3e44599c11e90c2b6470e64dbe6d78bc6c5f9f10 (diff)
downloadmariadb-git-71c4bd1f0add03542622e94c6d1394f6cbc48abc.tar.gz
Merge mysql_cab_desk.:C:/source/c++/mysql-5.1-new-rpl
into mysql_cab_desk.:C:/source/c++/mysql-5.1_WL_3629
Diffstat (limited to 'sql/events.cc')
-rw-r--r--sql/events.cc52
1 files changed, 50 insertions, 2 deletions
diff --git a/sql/events.cc b/sql/events.cc
index f73dc97e7c2..fbb3828fa80 100644
--- a/sql/events.cc
+++ b/sql/events.cc
@@ -324,7 +324,15 @@ Events::create_event(THD *thd, Event_parse_data *parse_data, bool if_not_exists)
DBUG_RETURN(TRUE);
}
+ /*
+ Turn off row binlogging of this statement and use statement-based
+ so that all supporting tables are updated for CREATE EVENT command.
+ */
+ if (thd->current_stmt_binlog_row_based)
+ thd->clear_current_stmt_binlog_row_based();
+
pthread_mutex_lock(&LOCK_event_metadata);
+
/* 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)))
{
@@ -339,8 +347,16 @@ Events::create_event(THD *thd, Event_parse_data *parse_data, bool if_not_exists)
DBUG_ASSERT(ret == OP_LOAD_ERROR);
delete new_element;
}
- else
+ else /* Binlog the create event. */
+ {
event_queue->create_event(thd, new_element);
+ if (mysql_bin_log.is_open())
+ {
+ thd->clear_error();
+ thd->binlog_query(THD::MYSQL_QUERY_TYPE,
+ thd->query, thd->query_length, FALSE, FALSE);
+ }
+ }
}
pthread_mutex_unlock(&LOCK_event_metadata);
@@ -382,7 +398,15 @@ Events::update_event(THD *thd, Event_parse_data *parse_data, sp_name *rename_to)
DBUG_RETURN(TRUE);
}
+ /*
+ Turn off row binlogging of this statement and use statement-based
+ so that all supporting tables are updated for UPDATE EVENT command.
+ */
+ if (thd->current_stmt_binlog_row_based)
+ thd->clear_current_stmt_binlog_row_based();
+
pthread_mutex_lock(&LOCK_event_metadata);
+
/* On error conditions my_error() is called so no need to handle here */
if (!(ret= db_repository->update_event(thd, parse_data, new_dbname, new_name)))
{
@@ -397,9 +421,17 @@ Events::update_event(THD *thd, Event_parse_data *parse_data, sp_name *rename_to)
DBUG_ASSERT(ret == OP_LOAD_ERROR);
delete new_element;
}
- else
+ else /* Binlog the alter event. */
+ {
event_queue->update_event(thd, parse_data->dbname, parse_data->name,
new_element);
+ if (mysql_bin_log.is_open())
+ {
+ thd->clear_error();
+ thd->binlog_query(THD::MYSQL_QUERY_TYPE,
+ thd->query, thd->query_length, FALSE, FALSE);
+ }
+ }
}
pthread_mutex_unlock(&LOCK_event_metadata);
@@ -434,10 +466,26 @@ Events::drop_event(THD *thd, LEX_STRING dbname, LEX_STRING name, bool if_exists)
DBUG_RETURN(TRUE);
}
+ /*
+ Turn off row binlogging of this statement and use statement-based so
+ that all supporting tables are updated for DROP EVENT command.
+ */
+ if (thd->current_stmt_binlog_row_based)
+ thd->clear_current_stmt_binlog_row_based();
+
pthread_mutex_lock(&LOCK_event_metadata);
/* On error conditions my_error() is called so no need to handle here */
if (!(ret= db_repository->drop_event(thd, dbname, name, if_exists)))
+ {
event_queue->drop_event(thd, dbname, name);
+ /* Binlog the drop event. */
+ if (mysql_bin_log.is_open())
+ {
+ thd->clear_error();
+ thd->binlog_query(THD::MYSQL_QUERY_TYPE,
+ thd->query, thd->query_length, FALSE, FALSE);
+ }
+ }
pthread_mutex_unlock(&LOCK_event_metadata);
DBUG_RETURN(ret);
}