diff options
author | lars@mysql.com <> | 2005-09-29 10:42:23 +0200 |
---|---|---|
committer | lars@mysql.com <> | 2005-09-29 10:42:23 +0200 |
commit | d81d57d408c0965d8cce06a7b114f06235d65163 (patch) | |
tree | d70ae1d69aedbe8da96768de6d0db17767c8faea /sql/log_event.cc | |
parent | 5e70387fb85f05c7d3041e69de20f6fbd0f08442 (diff) | |
download | mariadb-git-d81d57d408c0965d8cce06a7b114f06235d65163.tar.gz |
mysqlbinlog --hexdump augments each log entry with byte information
Diffstat (limited to 'sql/log_event.cc')
-rw-r--r-- | sql/log_event.cc | 134 |
1 files changed, 98 insertions, 36 deletions
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 <my_dir.h> +#else +#include <ctype.h> /* 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) { |