Commit e5eab7dd authored by unknown's avatar unknown

Merge mysql.com:/users/lthalmann/bkroot/mysql-5.0

into  mysql.com:/users/lthalmann/bk/mysql-5.0-hexdump


client/mysqlbinlog.cc:
  Auto merged
sql/log_event.cc:
  Auto merged
sql/log_event.h:
  Auto merged
parents 33c972e4 e040920f
......@@ -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;
......@@ -489,12 +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");
print_event_info->short_form= short_form;
/*
Format events are not concerned by --offset and such, we always need to
......@@ -522,12 +524,17 @@ 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));
if (!opt_hexdump)
print_event_info->hexdump_from= 0; /* Disabled */
else
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, short_form, last_event_info);
ev->print(result_file, print_event_info);
break;
case CREATE_FILE_EVENT:
{
......@@ -547,7 +554,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, print_event_info, TRUE);
// If this binlog is not 3.23 ; why this test??
if (description_event->binlog_version >= 3)
{
......@@ -558,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, 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, short_form, 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);
/*
......@@ -574,7 +582,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, print_event_info, TRUE);
my_free((char*)ce->fname,MYF(MY_WME));
delete ce;
}
......@@ -586,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, 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
......@@ -596,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, 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:
......@@ -613,7 +622,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, print_event_info, fname);
my_free(fname, MYF(MY_WME));
}
else
......@@ -622,7 +631,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, print_event_info);
}
}
......@@ -669,6 +678,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 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,
......@@ -1002,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;
ulong len;
uint logname_len;
NET* net;
......@@ -1125,7 +1137,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;
......@@ -1144,7 +1156,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);
......@@ -1273,7 +1285,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;
......@@ -1345,7 +1357,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;
......
......@@ -696,7 +696,6 @@ failed my_b_read"));
*/
DBUG_RETURN(0);
}
uint data_len = uint4korr(head + EVENT_LEN_OFFSET);
char *buf= 0;
const char *error= 0;
......@@ -876,15 +875,76 @@ 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, PRINT_EVENT_INFO* print_event_info)
{
char llbuff[22];
my_off_t hexdump_from= print_event_info->hexdump_from;
fputc('#', file);
print_timestamp(file);
fprintf(file, " server id %d end_log_pos %s ", server_id,
llstr(log_pos,llbuff));
llstr(log_pos,llbuff));
/* mysqlbinlog --hexdump */
if (print_event_info->hexdump_from)
{
fprintf(file, "\n");
uchar *ptr= (uchar*)temp_buf;
my_off_t size=
uint4korr(ptr + EVENT_LEN_OFFSET) - LOG_EVENT_MINIMAL_HEADER_LEN;
my_off_t i;
/* 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};
/* Pretty-print event common header if header is exactly 19 bytes */
if (print_event_info->common_header_len == LOG_EVENT_MINIMAL_HEADER_LEN)
{
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++)
{
my_snprintf(h, 4, "%02x ", *ptr);
h += 3;
*c++= my_isalnum(&my_charset_bin, *ptr) ? *ptr : '.';
if (i % 16 == 15)
{
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';
/* Non-full last line */
if (hex_string[0]) {
printf("# %8.8lx %-48.48s |%s|\n# ",
hexdump_from + (i & 0xfffffff0), hex_string, char_string);
}
}
}
/*
Log_event::print_timestamp()
*/
......@@ -1367,25 +1427,25 @@ 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,
LAST_EVENT_INFO* last_event_info)
void Query_log_event::print_query_header(FILE* file,
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 (!short_form)
if (!print_event_info->short_form)
{
print_header(file);
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);
}
......@@ -1405,12 +1465,12 @@ void Query_log_event::print_query_header(FILE* file, bool short_form,
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 */
}
......@@ -1425,7 +1485,7 @@ void Query_log_event::print_query_header(FILE* file, bool short_form,
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;
}
}
......@@ -1444,37 +1504,37 @@ void Query_log_event::print_query_header(FILE* file, bool short_form,
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,"
......@@ -1484,24 +1544,23 @@ void Query_log_event::print_query_header(FILE* file, bool short_form,
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, bool short_form,
LAST_EVENT_INFO* last_event_info)
void Query_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
{
print_query_header(file, short_form, 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);
}
......@@ -1799,11 +1858,11 @@ 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, PRINT_EVENT_INFO* print_event_info)
{
if (!short_form)
if (!print_event_info->short_form)
{
print_header(file);
print_header(file, print_event_info);
fprintf(file, "\tStart: binlog v %d, server v %s created ", binlog_version,
server_version);
print_timestamp(file);
......@@ -2527,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, bool short_form, LAST_EVENT_INFO* last_event_info)
void Load_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
{
print(file, short_form, last_event_info, 0);
print(file, print_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, PRINT_EVENT_INFO* print_event_info,
bool commented)
{
DBUG_ENTER("Load_log_event::print");
if (!short_form)
if (!print_event_info->short_form)
{
print_header(file);
print_header(file, print_event_info);
fprintf(file, "\tQuery\tthread_id=%ld\texec_time=%ld\n",
thread_id, exec_time);
}
......@@ -2553,9 +2612,9 @@ void Load_log_event::print(FILE* file, bool short_form, LAST_EVENT_INFO* last_ev
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)
......@@ -2944,13 +3003,13 @@ 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, PRINT_EVENT_INFO* print_event_info)
{
char buf[22];
if (short_form)
if (print_event_info->short_form)
return;
print_header(file);
print_header(file, print_event_info);
fprintf(file, "\tRotate to ");
if (new_log_ident)
my_fwrite(file, (byte*) new_log_ident, (uint)ident_len,
......@@ -3168,16 +3227,15 @@ bool Intvar_log_event::write(IO_CACHE* file)
*/
#ifdef MYSQL_CLIENT
void Intvar_log_event::print(FILE* file, bool short_form,
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 (!short_form)
if (!print_event_info->short_form)
{
print_header(file);
print_header(file, print_event_info);
fprintf(file, "\tIntvar\n");
}
......@@ -3258,12 +3316,12 @@ 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, PRINT_EVENT_INFO* print_event_info)
{
char llbuff[22],llbuff2[22];
if (!short_form)
if (!print_event_info->short_form)
{
print_header(file);
print_header(file, print_event_info);
fprintf(file, "\tRand\n");
}
fprintf(file, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s;\n",
......@@ -3328,14 +3386,14 @@ 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, PRINT_EVENT_INFO* print_event_info)
{
if (!short_form)
if (!print_event_info->short_form)
{
char buf[64];
longlong10_to_str(xid, buf, 10);
print_header(file);
print_header(file, print_event_info);
fprintf(file, "\tXid = %s\n", buf);
fflush(file);
}
......@@ -3526,11 +3584,11 @@ 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, PRINT_EVENT_INFO* print_event_info)
{
if (!short_form)
if (!print_event_info->short_form)
{
print_header(file);
print_header(file, print_event_info);
fprintf(file, "\tUser_var\n");
}
......@@ -3701,11 +3759,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, LAST_EVENT_INFO* last_event_info)
void Unknown_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
{
if (short_form)
if (print_event_info->short_form)
return;
print_header(file);
print_header(file, print_event_info);
fputc('\n', file);
fprintf(file, "# %s", "Unknown event\n");
}
......@@ -3772,12 +3830,12 @@ 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, PRINT_EVENT_INFO* print_event_info)
{
char llbuff[22];
if (short_form)
if (print_event_info->short_form)
return;
print_header(file);
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",
......@@ -3857,12 +3915,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, LAST_EVENT_INFO* last_event_info)
void Stop_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
{
if (short_form)
if (print_event_info->short_form)
return;
print_header(file);
print_header(file, print_event_info);
fprintf(file, "\tStop\n");
fflush(file);
}
......@@ -4036,19 +4094,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,
LAST_EVENT_INFO* last_event_info, bool enable_local)
void Create_file_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info,
bool enable_local)
{
if (short_form)
if (print_event_info->short_form)
{
if (enable_local && check_fname_outside_temp_buf())
Load_log_event::print(file, 1, last_event_info);
Load_log_event::print(file, print_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, print_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.
......@@ -4060,10 +4119,9 @@ void Create_file_log_event::print(FILE* file, bool short_form,
}
void Create_file_log_event::print(FILE* file, bool short_form,
LAST_EVENT_INFO* last_event_info)
void Create_file_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
{
print(file,short_form,last_event_info,0);
print(file, print_event_info, 0);
}
#endif /* MYSQL_CLIENT */
......@@ -4223,12 +4281,12 @@ bool Append_block_log_event::write(IO_CACHE* file)
*/
#ifdef MYSQL_CLIENT
void Append_block_log_event::print(FILE* file, bool short_form,
LAST_EVENT_INFO* last_event_info)
void Append_block_log_event::print(FILE* file,
PRINT_EVENT_INFO* print_event_info)
{
if (short_form)
if (print_event_info->short_form)
return;
print_header(file);
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);
......@@ -4367,12 +4425,12 @@ bool Delete_file_log_event::write(IO_CACHE* file)
*/
#ifdef MYSQL_CLIENT
void Delete_file_log_event::print(FILE* file, bool short_form,
LAST_EVENT_INFO* last_event_info)
void Delete_file_log_event::print(FILE* file,
PRINT_EVENT_INFO* print_event_info)
{
if (short_form)
if (print_event_info->short_form)
return;
print_header(file);
print_header(file, print_event_info);
fputc('\n', file);
fprintf(file, "#Delete_file: file_id=%u\n", file_id);
}
......@@ -4463,12 +4521,12 @@ bool Execute_load_log_event::write(IO_CACHE* file)
*/
#ifdef MYSQL_CLIENT
void Execute_load_log_event::print(FILE* file, bool short_form,
LAST_EVENT_INFO* last_event_info)
void Execute_load_log_event::print(FILE* file,
PRINT_EVENT_INFO* print_event_info)
{
if (short_form)
if (print_event_info->short_form)
return;
print_header(file);
print_header(file, print_event_info);
fputc('\n', file);
fprintf(file, "#Exec_load: file_id=%d\n",
file_id);
......@@ -4675,18 +4733,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,
LAST_EVENT_INFO* last_event_info)
void Execute_load_query_log_event::print(FILE* file,
PRINT_EVENT_INFO* print_event_info)
{
print(file, short_form, last_event_info, 0);
print(file, print_event_info, 0);
}
void Execute_load_query_log_event::print(FILE* file, bool short_form,
LAST_EVENT_INFO* last_event_info,
void Execute_load_query_log_event::print(FILE* file,
PRINT_EVENT_INFO* print_event_info,
const char *local_fname)
{
print_query_header(file, short_form, last_event_info);
print_query_header(file, print_event_info);
if (local_fname)
{
......@@ -4707,7 +4765,7 @@ void Execute_load_query_log_event::print(FILE* file, bool short_form,
fprintf(file, ";\n");
}
if (!short_form)
if (!print_event_info->short_form)
fprintf(file, "# file_id: %d \n", file_id);
}
#endif
......
......@@ -451,12 +451,23 @@ 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,
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
{
/*
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;
......@@ -467,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.
*/
......@@ -480,7 +491,13 @@ typedef struct st_last_event_info
bzero(charset, sizeof(charset));
bzero(time_zone_str, sizeof(time_zone_str));
}
} LAST_EVENT_INFO;
/* Settings on how to print the events */
bool short_form;
my_off_t hexdump_from;
uint8 common_header_len;
} PRINT_EVENT_INFO;
#endif
......@@ -589,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, bool short_form = 0, 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);
void print_header(FILE* file, PRINT_EVENT_INFO* print_event_info= 0);
#endif
static void *operator new(size_t size)
......@@ -751,8 +768,8 @@ 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, 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,
......@@ -806,7 +823,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, 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);
......@@ -894,8 +911,8 @@ 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, PRINT_EVENT_INFO* print_event_info = 0);
void print(FILE* file, PRINT_EVENT_INFO* print_event_info, bool commented);
#endif
/*
......@@ -984,7 +1001,7 @@ 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, PRINT_EVENT_INFO* print_event_info= 0);
#endif
Start_log_event_v3(const char* buf,
......@@ -1079,7 +1096,7 @@ 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, PRINT_EVENT_INFO* print_event_info= 0);
#endif
Intvar_log_event(const char* buf, const Format_description_log_event* description_event);
......@@ -1120,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, bool short_form = 0, 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);
......@@ -1157,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, bool short_form = 0, 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);
......@@ -1199,7 +1216,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, 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);
......@@ -1225,7 +1242,7 @@ 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, PRINT_EVENT_INFO* print_event_info= 0);
#endif
Stop_log_event(const char* buf, const Format_description_log_event* description_event):
......@@ -1263,7 +1280,7 @@ 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, PRINT_EVENT_INFO* print_event_info= 0);
#endif
Rotate_log_event(const char* buf, uint event_len,
......@@ -1316,8 +1333,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, 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,
......@@ -1384,7 +1401,7 @@ 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, PRINT_EVENT_INFO* print_event_info= 0);
#endif
Append_block_log_event(const char* buf, uint event_len,
......@@ -1419,8 +1436,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, 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,
......@@ -1455,7 +1472,7 @@ 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, PRINT_EVENT_INFO* print_event_info= 0);
#endif
Execute_load_log_event(const char* buf, uint event_len,
......@@ -1540,11 +1557,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, PRINT_EVENT_INFO* print_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, PRINT_EVENT_INFO* print_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);
......@@ -1573,7 +1589,7 @@ 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, PRINT_EVENT_INFO* print_event_info= 0);
Log_event_type get_type_code() { return UNKNOWN_EVENT;}
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