summaryrefslogtreecommitdiff
path: root/sql/log_event.h
diff options
context:
space:
mode:
Diffstat (limited to 'sql/log_event.h')
-rw-r--r--sql/log_event.h86
1 files changed, 61 insertions, 25 deletions
diff --git a/sql/log_event.h b/sql/log_event.h
index 390a8c8070d..d69ec935258 100644
--- a/sql/log_event.h
+++ b/sql/log_event.h
@@ -301,6 +301,15 @@ struct sql_ex_info
#define LOG_EVENT_TIME_F 0x1
#define LOG_EVENT_FORCED_ROTATE_F 0x2
#endif
+
+/*
+ This flag only makes sense for Format_description_log_event.
+ It is set not when the event is written, but when a binlog file
+ is closed.
+*/
+
+#define LOG_EVENT_BINLOG_CLOSED_F 0x1
+
/*
If the query depends on the thread (for example: TEMPORARY TABLE).
Currently this is used by mysqlbinlog to know it must print
@@ -310,6 +319,19 @@ struct sql_ex_info
#define LOG_EVENT_THREAD_SPECIFIC_F 0x4
/*
+ Suppress the generation of 'USE' statements before the actual
+ statement. This flag should be set for any events that does not need
+ the current database set to function correctly. Most notable cases
+ are 'CREATE DATABASE' and 'DROP DATABASE'.
+
+ This flags should only be used in exceptional circumstances, since
+ it introduce a significant change in behaviour regarding the
+ replication logic together with the flags --binlog-do-db and
+ --replicated-do-db.
+ */
+#define LOG_EVENT_SUPPRESS_USE_F 0x8
+
+/*
OPTIONS_WRITTEN_TO_BIN_LOG are the bits of thd->options which must be written
to the binlog. OPTIONS_WRITTEN_TO_BINLOG could be written into the
Format_description_log_event, so that if later we don't want to replicate a
@@ -329,19 +351,6 @@ struct sql_ex_info
#define OPTIONS_WRITTEN_TO_BIN_LOG (OPTION_AUTO_IS_NULL | \
OPTION_NO_FOREIGN_KEY_CHECKS | OPTION_RELAXED_UNIQUE_CHECKS)
-/*
- Suppress the generation of 'USE' statements before the actual
- statement. This flag should be set for any events that does not need
- the current database set to function correctly. Most notable cases
- are 'CREATE DATABASE' and 'DROP DATABASE'.
-
- This flags should only be used in exceptional circumstances, since
- it introduce a significant change in behaviour regarding the
- replication logic together with the flags --binlog-do-db and
- --replicated-do-db.
- */
-#define LOG_EVENT_SUPPRESS_USE_F 0x8
-
enum Log_event_type
{
/*
@@ -357,7 +366,7 @@ enum Log_event_type
allowing multibyte TERMINATED BY etc; both types share the same class
(Load_log_event)
*/
- NEW_LOAD_EVENT,
+ NEW_LOAD_EVENT, XID_EVENT,
RAND_EVENT, USER_VAR_EVENT,
FORMAT_DESCRIPTION_EVENT,
ENUM_END_EVENT /* end marker */
@@ -458,10 +467,8 @@ public:
uint32 server_id;
/*
- Some 16 flags. Only one is really used now; look above for
- LOG_EVENT_TIME_F, LOG_EVENT_FORCED_ROTATE_F,
- LOG_EVENT_THREAD_SPECIFIC_F, and LOG_EVENT_SUPPRESS_USE_F for
- notes.
+ Some 16 flags. Look above for LOG_EVENT_TIME_F, LOG_EVENT_FORCED_ROTATE_F,
+ LOG_EVENT_THREAD_SPECIFIC_F, and LOG_EVENT_SUPPRESS_USE_F for notes.
*/
uint16 flags;
@@ -557,11 +564,11 @@ public:
temp_buf = 0;
}
}
- virtual int get_data_size() { return 0;}
/*
Get event length for simple events. For complicated events the length
is calculated during write()
*/
+ virtual int get_data_size() { return 0;}
static Log_event* read_log_event(const char* buf, uint event_len,
const char **error,
const Format_description_log_event
@@ -1026,6 +1033,40 @@ class Rand_log_event: public Log_event
bool is_valid() const { return 1; }
};
+/*****************************************************************************
+
+ Xid Log Event class
+
+ Logs xid of the transaction-to-be-committed in the 2pc protocol.
+ Has no meaning in replication, slaves ignore it.
+
+ ****************************************************************************/
+#ifdef MYSQL_CLIENT
+typedef ulong my_xid;
+#endif
+
+class Xid_log_event: public Log_event
+{
+ public:
+ my_xid xid;
+
+#ifndef MYSQL_CLIENT
+ Xid_log_event(THD* thd_arg, my_xid x): Log_event(thd_arg,0,0), xid(x) {}
+#ifdef HAVE_REPLICATION
+ void pack_info(Protocol* protocol);
+ int exec_event(struct st_relay_log_info* rli);
+#endif /* HAVE_REPLICATION */
+#else
+ void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
+#endif
+
+ Xid_log_event(const char* buf, const Format_description_log_event* description_event);
+ ~Xid_log_event() {}
+ Log_event_type get_type_code() { return XID_EVENT;}
+ int get_data_size() { return sizeof(xid); }
+ bool write(IO_CACHE* file);
+ bool is_valid() const { return 1; }
+};
/*****************************************************************************
@@ -1075,8 +1116,6 @@ public:
Stop Log Event class
****************************************************************************/
-#ifdef HAVE_REPLICATION
-
class Stop_log_event: public Log_event
{
public:
@@ -1096,14 +1135,11 @@ public:
bool is_valid() const { return 1; }
};
-#endif /* HAVE_REPLICATION */
-
-
/*****************************************************************************
Rotate Log Event class
- This will be depricated when we move to using sequence ids.
+ This will be deprecated when we move to using sequence ids.
****************************************************************************/