summaryrefslogtreecommitdiff
path: root/sql/log_event.cc
diff options
context:
space:
mode:
authorlars@mysql.com <>2005-09-29 10:42:23 +0200
committerlars@mysql.com <>2005-09-29 10:42:23 +0200
commitd81d57d408c0965d8cce06a7b114f06235d65163 (patch)
treed70ae1d69aedbe8da96768de6d0db17767c8faea /sql/log_event.cc
parent5e70387fb85f05c7d3041e69de20f6fbd0f08442 (diff)
downloadmariadb-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.cc134
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)
{