From b2f976f2c83e4a0002b5c46f93e316e65fe0d991 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 29 Sep 2005 10:42:23 +0200 Subject: [PATCH 1/4] mysqlbinlog --hexdump augments each log entry with byte information --- client/mysqlbinlog.cc | 30 ++++++---- sql/log_event.cc | 134 ++++++++++++++++++++++++++++++------------ sql/log_event.h | 69 ++++++++++++++-------- 3 files changed, 163 insertions(+), 70 deletions(-) diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index eff05b9a8bf..577ae82eebd 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -62,6 +62,7 @@ static const char *load_default_groups[]= { "mysqlbinlog","client",0 }; void sql_print_error(const char *format, ...); static bool one_database=0, to_last_remote_log= 0, disable_log_bin= 0; +static bool opt_hexdump= 0; static const char* database= 0; static my_bool force_opt= 0, short_form= 0, remote_opt= 0; static ulonglong offset = 0; @@ -522,12 +523,15 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, } if (!short_form) fprintf(result_file, "# at %s\n",llstr(pos,ll_buff)); - + + /* Set pos to 0 if hexdump is disabled */ + pos= (opt_hexdump ? pos : 0); + switch (ev_type) { case QUERY_EVENT: if (check_database(((Query_log_event*)ev)->db)) goto end; - ev->print(result_file, short_form, last_event_info); + ev->print(result_file, short_form, pos, last_event_info); break; case CREATE_FILE_EVENT: { @@ -547,7 +551,8 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, filename and use LOCAL), prepared in the 'case EXEC_LOAD_EVENT' below. */ - ce->print(result_file, short_form, last_event_info, TRUE); + ce->print(result_file, short_form, pos, last_event_info, TRUE); + // If this binlog is not 3.23 ; why this test?? if (description_event->binlog_version >= 3) { @@ -558,13 +563,13 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, break; } case APPEND_BLOCK_EVENT: - ev->print(result_file, short_form, last_event_info); + ev->print(result_file, short_form, pos, last_event_info); if (load_processor.process((Append_block_log_event*) ev)) break; // Error break; case EXEC_LOAD_EVENT: { - ev->print(result_file, short_form, last_event_info); + ev->print(result_file, short_form, pos, last_event_info); Execute_load_log_event *exv= (Execute_load_log_event*)ev; Create_file_log_event *ce= load_processor.grab_event(exv->file_id); /* @@ -574,7 +579,7 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, */ if (ce) { - ce->print(result_file, short_form, last_event_info, TRUE); + ce->print(result_file, short_form, pos, last_event_info, TRUE); my_free((char*)ce->fname,MYF(MY_WME)); delete ce; } @@ -586,7 +591,7 @@ Create_file event for file_id: %u\n",exv->file_id); case FORMAT_DESCRIPTION_EVENT: delete description_event; description_event= (Format_description_log_event*) ev; - ev->print(result_file, short_form, last_event_info); + ev->print(result_file, short_form, pos, last_event_info); /* We don't want this event to be deleted now, so let's hide it (I (Guilhem) should later see if this triggers a non-serious Valgrind @@ -596,7 +601,7 @@ Create_file event for file_id: %u\n",exv->file_id); ev= 0; break; case BEGIN_LOAD_QUERY_EVENT: - ev->print(result_file, short_form, last_event_info); + ev->print(result_file, short_form, pos, last_event_info); load_processor.process((Begin_load_query_log_event*) ev); break; case EXECUTE_LOAD_QUERY_EVENT: @@ -613,7 +618,7 @@ Create_file event for file_id: %u\n",exv->file_id); if (fname) { - exlq->print(result_file, short_form, last_event_info, fname); + exlq->print(result_file, short_form, pos, last_event_info, fname); my_free(fname, MYF(MY_WME)); } else @@ -622,7 +627,7 @@ Begin_load_query event for file_id: %u\n", exlq->file_id); break; } default: - ev->print(result_file, short_form, last_event_info); + ev->print(result_file, short_form, pos, last_event_info); } } @@ -669,6 +674,8 @@ static struct my_option my_long_options[] = 0, 0}, {"help", '?', "Display this help and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"hexdump", 'H', "Augment output with hexadecimal and ascii data dump.", + 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, {"host", 'h', "Get the binlog from server.", (gptr*) &host, (gptr*) &host, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"offset", 'o', "Skip the first N entries.", (gptr*) &offset, (gptr*) &offset, @@ -848,6 +855,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), case 'd': one_database = 1; break; + case 'H': + opt_hexdump= 1; + break; case 'p': if (argument) { diff --git a/sql/log_event.cc b/sql/log_event.cc index 5cb4c289a10..631a4627f3a 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -24,6 +24,8 @@ #include "mysql_priv.h" #include "slave.h" #include +#else +#include /* For isalnum() */ #endif /* MYSQL_CLIENT */ #define log_cs &my_charset_latin1 @@ -881,15 +883,58 @@ Log_event* Log_event::read_log_event(const char* buf, uint event_len, Log_event::print_header() */ -void Log_event::print_header(FILE* file) +void Log_event::print_header(FILE* file, my_off_t start_pos) { char llbuff[22]; fputc('#', file); print_timestamp(file); fprintf(file, " server id %d end_log_pos %s ", server_id, llstr(log_pos,llbuff)); + + if (start_pos) + { + fprintf(file, "\n"); + unsigned char *ptr= (unsigned char*)temp_buf; + my_off_t i; + + char position[8+1] = {0}; + char b[3+1] = {0}; + char hex_string[16*3+1+1] = {0}; + char char_string[16+1] = {0}; + + for (i= 0; i < (log_pos-start_pos); i++, ptr++) + { + if (i % 16 == 0) + snprintf(position, sizeof(position), "%.8x", + (unsigned int) (start_pos+i)); + + snprintf(b, sizeof(b), "%02X ", *ptr); + strncat(hex_string, b, sizeof(hex_string)-strlen(hex_string)-1); + + snprintf(b, sizeof(b), "%c", isalnum(*ptr) ? *ptr : '.'); + strncat(char_string, b, sizeof(char_string)-strlen(char_string)-1); + + if (i % 16 == 15) + { + fprintf(file, "# %8.8s %-48.48s |%16s|\n", + position, hex_string, char_string); + hex_string[0] = 0; + char_string[0] = 0; + } + else if (i % 8 == 7) + { + /* Middle space */ + strncat(hex_string, " ", sizeof(hex_string)-strlen(hex_string)-1); + } + } + + if (strlen(hex_string)) { + printf("# %8.8s %-48.48s |%s|\n# ", position, hex_string, char_string); + } + } } + /* Log_event::print_timestamp() */ @@ -1373,6 +1418,7 @@ Query_log_event::Query_log_event(const char* buf, uint event_len, #ifdef MYSQL_CLIENT void Query_log_event::print_query_header(FILE* file, bool short_form, + my_off_t start_pos, LAST_EVENT_INFO* last_event_info) { // TODO: print the catalog ?? @@ -1382,7 +1428,7 @@ void Query_log_event::print_query_header(FILE* file, bool short_form, if (!short_form) { - print_header(file); + print_header(file, start_pos); fprintf(file, "\t%s\tthread_id=%lu\texec_time=%lu\terror_code=%d\n", get_type_str(), (ulong) thread_id, (ulong) exec_time, error_code); } @@ -1503,10 +1549,10 @@ void Query_log_event::print_query_header(FILE* file, bool short_form, } -void Query_log_event::print(FILE* file, bool short_form, +void Query_log_event::print(FILE* file, bool short_form, my_off_t start_pos, LAST_EVENT_INFO* last_event_info) { - print_query_header(file, short_form, last_event_info); + print_query_header(file, short_form, start_pos, last_event_info); my_fwrite(file, (byte*) query, q_len, MYF(MY_NABP | MY_WME)); fputs(";\n", file); } @@ -1804,11 +1850,12 @@ void Start_log_event_v3::pack_info(Protocol *protocol) */ #ifdef MYSQL_CLIENT -void Start_log_event_v3::print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info) +void Start_log_event_v3::print(FILE* file, bool short_form, my_off_t start_pos, + LAST_EVENT_INFO* last_event_info) { if (!short_form) { - print_header(file); + print_header(file, start_pos); fprintf(file, "\tStart: binlog v %d, server v %s created ", binlog_version, server_version); print_timestamp(file); @@ -2532,19 +2579,20 @@ int Load_log_event::copy_log_event(const char *buf, ulong event_len, */ #ifdef MYSQL_CLIENT -void Load_log_event::print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info) +void Load_log_event::print(FILE* file, bool short_form, my_off_t start_pos, + LAST_EVENT_INFO* last_event_info) { - print(file, short_form, last_event_info, 0); + print(file, short_form, start_pos, last_event_info, 0); } -void Load_log_event::print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info, - bool commented) +void Load_log_event::print(FILE* file, bool short_form, my_off_t start_pos, + LAST_EVENT_INFO* last_event_info, bool commented) { DBUG_ENTER("Load_log_event::print"); if (!short_form) { - print_header(file); + print_header(file, start_pos); fprintf(file, "\tQuery\tthread_id=%ld\texec_time=%ld\n", thread_id, exec_time); } @@ -2949,13 +2997,14 @@ void Rotate_log_event::pack_info(Protocol *protocol) */ #ifdef MYSQL_CLIENT -void Rotate_log_event::print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info) +void Rotate_log_event::print(FILE* file, bool short_form, my_off_t start_pos, + LAST_EVENT_INFO* last_event_info) { char buf[22]; if (short_form) return; - print_header(file); + print_header(file, start_pos); fprintf(file, "\tRotate to "); if (new_log_ident) my_fwrite(file, (byte*) new_log_ident, (uint)ident_len, @@ -3151,7 +3200,7 @@ bool Intvar_log_event::write(IO_CACHE* file) */ #ifdef MYSQL_CLIENT -void Intvar_log_event::print(FILE* file, bool short_form, +void Intvar_log_event::print(FILE* file, bool short_form, my_off_t start_pos, LAST_EVENT_INFO* last_event_info) { char llbuff[22]; @@ -3160,7 +3209,7 @@ void Intvar_log_event::print(FILE* file, bool short_form, if (!short_form) { - print_header(file); + print_header(file, start_pos); fprintf(file, "\tIntvar\n"); } @@ -3241,12 +3290,13 @@ bool Rand_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT -void Rand_log_event::print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info) +void Rand_log_event::print(FILE* file, bool short_form, my_off_t start_pos, + LAST_EVENT_INFO* last_event_info) { char llbuff[22],llbuff2[22]; if (!short_form) { - print_header(file); + print_header(file, start_pos); fprintf(file, "\tRand\n"); } fprintf(file, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s;\n", @@ -3311,14 +3361,15 @@ bool Xid_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT -void Xid_log_event::print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info) +void Xid_log_event::print(FILE* file, bool short_form, my_off_t start_pos, + LAST_EVENT_INFO* last_event_info) { if (!short_form) { char buf[64]; longlong10_to_str(xid, buf, 10); - print_header(file); + print_header(file, start_pos); fprintf(file, "\tXid = %s\n", buf); fflush(file); } @@ -3509,11 +3560,12 @@ bool User_var_log_event::write(IO_CACHE* file) */ #ifdef MYSQL_CLIENT -void User_var_log_event::print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info) +void User_var_log_event::print(FILE* file, bool short_form, my_off_t start_pos, + LAST_EVENT_INFO* last_event_info) { if (!short_form) { - print_header(file); + print_header(file, start_pos); fprintf(file, "\tUser_var\n"); } @@ -3684,11 +3736,12 @@ int User_var_log_event::exec_event(struct st_relay_log_info* rli) #ifdef HAVE_REPLICATION #ifdef MYSQL_CLIENT -void Unknown_log_event::print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info) +void Unknown_log_event::print(FILE* file, bool short_form, my_off_t start_pos, + LAST_EVENT_INFO* last_event_info) { if (short_form) return; - print_header(file); + print_header(file, start_pos); fputc('\n', file); fprintf(file, "# %s", "Unknown event\n"); } @@ -3755,12 +3808,13 @@ Slave_log_event::~Slave_log_event() #ifdef MYSQL_CLIENT -void Slave_log_event::print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info) +void Slave_log_event::print(FILE* file, bool short_form, my_off_t start_pos, + LAST_EVENT_INFO* last_event_info) { char llbuff[22]; if (short_form) return; - print_header(file); + print_header(file, start_pos); fputc('\n', file); fprintf(file, "\ Slave: master_host: '%s' master_port: %d master_log: '%s' master_pos: %s\n", @@ -3840,12 +3894,13 @@ int Slave_log_event::exec_event(struct st_relay_log_info* rli) */ #ifdef MYSQL_CLIENT -void Stop_log_event::print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info) +void Stop_log_event::print(FILE* file, bool short_form, my_off_t start_pos, + LAST_EVENT_INFO* last_event_info) { if (short_form) return; - print_header(file); + print_header(file, start_pos); fprintf(file, "\tStop\n"); fflush(file); } @@ -4019,19 +4074,20 @@ Create_file_log_event::Create_file_log_event(const char* buf, uint len, */ #ifdef MYSQL_CLIENT -void Create_file_log_event::print(FILE* file, bool short_form, +void Create_file_log_event::print(FILE* file, bool short_form, my_off_t start_pos, LAST_EVENT_INFO* last_event_info, bool enable_local) { if (short_form) { if (enable_local && check_fname_outside_temp_buf()) - Load_log_event::print(file, 1, last_event_info); + Load_log_event::print(file, 1, start_pos, last_event_info); return; } if (enable_local) { - Load_log_event::print(file, short_form, last_event_info, !check_fname_outside_temp_buf()); + Load_log_event::print(file, short_form, start_pos, last_event_info, + !check_fname_outside_temp_buf()); /* That one is for "file_id: etc" below: in mysqlbinlog we want the #, in SHOW BINLOG EVENTS we don't. @@ -4044,9 +4100,10 @@ void Create_file_log_event::print(FILE* file, bool short_form, void Create_file_log_event::print(FILE* file, bool short_form, + my_off_t start_pos, LAST_EVENT_INFO* last_event_info) { - print(file,short_form,last_event_info,0); + print(file, short_form, start_pos, last_event_info, 0); } #endif /* MYSQL_CLIENT */ @@ -4207,11 +4264,12 @@ bool Append_block_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT void Append_block_log_event::print(FILE* file, bool short_form, + my_off_t start_pos, LAST_EVENT_INFO* last_event_info) { if (short_form) return; - print_header(file); + print_header(file, start_pos); fputc('\n', file); fprintf(file, "#%s: file_id: %d block_len: %d\n", get_type_str(), file_id, block_len); @@ -4351,11 +4409,12 @@ bool Delete_file_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT void Delete_file_log_event::print(FILE* file, bool short_form, + my_off_t start_pos, LAST_EVENT_INFO* last_event_info) { if (short_form) return; - print_header(file); + print_header(file, start_pos); fputc('\n', file); fprintf(file, "#Delete_file: file_id=%u\n", file_id); } @@ -4447,11 +4506,12 @@ bool Execute_load_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT void Execute_load_log_event::print(FILE* file, bool short_form, + my_off_t start_pos, LAST_EVENT_INFO* last_event_info) { if (short_form) return; - print_header(file); + print_header(file, start_pos); fputc('\n', file); fprintf(file, "#Exec_load: file_id=%d\n", file_id); @@ -4659,17 +4719,19 @@ Execute_load_query_log_event::write_post_header_for_derived(IO_CACHE* file) #ifdef MYSQL_CLIENT void Execute_load_query_log_event::print(FILE* file, bool short_form, + my_off_t start_pos, LAST_EVENT_INFO* last_event_info) { - print(file, short_form, last_event_info, 0); + print(file, short_form, start_pos, last_event_info, 0); } void Execute_load_query_log_event::print(FILE* file, bool short_form, + my_off_t start_pos, LAST_EVENT_INFO* last_event_info, const char *local_fname) { - print_query_header(file, short_form, last_event_info); + print_query_header(file, short_form, start_pos, last_event_info); if (local_fname) { diff --git a/sql/log_event.h b/sql/log_event.h index 29580589a34..864266b5a90 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -589,9 +589,10 @@ public: static Log_event* read_log_event(IO_CACHE* file, const Format_description_log_event *description_event); /* print*() functions are used by mysqlbinlog */ - virtual void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0) = 0; + virtual void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info= 0) = 0; void print_timestamp(FILE* file, time_t *ts = 0); - void print_header(FILE* file); + void print_header(FILE* file, my_off_t start_pos= 0); #endif static void *operator new(size_t size) @@ -751,8 +752,11 @@ public: uint32 q_len_arg); #endif /* HAVE_REPLICATION */ #else - void print_query_header(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0); - void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0); + void print_query_header(FILE* file, bool short_form= 0, + my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info= 0); #endif Query_log_event(const char* buf, uint event_len, @@ -806,7 +810,8 @@ public: void pack_info(Protocol* protocol); int exec_event(struct st_relay_log_info* rli); #else - void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info= 0); #endif Slave_log_event(const char* buf, uint event_len); @@ -894,8 +899,10 @@ public: bool use_rli_only_for_errors); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info = 0); - void print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info, bool commented); + void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info = 0); + void print(FILE* file, bool short_form, my_off_t start_pos, + LAST_EVENT_INFO* last_event_info, bool commented); #endif /* @@ -984,7 +991,8 @@ public: #endif /* HAVE_REPLICATION */ #else Start_log_event_v3() {} - void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info= 0); #endif Start_log_event_v3(const char* buf, @@ -1079,7 +1087,8 @@ public: 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); + void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info= 0); #endif Intvar_log_event(const char* buf, const Format_description_log_event* description_event); @@ -1120,7 +1129,8 @@ class Rand_log_event: public Log_event 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); + void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info= 0); #endif Rand_log_event(const char* buf, const Format_description_log_event* description_event); @@ -1157,7 +1167,8 @@ class Xid_log_event: public Log_event 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); + void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info= 0); #endif Xid_log_event(const char* buf, const Format_description_log_event* description_event); @@ -1199,7 +1210,8 @@ public: void pack_info(Protocol* protocol); int exec_event(struct st_relay_log_info* rli); #else - void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info= 0); #endif User_var_log_event(const char* buf, const Format_description_log_event* description_event); @@ -1225,7 +1237,8 @@ public: {} int exec_event(struct st_relay_log_info* rli); #else - void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info= 0); #endif Stop_log_event(const char* buf, const Format_description_log_event* description_event): @@ -1264,7 +1277,8 @@ public: 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); + void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info= 0); #endif Rotate_log_event(const char* buf, uint event_len, @@ -1317,8 +1331,10 @@ public: 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); - void print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info, bool enable_local); + void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, bool short_form, my_off_t start_pos, + LAST_EVENT_INFO* last_event_info, bool enable_local); #endif Create_file_log_event(const char* buf, uint event_len, @@ -1385,7 +1401,8 @@ public: virtual int get_create_or_append() const; #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info= 0); #endif Append_block_log_event(const char* buf, uint event_len, @@ -1420,8 +1437,10 @@ public: 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); - void print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info, bool enable_local); + void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, bool short_form, my_off_t start_pos, + LAST_EVENT_INFO* last_event_info, bool enable_local); #endif Delete_file_log_event(const char* buf, uint event_len, @@ -1456,7 +1475,8 @@ public: 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); + void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info= 0); #endif Execute_load_log_event(const char* buf, uint event_len, @@ -1541,11 +1561,11 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form = 0, + void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, LAST_EVENT_INFO* last_event_info= 0); /* Prints the query as LOAD DATA LOCAL and with rewritten filename */ - void print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info, - const char *local_fname); + void print(FILE* file, bool short_form, my_off_t start_pos, + LAST_EVENT_INFO* last_event_info, const char *local_fname); #endif Execute_load_query_log_event(const char* buf, uint event_len, const Format_description_log_event *description_event); @@ -1574,7 +1594,8 @@ public: Log_event(buf, description_event) {} ~Unknown_log_event() {} - void print(FILE* file, bool short_form= 0, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + LAST_EVENT_INFO* last_event_info= 0); Log_event_type get_type_code() { return UNKNOWN_EVENT;} bool is_valid() const { return 1; } }; From 374deedd859d1fae898b668a7442850cb9ac6d33 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 30 Sep 2005 00:12:14 +0200 Subject: [PATCH 2/4] mysqlbinlog --hexdump additional patch 2 - Fixes related to Guilhems review - Special printing of event header client/mysqlbinlog.cc: Fixes of option --hexdump handling sql/log_event.cc: Fixes related to Guilhems review Special printing of event header sql/log_event.h: Fixes related to Guilhems review --- client/mysqlbinlog.cc | 10 ++- sql/log_event.cc | 153 ++++++++++++++++++++++-------------------- sql/log_event.h | 46 ++++++------- 3 files changed, 109 insertions(+), 100 deletions(-) diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 577ae82eebd..d78b6ca4412 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -525,7 +525,7 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, fprintf(result_file, "# at %s\n",llstr(pos,ll_buff)); /* Set pos to 0 if hexdump is disabled */ - pos= (opt_hexdump ? pos : 0); + if (!opt_hexdump) pos= 0; switch (ev_type) { case QUERY_EVENT: @@ -674,8 +674,9 @@ static struct my_option my_long_options[] = 0, 0}, {"help", '?', "Display this help and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"hexdump", 'H', "Augment output with hexadecimal and ascii data dump.", - 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"hexdump", 'H', "Augment output with hexadecimal and ASCII event dump.", + (gptr*) &opt_hexdump, (gptr*) &opt_hexdump, 0, GET_BOOL, NO_ARG, + 0, 0, 0, 0, 0, 0}, {"host", 'h', "Get the binlog from server.", (gptr*) &host, (gptr*) &host, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"offset", 'o', "Skip the first N entries.", (gptr*) &offset, (gptr*) &offset, @@ -855,9 +856,6 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), case 'd': one_database = 1; break; - case 'H': - opt_hexdump= 1; - break; case 'p': if (argument) { diff --git a/sql/log_event.cc b/sql/log_event.cc index 631a4627f3a..c704e81007a 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -24,8 +24,6 @@ #include "mysql_priv.h" #include "slave.h" #include -#else -#include /* For isalnum() */ #endif /* MYSQL_CLIENT */ #define log_cs &my_charset_latin1 @@ -883,53 +881,66 @@ Log_event* Log_event::read_log_event(const char* buf, uint event_len, Log_event::print_header() */ -void Log_event::print_header(FILE* file, my_off_t start_pos) +void Log_event::print_header(FILE* file, my_off_t hexdump_from) { char llbuff[22]; fputc('#', file); print_timestamp(file); fprintf(file, " server id %d end_log_pos %s ", server_id, - llstr(log_pos,llbuff)); + llstr(log_pos,llbuff)); - if (start_pos) + /* mysqlbinlog --hexdump */ + if (hexdump_from) { fprintf(file, "\n"); - unsigned char *ptr= (unsigned char*)temp_buf; + uchar *ptr= (uchar*)temp_buf; + my_off_t size= + uint4korr(ptr + EVENT_LEN_OFFSET) - LOG_EVENT_MINIMAL_HEADER_LEN; my_off_t i; - char position[8+1] = {0}; - char b[3+1] = {0}; - char hex_string[16*3+1+1] = {0}; - char char_string[16+1] = {0}; + /* Header len * 4 >= header len * (2 chars + space + extra space) */ + char *h, hex_string[LOG_EVENT_MINIMAL_HEADER_LEN*4]= {0}; + char *c, char_string[16+1]= {0}; - for (i= 0; i < (log_pos-start_pos); i++, ptr++) + /* Common header of event */ + fprintf(file, "# Position Timestamp Type Master ID " + "Size Master Pos Flags \n"); + fprintf(file, "# %8.8lx %02x %02x %02x %02x %02x " + "%02x %02x %02x %02x %02x %02x %02x %02x " + "%02x %02x %02x %02x %02x %02x\n", + hexdump_from, ptr[0], ptr[1], ptr[2], ptr[3], ptr[4], + ptr[5], ptr[6], ptr[7], ptr[8], ptr[9], ptr[10], ptr[11], + ptr[12], ptr[13], ptr[14], ptr[15], ptr[16], ptr[17], ptr[18]); + ptr += LOG_EVENT_MINIMAL_HEADER_LEN; + hexdump_from += LOG_EVENT_MINIMAL_HEADER_LEN; + + /* Rest of event (without common header) */ + for (i= 0, c= char_string, h=hex_string; + i < size; + i++, ptr++) { - if (i % 16 == 0) - snprintf(position, sizeof(position), "%.8x", - (unsigned int) (start_pos+i)); + my_snprintf(h, 4, "%02x ", *ptr); + h += 3; - snprintf(b, sizeof(b), "%02X ", *ptr); - strncat(hex_string, b, sizeof(hex_string)-strlen(hex_string)-1); - - snprintf(b, sizeof(b), "%c", isalnum(*ptr) ? *ptr : '.'); - strncat(char_string, b, sizeof(char_string)-strlen(char_string)-1); + *c++= my_isalnum(&my_charset_bin, *ptr) ? *ptr : '.'; if (i % 16 == 15) { - fprintf(file, "# %8.8s %-48.48s |%16s|\n", - position, hex_string, char_string); - hex_string[0] = 0; - char_string[0] = 0; - } - else if (i % 8 == 7) - { - /* Middle space */ - strncat(hex_string, " ", sizeof(hex_string)-strlen(hex_string)-1); + fprintf(file, "# %8.8lx %-48.48s |%16s|\n", + hexdump_from + (i & 0xfffffff0), hex_string, char_string); + hex_string[0]= 0; + char_string[0]= 0; + c= char_string; + h= hex_string; } + else if (i % 8 == 7) *h++ = ' '; } + *c= '\0'; - if (strlen(hex_string)) { - printf("# %8.8s %-48.48s |%s|\n# ", position, hex_string, char_string); + /* Non-full last line */ + if (hex_string[0]) { + printf("# %8.8lx %-48.48s |%s|\n# ", + hexdump_from + (i & 0xfffffff0), hex_string, char_string); } } } @@ -1418,7 +1429,7 @@ Query_log_event::Query_log_event(const char* buf, uint event_len, #ifdef MYSQL_CLIENT void Query_log_event::print_query_header(FILE* file, bool short_form, - my_off_t start_pos, + my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { // TODO: print the catalog ?? @@ -1428,7 +1439,7 @@ void Query_log_event::print_query_header(FILE* file, bool short_form, if (!short_form) { - print_header(file, start_pos); + print_header(file, hexdump_from); fprintf(file, "\t%s\tthread_id=%lu\texec_time=%lu\terror_code=%d\n", get_type_str(), (ulong) thread_id, (ulong) exec_time, error_code); } @@ -1549,10 +1560,10 @@ void Query_log_event::print_query_header(FILE* file, bool short_form, } -void Query_log_event::print(FILE* file, bool short_form, my_off_t start_pos, +void Query_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { - print_query_header(file, short_form, start_pos, last_event_info); + print_query_header(file, short_form, hexdump_from, last_event_info); my_fwrite(file, (byte*) query, q_len, MYF(MY_NABP | MY_WME)); fputs(";\n", file); } @@ -1850,12 +1861,12 @@ void Start_log_event_v3::pack_info(Protocol *protocol) */ #ifdef MYSQL_CLIENT -void Start_log_event_v3::print(FILE* file, bool short_form, my_off_t start_pos, +void Start_log_event_v3::print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { if (!short_form) { - print_header(file, start_pos); + print_header(file, hexdump_from); fprintf(file, "\tStart: binlog v %d, server v %s created ", binlog_version, server_version); print_timestamp(file); @@ -2579,20 +2590,20 @@ int Load_log_event::copy_log_event(const char *buf, ulong event_len, */ #ifdef MYSQL_CLIENT -void Load_log_event::print(FILE* file, bool short_form, my_off_t start_pos, +void Load_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { - print(file, short_form, start_pos, last_event_info, 0); + print(file, short_form, hexdump_from, last_event_info, 0); } -void Load_log_event::print(FILE* file, bool short_form, my_off_t start_pos, +void Load_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info, bool commented) { DBUG_ENTER("Load_log_event::print"); if (!short_form) { - print_header(file, start_pos); + print_header(file, hexdump_from); fprintf(file, "\tQuery\tthread_id=%ld\texec_time=%ld\n", thread_id, exec_time); } @@ -2997,14 +3008,14 @@ void Rotate_log_event::pack_info(Protocol *protocol) */ #ifdef MYSQL_CLIENT -void Rotate_log_event::print(FILE* file, bool short_form, my_off_t start_pos, +void Rotate_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { char buf[22]; if (short_form) return; - print_header(file, start_pos); + print_header(file, hexdump_from); fprintf(file, "\tRotate to "); if (new_log_ident) my_fwrite(file, (byte*) new_log_ident, (uint)ident_len, @@ -3200,7 +3211,7 @@ bool Intvar_log_event::write(IO_CACHE* file) */ #ifdef MYSQL_CLIENT -void Intvar_log_event::print(FILE* file, bool short_form, my_off_t start_pos, +void Intvar_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { char llbuff[22]; @@ -3209,7 +3220,7 @@ void Intvar_log_event::print(FILE* file, bool short_form, my_off_t start_pos, if (!short_form) { - print_header(file, start_pos); + print_header(file, hexdump_from); fprintf(file, "\tIntvar\n"); } @@ -3290,13 +3301,13 @@ bool Rand_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT -void Rand_log_event::print(FILE* file, bool short_form, my_off_t start_pos, +void Rand_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { char llbuff[22],llbuff2[22]; if (!short_form) { - print_header(file, start_pos); + print_header(file, hexdump_from); fprintf(file, "\tRand\n"); } fprintf(file, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s;\n", @@ -3361,7 +3372,7 @@ bool Xid_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT -void Xid_log_event::print(FILE* file, bool short_form, my_off_t start_pos, +void Xid_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { if (!short_form) @@ -3369,7 +3380,7 @@ void Xid_log_event::print(FILE* file, bool short_form, my_off_t start_pos, char buf[64]; longlong10_to_str(xid, buf, 10); - print_header(file, start_pos); + print_header(file, hexdump_from); fprintf(file, "\tXid = %s\n", buf); fflush(file); } @@ -3560,12 +3571,12 @@ bool User_var_log_event::write(IO_CACHE* file) */ #ifdef MYSQL_CLIENT -void User_var_log_event::print(FILE* file, bool short_form, my_off_t start_pos, +void User_var_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { if (!short_form) { - print_header(file, start_pos); + print_header(file, hexdump_from); fprintf(file, "\tUser_var\n"); } @@ -3736,12 +3747,12 @@ int User_var_log_event::exec_event(struct st_relay_log_info* rli) #ifdef HAVE_REPLICATION #ifdef MYSQL_CLIENT -void Unknown_log_event::print(FILE* file, bool short_form, my_off_t start_pos, +void Unknown_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { if (short_form) return; - print_header(file, start_pos); + print_header(file, hexdump_from); fputc('\n', file); fprintf(file, "# %s", "Unknown event\n"); } @@ -3808,13 +3819,13 @@ Slave_log_event::~Slave_log_event() #ifdef MYSQL_CLIENT -void Slave_log_event::print(FILE* file, bool short_form, my_off_t start_pos, +void Slave_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { char llbuff[22]; if (short_form) return; - print_header(file, start_pos); + print_header(file, hexdump_from); fputc('\n', file); fprintf(file, "\ Slave: master_host: '%s' master_port: %d master_log: '%s' master_pos: %s\n", @@ -3894,13 +3905,13 @@ int Slave_log_event::exec_event(struct st_relay_log_info* rli) */ #ifdef MYSQL_CLIENT -void Stop_log_event::print(FILE* file, bool short_form, my_off_t start_pos, +void Stop_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { if (short_form) return; - print_header(file, start_pos); + print_header(file, hexdump_from); fprintf(file, "\tStop\n"); fflush(file); } @@ -4074,19 +4085,19 @@ Create_file_log_event::Create_file_log_event(const char* buf, uint len, */ #ifdef MYSQL_CLIENT -void Create_file_log_event::print(FILE* file, bool short_form, my_off_t start_pos, +void Create_file_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info, bool enable_local) { if (short_form) { if (enable_local && check_fname_outside_temp_buf()) - Load_log_event::print(file, 1, start_pos, last_event_info); + Load_log_event::print(file, 1, hexdump_from, last_event_info); return; } if (enable_local) { - Load_log_event::print(file, short_form, start_pos, last_event_info, + Load_log_event::print(file, short_form, hexdump_from, last_event_info, !check_fname_outside_temp_buf()); /* That one is for "file_id: etc" below: in mysqlbinlog we want the #, in @@ -4100,10 +4111,10 @@ void Create_file_log_event::print(FILE* file, bool short_form, my_off_t start_po void Create_file_log_event::print(FILE* file, bool short_form, - my_off_t start_pos, + my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { - print(file, short_form, start_pos, last_event_info, 0); + print(file, short_form, hexdump_from, last_event_info, 0); } #endif /* MYSQL_CLIENT */ @@ -4264,12 +4275,12 @@ bool Append_block_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT void Append_block_log_event::print(FILE* file, bool short_form, - my_off_t start_pos, + my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { if (short_form) return; - print_header(file, start_pos); + print_header(file, hexdump_from); fputc('\n', file); fprintf(file, "#%s: file_id: %d block_len: %d\n", get_type_str(), file_id, block_len); @@ -4409,12 +4420,12 @@ bool Delete_file_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT void Delete_file_log_event::print(FILE* file, bool short_form, - my_off_t start_pos, + my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { if (short_form) return; - print_header(file, start_pos); + print_header(file, hexdump_from); fputc('\n', file); fprintf(file, "#Delete_file: file_id=%u\n", file_id); } @@ -4506,12 +4517,12 @@ bool Execute_load_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT void Execute_load_log_event::print(FILE* file, bool short_form, - my_off_t start_pos, + my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { if (short_form) return; - print_header(file, start_pos); + print_header(file, hexdump_from); fputc('\n', file); fprintf(file, "#Exec_load: file_id=%d\n", file_id); @@ -4719,19 +4730,19 @@ Execute_load_query_log_event::write_post_header_for_derived(IO_CACHE* file) #ifdef MYSQL_CLIENT void Execute_load_query_log_event::print(FILE* file, bool short_form, - my_off_t start_pos, + my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info) { - print(file, short_form, start_pos, last_event_info, 0); + print(file, short_form, hexdump_from, last_event_info, 0); } void Execute_load_query_log_event::print(FILE* file, bool short_form, - my_off_t start_pos, + my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info, const char *local_fname) { - print_query_header(file, short_form, start_pos, last_event_info); + print_query_header(file, short_form, hexdump_from, last_event_info); if (local_fname) { diff --git a/sql/log_event.h b/sql/log_event.h index 864266b5a90..9351e9b1148 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -589,10 +589,10 @@ public: static Log_event* read_log_event(IO_CACHE* file, const Format_description_log_event *description_event); /* print*() functions are used by mysqlbinlog */ - virtual void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + virtual void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0) = 0; void print_timestamp(FILE* file, time_t *ts = 0); - void print_header(FILE* file, my_off_t start_pos= 0); + void print_header(FILE* file, my_off_t hexdump_from= 0); #endif static void *operator new(size_t size) @@ -753,9 +753,9 @@ public: #endif /* HAVE_REPLICATION */ #else void print_query_header(FILE* file, bool short_form= 0, - my_off_t start_pos= 0, + my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0); - void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0); #endif @@ -810,7 +810,7 @@ public: void pack_info(Protocol* protocol); int exec_event(struct st_relay_log_info* rli); #else - void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0); #endif @@ -899,9 +899,9 @@ public: bool use_rli_only_for_errors); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info = 0); - void print(FILE* file, bool short_form, my_off_t start_pos, + void print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info, bool commented); #endif @@ -991,7 +991,7 @@ public: #endif /* HAVE_REPLICATION */ #else Start_log_event_v3() {} - void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0); #endif @@ -1087,7 +1087,7 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0); #endif @@ -1129,7 +1129,7 @@ class Rand_log_event: public Log_event int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0); #endif @@ -1167,7 +1167,7 @@ class Xid_log_event: public Log_event int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0); #endif @@ -1210,7 +1210,7 @@ public: void pack_info(Protocol* protocol); int exec_event(struct st_relay_log_info* rli); #else - void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0); #endif @@ -1237,7 +1237,7 @@ public: {} int exec_event(struct st_relay_log_info* rli); #else - void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0); #endif @@ -1277,7 +1277,7 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0); #endif @@ -1331,9 +1331,9 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0); - void print(FILE* file, bool short_form, my_off_t start_pos, + void print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info, bool enable_local); #endif @@ -1401,7 +1401,7 @@ public: virtual int get_create_or_append() const; #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0); #endif @@ -1437,9 +1437,9 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0); - void print(FILE* file, bool short_form, my_off_t start_pos, + void print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info, bool enable_local); #endif @@ -1475,7 +1475,7 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0); #endif @@ -1561,10 +1561,10 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0); /* Prints the query as LOAD DATA LOCAL and with rewritten filename */ - void print(FILE* file, bool short_form, my_off_t start_pos, + void print(FILE* file, bool short_form, my_off_t hexdump_from, LAST_EVENT_INFO* last_event_info, const char *local_fname); #endif Execute_load_query_log_event(const char* buf, uint event_len, @@ -1594,7 +1594,7 @@ public: Log_event(buf, description_event) {} ~Unknown_log_event() {} - void print(FILE* file, bool short_form= 0, my_off_t start_pos= 0, + void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, LAST_EVENT_INFO* last_event_info= 0); Log_event_type get_type_code() { return UNKNOWN_EVENT;} bool is_valid() const { return 1; } From 4184dc214cebb30215859e269e5a8ac1ed8f87a5 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Oct 2005 23:37:21 +0200 Subject: [PATCH 3/4] mysqlbin --hexdump patch 3 client/mysqlbinlog.cc: Collapsing multiple arguments to print function into the last_event_info struct sql/log_event.cc: Only print header is length=19 (otherwise print in standard hexdump format) Collapsing multiple arguments into last_event_info struct sql/log_event.h: Collapsing multiple arguments into last_event_info struct --- client/mysqlbinlog.cc | 26 ++++--- sql/log_event.cc | 171 +++++++++++++++++++----------------------- sql/log_event.h | 88 ++++++++++------------ 3 files changed, 132 insertions(+), 153 deletions(-) diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 7ae563c7209..2b96914bfc9 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -496,6 +496,7 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, char ll_buff[21]; Log_event_type ev_type= ev->get_type_code(); DBUG_ENTER("process_event"); + last_event_info->short_form= short_form; /* Format events are not concerned by --offset and such, we always need to @@ -524,14 +525,16 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, if (!short_form) fprintf(result_file, "# at %s\n",llstr(pos,ll_buff)); - /* Set pos to 0 if hexdump is disabled */ - if (!opt_hexdump) pos= 0; + if (!opt_hexdump) + last_event_info->hexdump_from= 0; /* Disabled */ + else + last_event_info->hexdump_from= pos; switch (ev_type) { case QUERY_EVENT: if (check_database(((Query_log_event*)ev)->db)) goto end; - ev->print(result_file, short_form, pos, last_event_info); + ev->print(result_file, last_event_info); break; case CREATE_FILE_EVENT: { @@ -551,7 +554,7 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, filename and use LOCAL), prepared in the 'case EXEC_LOAD_EVENT' below. */ - ce->print(result_file, short_form, pos, last_event_info, TRUE); + ce->print(result_file, last_event_info, TRUE); // If this binlog is not 3.23 ; why this test?? if (description_event->binlog_version >= 3) @@ -563,13 +566,13 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, break; } case APPEND_BLOCK_EVENT: - ev->print(result_file, short_form, pos, last_event_info); + ev->print(result_file, last_event_info); if (load_processor.process((Append_block_log_event*) ev)) break; // Error break; case EXEC_LOAD_EVENT: { - ev->print(result_file, short_form, pos, last_event_info); + ev->print(result_file, last_event_info); Execute_load_log_event *exv= (Execute_load_log_event*)ev; Create_file_log_event *ce= load_processor.grab_event(exv->file_id); /* @@ -579,7 +582,7 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, */ if (ce) { - ce->print(result_file, short_form, pos, last_event_info, TRUE); + ce->print(result_file, last_event_info, TRUE); my_free((char*)ce->fname,MYF(MY_WME)); delete ce; } @@ -591,7 +594,8 @@ Create_file event for file_id: %u\n",exv->file_id); case FORMAT_DESCRIPTION_EVENT: delete description_event; description_event= (Format_description_log_event*) ev; - ev->print(result_file, short_form, pos, last_event_info); + last_event_info->common_header_len= description_event->common_header_len; + ev->print(result_file, last_event_info); /* We don't want this event to be deleted now, so let's hide it (I (Guilhem) should later see if this triggers a non-serious Valgrind @@ -601,7 +605,7 @@ Create_file event for file_id: %u\n",exv->file_id); ev= 0; break; case BEGIN_LOAD_QUERY_EVENT: - ev->print(result_file, short_form, pos, last_event_info); + ev->print(result_file, last_event_info); load_processor.process((Begin_load_query_log_event*) ev); break; case EXECUTE_LOAD_QUERY_EVENT: @@ -618,7 +622,7 @@ Create_file event for file_id: %u\n",exv->file_id); if (fname) { - exlq->print(result_file, short_form, pos, last_event_info, fname); + exlq->print(result_file, last_event_info, fname); my_free(fname, MYF(MY_WME)); } else @@ -627,7 +631,7 @@ Begin_load_query event for file_id: %u\n", exlq->file_id); break; } default: - ev->print(result_file, short_form, pos, last_event_info); + ev->print(result_file, last_event_info); } } diff --git a/sql/log_event.cc b/sql/log_event.cc index c704e81007a..2a6dd04fea8 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -701,7 +701,6 @@ failed my_b_read")); */ DBUG_RETURN(0); } - uint data_len = uint4korr(head + EVENT_LEN_OFFSET); char *buf= 0; const char *error= 0; @@ -881,16 +880,18 @@ Log_event* Log_event::read_log_event(const char* buf, uint event_len, Log_event::print_header() */ -void Log_event::print_header(FILE* file, my_off_t hexdump_from) +void Log_event::print_header(FILE* file, LAST_EVENT_INFO* last_event_info) { char llbuff[22]; + my_off_t hexdump_from= last_event_info->hexdump_from; + fputc('#', file); print_timestamp(file); fprintf(file, " server id %d end_log_pos %s ", server_id, llstr(log_pos,llbuff)); /* mysqlbinlog --hexdump */ - if (hexdump_from) + if (last_event_info->hexdump_from) { fprintf(file, "\n"); uchar *ptr= (uchar*)temp_buf; @@ -902,17 +903,20 @@ void Log_event::print_header(FILE* file, my_off_t hexdump_from) char *h, hex_string[LOG_EVENT_MINIMAL_HEADER_LEN*4]= {0}; char *c, char_string[16+1]= {0}; - /* Common header of event */ - fprintf(file, "# Position Timestamp Type Master ID " - "Size Master Pos Flags \n"); - fprintf(file, "# %8.8lx %02x %02x %02x %02x %02x " - "%02x %02x %02x %02x %02x %02x %02x %02x " - "%02x %02x %02x %02x %02x %02x\n", - hexdump_from, ptr[0], ptr[1], ptr[2], ptr[3], ptr[4], - ptr[5], ptr[6], ptr[7], ptr[8], ptr[9], ptr[10], ptr[11], - ptr[12], ptr[13], ptr[14], ptr[15], ptr[16], ptr[17], ptr[18]); - ptr += LOG_EVENT_MINIMAL_HEADER_LEN; - hexdump_from += LOG_EVENT_MINIMAL_HEADER_LEN; + /* Pretty-print event common header if header is exactly 19 bytes */ + if (last_event_info->common_header_len == 19) + { + fprintf(file, "# Position Timestamp Type Master ID " + "Size Master Pos Flags \n"); + fprintf(file, "# %8.8lx %02x %02x %02x %02x %02x " + "%02x %02x %02x %02x %02x %02x %02x %02x " + "%02x %02x %02x %02x %02x %02x\n", + hexdump_from, ptr[0], ptr[1], ptr[2], ptr[3], ptr[4], + ptr[5], ptr[6], ptr[7], ptr[8], ptr[9], ptr[10], ptr[11], + ptr[12], ptr[13], ptr[14], ptr[15], ptr[16], ptr[17], ptr[18]); + ptr += LOG_EVENT_MINIMAL_HEADER_LEN; + hexdump_from += LOG_EVENT_MINIMAL_HEADER_LEN; + } /* Rest of event (without common header) */ for (i= 0, c= char_string, h=hex_string; @@ -1428,18 +1432,17 @@ Query_log_event::Query_log_event(const char* buf, uint event_len, */ #ifdef MYSQL_CLIENT -void Query_log_event::print_query_header(FILE* file, bool short_form, - my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info) +void Query_log_event::print_query_header(FILE* file, + LAST_EVENT_INFO* last_event_info) { // TODO: print the catalog ?? char buff[40],*end; // Enough for SET TIMESTAMP bool different_db= 1; uint32 tmp; - if (!short_form) + if (!last_event_info->short_form) { - print_header(file, hexdump_from); + print_header(file, last_event_info); fprintf(file, "\t%s\tthread_id=%lu\texec_time=%lu\terror_code=%d\n", get_type_str(), (ulong) thread_id, (ulong) exec_time, error_code); } @@ -1560,10 +1563,9 @@ void Query_log_event::print_query_header(FILE* file, bool short_form, } -void Query_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info) +void Query_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) { - print_query_header(file, short_form, hexdump_from, last_event_info); + print_query_header(file, last_event_info); my_fwrite(file, (byte*) query, q_len, MYF(MY_NABP | MY_WME)); fputs(";\n", file); } @@ -1861,12 +1863,11 @@ void Start_log_event_v3::pack_info(Protocol *protocol) */ #ifdef MYSQL_CLIENT -void Start_log_event_v3::print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info) +void Start_log_event_v3::print(FILE* file, LAST_EVENT_INFO* last_event_info) { - if (!short_form) + if (!last_event_info->short_form) { - print_header(file, hexdump_from); + print_header(file, last_event_info); fprintf(file, "\tStart: binlog v %d, server v %s created ", binlog_version, server_version); print_timestamp(file); @@ -2590,20 +2591,19 @@ int Load_log_event::copy_log_event(const char *buf, ulong event_len, */ #ifdef MYSQL_CLIENT -void Load_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info) +void Load_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) { - print(file, short_form, hexdump_from, last_event_info, 0); + print(file, last_event_info, 0); } -void Load_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info, bool commented) +void Load_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info, + bool commented) { DBUG_ENTER("Load_log_event::print"); - if (!short_form) + if (!last_event_info->short_form) { - print_header(file, hexdump_from); + print_header(file, last_event_info); fprintf(file, "\tQuery\tthread_id=%ld\texec_time=%ld\n", thread_id, exec_time); } @@ -3008,14 +3008,13 @@ void Rotate_log_event::pack_info(Protocol *protocol) */ #ifdef MYSQL_CLIENT -void Rotate_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info) +void Rotate_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) { char buf[22]; - if (short_form) + if (last_event_info->short_form) return; - print_header(file, hexdump_from); + print_header(file, last_event_info); fprintf(file, "\tRotate to "); if (new_log_ident) my_fwrite(file, (byte*) new_log_ident, (uint)ident_len, @@ -3211,16 +3210,15 @@ bool Intvar_log_event::write(IO_CACHE* file) */ #ifdef MYSQL_CLIENT -void Intvar_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info) +void Intvar_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) { char llbuff[22]; const char *msg; LINT_INIT(msg); - if (!short_form) + if (!last_event_info->short_form) { - print_header(file, hexdump_from); + print_header(file, last_event_info); fprintf(file, "\tIntvar\n"); } @@ -3301,13 +3299,12 @@ bool Rand_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT -void Rand_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info) +void Rand_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) { char llbuff[22],llbuff2[22]; - if (!short_form) + if (!last_event_info->short_form) { - print_header(file, hexdump_from); + print_header(file, last_event_info); fprintf(file, "\tRand\n"); } fprintf(file, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s;\n", @@ -3372,15 +3369,14 @@ bool Xid_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT -void Xid_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info) +void Xid_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) { - if (!short_form) + if (!last_event_info->short_form) { char buf[64]; longlong10_to_str(xid, buf, 10); - print_header(file, hexdump_from); + print_header(file, last_event_info); fprintf(file, "\tXid = %s\n", buf); fflush(file); } @@ -3571,12 +3567,11 @@ bool User_var_log_event::write(IO_CACHE* file) */ #ifdef MYSQL_CLIENT -void User_var_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info) +void User_var_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) { - if (!short_form) + if (!last_event_info->short_form) { - print_header(file, hexdump_from); + print_header(file, last_event_info); fprintf(file, "\tUser_var\n"); } @@ -3747,12 +3742,11 @@ int User_var_log_event::exec_event(struct st_relay_log_info* rli) #ifdef HAVE_REPLICATION #ifdef MYSQL_CLIENT -void Unknown_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info) +void Unknown_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) { - if (short_form) + if (last_event_info->short_form) return; - print_header(file, hexdump_from); + print_header(file, last_event_info); fputc('\n', file); fprintf(file, "# %s", "Unknown event\n"); } @@ -3819,13 +3813,12 @@ Slave_log_event::~Slave_log_event() #ifdef MYSQL_CLIENT -void Slave_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info) +void Slave_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) { char llbuff[22]; - if (short_form) + if (last_event_info->short_form) return; - print_header(file, hexdump_from); + print_header(file, last_event_info); fputc('\n', file); fprintf(file, "\ Slave: master_host: '%s' master_port: %d master_log: '%s' master_pos: %s\n", @@ -3905,13 +3898,12 @@ int Slave_log_event::exec_event(struct st_relay_log_info* rli) */ #ifdef MYSQL_CLIENT -void Stop_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info) +void Stop_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) { - if (short_form) + if (last_event_info->short_form) return; - print_header(file, hexdump_from); + print_header(file, last_event_info); fprintf(file, "\tStop\n"); fflush(file); } @@ -4085,19 +4077,19 @@ Create_file_log_event::Create_file_log_event(const char* buf, uint len, */ #ifdef MYSQL_CLIENT -void Create_file_log_event::print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info, bool enable_local) +void Create_file_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info, + bool enable_local) { - if (short_form) + if (last_event_info->short_form) { if (enable_local && check_fname_outside_temp_buf()) - Load_log_event::print(file, 1, hexdump_from, last_event_info); + Load_log_event::print(file, last_event_info); return; } if (enable_local) { - Load_log_event::print(file, short_form, hexdump_from, last_event_info, + Load_log_event::print(file, last_event_info, !check_fname_outside_temp_buf()); /* That one is for "file_id: etc" below: in mysqlbinlog we want the #, in @@ -4110,11 +4102,9 @@ void Create_file_log_event::print(FILE* file, bool short_form, my_off_t hexdump_ } -void Create_file_log_event::print(FILE* file, bool short_form, - my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info) +void Create_file_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) { - print(file, short_form, hexdump_from, last_event_info, 0); + print(file, last_event_info, 0); } #endif /* MYSQL_CLIENT */ @@ -4274,13 +4264,12 @@ bool Append_block_log_event::write(IO_CACHE* file) */ #ifdef MYSQL_CLIENT -void Append_block_log_event::print(FILE* file, bool short_form, - my_off_t hexdump_from, +void Append_block_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) { - if (short_form) + if (last_event_info->short_form) return; - print_header(file, hexdump_from); + print_header(file, last_event_info); fputc('\n', file); fprintf(file, "#%s: file_id: %d block_len: %d\n", get_type_str(), file_id, block_len); @@ -4419,13 +4408,12 @@ bool Delete_file_log_event::write(IO_CACHE* file) */ #ifdef MYSQL_CLIENT -void Delete_file_log_event::print(FILE* file, bool short_form, - my_off_t hexdump_from, +void Delete_file_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) { - if (short_form) + if (last_event_info->short_form) return; - print_header(file, hexdump_from); + print_header(file, last_event_info); fputc('\n', file); fprintf(file, "#Delete_file: file_id=%u\n", file_id); } @@ -4516,13 +4504,12 @@ bool Execute_load_log_event::write(IO_CACHE* file) */ #ifdef MYSQL_CLIENT -void Execute_load_log_event::print(FILE* file, bool short_form, - my_off_t hexdump_from, +void Execute_load_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) { - if (short_form) + if (last_event_info->short_form) return; - print_header(file, hexdump_from); + print_header(file, last_event_info); fputc('\n', file); fprintf(file, "#Exec_load: file_id=%d\n", file_id); @@ -4729,20 +4716,18 @@ Execute_load_query_log_event::write_post_header_for_derived(IO_CACHE* file) #ifdef MYSQL_CLIENT -void Execute_load_query_log_event::print(FILE* file, bool short_form, - my_off_t hexdump_from, +void Execute_load_query_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) { - print(file, short_form, hexdump_from, last_event_info, 0); + print(file, last_event_info, 0); } -void Execute_load_query_log_event::print(FILE* file, bool short_form, - my_off_t hexdump_from, +void Execute_load_query_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info, const char *local_fname) { - print_query_header(file, short_form, hexdump_from, last_event_info); + print_query_header(file, last_event_info); if (local_fname) { @@ -4763,7 +4748,7 @@ void Execute_load_query_log_event::print(FILE* file, bool short_form, fprintf(file, ";\n"); } - if (!short_form) + if (!last_event_info->short_form) fprintf(file, "# file_id: %d \n", file_id); } #endif diff --git a/sql/log_event.h b/sql/log_event.h index 9351e9b1148..80dd40f0dd5 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -451,12 +451,18 @@ struct st_relay_log_info; #ifdef MYSQL_CLIENT /* - A structure for mysqlbinlog to remember the last db, flags2, sql_mode etc; it - is passed to events' print() methods, so that they print only the necessary - USE and SET commands. + A structure for mysqlbinlog to know how to print events + + This structure is passed to the event's print() methods so that only + the necessary USE and SET commands are printed. Last db, flags2, + sql_mode etc are stored here. + + The structure also contain other information on how to print the + events, e.g. short_form, hexdump_from. */ typedef struct st_last_event_info { + /* Old settings for database, sql_mode etc */ // TODO: have the last catalog here ?? char db[FN_REFLEN+1]; // TODO: make this a LEX_STRING when thd->db is bool flags2_inited; @@ -480,6 +486,12 @@ typedef struct st_last_event_info bzero(charset, sizeof(charset)); bzero(time_zone_str, sizeof(time_zone_str)); } + + /* Settings on how to print the events */ + bool short_form; + my_off_t hexdump_from; + uint8 common_header_len; + } LAST_EVENT_INFO; #endif @@ -589,10 +601,9 @@ public: static Log_event* read_log_event(IO_CACHE* file, const Format_description_log_event *description_event); /* print*() functions are used by mysqlbinlog */ - virtual void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0) = 0; + virtual void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0) = 0; void print_timestamp(FILE* file, time_t *ts = 0); - void print_header(FILE* file, my_off_t hexdump_from= 0); + void print_header(FILE* file, LAST_EVENT_INFO* last_event_info= 0); #endif static void *operator new(size_t size) @@ -752,11 +763,8 @@ public: uint32 q_len_arg); #endif /* HAVE_REPLICATION */ #else - void print_query_header(FILE* file, bool short_form= 0, - my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0); - void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0); + void print_query_header(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); #endif Query_log_event(const char* buf, uint event_len, @@ -810,8 +818,7 @@ public: void pack_info(Protocol* protocol); int exec_event(struct st_relay_log_info* rli); #else - void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); #endif Slave_log_event(const char* buf, uint event_len); @@ -899,10 +906,8 @@ public: bool use_rli_only_for_errors); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info = 0); - void print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info, bool commented); + void print(FILE* file, LAST_EVENT_INFO* last_event_info = 0); + void print(FILE* file, LAST_EVENT_INFO* last_event_info, bool commented); #endif /* @@ -991,8 +996,7 @@ public: #endif /* HAVE_REPLICATION */ #else Start_log_event_v3() {} - void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); #endif Start_log_event_v3(const char* buf, @@ -1087,8 +1091,7 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); #endif Intvar_log_event(const char* buf, const Format_description_log_event* description_event); @@ -1129,8 +1132,7 @@ class Rand_log_event: public Log_event int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); #endif Rand_log_event(const char* buf, const Format_description_log_event* description_event); @@ -1167,8 +1169,7 @@ class Xid_log_event: public Log_event int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); #endif Xid_log_event(const char* buf, const Format_description_log_event* description_event); @@ -1210,8 +1211,7 @@ public: void pack_info(Protocol* protocol); int exec_event(struct st_relay_log_info* rli); #else - void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); #endif User_var_log_event(const char* buf, const Format_description_log_event* description_event); @@ -1237,8 +1237,7 @@ public: {} int exec_event(struct st_relay_log_info* rli); #else - void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); #endif Stop_log_event(const char* buf, const Format_description_log_event* description_event): @@ -1277,8 +1276,7 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); #endif Rotate_log_event(const char* buf, uint event_len, @@ -1331,10 +1329,8 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0); - void print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info, bool enable_local); + void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, LAST_EVENT_INFO* last_event_info, bool enable_local); #endif Create_file_log_event(const char* buf, uint event_len, @@ -1401,8 +1397,7 @@ public: virtual int get_create_or_append() const; #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); #endif Append_block_log_event(const char* buf, uint event_len, @@ -1437,10 +1432,8 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0); - void print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info, bool enable_local); + void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, LAST_EVENT_INFO* last_event_info, bool enable_local); #endif Delete_file_log_event(const char* buf, uint event_len, @@ -1475,8 +1468,7 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); #endif Execute_load_log_event(const char* buf, uint event_len, @@ -1561,11 +1553,10 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); /* Prints the query as LOAD DATA LOCAL and with rewritten filename */ - void print(FILE* file, bool short_form, my_off_t hexdump_from, - LAST_EVENT_INFO* last_event_info, const char *local_fname); + void print(FILE* file, LAST_EVENT_INFO* last_event_info, + const char *local_fname); #endif Execute_load_query_log_event(const char* buf, uint event_len, const Format_description_log_event *description_event); @@ -1594,8 +1585,7 @@ public: Log_event(buf, description_event) {} ~Unknown_log_event() {} - void print(FILE* file, bool short_form= 0, my_off_t hexdump_from= 0, - LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); Log_event_type get_type_code() { return UNKNOWN_EVENT;} bool is_valid() const { return 1; } }; From e040920f9599ad2c435d0d9dda000b0fc2c42d26 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 19 Oct 2005 19:31:24 +0200 Subject: [PATCH 4/4] mysqlbinlog --hexdump patch 4: Rename last_event_info to print_event_info to better reflect the new semantics client/mysqlbinlog.cc: Rename last_event_info to print_event_info sql/log_event.cc: Rename last_event_info to print_event_info sql/log_event.h: Rename last_event_info to print_event_info --- client/mysqlbinlog.cc | 38 +++++----- sql/log_event.cc | 170 +++++++++++++++++++++--------------------- sql/log_event.h | 71 ++++++++++-------- 3 files changed, 142 insertions(+), 137 deletions(-) diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 2b96914bfc9..9cbf211bb4d 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -490,13 +490,13 @@ static bool check_database(const char *log_dbname) -int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, +int process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev, my_off_t pos) { char ll_buff[21]; Log_event_type ev_type= ev->get_type_code(); DBUG_ENTER("process_event"); - last_event_info->short_form= short_form; + print_event_info->short_form= short_form; /* Format events are not concerned by --offset and such, we always need to @@ -526,15 +526,15 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, fprintf(result_file, "# at %s\n",llstr(pos,ll_buff)); if (!opt_hexdump) - last_event_info->hexdump_from= 0; /* Disabled */ + print_event_info->hexdump_from= 0; /* Disabled */ else - last_event_info->hexdump_from= pos; + print_event_info->hexdump_from= pos; switch (ev_type) { case QUERY_EVENT: if (check_database(((Query_log_event*)ev)->db)) goto end; - ev->print(result_file, last_event_info); + ev->print(result_file, print_event_info); break; case CREATE_FILE_EVENT: { @@ -554,7 +554,7 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, filename and use LOCAL), prepared in the 'case EXEC_LOAD_EVENT' below. */ - ce->print(result_file, last_event_info, TRUE); + ce->print(result_file, print_event_info, TRUE); // If this binlog is not 3.23 ; why this test?? if (description_event->binlog_version >= 3) @@ -566,13 +566,13 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, break; } case APPEND_BLOCK_EVENT: - ev->print(result_file, last_event_info); + ev->print(result_file, print_event_info); if (load_processor.process((Append_block_log_event*) ev)) break; // Error break; case EXEC_LOAD_EVENT: { - ev->print(result_file, last_event_info); + ev->print(result_file, print_event_info); Execute_load_log_event *exv= (Execute_load_log_event*)ev; Create_file_log_event *ce= load_processor.grab_event(exv->file_id); /* @@ -582,7 +582,7 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, */ if (ce) { - ce->print(result_file, last_event_info, TRUE); + ce->print(result_file, print_event_info, TRUE); my_free((char*)ce->fname,MYF(MY_WME)); delete ce; } @@ -594,8 +594,8 @@ Create_file event for file_id: %u\n",exv->file_id); case FORMAT_DESCRIPTION_EVENT: delete description_event; description_event= (Format_description_log_event*) ev; - last_event_info->common_header_len= description_event->common_header_len; - ev->print(result_file, last_event_info); + print_event_info->common_header_len= description_event->common_header_len; + ev->print(result_file, print_event_info); /* We don't want this event to be deleted now, so let's hide it (I (Guilhem) should later see if this triggers a non-serious Valgrind @@ -605,7 +605,7 @@ Create_file event for file_id: %u\n",exv->file_id); ev= 0; break; case BEGIN_LOAD_QUERY_EVENT: - ev->print(result_file, last_event_info); + ev->print(result_file, print_event_info); load_processor.process((Begin_load_query_log_event*) ev); break; case EXECUTE_LOAD_QUERY_EVENT: @@ -622,7 +622,7 @@ Create_file event for file_id: %u\n",exv->file_id); if (fname) { - exlq->print(result_file, last_event_info, fname); + exlq->print(result_file, print_event_info, fname); my_free(fname, MYF(MY_WME)); } else @@ -631,7 +631,7 @@ Begin_load_query event for file_id: %u\n", exlq->file_id); break; } default: - ev->print(result_file, last_event_info); + ev->print(result_file, print_event_info); } } @@ -1014,7 +1014,7 @@ static int dump_remote_log_entries(const char* logname) { char buf[128]; - LAST_EVENT_INFO last_event_info; + PRINT_EVENT_INFO print_event_info; uint len, logname_len; NET* net; int error= 0; @@ -1136,7 +1136,7 @@ could be out of memory"); len= 1; // fake Rotate, so don't increment old_off } } - if ((error= process_event(&last_event_info,ev,old_off))) + if ((error= process_event(&print_event_info, ev, old_off))) { error= ((error < 0) ? 0 : 1); goto err; @@ -1155,7 +1155,7 @@ could be out of memory"); goto err; } - if ((error= process_event(&last_event_info,ev,old_off))) + if ((error= process_event(&print_event_info, ev, old_off))) { my_close(file,MYF(MY_WME)); error= ((error < 0) ? 0 : 1); @@ -1284,7 +1284,7 @@ static int dump_local_log_entries(const char* logname) { File fd = -1; IO_CACHE cache,*file= &cache; - LAST_EVENT_INFO last_event_info; + PRINT_EVENT_INFO print_event_info; byte tmp_buff[BIN_LOG_HEADER_SIZE]; int error= 0; @@ -1356,7 +1356,7 @@ static int dump_local_log_entries(const char* logname) // file->error == 0 means EOF, that's OK, we break in this case break; } - if ((error= process_event(&last_event_info,ev,old_off))) + if ((error= process_event(&print_event_info, ev, old_off))) { if (error < 0) error= 0; diff --git a/sql/log_event.cc b/sql/log_event.cc index 44a631f434a..389e70416fa 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -875,10 +875,10 @@ Log_event* Log_event::read_log_event(const char* buf, uint event_len, Log_event::print_header() */ -void Log_event::print_header(FILE* file, LAST_EVENT_INFO* last_event_info) +void Log_event::print_header(FILE* file, PRINT_EVENT_INFO* print_event_info) { char llbuff[22]; - my_off_t hexdump_from= last_event_info->hexdump_from; + my_off_t hexdump_from= print_event_info->hexdump_from; fputc('#', file); print_timestamp(file); @@ -886,7 +886,7 @@ void Log_event::print_header(FILE* file, LAST_EVENT_INFO* last_event_info) llstr(log_pos,llbuff)); /* mysqlbinlog --hexdump */ - if (last_event_info->hexdump_from) + if (print_event_info->hexdump_from) { fprintf(file, "\n"); uchar *ptr= (uchar*)temp_buf; @@ -899,7 +899,7 @@ void Log_event::print_header(FILE* file, LAST_EVENT_INFO* last_event_info) char *c, char_string[16+1]= {0}; /* Pretty-print event common header if header is exactly 19 bytes */ - if (last_event_info->common_header_len == 19) + if (print_event_info->common_header_len == LOG_EVENT_MINIMAL_HEADER_LEN) { fprintf(file, "# Position Timestamp Type Master ID " "Size Master Pos Flags \n"); @@ -1428,24 +1428,24 @@ Query_log_event::Query_log_event(const char* buf, uint event_len, #ifdef MYSQL_CLIENT void Query_log_event::print_query_header(FILE* file, - LAST_EVENT_INFO* last_event_info) + PRINT_EVENT_INFO* print_event_info) { // TODO: print the catalog ?? char buff[40],*end; // Enough for SET TIMESTAMP bool different_db= 1; uint32 tmp; - if (!last_event_info->short_form) + if (!print_event_info->short_form) { - print_header(file, last_event_info); + print_header(file, print_event_info); fprintf(file, "\t%s\tthread_id=%lu\texec_time=%lu\terror_code=%d\n", get_type_str(), (ulong) thread_id, (ulong) exec_time, error_code); } if (!(flags & LOG_EVENT_SUPPRESS_USE_F) && db) { - if (different_db= memcmp(last_event_info->db, db, db_len + 1)) - memcpy(last_event_info->db, db, db_len + 1); + if (different_db= memcmp(print_event_info->db, db, db_len + 1)) + memcpy(print_event_info->db, db, db_len + 1); if (db[0] && different_db) fprintf(file, "use %s;\n", db); } @@ -1465,12 +1465,12 @@ void Query_log_event::print_query_header(FILE* file, if (likely(flags2_inited)) /* likely as this will mainly read 5.0 logs */ { /* tmp is a bitmask of bits which have changed. */ - if (likely(last_event_info->flags2_inited)) + if (likely(print_event_info->flags2_inited)) /* All bits which have changed */ - tmp= (last_event_info->flags2) ^ flags2; + tmp= (print_event_info->flags2) ^ flags2; else /* that's the first Query event we read */ { - last_event_info->flags2_inited= 1; + print_event_info->flags2_inited= 1; tmp= ~((uint32)0); /* all bits have changed */ } @@ -1485,7 +1485,7 @@ void Query_log_event::print_query_header(FILE* file, print_set_option(file, tmp, OPTION_RELAXED_UNIQUE_CHECKS, ~flags2, "@@session.unique_checks", &need_comma); fprintf(file,";\n"); - last_event_info->flags2= flags2; + print_event_info->flags2= flags2; } } @@ -1504,37 +1504,37 @@ void Query_log_event::print_query_header(FILE* file, if (likely(sql_mode_inited)) { - if (unlikely(!last_event_info->sql_mode_inited)) /* first Query event */ + if (unlikely(!print_event_info->sql_mode_inited)) /* first Query event */ { - last_event_info->sql_mode_inited= 1; + print_event_info->sql_mode_inited= 1; /* force a difference to force write */ - last_event_info->sql_mode= ~sql_mode; + print_event_info->sql_mode= ~sql_mode; } - if (unlikely(last_event_info->sql_mode != sql_mode)) + if (unlikely(print_event_info->sql_mode != sql_mode)) { fprintf(file,"SET @@session.sql_mode=%lu;\n",(ulong)sql_mode); - last_event_info->sql_mode= sql_mode; + print_event_info->sql_mode= sql_mode; } } - if (last_event_info->auto_increment_increment != auto_increment_increment || - last_event_info->auto_increment_offset != auto_increment_offset) + if (print_event_info->auto_increment_increment != auto_increment_increment || + print_event_info->auto_increment_offset != auto_increment_offset) { fprintf(file,"SET @@session.auto_increment_increment=%lu, @@session.auto_increment_offset=%lu;\n", auto_increment_increment,auto_increment_offset); - last_event_info->auto_increment_increment= auto_increment_increment; - last_event_info->auto_increment_offset= auto_increment_offset; + print_event_info->auto_increment_increment= auto_increment_increment; + print_event_info->auto_increment_offset= auto_increment_offset; } /* TODO: print the catalog when we feature SET CATALOG */ if (likely(charset_inited)) { - if (unlikely(!last_event_info->charset_inited)) /* first Query event */ + if (unlikely(!print_event_info->charset_inited)) /* first Query event */ { - last_event_info->charset_inited= 1; - last_event_info->charset[0]= ~charset[0]; // force a difference to force write + print_event_info->charset_inited= 1; + print_event_info->charset[0]= ~charset[0]; // force a difference to force write } - if (unlikely(bcmp(last_event_info->charset, charset, 6))) + if (unlikely(bcmp(print_event_info->charset, charset, 6))) { fprintf(file,"SET " "@@session.character_set_client=%d," @@ -1544,23 +1544,23 @@ void Query_log_event::print_query_header(FILE* file, uint2korr(charset), uint2korr(charset+2), uint2korr(charset+4)); - memcpy(last_event_info->charset, charset, 6); + memcpy(print_event_info->charset, charset, 6); } } if (time_zone_len) { - if (bcmp(last_event_info->time_zone_str, time_zone_str, time_zone_len+1)) + if (bcmp(print_event_info->time_zone_str, time_zone_str, time_zone_len+1)) { fprintf(file,"SET @@session.time_zone='%s';\n", time_zone_str); - memcpy(last_event_info->time_zone_str, time_zone_str, time_zone_len+1); + memcpy(print_event_info->time_zone_str, time_zone_str, time_zone_len+1); } } } -void Query_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) +void Query_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) { - print_query_header(file, last_event_info); + print_query_header(file, print_event_info); my_fwrite(file, (byte*) query, q_len, MYF(MY_NABP | MY_WME)); fputs(";\n", file); } @@ -1858,11 +1858,11 @@ void Start_log_event_v3::pack_info(Protocol *protocol) */ #ifdef MYSQL_CLIENT -void Start_log_event_v3::print(FILE* file, LAST_EVENT_INFO* last_event_info) +void Start_log_event_v3::print(FILE* file, PRINT_EVENT_INFO* print_event_info) { - if (!last_event_info->short_form) + if (!print_event_info->short_form) { - print_header(file, last_event_info); + print_header(file, print_event_info); fprintf(file, "\tStart: binlog v %d, server v %s created ", binlog_version, server_version); print_timestamp(file); @@ -2586,19 +2586,19 @@ int Load_log_event::copy_log_event(const char *buf, ulong event_len, */ #ifdef MYSQL_CLIENT -void Load_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) +void Load_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) { - print(file, last_event_info, 0); + print(file, print_event_info, 0); } -void Load_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info, +void Load_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info, bool commented) { DBUG_ENTER("Load_log_event::print"); - if (!last_event_info->short_form) + if (!print_event_info->short_form) { - print_header(file, last_event_info); + print_header(file, print_event_info); fprintf(file, "\tQuery\tthread_id=%ld\texec_time=%ld\n", thread_id, exec_time); } @@ -2612,9 +2612,9 @@ void Load_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info, But if commented, the "use" is going to be commented so we should not update the last_db. */ - if ((different_db= memcmp(last_event_info->db, db, db_len + 1)) && + if ((different_db= memcmp(print_event_info->db, db, db_len + 1)) && !commented) - memcpy(last_event_info->db, db, db_len + 1); + memcpy(print_event_info->db, db, db_len + 1); } if (db && db[0] && different_db) @@ -3003,13 +3003,13 @@ void Rotate_log_event::pack_info(Protocol *protocol) */ #ifdef MYSQL_CLIENT -void Rotate_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) +void Rotate_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) { char buf[22]; - if (last_event_info->short_form) + if (print_event_info->short_form) return; - print_header(file, last_event_info); + print_header(file, print_event_info); fprintf(file, "\tRotate to "); if (new_log_ident) my_fwrite(file, (byte*) new_log_ident, (uint)ident_len, @@ -3205,15 +3205,15 @@ bool Intvar_log_event::write(IO_CACHE* file) */ #ifdef MYSQL_CLIENT -void Intvar_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) +void Intvar_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) { char llbuff[22]; const char *msg; LINT_INIT(msg); - if (!last_event_info->short_form) + if (!print_event_info->short_form) { - print_header(file, last_event_info); + print_header(file, print_event_info); fprintf(file, "\tIntvar\n"); } @@ -3294,12 +3294,12 @@ bool Rand_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT -void Rand_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) +void Rand_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) { char llbuff[22],llbuff2[22]; - if (!last_event_info->short_form) + if (!print_event_info->short_form) { - print_header(file, last_event_info); + print_header(file, print_event_info); fprintf(file, "\tRand\n"); } fprintf(file, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s;\n", @@ -3364,14 +3364,14 @@ bool Xid_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT -void Xid_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) +void Xid_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) { - if (!last_event_info->short_form) + if (!print_event_info->short_form) { char buf[64]; longlong10_to_str(xid, buf, 10); - print_header(file, last_event_info); + print_header(file, print_event_info); fprintf(file, "\tXid = %s\n", buf); fflush(file); } @@ -3562,11 +3562,11 @@ bool User_var_log_event::write(IO_CACHE* file) */ #ifdef MYSQL_CLIENT -void User_var_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) +void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) { - if (!last_event_info->short_form) + if (!print_event_info->short_form) { - print_header(file, last_event_info); + print_header(file, print_event_info); fprintf(file, "\tUser_var\n"); } @@ -3737,11 +3737,11 @@ int User_var_log_event::exec_event(struct st_relay_log_info* rli) #ifdef HAVE_REPLICATION #ifdef MYSQL_CLIENT -void Unknown_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) +void Unknown_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) { - if (last_event_info->short_form) + if (print_event_info->short_form) return; - print_header(file, last_event_info); + print_header(file, print_event_info); fputc('\n', file); fprintf(file, "# %s", "Unknown event\n"); } @@ -3808,12 +3808,12 @@ Slave_log_event::~Slave_log_event() #ifdef MYSQL_CLIENT -void Slave_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) +void Slave_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) { char llbuff[22]; - if (last_event_info->short_form) + if (print_event_info->short_form) return; - print_header(file, last_event_info); + print_header(file, print_event_info); fputc('\n', file); fprintf(file, "\ Slave: master_host: '%s' master_port: %d master_log: '%s' master_pos: %s\n", @@ -3893,12 +3893,12 @@ int Slave_log_event::exec_event(struct st_relay_log_info* rli) */ #ifdef MYSQL_CLIENT -void Stop_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) +void Stop_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) { - if (last_event_info->short_form) + if (print_event_info->short_form) return; - print_header(file, last_event_info); + print_header(file, print_event_info); fprintf(file, "\tStop\n"); fflush(file); } @@ -4072,19 +4072,19 @@ Create_file_log_event::Create_file_log_event(const char* buf, uint len, */ #ifdef MYSQL_CLIENT -void Create_file_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info, +void Create_file_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info, bool enable_local) { - if (last_event_info->short_form) + if (print_event_info->short_form) { if (enable_local && check_fname_outside_temp_buf()) - Load_log_event::print(file, last_event_info); + Load_log_event::print(file, print_event_info); return; } if (enable_local) { - Load_log_event::print(file, last_event_info, + Load_log_event::print(file, print_event_info, !check_fname_outside_temp_buf()); /* That one is for "file_id: etc" below: in mysqlbinlog we want the #, in @@ -4097,9 +4097,9 @@ void Create_file_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info, } -void Create_file_log_event::print(FILE* file, LAST_EVENT_INFO* last_event_info) +void Create_file_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) { - print(file, last_event_info, 0); + print(file, print_event_info, 0); } #endif /* MYSQL_CLIENT */ @@ -4260,11 +4260,11 @@ bool Append_block_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT void Append_block_log_event::print(FILE* file, - LAST_EVENT_INFO* last_event_info) + PRINT_EVENT_INFO* print_event_info) { - if (last_event_info->short_form) + if (print_event_info->short_form) return; - print_header(file, last_event_info); + print_header(file, print_event_info); fputc('\n', file); fprintf(file, "#%s: file_id: %d block_len: %d\n", get_type_str(), file_id, block_len); @@ -4404,11 +4404,11 @@ bool Delete_file_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT void Delete_file_log_event::print(FILE* file, - LAST_EVENT_INFO* last_event_info) + PRINT_EVENT_INFO* print_event_info) { - if (last_event_info->short_form) + if (print_event_info->short_form) return; - print_header(file, last_event_info); + print_header(file, print_event_info); fputc('\n', file); fprintf(file, "#Delete_file: file_id=%u\n", file_id); } @@ -4500,11 +4500,11 @@ bool Execute_load_log_event::write(IO_CACHE* file) #ifdef MYSQL_CLIENT void Execute_load_log_event::print(FILE* file, - LAST_EVENT_INFO* last_event_info) + PRINT_EVENT_INFO* print_event_info) { - if (last_event_info->short_form) + if (print_event_info->short_form) return; - print_header(file, last_event_info); + print_header(file, print_event_info); fputc('\n', file); fprintf(file, "#Exec_load: file_id=%d\n", file_id); @@ -4712,17 +4712,17 @@ Execute_load_query_log_event::write_post_header_for_derived(IO_CACHE* file) #ifdef MYSQL_CLIENT void Execute_load_query_log_event::print(FILE* file, - LAST_EVENT_INFO* last_event_info) + PRINT_EVENT_INFO* print_event_info) { - print(file, last_event_info, 0); + print(file, print_event_info, 0); } void Execute_load_query_log_event::print(FILE* file, - LAST_EVENT_INFO* last_event_info, + PRINT_EVENT_INFO* print_event_info, const char *local_fname) { - print_query_header(file, last_event_info); + print_query_header(file, print_event_info); if (local_fname) { @@ -4743,7 +4743,7 @@ void Execute_load_query_log_event::print(FILE* file, fprintf(file, ";\n"); } - if (!last_event_info->short_form) + if (!print_event_info->short_form) fprintf(file, "# file_id: %d \n", file_id); } #endif diff --git a/sql/log_event.h b/sql/log_event.h index 80dd40f0dd5..db212c8b4b1 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -453,16 +453,21 @@ struct st_relay_log_info; /* A structure for mysqlbinlog to know how to print events - This structure is passed to the event's print() methods so that only - the necessary USE and SET commands are printed. Last db, flags2, - sql_mode etc are stored here. + This structure is passed to the event's print() methods, - The structure also contain other information on how to print the - events, e.g. short_form, hexdump_from. + There are two types of settings stored here: + 1. Last db, flags2, sql_mode etc comes from the last printed event. + They are stored so that only the necessary USE and SET commands + are printed. + 2. Other information on how to print the events, e.g. short_form, + hexdump_from. These are not dependent on the last event. */ -typedef struct st_last_event_info +typedef struct st_print_event_info { - /* Old settings for database, sql_mode etc */ + /* + Settings for database, sql_mode etc that comes from the last event + that was printed. + */ // TODO: have the last catalog here ?? char db[FN_REFLEN+1]; // TODO: make this a LEX_STRING when thd->db is bool flags2_inited; @@ -473,12 +478,12 @@ typedef struct st_last_event_info bool charset_inited; char charset[6]; // 3 variables, each of them storable in 2 bytes char time_zone_str[MAX_TIME_ZONE_NAME_LENGTH]; - st_last_event_info() + st_print_event_info() :flags2_inited(0), sql_mode_inited(0), auto_increment_increment(1),auto_increment_offset(1), charset_inited(0) { /* - Currently we only use static LAST_EVENT_INFO objects, so zeroed at + Currently we only use static PRINT_EVENT_INFO objects, so zeroed at program's startup, but these explicit bzero() is for the day someone creates dynamic instances. */ @@ -492,7 +497,7 @@ typedef struct st_last_event_info my_off_t hexdump_from; uint8 common_header_len; -} LAST_EVENT_INFO; +} PRINT_EVENT_INFO; #endif @@ -601,9 +606,9 @@ public: static Log_event* read_log_event(IO_CACHE* file, const Format_description_log_event *description_event); /* print*() functions are used by mysqlbinlog */ - virtual void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0) = 0; + virtual void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0) = 0; void print_timestamp(FILE* file, time_t *ts = 0); - void print_header(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print_header(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); #endif static void *operator new(size_t size) @@ -763,8 +768,8 @@ public: uint32 q_len_arg); #endif /* HAVE_REPLICATION */ #else - void print_query_header(FILE* file, LAST_EVENT_INFO* last_event_info= 0); - void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print_query_header(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); #endif Query_log_event(const char* buf, uint event_len, @@ -818,7 +823,7 @@ public: void pack_info(Protocol* protocol); int exec_event(struct st_relay_log_info* rli); #else - void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); #endif Slave_log_event(const char* buf, uint event_len); @@ -906,8 +911,8 @@ public: bool use_rli_only_for_errors); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, LAST_EVENT_INFO* last_event_info = 0); - void print(FILE* file, LAST_EVENT_INFO* last_event_info, bool commented); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info = 0); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info, bool commented); #endif /* @@ -996,7 +1001,7 @@ public: #endif /* HAVE_REPLICATION */ #else Start_log_event_v3() {} - void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); #endif Start_log_event_v3(const char* buf, @@ -1091,7 +1096,7 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); #endif Intvar_log_event(const char* buf, const Format_description_log_event* description_event); @@ -1132,7 +1137,7 @@ class Rand_log_event: public Log_event int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); #endif Rand_log_event(const char* buf, const Format_description_log_event* description_event); @@ -1169,7 +1174,7 @@ class Xid_log_event: public Log_event int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); #endif Xid_log_event(const char* buf, const Format_description_log_event* description_event); @@ -1211,7 +1216,7 @@ public: void pack_info(Protocol* protocol); int exec_event(struct st_relay_log_info* rli); #else - void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); #endif User_var_log_event(const char* buf, const Format_description_log_event* description_event); @@ -1237,7 +1242,7 @@ public: {} int exec_event(struct st_relay_log_info* rli); #else - void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); #endif Stop_log_event(const char* buf, const Format_description_log_event* description_event): @@ -1276,7 +1281,7 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); #endif Rotate_log_event(const char* buf, uint event_len, @@ -1329,8 +1334,8 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); - void print(FILE* file, LAST_EVENT_INFO* last_event_info, bool enable_local); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info, bool enable_local); #endif Create_file_log_event(const char* buf, uint event_len, @@ -1397,7 +1402,7 @@ public: virtual int get_create_or_append() const; #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); #endif Append_block_log_event(const char* buf, uint event_len, @@ -1432,8 +1437,8 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); - void print(FILE* file, LAST_EVENT_INFO* last_event_info, bool enable_local); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info, bool enable_local); #endif Delete_file_log_event(const char* buf, uint event_len, @@ -1468,7 +1473,7 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); #endif Execute_load_log_event(const char* buf, uint event_len, @@ -1553,9 +1558,9 @@ public: int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else - void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); /* Prints the query as LOAD DATA LOCAL and with rewritten filename */ - void print(FILE* file, LAST_EVENT_INFO* last_event_info, + void print(FILE* file, PRINT_EVENT_INFO* print_event_info, const char *local_fname); #endif Execute_load_query_log_event(const char* buf, uint event_len, @@ -1585,7 +1590,7 @@ public: Log_event(buf, description_event) {} ~Unknown_log_event() {} - void print(FILE* file, LAST_EVENT_INFO* last_event_info= 0); + void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); Log_event_type get_type_code() { return UNKNOWN_EVENT;} bool is_valid() const { return 1; } };