summaryrefslogtreecommitdiff
path: root/client/mysqlbinlog.cc
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2015-11-16 15:41:09 +0100
committerOleksandr Byelkin <sanja@mariadb.com>2015-11-17 14:42:21 +0100
commit19d99faf1e480f47229eb7fcb64643f7ed91d583 (patch)
treefd7e74aaa66b964d302ef1b0e6f5b445b07c6fbb /client/mysqlbinlog.cc
parentc0216f1d02e63686f986fa8f352fdf6de61249a7 (diff)
downloadmariadb-git-19d99faf1e480f47229eb7fcb64643f7ed91d583.tar.gz
MDEV-8734 mysqlbinlog --start-position isn't bigint
fix it only for local operations.
Diffstat (limited to 'client/mysqlbinlog.cc')
-rw-r--r--client/mysqlbinlog.cc16
1 files changed, 14 insertions, 2 deletions
diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc
index 587e5389860..1284f520ea1 100644
--- a/client/mysqlbinlog.cc
+++ b/client/mysqlbinlog.cc
@@ -1405,8 +1405,11 @@ static struct my_option my_options[] =
"passed on the command line.",
&start_position, &start_position, 0, GET_ULL,
REQUIRED_ARG, BIN_LOG_HEADER_SIZE, BIN_LOG_HEADER_SIZE,
- /* COM_BINLOG_DUMP accepts only 4 bytes for the position */
- (ulonglong)(~(uint32)0), 0, 0, 0},
+ /*
+ COM_BINLOG_DUMP accepts only 4 bytes for the position
+ so remote log reading has lower limit.
+ */
+ (ulonglong)(0xffffffffffffffffULL), 0, 0, 0},
{"stop-datetime", OPT_STOP_DATETIME,
"Stop reading the binlog at first event having a datetime equal or "
"posterior to the argument; the argument must be a date and time "
@@ -1721,6 +1724,14 @@ static int parse_args(int *argc, char*** argv)
my_end_arg= MY_CHECK_ERROR | MY_GIVE_INFO;
if (debug_check_flag)
my_end_arg= MY_CHECK_ERROR;
+ if (start_position > UINT_MAX32 && remote_opt)
+ {
+ /* Here we just emulate old behaviour of option limit handling */
+ fprintf(stderr, "Warning: option 'start-position': unsigned value %llu "
+ "adjusted to 4294967295 (limitation of the client-server protocol)",
+ start_position);
+ start_position= UINT_MAX32;
+ }
return 0;
}
@@ -1953,6 +1964,7 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
COM_BINLOG_DUMP accepts only 4 bytes for the position, so we are forced to
cast to uint32.
*/
+ DBUG_ASSERT(start_position <= UINT_MAX32);
int4store(buf, (uint32)start_position);
if (!opt_skip_annotate_row_events)
binlog_flags|= BINLOG_SEND_ANNOTATE_ROWS_EVENT;