mariadb/sql/Attic/mybinlogdump.cc
bk@work.mysql.com f4c589ff6c Import changeset
2000-07-31 21:29:14 +02:00

138 lines
2.4 KiB
C++

#undef MYSQL_SERVER
#include "log_event.h"
#include <getopt.h>
#include <config.h>
static const char* default_dbug_option = "d:t:o,/tmp/mybinlogdump.trace";
static struct option long_options[] =
{
{"short-form", no_argument, 0, 's'},
{"offset", required_argument,0, 'o'},
{"help", no_argument, 0, 'h'},
#ifndef DBUG_OFF
{"debug", required_argument, 0, '#'}
#endif
};
static bool short_form = 0;
static int offset = 0;
static int parse_args(int argc, char** argv);
static void dump_log_entries();
static void die(char* fmt, ...);
static void die(char* fmt, ...)
{
va_list args;
va_start(args, fmt);
fprintf(stderr, "ERROR: ");
vfprintf(stderr, fmt, args);
fprintf(stderr, "\n");
va_end(args);
exit(1);
}
static void usage()
{
fprintf(stderr, "Usage: mybinlogdump [options] log-files\n");
fprintf(stderr, "Options:\n\
-s,--short-form - just show the queries, no extra info\n\
-o,--offset=N - skip the first N entries\n\
-h,--help - this message\n");
}
static int parse_args(int *argc, char*** argv)
{
int c, opt_index = 0;
while((c = getopt_long(*argc, *argv, "so:#:h", long_options,
&opt_index)) != EOF)
{
switch(c)
{
#ifndef DBUG_OFF
case '#':
DBUG_PUSH(optarg ? optarg : default_dbug_option);
break;
#endif
case 's':
short_form = 1;
break;
case 'o':
offset = atoi(optarg);
break;
case 'h':
default:
usage();
exit(0);
}
}
(*argc)-=optind;
(*argv)+=optind;
return 0;
}
static void dump_log_entries(const char* logname)
{
FILE* file;
int rec_count = 0;
if(logname && logname[0] != '-')
file = my_fopen(logname, O_RDONLY, MYF(MY_WME));
else
file = stdin;
if(!file)
die("Could not open log file %s", logname);
while(1)
{
Log_event* ev = Log_event::read_log_event(file);
if(!ev)
if(!feof(file))
die("Could not read entry at offset %ld : Error in log format or \
read error",
my_ftell(file, MYF(MY_WME)));
else
break;
if(rec_count >= offset)
ev->print(stdout, short_form);
rec_count++;
delete ev;
}
my_fclose(file, MYF(MY_WME));
}
int main(int argc, char** argv)
{
MY_INIT(argv[0]);
parse_args(&argc, (char***)&argv);
if(!argc)
{
usage();
return -1;
}
while(--argc >= 0)
{
dump_log_entries(*(argv++));
}
return 0;
}