Commit b2f976f2 authored by unknown's avatar unknown

mysqlbinlog --hexdump augments each log entry with byte information

parent d5c647f2
...@@ -62,6 +62,7 @@ static const char *load_default_groups[]= { "mysqlbinlog","client",0 }; ...@@ -62,6 +62,7 @@ static const char *load_default_groups[]= { "mysqlbinlog","client",0 };
void sql_print_error(const char *format, ...); void sql_print_error(const char *format, ...);
static bool one_database=0, to_last_remote_log= 0, disable_log_bin= 0; 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 const char* database= 0;
static my_bool force_opt= 0, short_form= 0, remote_opt= 0; static my_bool force_opt= 0, short_form= 0, remote_opt= 0;
static ulonglong offset = 0; static ulonglong offset = 0;
...@@ -522,12 +523,15 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, ...@@ -522,12 +523,15 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev,
} }
if (!short_form) if (!short_form)
fprintf(result_file, "# at %s\n",llstr(pos,ll_buff)); 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) { switch (ev_type) {
case QUERY_EVENT: case QUERY_EVENT:
if (check_database(((Query_log_event*)ev)->db)) if (check_database(((Query_log_event*)ev)->db))
goto end; goto end;
ev->print(result_file, short_form, last_event_info); ev->print(result_file, short_form, pos, last_event_info);
break; break;
case CREATE_FILE_EVENT: case CREATE_FILE_EVENT:
{ {
...@@ -547,7 +551,8 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, ...@@ -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' filename and use LOCAL), prepared in the 'case EXEC_LOAD_EVENT'
below. 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 this binlog is not 3.23 ; why this test??
if (description_event->binlog_version >= 3) if (description_event->binlog_version >= 3)
{ {
...@@ -558,13 +563,13 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, ...@@ -558,13 +563,13 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev,
break; break;
} }
case APPEND_BLOCK_EVENT: 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)) if (load_processor.process((Append_block_log_event*) ev))
break; // Error break; // Error
break; break;
case EXEC_LOAD_EVENT: 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; Execute_load_log_event *exv= (Execute_load_log_event*)ev;
Create_file_log_event *ce= load_processor.grab_event(exv->file_id); 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, ...@@ -574,7 +579,7 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev,
*/ */
if (ce) 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)); my_free((char*)ce->fname,MYF(MY_WME));
delete ce; delete ce;
} }
...@@ -586,7 +591,7 @@ Create_file event for file_id: %u\n",exv->file_id); ...@@ -586,7 +591,7 @@ Create_file event for file_id: %u\n",exv->file_id);
case FORMAT_DESCRIPTION_EVENT: case FORMAT_DESCRIPTION_EVENT:
delete description_event; delete description_event;
description_event= (Format_description_log_event*) ev; 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 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 (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); ...@@ -596,7 +601,7 @@ Create_file event for file_id: %u\n",exv->file_id);
ev= 0; ev= 0;
break; break;
case BEGIN_LOAD_QUERY_EVENT: 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); load_processor.process((Begin_load_query_log_event*) ev);
break; break;
case EXECUTE_LOAD_QUERY_EVENT: case EXECUTE_LOAD_QUERY_EVENT:
...@@ -613,7 +618,7 @@ Create_file event for file_id: %u\n",exv->file_id); ...@@ -613,7 +618,7 @@ Create_file event for file_id: %u\n",exv->file_id);
if (fname) 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)); my_free(fname, MYF(MY_WME));
} }
else else
...@@ -622,7 +627,7 @@ Begin_load_query event for file_id: %u\n", exlq->file_id); ...@@ -622,7 +627,7 @@ Begin_load_query event for file_id: %u\n", exlq->file_id);
break; break;
} }
default: 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[] = ...@@ -669,6 +674,8 @@ static struct my_option my_long_options[] =
0, 0}, 0, 0},
{"help", '?', "Display this help and exit.", {"help", '?', "Display this help and exit.",
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, 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, {"host", 'h', "Get the binlog from server.", (gptr*) &host, (gptr*) &host,
0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"offset", 'o', "Skip the first N entries.", (gptr*) &offset, (gptr*) &offset, {"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)), ...@@ -848,6 +855,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case 'd': case 'd':
one_database = 1; one_database = 1;
break; break;
case 'H':
opt_hexdump= 1;
break;
case 'p': case 'p':
if (argument) if (argument)
{ {
......
...@@ -24,6 +24,8 @@ ...@@ -24,6 +24,8 @@
#include "mysql_priv.h" #include "mysql_priv.h"
#include "slave.h" #include "slave.h"
#include <my_dir.h> #include <my_dir.h>
#else
#include <ctype.h> /* For isalnum() */
#endif /* MYSQL_CLIENT */ #endif /* MYSQL_CLIENT */
#define log_cs &my_charset_latin1 #define log_cs &my_charset_latin1
...@@ -881,15 +883,58 @@ Log_event* Log_event::read_log_event(const char* buf, uint event_len, ...@@ -881,15 +883,58 @@ Log_event* Log_event::read_log_event(const char* buf, uint event_len,
Log_event::print_header() 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]; char llbuff[22];
fputc('#', file); fputc('#', file);
print_timestamp(file); print_timestamp(file);
fprintf(file, " server id %d end_log_pos %s ", server_id, fprintf(file, " server id %d end_log_pos %s ", server_id,
llstr(log_pos,llbuff)); 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() Log_event::print_timestamp()
*/ */
...@@ -1373,6 +1418,7 @@ Query_log_event::Query_log_event(const char* buf, uint event_len, ...@@ -1373,6 +1418,7 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
#ifdef MYSQL_CLIENT #ifdef MYSQL_CLIENT
void Query_log_event::print_query_header(FILE* file, bool short_form, void Query_log_event::print_query_header(FILE* file, bool short_form,
my_off_t start_pos,
LAST_EVENT_INFO* last_event_info) LAST_EVENT_INFO* last_event_info)
{ {
// TODO: print the catalog ?? // TODO: print the catalog ??
...@@ -1382,7 +1428,7 @@ void Query_log_event::print_query_header(FILE* file, bool short_form, ...@@ -1382,7 +1428,7 @@ void Query_log_event::print_query_header(FILE* file, bool short_form,
if (!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", 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); 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, ...@@ -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) 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)); my_fwrite(file, (byte*) query, q_len, MYF(MY_NABP | MY_WME));
fputs(";\n", file); fputs(";\n", file);
} }
...@@ -1804,11 +1850,12 @@ void Start_log_event_v3::pack_info(Protocol *protocol) ...@@ -1804,11 +1850,12 @@ void Start_log_event_v3::pack_info(Protocol *protocol)
*/ */
#ifdef MYSQL_CLIENT #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) if (!short_form)
{ {
print_header(file); print_header(file, start_pos);
fprintf(file, "\tStart: binlog v %d, server v %s created ", binlog_version, fprintf(file, "\tStart: binlog v %d, server v %s created ", binlog_version,
server_version); server_version);
print_timestamp(file); print_timestamp(file);
...@@ -2532,19 +2579,20 @@ int Load_log_event::copy_log_event(const char *buf, ulong event_len, ...@@ -2532,19 +2579,20 @@ int Load_log_event::copy_log_event(const char *buf, ulong event_len,
*/ */
#ifdef MYSQL_CLIENT #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, void Load_log_event::print(FILE* file, bool short_form, my_off_t start_pos,
bool commented) LAST_EVENT_INFO* last_event_info, bool commented)
{ {
DBUG_ENTER("Load_log_event::print"); DBUG_ENTER("Load_log_event::print");
if (!short_form) if (!short_form)
{ {
print_header(file); print_header(file, start_pos);
fprintf(file, "\tQuery\tthread_id=%ld\texec_time=%ld\n", fprintf(file, "\tQuery\tthread_id=%ld\texec_time=%ld\n",
thread_id, exec_time); thread_id, exec_time);
} }
...@@ -2949,13 +2997,14 @@ void Rotate_log_event::pack_info(Protocol *protocol) ...@@ -2949,13 +2997,14 @@ void Rotate_log_event::pack_info(Protocol *protocol)
*/ */
#ifdef MYSQL_CLIENT #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]; char buf[22];
if (short_form) if (short_form)
return; return;
print_header(file); print_header(file, start_pos);
fprintf(file, "\tRotate to "); fprintf(file, "\tRotate to ");
if (new_log_ident) if (new_log_ident)
my_fwrite(file, (byte*) new_log_ident, (uint)ident_len, my_fwrite(file, (byte*) new_log_ident, (uint)ident_len,
...@@ -3151,7 +3200,7 @@ bool Intvar_log_event::write(IO_CACHE* file) ...@@ -3151,7 +3200,7 @@ bool Intvar_log_event::write(IO_CACHE* file)
*/ */
#ifdef MYSQL_CLIENT #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) LAST_EVENT_INFO* last_event_info)
{ {
char llbuff[22]; char llbuff[22];
...@@ -3160,7 +3209,7 @@ void Intvar_log_event::print(FILE* file, bool short_form, ...@@ -3160,7 +3209,7 @@ void Intvar_log_event::print(FILE* file, bool short_form,
if (!short_form) if (!short_form)
{ {
print_header(file); print_header(file, start_pos);
fprintf(file, "\tIntvar\n"); fprintf(file, "\tIntvar\n");
} }
...@@ -3241,12 +3290,13 @@ bool Rand_log_event::write(IO_CACHE* file) ...@@ -3241,12 +3290,13 @@ bool Rand_log_event::write(IO_CACHE* file)
#ifdef MYSQL_CLIENT #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]; char llbuff[22],llbuff2[22];
if (!short_form) if (!short_form)
{ {
print_header(file); print_header(file, start_pos);
fprintf(file, "\tRand\n"); fprintf(file, "\tRand\n");
} }
fprintf(file, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s;\n", fprintf(file, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s;\n",
...@@ -3311,14 +3361,15 @@ bool Xid_log_event::write(IO_CACHE* file) ...@@ -3311,14 +3361,15 @@ bool Xid_log_event::write(IO_CACHE* file)
#ifdef MYSQL_CLIENT #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) if (!short_form)
{ {
char buf[64]; char buf[64];
longlong10_to_str(xid, buf, 10); longlong10_to_str(xid, buf, 10);
print_header(file); print_header(file, start_pos);
fprintf(file, "\tXid = %s\n", buf); fprintf(file, "\tXid = %s\n", buf);
fflush(file); fflush(file);
} }
...@@ -3509,11 +3560,12 @@ bool User_var_log_event::write(IO_CACHE* file) ...@@ -3509,11 +3560,12 @@ bool User_var_log_event::write(IO_CACHE* file)
*/ */
#ifdef MYSQL_CLIENT #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) if (!short_form)
{ {
print_header(file); print_header(file, start_pos);
fprintf(file, "\tUser_var\n"); fprintf(file, "\tUser_var\n");
} }
...@@ -3684,11 +3736,12 @@ int User_var_log_event::exec_event(struct st_relay_log_info* rli) ...@@ -3684,11 +3736,12 @@ int User_var_log_event::exec_event(struct st_relay_log_info* rli)
#ifdef HAVE_REPLICATION #ifdef HAVE_REPLICATION
#ifdef MYSQL_CLIENT #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) if (short_form)
return; return;
print_header(file); print_header(file, start_pos);
fputc('\n', file); fputc('\n', file);
fprintf(file, "# %s", "Unknown event\n"); fprintf(file, "# %s", "Unknown event\n");
} }
...@@ -3755,12 +3808,13 @@ Slave_log_event::~Slave_log_event() ...@@ -3755,12 +3808,13 @@ Slave_log_event::~Slave_log_event()
#ifdef MYSQL_CLIENT #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]; char llbuff[22];
if (short_form) if (short_form)
return; return;
print_header(file); print_header(file, start_pos);
fputc('\n', file); fputc('\n', file);
fprintf(file, "\ fprintf(file, "\
Slave: master_host: '%s' master_port: %d master_log: '%s' master_pos: %s\n", 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) ...@@ -3840,12 +3894,13 @@ int Slave_log_event::exec_event(struct st_relay_log_info* rli)
*/ */
#ifdef MYSQL_CLIENT #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) if (short_form)
return; return;
print_header(file); print_header(file, start_pos);
fprintf(file, "\tStop\n"); fprintf(file, "\tStop\n");
fflush(file); fflush(file);
} }
...@@ -4019,19 +4074,20 @@ Create_file_log_event::Create_file_log_event(const char* buf, uint len, ...@@ -4019,19 +4074,20 @@ Create_file_log_event::Create_file_log_event(const char* buf, uint len,
*/ */
#ifdef MYSQL_CLIENT #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) LAST_EVENT_INFO* last_event_info, bool enable_local)
{ {
if (short_form) if (short_form)
{ {
if (enable_local && check_fname_outside_temp_buf()) 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; return;
} }
if (enable_local) 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 That one is for "file_id: etc" below: in mysqlbinlog we want the #, in
SHOW BINLOG EVENTS we don't. SHOW BINLOG EVENTS we don't.
...@@ -4044,9 +4100,10 @@ void Create_file_log_event::print(FILE* file, bool short_form, ...@@ -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, void Create_file_log_event::print(FILE* file, bool short_form,
my_off_t start_pos,
LAST_EVENT_INFO* last_event_info) 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 */ #endif /* MYSQL_CLIENT */
...@@ -4207,11 +4264,12 @@ bool Append_block_log_event::write(IO_CACHE* file) ...@@ -4207,11 +4264,12 @@ bool Append_block_log_event::write(IO_CACHE* file)
#ifdef MYSQL_CLIENT #ifdef MYSQL_CLIENT
void Append_block_log_event::print(FILE* file, bool short_form, void Append_block_log_event::print(FILE* file, bool short_form,
my_off_t start_pos,
LAST_EVENT_INFO* last_event_info) LAST_EVENT_INFO* last_event_info)
{ {
if (short_form) if (short_form)
return; return;
print_header(file); print_header(file, start_pos);
fputc('\n', file); fputc('\n', file);
fprintf(file, "#%s: file_id: %d block_len: %d\n", fprintf(file, "#%s: file_id: %d block_len: %d\n",
get_type_str(), file_id, block_len); get_type_str(), file_id, block_len);
...@@ -4351,11 +4409,12 @@ bool Delete_file_log_event::write(IO_CACHE* file) ...@@ -4351,11 +4409,12 @@ bool Delete_file_log_event::write(IO_CACHE* file)
#ifdef MYSQL_CLIENT #ifdef MYSQL_CLIENT
void Delete_file_log_event::print(FILE* file, bool short_form, void Delete_file_log_event::print(FILE* file, bool short_form,
my_off_t start_pos,
LAST_EVENT_INFO* last_event_info) LAST_EVENT_INFO* last_event_info)
{ {
if (short_form) if (short_form)
return; return;
print_header(file); print_header(file, start_pos);
fputc('\n', file); fputc('\n', file);
fprintf(file, "#Delete_file: file_id=%u\n", file_id); fprintf(file, "#Delete_file: file_id=%u\n", file_id);
} }
...@@ -4447,11 +4506,12 @@ bool Execute_load_log_event::write(IO_CACHE* file) ...@@ -4447,11 +4506,12 @@ bool Execute_load_log_event::write(IO_CACHE* file)
#ifdef MYSQL_CLIENT #ifdef MYSQL_CLIENT
void Execute_load_log_event::print(FILE* file, bool short_form, void Execute_load_log_event::print(FILE* file, bool short_form,
my_off_t start_pos,
LAST_EVENT_INFO* last_event_info) LAST_EVENT_INFO* last_event_info)
{ {
if (short_form) if (short_form)
return; return;
print_header(file); print_header(file, start_pos);
fputc('\n', file); fputc('\n', file);
fprintf(file, "#Exec_load: file_id=%d\n", fprintf(file, "#Exec_load: file_id=%d\n",
file_id); file_id);
...@@ -4659,17 +4719,19 @@ Execute_load_query_log_event::write_post_header_for_derived(IO_CACHE* file) ...@@ -4659,17 +4719,19 @@ Execute_load_query_log_event::write_post_header_for_derived(IO_CACHE* file)
#ifdef MYSQL_CLIENT #ifdef MYSQL_CLIENT
void Execute_load_query_log_event::print(FILE* file, bool short_form, void Execute_load_query_log_event::print(FILE* file, bool short_form,
my_off_t start_pos,
LAST_EVENT_INFO* last_event_info) 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, void Execute_load_query_log_event::print(FILE* file, bool short_form,
my_off_t start_pos,
LAST_EVENT_INFO* last_event_info, LAST_EVENT_INFO* last_event_info,
const char *local_fname) 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) if (local_fname)
{ {
......
...@@ -589,9 +589,10 @@ public: ...@@ -589,9 +589,10 @@ public:
static Log_event* read_log_event(IO_CACHE* file, static Log_event* read_log_event(IO_CACHE* file,
const Format_description_log_event *description_event); const Format_description_log_event *description_event);
/* print*() functions are used by mysqlbinlog */ /* print*() functions are used by mysqlbinlog */
virtual void print(FILE* file, 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_timestamp(FILE* file, time_t *ts = 0);
void print_header(FILE* file); void print_header(FILE* file, my_off_t start_pos= 0);
#endif #endif
static void *operator new(size_t size) static void *operator new(size_t size)
...@@ -751,8 +752,11 @@ public: ...@@ -751,8 +752,11 @@ public:
uint32 q_len_arg); uint32 q_len_arg);
#endif /* HAVE_REPLICATION */ #endif /* HAVE_REPLICATION */
#else #else
void print_query_header(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0); void print_query_header(FILE* file, bool short_form= 0,
void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 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 #endif
Query_log_event(const char* buf, uint event_len, Query_log_event(const char* buf, uint event_len,
...@@ -806,7 +810,8 @@ public: ...@@ -806,7 +810,8 @@ public:
void pack_info(Protocol* protocol); void pack_info(Protocol* protocol);
int exec_event(struct st_relay_log_info* rli); int exec_event(struct st_relay_log_info* rli);
#else #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 #endif
Slave_log_event(const char* buf, uint event_len); Slave_log_event(const char* buf, uint event_len);
...@@ -894,8 +899,10 @@ public: ...@@ -894,8 +899,10 @@ public:
bool use_rli_only_for_errors); bool use_rli_only_for_errors);
#endif /* HAVE_REPLICATION */ #endif /* HAVE_REPLICATION */
#else #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,
void print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info, bool commented); 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 #endif
/* /*
...@@ -984,7 +991,8 @@ public: ...@@ -984,7 +991,8 @@ public:
#endif /* HAVE_REPLICATION */ #endif /* HAVE_REPLICATION */
#else #else
Start_log_event_v3() {} 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 #endif
Start_log_event_v3(const char* buf, Start_log_event_v3(const char* buf,
...@@ -1079,7 +1087,8 @@ public: ...@@ -1079,7 +1087,8 @@ public:
int exec_event(struct st_relay_log_info* rli); int exec_event(struct st_relay_log_info* rli);
#endif /* HAVE_REPLICATION */ #endif /* HAVE_REPLICATION */
#else #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 #endif
Intvar_log_event(const char* buf, const Format_description_log_event* description_event); Intvar_log_event(const char* buf, const Format_description_log_event* description_event);
...@@ -1120,7 +1129,8 @@ class Rand_log_event: public Log_event ...@@ -1120,7 +1129,8 @@ class Rand_log_event: public Log_event
int exec_event(struct st_relay_log_info* rli); int exec_event(struct st_relay_log_info* rli);
#endif /* HAVE_REPLICATION */ #endif /* HAVE_REPLICATION */
#else #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 #endif
Rand_log_event(const char* buf, const Format_description_log_event* description_event); Rand_log_event(const char* buf, const Format_description_log_event* description_event);
...@@ -1157,7 +1167,8 @@ class Xid_log_event: public Log_event ...@@ -1157,7 +1167,8 @@ class Xid_log_event: public Log_event
int exec_event(struct st_relay_log_info* rli); int exec_event(struct st_relay_log_info* rli);
#endif /* HAVE_REPLICATION */ #endif /* HAVE_REPLICATION */
#else #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 #endif
Xid_log_event(const char* buf, const Format_description_log_event* description_event); Xid_log_event(const char* buf, const Format_description_log_event* description_event);
...@@ -1199,7 +1210,8 @@ public: ...@@ -1199,7 +1210,8 @@ public:
void pack_info(Protocol* protocol); void pack_info(Protocol* protocol);
int exec_event(struct st_relay_log_info* rli); int exec_event(struct st_relay_log_info* rli);
#else #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 #endif
User_var_log_event(const char* buf, const Format_description_log_event* description_event); User_var_log_event(const char* buf, const Format_description_log_event* description_event);
...@@ -1225,7 +1237,8 @@ public: ...@@ -1225,7 +1237,8 @@ public:
{} {}
int exec_event(struct st_relay_log_info* rli); int exec_event(struct st_relay_log_info* rli);
#else #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 #endif
Stop_log_event(const char* buf, const Format_description_log_event* description_event): Stop_log_event(const char* buf, const Format_description_log_event* description_event):
...@@ -1264,7 +1277,8 @@ public: ...@@ -1264,7 +1277,8 @@ public:
int exec_event(struct st_relay_log_info* rli); int exec_event(struct st_relay_log_info* rli);
#endif /* HAVE_REPLICATION */ #endif /* HAVE_REPLICATION */
#else #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 #endif
Rotate_log_event(const char* buf, uint event_len, Rotate_log_event(const char* buf, uint event_len,
...@@ -1317,8 +1331,10 @@ public: ...@@ -1317,8 +1331,10 @@ public:
int exec_event(struct st_relay_log_info* rli); int exec_event(struct st_relay_log_info* rli);
#endif /* HAVE_REPLICATION */ #endif /* HAVE_REPLICATION */
#else #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,
void print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info, bool enable_local); 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 #endif
Create_file_log_event(const char* buf, uint event_len, Create_file_log_event(const char* buf, uint event_len,
...@@ -1385,7 +1401,8 @@ public: ...@@ -1385,7 +1401,8 @@ public:
virtual int get_create_or_append() const; virtual int get_create_or_append() const;
#endif /* HAVE_REPLICATION */ #endif /* HAVE_REPLICATION */
#else #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 #endif
Append_block_log_event(const char* buf, uint event_len, Append_block_log_event(const char* buf, uint event_len,
...@@ -1420,8 +1437,10 @@ public: ...@@ -1420,8 +1437,10 @@ public:
int exec_event(struct st_relay_log_info* rli); int exec_event(struct st_relay_log_info* rli);
#endif /* HAVE_REPLICATION */ #endif /* HAVE_REPLICATION */
#else #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,
void print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info, bool enable_local); 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 #endif
Delete_file_log_event(const char* buf, uint event_len, Delete_file_log_event(const char* buf, uint event_len,
...@@ -1456,7 +1475,8 @@ public: ...@@ -1456,7 +1475,8 @@ public:
int exec_event(struct st_relay_log_info* rli); int exec_event(struct st_relay_log_info* rli);
#endif /* HAVE_REPLICATION */ #endif /* HAVE_REPLICATION */
#else #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 #endif
Execute_load_log_event(const char* buf, uint event_len, Execute_load_log_event(const char* buf, uint event_len,
...@@ -1541,11 +1561,11 @@ public: ...@@ -1541,11 +1561,11 @@ public:
int exec_event(struct st_relay_log_info* rli); int exec_event(struct st_relay_log_info* rli);
#endif /* HAVE_REPLICATION */ #endif /* HAVE_REPLICATION */
#else #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); LAST_EVENT_INFO* last_event_info= 0);
/* Prints the query as LOAD DATA LOCAL and with rewritten filename */ /* Prints the query as LOAD DATA LOCAL and with rewritten filename */
void print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info, void print(FILE* file, bool short_form, my_off_t start_pos,
const char *local_fname); LAST_EVENT_INFO* last_event_info, const char *local_fname);
#endif #endif
Execute_load_query_log_event(const char* buf, uint event_len, Execute_load_query_log_event(const char* buf, uint event_len,
const Format_description_log_event *description_event); const Format_description_log_event *description_event);
...@@ -1574,7 +1594,8 @@ public: ...@@ -1574,7 +1594,8 @@ public:
Log_event(buf, description_event) Log_event(buf, description_event)
{} {}
~Unknown_log_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;} Log_event_type get_type_code() { return UNKNOWN_EVENT;}
bool is_valid() const { return 1; } bool is_valid() const { return 1; }
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment