summaryrefslogtreecommitdiff
path: root/sql/log_event.cc
diff options
context:
space:
mode:
authorunknown <lars@mysql.com>2005-10-19 19:42:14 +0200
committerunknown <lars@mysql.com>2005-10-19 19:42:14 +0200
commite5eab7dd97f6e14da55e5c1cbbb847875df1ff28 (patch)
tree9afbc921773de2330e45bdd55145dfc7f01e7673 /sql/log_event.cc
parent33c972e49d2292c4f7eca1395f1ff21022790c30 (diff)
parente040920f9599ad2c435d0d9dda000b0fc2c42d26 (diff)
downloadmariadb-git-e5eab7dd97f6e14da55e5c1cbbb847875df1ff28.tar.gz
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
Diffstat (limited to 'sql/log_event.cc')
-rw-r--r--sql/log_event.cc246
1 files changed, 152 insertions, 94 deletions
diff --git a/sql/log_event.cc b/sql/log_event.cc
index 2ec63febca4..2390ebd4214 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -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