mirror of
https://github.com/MariaDB/server.git
synced 2025-11-12 08:46:16 +01:00
This fixed the MySQL bug# 20338 about misuse of double underscore prefix __WIN__, which was old MySQL's idea of identifying Windows Replace it by _WIN32 standard symbol for targeting Windows OS (both 32 and 64 bit) Not that connect storage engine is not fixed in this patch (must be fixed in "upstream" branch)
192 lines
5.3 KiB
C
192 lines
5.3 KiB
C
/* Copyright (C) 2007 MySQL AB & Sanja Belkin
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
|
|
|
|
#include "maria_def.h"
|
|
#include <my_getopt.h>
|
|
extern void translog_example_table_init();
|
|
static const char *load_default_groups[]= { "aria_dump_log",0 };
|
|
static void get_options(int *argc,char * * *argv);
|
|
#ifndef DBUG_OFF
|
|
#if defined(_WIN32)
|
|
const char *default_dbug_option= "d:t:i:O,\\aria_dump_log.trace";
|
|
#else
|
|
const char *default_dbug_option= "d:t:i:o,/tmp/aria_dump_log.trace";
|
|
#endif
|
|
#endif
|
|
static ulonglong opt_offset;
|
|
static ulong opt_pages;
|
|
static const char *opt_file= NULL;
|
|
static File handler= -1;
|
|
static my_bool opt_unit= 0;
|
|
static struct my_option my_long_options[] =
|
|
{
|
|
#ifdef IMPLTMENTED
|
|
{"body", 'b',
|
|
"Print chunk body dump",
|
|
(uchar **) &opt_body, (uchar **) &opt_body, 0,
|
|
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
|
#endif
|
|
#ifndef DBUG_OFF
|
|
{"debug", '#', "Output debug log. Often the argument is 'd:t:o,filename'.",
|
|
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
|
#endif
|
|
{"file", 'f', "Path to file which will be read",
|
|
(uchar**) &opt_file, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
|
{"help", '?', "Display this help and exit.",
|
|
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
|
{ "offset", 'o', "Start reading log from this offset",
|
|
(uchar**) &opt_offset, (uchar**) &opt_offset,
|
|
0, GET_ULL, REQUIRED_ARG, 0, 0, ~(longlong) 0, 0, 0, 0 },
|
|
{ "pages", 'n', "Number of pages to read",
|
|
(uchar**) &opt_pages, (uchar**) &opt_pages, 0,
|
|
GET_ULONG, REQUIRED_ARG, (long) ~(ulong) 0,
|
|
(long) 1, (long) ~(ulong) 0, (long) 0,
|
|
(long) 1, 0},
|
|
{"unit-test", 'U',
|
|
"Use unit test record table (for logs created by unittests",
|
|
(uchar **) &opt_unit, (uchar **) &opt_unit, 0,
|
|
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
|
{"version", 'V', "Print version and exit.",
|
|
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
|
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
|
};
|
|
|
|
|
|
static void print_version(void)
|
|
{
|
|
printf("%s Ver 1.0 for %s on %s\n",
|
|
my_progname_short, SYSTEM_TYPE, MACHINE_TYPE);
|
|
}
|
|
|
|
|
|
static void usage(void)
|
|
{
|
|
print_version();
|
|
puts("Copyright (C) 2008 MySQL AB");
|
|
puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,");
|
|
puts("and you are welcome to modify and redistribute it under the GPL license\n");
|
|
|
|
puts("Dump content of aria log pages.");
|
|
printf("\nUsage: %s -f file OPTIONS\n", my_progname_short);
|
|
my_print_help(my_long_options);
|
|
print_defaults("my", load_default_groups);
|
|
my_print_variables(my_long_options);
|
|
}
|
|
|
|
|
|
static my_bool
|
|
get_one_option(const struct my_option *opt,
|
|
const char *argument __attribute__((unused)),
|
|
const char *filename __attribute__((unused)))
|
|
{
|
|
switch (opt->id) {
|
|
case '?':
|
|
usage();
|
|
exit(0);
|
|
case 'V':
|
|
print_version();
|
|
exit(0);
|
|
#ifndef DBUG_OFF
|
|
case '#':
|
|
DBUG_SET_INITIAL(argument ? argument : default_dbug_option);
|
|
break;
|
|
#endif
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
static void get_options(int *argc,char ***argv)
|
|
{
|
|
int ho_error;
|
|
|
|
if ((ho_error=handle_options(argc, argv, my_long_options, get_one_option)))
|
|
exit(ho_error);
|
|
|
|
if (opt_file == NULL)
|
|
{
|
|
usage();
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
@brief maria_dump_log main function.
|
|
*/
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
char **default_argv;
|
|
uchar buffer[TRANSLOG_PAGE_SIZE];
|
|
MY_INIT(argv[0]);
|
|
|
|
load_defaults_or_exit("my", load_default_groups, &argc, &argv);
|
|
default_argv= argv;
|
|
get_options(&argc, &argv);
|
|
|
|
if (opt_unit)
|
|
translog_example_table_init();
|
|
else
|
|
translog_table_init();
|
|
translog_fill_overhead_table();
|
|
|
|
maria_data_root= ".";
|
|
|
|
if ((handler= my_open(opt_file, O_RDONLY, MYF(MY_WME))) < 0)
|
|
{
|
|
fprintf(stderr, "Can't open file: '%s' errno: %d\n",
|
|
opt_file, my_errno);
|
|
goto err;
|
|
}
|
|
if (my_seek(handler, opt_offset, SEEK_SET, MYF(MY_WME)) !=
|
|
opt_offset)
|
|
{
|
|
fprintf(stderr, "Can't set position %lld file: '%s' errno: %d\n",
|
|
opt_offset, opt_file, my_errno);
|
|
goto err;
|
|
}
|
|
for (;
|
|
opt_pages;
|
|
opt_offset+= TRANSLOG_PAGE_SIZE, opt_pages--)
|
|
{
|
|
if (my_pread(handler, buffer, TRANSLOG_PAGE_SIZE, opt_offset,
|
|
MYF(MY_NABP)))
|
|
{
|
|
if (my_errno == HA_ERR_FILE_TOO_SHORT)
|
|
goto end;
|
|
fprintf(stderr, "Can't read page at position %lld file: '%s' "
|
|
"errno: %d\n", opt_offset, opt_file, my_errno);
|
|
goto err;
|
|
}
|
|
printf("Page by offset %llu (0x%llx)\n", opt_offset, opt_offset);
|
|
dump_page(buffer, handler);
|
|
}
|
|
|
|
end:
|
|
my_close(handler, MYF(0));
|
|
free_defaults(default_argv);
|
|
exit(0);
|
|
return 0; /* No compiler warning */
|
|
|
|
err:
|
|
my_close(handler, MYF(0));
|
|
fprintf(stderr, "%s: FAILED\n", my_progname_short);
|
|
free_defaults(default_argv);
|
|
exit(1);
|
|
}
|
|
|
|
#include "ma_check_standalone.h"
|
|
|