mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug #50618 Please allow 'sleep $variable' in mtr
Made mtr's sleep function understand $variables A few fixes since previous patch, added tests
This commit is contained in:
@ -491,6 +491,8 @@ void free_replace();
|
|||||||
void do_get_replace_regex(struct st_command *command);
|
void do_get_replace_regex(struct st_command *command);
|
||||||
void free_replace_regex();
|
void free_replace_regex();
|
||||||
|
|
||||||
|
/* Used by sleep */
|
||||||
|
void check_eol_junk_line(const char *eol);
|
||||||
|
|
||||||
void free_all_replace(){
|
void free_all_replace(){
|
||||||
free_replace();
|
free_replace();
|
||||||
@ -1045,7 +1047,7 @@ void check_command_args(struct st_command *command,
|
|||||||
}
|
}
|
||||||
/* Check for too many arguments passed */
|
/* Check for too many arguments passed */
|
||||||
ptr= command->last_argument;
|
ptr= command->last_argument;
|
||||||
while(ptr <= command->end)
|
while(ptr <= command->end && *ptr != '#')
|
||||||
{
|
{
|
||||||
if (*ptr && *ptr != ' ')
|
if (*ptr && *ptr != ' ')
|
||||||
die("Extra argument '%s' passed to '%.*s'",
|
die("Extra argument '%s' passed to '%.*s'",
|
||||||
@ -4211,10 +4213,19 @@ int do_disable_rpl_parse(struct st_command *command __attribute__((unused)))
|
|||||||
int do_sleep(struct st_command *command, my_bool real_sleep)
|
int do_sleep(struct st_command *command, my_bool real_sleep)
|
||||||
{
|
{
|
||||||
int error= 0;
|
int error= 0;
|
||||||
char *p= command->first_argument;
|
char *sleep_start, *sleep_end;
|
||||||
char *sleep_start, *sleep_end= command->end;
|
|
||||||
double sleep_val;
|
double sleep_val;
|
||||||
|
char *p;
|
||||||
|
static DYNAMIC_STRING ds_sleep;
|
||||||
|
const struct command_arg sleep_args[] = {
|
||||||
|
{ "sleep_delay", ARG_STRING, TRUE, &ds_sleep, "Number of seconds to sleep." }
|
||||||
|
};
|
||||||
|
check_command_args(command, command->first_argument, sleep_args,
|
||||||
|
sizeof(sleep_args)/sizeof(struct command_arg),
|
||||||
|
' ');
|
||||||
|
|
||||||
|
p= ds_sleep.str;
|
||||||
|
sleep_end= ds_sleep.str + ds_sleep.length;
|
||||||
while (my_isspace(charset_info, *p))
|
while (my_isspace(charset_info, *p))
|
||||||
p++;
|
p++;
|
||||||
if (!*p)
|
if (!*p)
|
||||||
@ -4223,11 +4234,13 @@ int do_sleep(struct st_command *command, my_bool real_sleep)
|
|||||||
/* Check that arg starts with a digit, not handled by my_strtod */
|
/* Check that arg starts with a digit, not handled by my_strtod */
|
||||||
if (!my_isdigit(charset_info, *sleep_start))
|
if (!my_isdigit(charset_info, *sleep_start))
|
||||||
die("Invalid argument to %.*s \"%s\"", command->first_word_len,
|
die("Invalid argument to %.*s \"%s\"", command->first_word_len,
|
||||||
command->query,command->first_argument);
|
command->query, sleep_start);
|
||||||
sleep_val= my_strtod(sleep_start, &sleep_end, &error);
|
sleep_val= my_strtod(sleep_start, &sleep_end, &error);
|
||||||
|
check_eol_junk_line(sleep_end);
|
||||||
if (error)
|
if (error)
|
||||||
die("Invalid argument to %.*s \"%s\"", command->first_word_len,
|
die("Invalid argument to %.*s \"%s\"", command->first_word_len,
|
||||||
command->query, command->first_argument);
|
command->query, command->first_argument);
|
||||||
|
dynstr_free(&ds_sleep);
|
||||||
|
|
||||||
/* Fixed sleep time selected by --sleep option */
|
/* Fixed sleep time selected by --sleep option */
|
||||||
if (opt_sleep >= 0 && !real_sleep)
|
if (opt_sleep >= 0 && !real_sleep)
|
||||||
@ -4236,7 +4249,6 @@ int do_sleep(struct st_command *command, my_bool real_sleep)
|
|||||||
DBUG_PRINT("info", ("sleep_val: %f", sleep_val));
|
DBUG_PRINT("info", ("sleep_val: %f", sleep_val));
|
||||||
if (sleep_val)
|
if (sleep_val)
|
||||||
my_sleep((ulong) (sleep_val * 1000000L));
|
my_sleep((ulong) (sleep_val * 1000000L));
|
||||||
command->last_argument= sleep_end;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,9 +147,10 @@ hello
|
|||||||
hello
|
hello
|
||||||
;;;;;;;;
|
;;;;;;;;
|
||||||
# MySQL: -- The
|
# MySQL: -- The
|
||||||
mysqltest: At line 1: End of line junk detected: "6"
|
mysqltest: At line 1: Extra argument '6' passed to 'sleep'
|
||||||
mysqltest: At line 1: End of line junk detected: "6"
|
mysqltest: At line 1: Extra argument '6' passed to 'sleep'
|
||||||
mysqltest: At line 1: Missing delimiter
|
mysqltest: At line 1: Extra argument 'A comment
|
||||||
|
show status' passed to 'sleep'
|
||||||
mysqltest: At line 1: End of line junk detected: "sleep 7
|
mysqltest: At line 1: End of line junk detected: "sleep 7
|
||||||
# Another comment
|
# Another comment
|
||||||
"
|
"
|
||||||
@ -354,8 +355,10 @@ here is the sourced script
|
|||||||
here is the sourced script
|
here is the sourced script
|
||||||
"hello"
|
"hello"
|
||||||
"hello"
|
"hello"
|
||||||
mysqltest: At line 1: Missing argument to sleep
|
mysqltest: At line 2: Invalid argument to sleep "xyz"
|
||||||
mysqltest: At line 1: Missing argument to real_sleep
|
mysqltest: At line 2: Invalid argument to real_sleep "xyz"
|
||||||
|
mysqltest: At line 1: Missing required argument 'sleep_delay' to command 'sleep'
|
||||||
|
mysqltest: At line 1: Missing required argument 'sleep_delay' to command 'real_sleep'
|
||||||
mysqltest: At line 1: Invalid argument to sleep "abc"
|
mysqltest: At line 1: Invalid argument to sleep "abc"
|
||||||
mysqltest: At line 1: Invalid argument to real_sleep "abc"
|
mysqltest: At line 1: Invalid argument to real_sleep "abc"
|
||||||
1
|
1
|
||||||
|
@ -920,6 +920,28 @@ sleep 0.5;
|
|||||||
sleep 1;
|
sleep 1;
|
||||||
real_sleep 1;
|
real_sleep 1;
|
||||||
|
|
||||||
|
# Parameter from variable, legal and illegal
|
||||||
|
let $sleep_var= 0.1;
|
||||||
|
sleep $sleep_var;
|
||||||
|
let $sleep_var= 1;
|
||||||
|
--real_sleep $sleep_var
|
||||||
|
|
||||||
|
--write_file $MYSQL_TMP_DIR/sleep.inc
|
||||||
|
let $sleep_var= xyz;
|
||||||
|
--sleep $sleep_var
|
||||||
|
EOF
|
||||||
|
--error 1
|
||||||
|
--exec $MYSQL_TEST < $MYSQL_TMP_DIR/sleep.inc 2>&1
|
||||||
|
--remove_file $MYSQL_TMP_DIR/sleep.inc
|
||||||
|
|
||||||
|
--write_file $MYSQL_TMP_DIR/sleep.inc
|
||||||
|
let $sleep_var= xyz;
|
||||||
|
real_sleep $sleep_var;
|
||||||
|
EOF
|
||||||
|
--error 1
|
||||||
|
--exec $MYSQL_TEST < $MYSQL_TMP_DIR/sleep.inc 2>&1
|
||||||
|
--remove_file $MYSQL_TMP_DIR/sleep.inc
|
||||||
|
|
||||||
# Missing parameter
|
# Missing parameter
|
||||||
--error 1
|
--error 1
|
||||||
--exec echo "sleep ;" | $MYSQL_TEST 2>&1
|
--exec echo "sleep ;" | $MYSQL_TEST 2>&1
|
||||||
|
Reference in New Issue
Block a user