Fixed problem that Start_log_event_v3::created was not set properly

(This is becasue 'when' is not anymore set in constructor)
parent 9d609a59
...@@ -1030,14 +1030,14 @@ static int dump_log_entries(const char* logname) ...@@ -1030,14 +1030,14 @@ static int dump_log_entries(const char* logname)
like CREATE PROCEDURE safely like CREATE PROCEDURE safely
*/ */
fprintf(result_file, "DELIMITER /*!*/;\n"); fprintf(result_file, "DELIMITER /*!*/;\n");
strcpy(print_event_info.delimiter, "/*!*/;"); strmov(print_event_info.delimiter, "/*!*/;");
rc= (remote_opt ? dump_remote_log_entries(&print_event_info, logname) : rc= (remote_opt ? dump_remote_log_entries(&print_event_info, logname) :
dump_local_log_entries(&print_event_info, logname)); dump_local_log_entries(&print_event_info, logname));
/* Set delimiter back to semicolon */ /* Set delimiter back to semicolon */
fprintf(result_file, "DELIMITER ;\n"); fprintf(result_file, "DELIMITER ;\n");
strcpy(print_event_info.delimiter, ";"); strmov(print_event_info.delimiter, ";");
return rc; return rc;
} }
......
...@@ -2346,8 +2346,7 @@ bool MYSQL_BIN_LOG::open(const char *log_name, ...@@ -2346,8 +2346,7 @@ bool MYSQL_BIN_LOG::open(const char *log_name,
s.flags|= LOG_EVENT_BINLOG_IN_USE_F; s.flags|= LOG_EVENT_BINLOG_IN_USE_F;
if (!s.is_valid()) if (!s.is_valid())
goto err; goto err;
if (null_created_arg) s.dont_set_created= null_created_arg;
s.created= 0;
if (s.write(&log_file)) if (s.write(&log_file))
goto err; goto err;
bytes_written+= s.data_written; bytes_written+= s.data_written;
......
This diff is collapsed.
...@@ -57,8 +57,8 @@ ...@@ -57,8 +57,8 @@
which increments every time we write an event to the binlog) (3 bytes). which increments every time we write an event to the binlog) (3 bytes).
Q: how do we handle when the counter is overflowed and restarts from 0 ? Q: how do we handle when the counter is overflowed and restarts from 0 ?
- Query and Load (Create or Execute) events may have a more precise timestamp - Query and Load (Create or Execute) events may have a more precise
(with microseconds), number of matched/affected/warnings rows timestamp (with microseconds), number of matched/affected/warnings rows
and fields of session variables: SQL_MODE, and fields of session variables: SQL_MODE,
FOREIGN_KEY_CHECKS, UNIQUE_CHECKS, SQL_AUTO_IS_NULL, the collations and FOREIGN_KEY_CHECKS, UNIQUE_CHECKS, SQL_AUTO_IS_NULL, the collations and
charsets, the PASSWORD() version (old/new/...). charsets, the PASSWORD() version (old/new/...).
...@@ -708,7 +708,8 @@ class Log_event ...@@ -708,7 +708,8 @@ class Log_event
*/ */
static Log_event* read_log_event(IO_CACHE* file, static Log_event* read_log_event(IO_CACHE* file,
pthread_mutex_t* log_lock, pthread_mutex_t* log_lock,
const Format_description_log_event *description_event); const Format_description_log_event
*description_event);
static int read_log_event(IO_CACHE* file, String* packet, static int read_log_event(IO_CACHE* file, String* packet,
pthread_mutex_t* log_lock); pthread_mutex_t* log_lock);
/* /*
...@@ -736,7 +737,8 @@ class Log_event ...@@ -736,7 +737,8 @@ class Log_event
Log_event() : temp_buf(0) {} Log_event() : temp_buf(0) {}
/* avoid having to link mysqlbinlog against libpthread */ /* avoid having to link mysqlbinlog against libpthread */
static Log_event* read_log_event(IO_CACHE* file, static Log_event* read_log_event(IO_CACHE* file,
const Format_description_log_event *description_event); const Format_description_log_event
*description_event);
/* print*() functions are used by mysqlbinlog */ /* print*() functions are used by mysqlbinlog */
virtual void print(FILE* file, PRINT_EVENT_INFO* print_event_info) = 0; virtual void print(FILE* file, PRINT_EVENT_INFO* print_event_info) = 0;
void print_timestamp(IO_CACHE* file, time_t *ts = 0); void print_timestamp(IO_CACHE* file, time_t *ts = 0);
...@@ -777,7 +779,8 @@ class Log_event ...@@ -777,7 +779,8 @@ class Log_event
virtual bool is_valid() const = 0; virtual bool is_valid() const = 0;
virtual bool is_artificial_event() { return 0; } virtual bool is_artificial_event() { return 0; }
inline bool get_cache_stmt() const { return cache_stmt; } inline bool get_cache_stmt() const { return cache_stmt; }
Log_event(const char* buf, const Format_description_log_event* description_event); Log_event(const char* buf, const Format_description_log_event
*description_event);
virtual ~Log_event() { free_temp_buf();} virtual ~Log_event() { free_temp_buf();}
void register_temp_buf(char* buf) { temp_buf = buf; } void register_temp_buf(char* buf) { temp_buf = buf; }
void free_temp_buf() void free_temp_buf()
...@@ -800,6 +803,8 @@ class Log_event ...@@ -800,6 +803,8 @@ class Log_event
/* returns the human readable name of the event's type */ /* returns the human readable name of the event's type */
const char* get_type_str(); const char* get_type_str();
/* Return start of query time or current time */
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
public: public:
...@@ -811,7 +816,8 @@ class Log_event ...@@ -811,7 +816,8 @@ class Log_event
@see do_apply_event @see do_apply_event
*/ */
int apply_event(RELAY_LOG_INFO const *rli) { int apply_event(RELAY_LOG_INFO const *rli)
{
return do_apply_event(rli); return do_apply_event(rli);
} }
...@@ -920,6 +926,18 @@ class Log_event ...@@ -920,6 +926,18 @@ class Log_event
*/ */
virtual enum_skip_reason do_shall_skip(RELAY_LOG_INFO *rli); virtual enum_skip_reason do_shall_skip(RELAY_LOG_INFO *rli);
inline ulong get_time()
{
THD *tmp_thd;
if (when)
return (ulong) when;
if (thd)
return thd->start_time;
if ((tmp_thd= current_thd))
return tmp_thd->start_time;
return my_time(0);
}
#endif #endif
}; };
...@@ -1151,7 +1169,8 @@ class Load_log_event: public Log_event ...@@ -1151,7 +1169,8 @@ class Load_log_event: public Log_event
char **fn_start, char **fn_end); char **fn_start, char **fn_end);
protected: protected:
int copy_log_event(const char *buf, ulong event_len, int copy_log_event(const char *buf, ulong event_len,
int body_offset, const Format_description_log_event* description_event); int body_offset,
const Format_description_log_event* description_event);
public: public:
ulong thread_id; ulong thread_id;
...@@ -1296,6 +1315,11 @@ class Start_log_event_v3: public Log_event ...@@ -1296,6 +1315,11 @@ class Start_log_event_v3: public Log_event
setting log_event == 0 (for now). setting log_event == 0 (for now).
*/ */
bool artificial_event; bool artificial_event;
/*
We set this to 1 if we don't want to have the created time in the log,
which is the case when we rollover to a new log.
*/
bool dont_set_created;
#ifndef MYSQL_CLIENT #ifndef MYSQL_CLIENT
Start_log_event_v3(); Start_log_event_v3();
...@@ -1362,7 +1386,8 @@ class Format_description_log_event: public Start_log_event_v3 ...@@ -1362,7 +1386,8 @@ class Format_description_log_event: public Start_log_event_v3
Format_description_log_event(uint8 binlog_ver, const char* server_ver=0); Format_description_log_event(uint8 binlog_ver, const char* server_ver=0);
Format_description_log_event(const char* buf, uint event_len, Format_description_log_event(const char* buf, uint event_len,
const Format_description_log_event* description_event); const Format_description_log_event
*description_event);
~Format_description_log_event() { my_free((uchar*)post_header_len, MYF(0)); } ~Format_description_log_event() { my_free((uchar*)post_header_len, MYF(0)); }
Log_event_type get_type_code() { return FORMAT_DESCRIPTION_EVENT;} Log_event_type get_type_code() { return FORMAT_DESCRIPTION_EVENT;}
#ifndef MYSQL_CLIENT #ifndef MYSQL_CLIENT
...@@ -1420,7 +1445,8 @@ class Intvar_log_event: public Log_event ...@@ -1420,7 +1445,8 @@ class Intvar_log_event: public Log_event
void print(FILE* file, PRINT_EVENT_INFO* print_event_info); void print(FILE* file, PRINT_EVENT_INFO* print_event_info);
#endif #endif
Intvar_log_event(const char* buf, const Format_description_log_event* description_event); Intvar_log_event(const char* buf,
const Format_description_log_event *description_event);
~Intvar_log_event() {} ~Intvar_log_event() {}
Log_event_type get_type_code() { return INTVAR_EVENT;} Log_event_type get_type_code() { return INTVAR_EVENT;}
const char* get_var_type_name(); const char* get_var_type_name();
...@@ -1467,7 +1493,8 @@ class Rand_log_event: public Log_event ...@@ -1467,7 +1493,8 @@ class Rand_log_event: public Log_event
void print(FILE* file, PRINT_EVENT_INFO* print_event_info); void print(FILE* file, PRINT_EVENT_INFO* print_event_info);
#endif #endif
Rand_log_event(const char* buf, const Format_description_log_event* description_event); Rand_log_event(const char* buf,
const Format_description_log_event *description_event);
~Rand_log_event() {} ~Rand_log_event() {}
Log_event_type get_type_code() { return RAND_EVENT;} Log_event_type get_type_code() { return RAND_EVENT;}
int get_data_size() { return 16; /* sizeof(ulonglong) * 2*/ } int get_data_size() { return 16; /* sizeof(ulonglong) * 2*/ }
...@@ -1510,7 +1537,8 @@ class Xid_log_event: public Log_event ...@@ -1510,7 +1537,8 @@ class Xid_log_event: public Log_event
void print(FILE* file, PRINT_EVENT_INFO* print_event_info); void print(FILE* file, PRINT_EVENT_INFO* print_event_info);
#endif #endif
Xid_log_event(const char* buf, const Format_description_log_event* description_event); Xid_log_event(const char* buf,
const Format_description_log_event *description_event);
~Xid_log_event() {} ~Xid_log_event() {}
Log_event_type get_type_code() { return XID_EVENT;} Log_event_type get_type_code() { return XID_EVENT;}
int get_data_size() { return sizeof(xid); } int get_data_size() { return sizeof(xid); }
...@@ -1556,7 +1584,8 @@ class User_var_log_event: public Log_event ...@@ -1556,7 +1584,8 @@ class User_var_log_event: public Log_event
void print(FILE* file, PRINT_EVENT_INFO* print_event_info); void print(FILE* file, PRINT_EVENT_INFO* print_event_info);
#endif #endif
User_var_log_event(const char* buf, const Format_description_log_event* description_event); User_var_log_event(const char* buf,
const Format_description_log_event *description_event);
~User_var_log_event() {} ~User_var_log_event() {}
Log_event_type get_type_code() { return USER_VAR_EVENT;} Log_event_type get_type_code() { return USER_VAR_EVENT;}
#ifndef MYSQL_CLIENT #ifndef MYSQL_CLIENT
...@@ -1588,7 +1617,8 @@ class Stop_log_event: public Log_event ...@@ -1588,7 +1617,8 @@ class Stop_log_event: public Log_event
void print(FILE* file, PRINT_EVENT_INFO* print_event_info); void print(FILE* file, PRINT_EVENT_INFO* print_event_info);
#endif #endif
Stop_log_event(const char* buf, const Format_description_log_event* description_event): Stop_log_event(const char* buf,
const Format_description_log_event *description_event):
Log_event(buf, description_event) Log_event(buf, description_event)
{} {}
~Stop_log_event() {} ~Stop_log_event() {}
...@@ -1697,7 +1727,8 @@ class Create_file_log_event: public Load_log_event ...@@ -1697,7 +1727,8 @@ class Create_file_log_event: public Load_log_event
#endif /* HAVE_REPLICATION */ #endif /* HAVE_REPLICATION */
#else #else
void print(FILE* file, PRINT_EVENT_INFO* print_event_info); void print(FILE* file, PRINT_EVENT_INFO* print_event_info);
void print(FILE* file, PRINT_EVENT_INFO* print_event_info, bool enable_local); void print(FILE* file, PRINT_EVENT_INFO* print_event_info,
bool enable_local);
#endif #endif
Create_file_log_event(const char* buf, uint event_len, Create_file_log_event(const char* buf, uint event_len,
...@@ -1772,7 +1803,8 @@ class Append_block_log_event: public Log_event ...@@ -1772,7 +1803,8 @@ class Append_block_log_event: public Log_event
#endif #endif
Append_block_log_event(const char* buf, uint event_len, Append_block_log_event(const char* buf, uint event_len,
const Format_description_log_event* description_event); const Format_description_log_event
*description_event);
~Append_block_log_event() {} ~Append_block_log_event() {}
Log_event_type get_type_code() { return APPEND_BLOCK_EVENT;} Log_event_type get_type_code() { return APPEND_BLOCK_EVENT;}
int get_data_size() { return block_len + APPEND_BLOCK_HEADER_LEN ;} int get_data_size() { return block_len + APPEND_BLOCK_HEADER_LEN ;}
...@@ -1808,7 +1840,8 @@ class Delete_file_log_event: public Log_event ...@@ -1808,7 +1840,8 @@ class Delete_file_log_event: public Log_event
#endif /* HAVE_REPLICATION */ #endif /* HAVE_REPLICATION */
#else #else
void print(FILE* file, PRINT_EVENT_INFO* print_event_info); void print(FILE* file, PRINT_EVENT_INFO* print_event_info);
void print(FILE* file, PRINT_EVENT_INFO* print_event_info, bool enable_local); void print(FILE* file, PRINT_EVENT_INFO* print_event_info,
bool enable_local);
#endif #endif
Delete_file_log_event(const char* buf, uint event_len, Delete_file_log_event(const char* buf, uint event_len,
...@@ -1851,7 +1884,8 @@ class Execute_load_log_event: public Log_event ...@@ -1851,7 +1884,8 @@ class Execute_load_log_event: public Log_event
#endif #endif
Execute_load_log_event(const char* buf, uint event_len, Execute_load_log_event(const char* buf, uint event_len,
const Format_description_log_event* description_event); const Format_description_log_event
*description_event);
~Execute_load_log_event() {} ~Execute_load_log_event() {}
Log_event_type get_type_code() { return EXEC_LOAD_EVENT;} Log_event_type get_type_code() { return EXEC_LOAD_EVENT;}
int get_data_size() { return EXEC_LOAD_HEADER_LEN ;} int get_data_size() { return EXEC_LOAD_HEADER_LEN ;}
...@@ -1890,7 +1924,8 @@ class Begin_load_query_log_event: public Append_block_log_event ...@@ -1890,7 +1924,8 @@ class Begin_load_query_log_event: public Append_block_log_event
#endif /* HAVE_REPLICATION */ #endif /* HAVE_REPLICATION */
#endif #endif
Begin_load_query_log_event(const char* buf, uint event_len, Begin_load_query_log_event(const char* buf, uint event_len,
const Format_description_log_event* description_event); const Format_description_log_event
*description_event);
~Begin_load_query_log_event() {} ~Begin_load_query_log_event() {}
Log_event_type get_type_code() { return BEGIN_LOAD_QUERY_EVENT; } Log_event_type get_type_code() { return BEGIN_LOAD_QUERY_EVENT; }
}; };
...@@ -1942,7 +1977,8 @@ class Execute_load_query_log_event: public Query_log_event ...@@ -1942,7 +1977,8 @@ class Execute_load_query_log_event: public Query_log_event
const char *local_fname); const char *local_fname);
#endif #endif
Execute_load_query_log_event(const char* buf, uint event_len, Execute_load_query_log_event(const char* buf, uint event_len,
const Format_description_log_event *description_event); const Format_description_log_event
*description_event);
~Execute_load_query_log_event() {} ~Execute_load_query_log_event() {}
Log_event_type get_type_code() { return EXECUTE_LOAD_QUERY_EVENT; } Log_event_type get_type_code() { return EXECUTE_LOAD_QUERY_EVENT; }
...@@ -1969,7 +2005,8 @@ class Unknown_log_event: public Log_event ...@@ -1969,7 +2005,8 @@ class Unknown_log_event: public Log_event
Log_event's ctor, this way we can extract maximum information from the Log_event's ctor, this way we can extract maximum information from the
event's header (the unique ID for example). event's header (the unique ID for example).
*/ */
Unknown_log_event(const char* buf, const Format_description_log_event* description_event): Unknown_log_event(const char* buf,
const Format_description_log_event *description_event):
Log_event(buf, description_event) Log_event(buf, description_event)
{} {}
~Unknown_log_event() {} ~Unknown_log_event() {}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment