mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
merge from 5.5-mtr
This commit is contained in:
@ -112,6 +112,7 @@ static my_bool parsing_disabled= 0;
|
|||||||
static my_bool display_result_vertically= FALSE, display_result_lower= FALSE,
|
static my_bool display_result_vertically= FALSE, display_result_lower= FALSE,
|
||||||
display_metadata= FALSE, display_result_sorted= FALSE;
|
display_metadata= FALSE, display_result_sorted= FALSE;
|
||||||
static my_bool disable_query_log= 0, disable_result_log= 0;
|
static my_bool disable_query_log= 0, disable_result_log= 0;
|
||||||
|
static my_bool disable_connect_log= 1;
|
||||||
static my_bool disable_warnings= 0;
|
static my_bool disable_warnings= 0;
|
||||||
static my_bool disable_info= 1;
|
static my_bool disable_info= 1;
|
||||||
static my_bool abort_on_error= 1;
|
static my_bool abort_on_error= 1;
|
||||||
@ -227,8 +228,9 @@ typedef struct
|
|||||||
int str_val_len;
|
int str_val_len;
|
||||||
int int_val;
|
int int_val;
|
||||||
int alloced_len;
|
int alloced_len;
|
||||||
int int_dirty; /* do not update string if int is updated until first read */
|
bool int_dirty; /* do not update string if int is updated until first read */
|
||||||
int alloced;
|
bool is_int;
|
||||||
|
bool alloced;
|
||||||
} VAR;
|
} VAR;
|
||||||
|
|
||||||
/*Perl/shell-like variable registers */
|
/*Perl/shell-like variable registers */
|
||||||
@ -286,6 +288,7 @@ enum enum_commands {
|
|||||||
Q_EVAL_RESULT,
|
Q_EVAL_RESULT,
|
||||||
Q_ENABLE_QUERY_LOG, Q_DISABLE_QUERY_LOG,
|
Q_ENABLE_QUERY_LOG, Q_DISABLE_QUERY_LOG,
|
||||||
Q_ENABLE_RESULT_LOG, Q_DISABLE_RESULT_LOG,
|
Q_ENABLE_RESULT_LOG, Q_DISABLE_RESULT_LOG,
|
||||||
|
Q_ENABLE_CONNECT_LOG, Q_DISABLE_CONNECT_LOG,
|
||||||
Q_WAIT_FOR_SLAVE_TO_STOP,
|
Q_WAIT_FOR_SLAVE_TO_STOP,
|
||||||
Q_ENABLE_WARNINGS, Q_DISABLE_WARNINGS,
|
Q_ENABLE_WARNINGS, Q_DISABLE_WARNINGS,
|
||||||
Q_ENABLE_INFO, Q_DISABLE_INFO,
|
Q_ENABLE_INFO, Q_DISABLE_INFO,
|
||||||
@ -351,6 +354,8 @@ const char *command_names[]=
|
|||||||
/* Enable/disable that the _result_ from a query is logged to result file */
|
/* Enable/disable that the _result_ from a query is logged to result file */
|
||||||
"enable_result_log",
|
"enable_result_log",
|
||||||
"disable_result_log",
|
"disable_result_log",
|
||||||
|
"enable_connect_log",
|
||||||
|
"disable_connect_log",
|
||||||
"wait_for_slave_to_stop",
|
"wait_for_slave_to_stop",
|
||||||
"enable_warnings",
|
"enable_warnings",
|
||||||
"disable_warnings",
|
"disable_warnings",
|
||||||
@ -763,7 +768,6 @@ end_thread:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void wait_query_thread_done(struct st_connection *con)
|
static void wait_query_thread_done(struct st_connection *con)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(con->tid);
|
DBUG_ASSERT(con->tid);
|
||||||
@ -805,7 +809,6 @@ static int do_send_query(struct st_connection *cn, const char *q, int q_len)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int do_read_query_result(struct st_connection *cn)
|
static int do_read_query_result(struct st_connection *cn)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(cn->tid);
|
DBUG_ASSERT(cn->tid);
|
||||||
@ -844,7 +847,6 @@ static void init_connection_thd(struct st_connection *cn)
|
|||||||
die("Error in the thread library");
|
die("Error in the thread library");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#else /*EMBEDDED_LIBRARY*/
|
#else /*EMBEDDED_LIBRARY*/
|
||||||
|
|
||||||
#define do_send_query(cn,q,q_len) mysql_send_query(&cn->mysql, q, q_len)
|
#define do_send_query(cn,q,q_len) mysql_send_query(&cn->mysql, q, q_len)
|
||||||
@ -2036,6 +2038,21 @@ static void var_free(void *v)
|
|||||||
|
|
||||||
C_MODE_END
|
C_MODE_END
|
||||||
|
|
||||||
|
void var_set_int(VAR *v, const char *str)
|
||||||
|
{
|
||||||
|
char *endptr;
|
||||||
|
/* Initially assume not a number */
|
||||||
|
v->int_val= 0;
|
||||||
|
v->is_int= false;
|
||||||
|
v->int_dirty= false;
|
||||||
|
if (!str) return;
|
||||||
|
|
||||||
|
v->int_val = (int) strtol(str, &endptr, 10);
|
||||||
|
/* It is an int if strtol consumed something up to end/space/tab */
|
||||||
|
if (endptr > str && (!*endptr || *endptr == ' ' || *endptr == '\t'))
|
||||||
|
v->is_int= true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
VAR *var_init(VAR *v, const char *name, int name_len, const char *val,
|
VAR *var_init(VAR *v, const char *name, int name_len, const char *val,
|
||||||
int val_len)
|
int val_len)
|
||||||
@ -2070,11 +2087,10 @@ VAR *var_init(VAR *v, const char *name, int name_len, const char *val,
|
|||||||
memcpy(tmp_var->str_val, val, val_len);
|
memcpy(tmp_var->str_val, val, val_len);
|
||||||
tmp_var->str_val[val_len]= 0;
|
tmp_var->str_val[val_len]= 0;
|
||||||
}
|
}
|
||||||
|
var_set_int(tmp_var, val);
|
||||||
tmp_var->name_len = name_len;
|
tmp_var->name_len = name_len;
|
||||||
tmp_var->str_val_len = val_len;
|
tmp_var->str_val_len = val_len;
|
||||||
tmp_var->alloced_len = val_alloc_len;
|
tmp_var->alloced_len = val_alloc_len;
|
||||||
tmp_var->int_val = (val) ? atoi(val) : 0;
|
|
||||||
tmp_var->int_dirty = 0;
|
|
||||||
return tmp_var;
|
return tmp_var;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2135,7 +2151,7 @@ VAR* var_get(const char *var_name, const char **var_name_end, my_bool raw,
|
|||||||
if (!raw && v->int_dirty)
|
if (!raw && v->int_dirty)
|
||||||
{
|
{
|
||||||
sprintf(v->str_val, "%d", v->int_val);
|
sprintf(v->str_val, "%d", v->int_val);
|
||||||
v->int_dirty = 0;
|
v->int_dirty= false;
|
||||||
v->str_val_len = strlen(v->str_val);
|
v->str_val_len = strlen(v->str_val);
|
||||||
}
|
}
|
||||||
if (var_name_end)
|
if (var_name_end)
|
||||||
@ -2197,7 +2213,7 @@ void var_set(const char *var_name, const char *var_name_end,
|
|||||||
if (v->int_dirty)
|
if (v->int_dirty)
|
||||||
{
|
{
|
||||||
sprintf(v->str_val, "%d", v->int_val);
|
sprintf(v->str_val, "%d", v->int_val);
|
||||||
v->int_dirty= 0;
|
v->int_dirty=false;
|
||||||
v->str_val_len= strlen(v->str_val);
|
v->str_val_len= strlen(v->str_val);
|
||||||
}
|
}
|
||||||
/* setenv() expects \0-terminated strings */
|
/* setenv() expects \0-terminated strings */
|
||||||
@ -2267,8 +2283,14 @@ void var_query_set(VAR *var, const char *query, const char** query_end)
|
|||||||
DBUG_ENTER("var_query_set");
|
DBUG_ENTER("var_query_set");
|
||||||
LINT_INIT(res);
|
LINT_INIT(res);
|
||||||
|
|
||||||
|
/* Only white space or ) allowed past ending ` */
|
||||||
while (end > query && *end != '`')
|
while (end > query && *end != '`')
|
||||||
|
{
|
||||||
|
if (*end && (*end != ' ' && *end != '\t' && *end != '\n' && *end != ')'))
|
||||||
|
die("Spurious text after `query` expression");
|
||||||
--end;
|
--end;
|
||||||
|
}
|
||||||
|
|
||||||
if (query == end)
|
if (query == end)
|
||||||
die("Syntax error in query, missing '`'");
|
die("Syntax error in query, missing '`'");
|
||||||
++query;
|
++query;
|
||||||
@ -2497,6 +2519,7 @@ void var_set_query_get_value(struct st_command *command, VAR *var)
|
|||||||
void var_copy(VAR *dest, VAR *src)
|
void var_copy(VAR *dest, VAR *src)
|
||||||
{
|
{
|
||||||
dest->int_val= src->int_val;
|
dest->int_val= src->int_val;
|
||||||
|
dest->is_int= src->is_int;
|
||||||
dest->int_dirty= src->int_dirty;
|
dest->int_dirty= src->int_dirty;
|
||||||
|
|
||||||
/* Alloc/realloc data for str_val in dest */
|
/* Alloc/realloc data for str_val in dest */
|
||||||
@ -2580,9 +2603,7 @@ void eval_expr(VAR *v, const char *p, const char **p_end)
|
|||||||
v->str_val_len = new_val_len;
|
v->str_val_len = new_val_len;
|
||||||
memcpy(v->str_val, p, new_val_len);
|
memcpy(v->str_val, p, new_val_len);
|
||||||
v->str_val[new_val_len] = 0;
|
v->str_val[new_val_len] = 0;
|
||||||
v->int_val=atoi(p);
|
var_set_int(v, p);
|
||||||
DBUG_PRINT("info", ("atoi on '%s', returns: %d", p, v->int_val));
|
|
||||||
v->int_dirty=0;
|
|
||||||
}
|
}
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
@ -2929,6 +2950,8 @@ int do_modify_var(struct st_command *command,
|
|||||||
die("The argument to %.*s must be a variable (start with $)",
|
die("The argument to %.*s must be a variable (start with $)",
|
||||||
command->first_word_len, command->query);
|
command->first_word_len, command->query);
|
||||||
v= var_get(p, &p, 1, 0);
|
v= var_get(p, &p, 1, 0);
|
||||||
|
if (! v->is_int)
|
||||||
|
die("Cannot perform inc/dec on a non-numeric value");
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case DO_DEC:
|
case DO_DEC:
|
||||||
v->int_val--;
|
v->int_val--;
|
||||||
@ -2940,7 +2963,7 @@ int do_modify_var(struct st_command *command,
|
|||||||
die("Invalid operator to do_modify_var");
|
die("Invalid operator to do_modify_var");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
v->int_dirty= 1;
|
v->int_dirty= true;
|
||||||
command->last_argument= (char*)++p;
|
command->last_argument= (char*)++p;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -3984,7 +4007,18 @@ void do_perl(struct st_command *command)
|
|||||||
if (!error)
|
if (!error)
|
||||||
my_delete(temp_file_path, MYF(0));
|
my_delete(temp_file_path, MYF(0));
|
||||||
|
|
||||||
handle_command_error(command, WEXITSTATUS(error));
|
/* Check for error code that indicates perl could not be started */
|
||||||
|
int exstat= WEXITSTATUS(error);
|
||||||
|
#ifdef __WIN__
|
||||||
|
if (exstat == 1)
|
||||||
|
/* Text must begin 'perl not found' as mtr looks for it */
|
||||||
|
abort_not_supported_test("perl not found in path or did not start");
|
||||||
|
#else
|
||||||
|
if (exstat == 127)
|
||||||
|
abort_not_supported_test("perl not found in path");
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
handle_command_error(command, exstat);
|
||||||
}
|
}
|
||||||
dynstr_free(&ds_delimiter);
|
dynstr_free(&ds_delimiter);
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
@ -4898,6 +4932,16 @@ void select_connection_name(const char *name)
|
|||||||
|
|
||||||
set_current_connection(con);
|
set_current_connection(con);
|
||||||
|
|
||||||
|
/* Connection logging if enabled */
|
||||||
|
if (!disable_connect_log && !disable_query_log)
|
||||||
|
{
|
||||||
|
DYNAMIC_STRING *ds= &ds_res;
|
||||||
|
|
||||||
|
dynstr_append_mem(ds, "connection ", 11);
|
||||||
|
replace_dynstr_append(ds, name);
|
||||||
|
dynstr_append_mem(ds, ";\n", 2);
|
||||||
|
}
|
||||||
|
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4985,6 +5029,16 @@ void do_close_connection(struct st_command *command)
|
|||||||
var_set_string("$CURRENT_CONNECTION", con->name);
|
var_set_string("$CURRENT_CONNECTION", con->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Connection logging if enabled */
|
||||||
|
if (!disable_connect_log && !disable_query_log)
|
||||||
|
{
|
||||||
|
DYNAMIC_STRING *ds= &ds_res;
|
||||||
|
|
||||||
|
dynstr_append_mem(ds, "disconnect ", 11);
|
||||||
|
replace_dynstr_append(ds, ds_connection.str);
|
||||||
|
dynstr_append_mem(ds, ";\n", 2);
|
||||||
|
}
|
||||||
|
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5119,6 +5173,13 @@ int connect_n_handle_errors(struct st_command *command,
|
|||||||
dynstr_append_mem(ds, delimiter, delimiter_length);
|
dynstr_append_mem(ds, delimiter, delimiter_length);
|
||||||
dynstr_append_mem(ds, "\n", 1);
|
dynstr_append_mem(ds, "\n", 1);
|
||||||
}
|
}
|
||||||
|
/* Simlified logging if enabled */
|
||||||
|
if (!disable_connect_log && !disable_query_log)
|
||||||
|
{
|
||||||
|
replace_dynstr_append(ds, command->query);
|
||||||
|
dynstr_append_mem(ds, ";\n", 2);
|
||||||
|
}
|
||||||
|
|
||||||
while (!mysql_real_connect(con, host, user, pass, db, port, sock ? sock: 0,
|
while (!mysql_real_connect(con, host, user, pass, db, port, sock ? sock: 0,
|
||||||
CLIENT_MULTI_STATEMENTS))
|
CLIENT_MULTI_STATEMENTS))
|
||||||
{
|
{
|
||||||
@ -7436,11 +7497,13 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
|
|||||||
(flags & QUERY_REAP_FLAG));
|
(flags & QUERY_REAP_FLAG));
|
||||||
DBUG_ENTER("run_query");
|
DBUG_ENTER("run_query");
|
||||||
|
|
||||||
init_dynamic_string(&ds_warnings, NULL, 0, 256);
|
|
||||||
|
|
||||||
if (cn->pending && (flags & QUERY_SEND_FLAG))
|
if (cn->pending && (flags & QUERY_SEND_FLAG))
|
||||||
die ("Cannot run query on connection between send and reap");
|
die ("Cannot run query on connection between send and reap");
|
||||||
|
|
||||||
|
if (!(flags & QUERY_SEND_FLAG) && !cn->pending)
|
||||||
|
die ("Cannot reap on a connection without pending send");
|
||||||
|
|
||||||
|
init_dynamic_string(&ds_warnings, NULL, 0, 256);
|
||||||
/*
|
/*
|
||||||
Evaluate query if this is an eval command
|
Evaluate query if this is an eval command
|
||||||
*/
|
*/
|
||||||
@ -8185,6 +8248,8 @@ int main(int argc, char **argv)
|
|||||||
case Q_DISABLE_ABORT_ON_ERROR: abort_on_error=0; break;
|
case Q_DISABLE_ABORT_ON_ERROR: abort_on_error=0; break;
|
||||||
case Q_ENABLE_RESULT_LOG: disable_result_log=0; break;
|
case Q_ENABLE_RESULT_LOG: disable_result_log=0; break;
|
||||||
case Q_DISABLE_RESULT_LOG: disable_result_log=1; break;
|
case Q_DISABLE_RESULT_LOG: disable_result_log=1; break;
|
||||||
|
case Q_ENABLE_CONNECT_LOG: disable_connect_log=0; break;
|
||||||
|
case Q_DISABLE_CONNECT_LOG: disable_connect_log=1; break;
|
||||||
case Q_ENABLE_WARNINGS: disable_warnings=0; break;
|
case Q_ENABLE_WARNINGS: disable_warnings=0; break;
|
||||||
case Q_DISABLE_WARNINGS: disable_warnings=1; break;
|
case Q_DISABLE_WARNINGS: disable_warnings=1; break;
|
||||||
case Q_ENABLE_INFO: disable_info=0; break;
|
case Q_ENABLE_INFO: disable_info=0; break;
|
||||||
|
@ -229,7 +229,8 @@ sub mtr_report_stats ($$;$) {
|
|||||||
# Find out how we where doing
|
# Find out how we where doing
|
||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
my $tot_skiped= 0;
|
my $tot_skipped= 0;
|
||||||
|
my $tot_skipdetect= 0;
|
||||||
my $tot_passed= 0;
|
my $tot_passed= 0;
|
||||||
my $tot_failed= 0;
|
my $tot_failed= 0;
|
||||||
my $tot_tests= 0;
|
my $tot_tests= 0;
|
||||||
@ -246,8 +247,9 @@ sub mtr_report_stats ($$;$) {
|
|||||||
}
|
}
|
||||||
elsif ( $tinfo->{'result'} eq 'MTR_RES_SKIPPED' )
|
elsif ( $tinfo->{'result'} eq 'MTR_RES_SKIPPED' )
|
||||||
{
|
{
|
||||||
# Test was skipped
|
# Test was skipped (disabled not counted)
|
||||||
$tot_skiped++;
|
$tot_skipped++ unless $tinfo->{'disable'};
|
||||||
|
$tot_skipdetect++ if $tinfo->{'skip_detected_by_test'};
|
||||||
}
|
}
|
||||||
elsif ( $tinfo->{'result'} eq 'MTR_RES_PASSED' )
|
elsif ( $tinfo->{'result'} eq 'MTR_RES_PASSED' )
|
||||||
{
|
{
|
||||||
@ -376,6 +378,9 @@ sub mtr_report_stats ($$;$) {
|
|||||||
print "All $tot_tests tests were successful.\n\n";
|
print "All $tot_tests tests were successful.\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print "$tot_skipped tests were skipped, ".
|
||||||
|
"$tot_skipdetect by the test itself.\n\n" if $tot_skipped;
|
||||||
|
|
||||||
if ( $tot_failed != 0 || $found_problems)
|
if ( $tot_failed != 0 || $found_problems)
|
||||||
{
|
{
|
||||||
mtr_error("there were failing test cases") unless $dont_error;
|
mtr_error("there were failing test cases") unless $dont_error;
|
||||||
|
@ -126,12 +126,24 @@ my $path_vardir_trace; # unix formatted opt_vardir for trace files
|
|||||||
my $opt_tmpdir; # Path to use for tmp/ dir
|
my $opt_tmpdir; # Path to use for tmp/ dir
|
||||||
my $opt_tmpdir_pid;
|
my $opt_tmpdir_pid;
|
||||||
|
|
||||||
|
my $opt_start;
|
||||||
|
my $opt_start_dirty;
|
||||||
|
my $opt_start_exit;
|
||||||
|
my $start_only;
|
||||||
|
|
||||||
END {
|
END {
|
||||||
if ( defined $opt_tmpdir_pid and $opt_tmpdir_pid == $$ )
|
if ( defined $opt_tmpdir_pid and $opt_tmpdir_pid == $$ )
|
||||||
{
|
{
|
||||||
# Remove the tempdir this process has created
|
if (!$opt_start_exit)
|
||||||
mtr_verbose("Removing tmpdir '$opt_tmpdir");
|
{
|
||||||
rmtree($opt_tmpdir);
|
# Remove the tempdir this process has created
|
||||||
|
mtr_verbose("Removing tmpdir $opt_tmpdir");
|
||||||
|
rmtree($opt_tmpdir);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mtr_warning("tmpdir $opt_tmpdir should be removed after the server has finished");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,10 +246,6 @@ my $opt_start_timeout = $ENV{MTR_START_TIMEOUT} || 180; # seconds
|
|||||||
sub suite_timeout { return $opt_suite_timeout * 60; };
|
sub suite_timeout { return $opt_suite_timeout * 60; };
|
||||||
sub check_timeout { return $opt_testcase_timeout * 6; };
|
sub check_timeout { return $opt_testcase_timeout * 6; };
|
||||||
|
|
||||||
my $opt_start;
|
|
||||||
my $opt_start_dirty;
|
|
||||||
my $opt_start_exit;
|
|
||||||
my $start_only;
|
|
||||||
my $opt_wait_all;
|
my $opt_wait_all;
|
||||||
my $opt_user_args;
|
my $opt_user_args;
|
||||||
my $opt_repeat= 1;
|
my $opt_repeat= 1;
|
||||||
@ -2186,6 +2194,11 @@ sub environment_setup {
|
|||||||
# to detect that valgrind is being used from test cases
|
# to detect that valgrind is being used from test cases
|
||||||
$ENV{'VALGRIND_TEST'}= $opt_valgrind;
|
$ENV{'VALGRIND_TEST'}= $opt_valgrind;
|
||||||
|
|
||||||
|
# Add dir of this perl to aid mysqltest in finding perl
|
||||||
|
my $perldir= dirname($^X);
|
||||||
|
my $pathsep= ":";
|
||||||
|
$pathsep= ";" if IS_WINDOWS && ! IS_CYGWIN;
|
||||||
|
$ENV{'PATH'}= "$ENV{'PATH'}".$pathsep.$perldir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3658,6 +3671,9 @@ sub run_testcase ($) {
|
|||||||
# Try to get reason from test log file
|
# Try to get reason from test log file
|
||||||
find_testcase_skipped_reason($tinfo);
|
find_testcase_skipped_reason($tinfo);
|
||||||
mtr_report_test_skipped($tinfo);
|
mtr_report_test_skipped($tinfo);
|
||||||
|
# Restart if skipped due to missing perl, it may have had side effects
|
||||||
|
stop_all_servers($opt_shutdown_timeout)
|
||||||
|
if ($tinfo->{'comment'} =~ /^perl not found/);
|
||||||
}
|
}
|
||||||
elsif ( $res == 65 )
|
elsif ( $res == 65 )
|
||||||
{
|
{
|
||||||
|
@ -177,6 +177,9 @@ mysqltest: At line 1: End of line junk detected: "disconnect default # comment
|
|||||||
"
|
"
|
||||||
mysqltest: At line 1: Extra delimiter ";" found
|
mysqltest: At line 1: Extra delimiter ";" found
|
||||||
mysqltest: At line 1: Extra delimiter ";" found
|
mysqltest: At line 1: Extra delimiter ";" found
|
||||||
|
mysqltest: At line 1: Spurious text after `query` expression
|
||||||
|
mysqltest: At line 1: Spurious text after `query` expression
|
||||||
|
mysqltest: At line 2: Spurious text after `query` expression
|
||||||
mysqltest: At line 1: Missing argument(s) to 'error'
|
mysqltest: At line 1: Missing argument(s) to 'error'
|
||||||
mysqltest: At line 1: Missing argument(s) to 'error'
|
mysqltest: At line 1: Missing argument(s) to 'error'
|
||||||
mysqltest: At line 1: The sqlstate definition must start with an uppercase S
|
mysqltest: At line 1: The sqlstate definition must start with an uppercase S
|
||||||
@ -366,23 +369,24 @@ mysqltest: At line 1: Missing required argument 'sleep_delay' to command 'real_s
|
|||||||
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
|
||||||
2
|
|
||||||
101
|
101
|
||||||
hej
|
-99
|
||||||
1
|
|
||||||
mysqltest: At line 1: Missing argument to inc
|
mysqltest: At line 1: Missing argument to inc
|
||||||
mysqltest: At line 1: The argument to inc must be a variable (start with $)
|
mysqltest: At line 1: The argument to inc must be a variable (start with $)
|
||||||
|
mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value
|
||||||
mysqltest: At line 1: End of line junk detected: "1000"
|
mysqltest: At line 1: End of line junk detected: "1000"
|
||||||
4
|
mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value
|
||||||
4
|
mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value
|
||||||
|
-96
|
||||||
|
-96
|
||||||
-1
|
-1
|
||||||
-2
|
|
||||||
99
|
99
|
||||||
hej
|
|
||||||
-1
|
|
||||||
mysqltest: At line 1: Missing argument to dec
|
mysqltest: At line 1: Missing argument to dec
|
||||||
mysqltest: At line 1: The argument to dec must be a variable (start with $)
|
mysqltest: At line 1: The argument to dec must be a variable (start with $)
|
||||||
|
mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value
|
||||||
mysqltest: At line 1: End of line junk detected: "1000"
|
mysqltest: At line 1: End of line junk detected: "1000"
|
||||||
|
mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value
|
||||||
|
mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value
|
||||||
mysqltest: At line 1: Missing arguments to system, nothing to do!
|
mysqltest: At line 1: Missing arguments to system, nothing to do!
|
||||||
mysqltest: At line 1: Missing arguments to system, nothing to do!
|
mysqltest: At line 1: Missing arguments to system, nothing to do!
|
||||||
system command 'NonExistsinfComamdn 2> /dev/null' failed
|
system command 'NonExistsinfComamdn 2> /dev/null' failed
|
||||||
@ -449,12 +453,16 @@ mysqltest: At line 1: Missing required argument 'host' to command 'connect'
|
|||||||
mysqltest: At line 1: query 'connect con2,localhost,root,,illegal_db' failed: 1049: Unknown database 'illegal_db'
|
mysqltest: At line 1: query 'connect con2,localhost,root,,illegal_db' failed: 1049: Unknown database 'illegal_db'
|
||||||
mysqltest: At line 1: Illegal argument for port: 'illegal_port'
|
mysqltest: At line 1: Illegal argument for port: 'illegal_port'
|
||||||
mysqltest: At line 1: Illegal option to connect: SMTP
|
mysqltest: At line 1: Illegal option to connect: SMTP
|
||||||
OK
|
200 connects succeeded
|
||||||
mysqltest: The test didn't produce any output
|
|
||||||
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 3: connection 'test_con1' not found in connection pool
|
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 3: connection 'test_con1' not found in connection pool
|
||||||
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 2: Connection test_con1 already exists
|
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 2: Connection test_con1 already exists
|
||||||
show tables;
|
show tables;
|
||||||
ERROR 3D000: No database selected
|
ERROR 3D000: No database selected
|
||||||
|
connect con1,localhost,root,,;
|
||||||
|
connection default;
|
||||||
|
connection con1;
|
||||||
|
disconnect con1;
|
||||||
|
connection default;
|
||||||
Output from mysqltest-x.inc
|
Output from mysqltest-x.inc
|
||||||
Output from mysqltest-x.inc
|
Output from mysqltest-x.inc
|
||||||
Output from mysqltest-x.inc
|
Output from mysqltest-x.inc
|
||||||
|
@ -205,7 +205,7 @@ DROP TABLE `t1`;
|
|||||||
|
|
||||||
-- echo === Using mysqlbinlog to detect failure. Before the patch mysqlbinlog would find a corrupted event, thence would fail.
|
-- echo === Using mysqlbinlog to detect failure. Before the patch mysqlbinlog would find a corrupted event, thence would fail.
|
||||||
|
|
||||||
-- let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
-- let $MYSQLD_DATADIR= `SELECT @@datadir`
|
||||||
-- exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog
|
-- exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog
|
||||||
-- remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog
|
-- remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog
|
||||||
|
|
||||||
@ -330,7 +330,7 @@ while($ntables)
|
|||||||
-- echo ### assertion: check that binlog is not corrupt. Using mysqlbinlog to
|
-- echo ### assertion: check that binlog is not corrupt. Using mysqlbinlog to
|
||||||
-- echo ### detect failure. Before the patch mysqlbinlog would find
|
-- echo ### detect failure. Before the patch mysqlbinlog would find
|
||||||
-- echo ### a corrupted event, thence would fail.
|
-- echo ### a corrupted event, thence would fail.
|
||||||
-- let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
-- let $MYSQLD_DATADIR= `SELECT @@datadir`
|
||||||
-- exec $MYSQL_BINLOG -v --hex $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug50018.binlog
|
-- exec $MYSQL_BINLOG -v --hex $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug50018.binlog
|
||||||
|
|
||||||
## clean up
|
## clean up
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
# #
|
# #
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
let $save_div_precision_increment = `SELECT @@global.div_precision_increment`
|
let $save_div_precision_increment = `SELECT @@global.div_precision_increment`;
|
||||||
|
|
||||||
#SET @save_div_precision_increment = @@global.div_precision_increment;
|
#SET @save_div_precision_increment = @@global.div_precision_increment;
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ SHOW VARIABLES LIKE 'secure_file_priv';
|
|||||||
# Doing this in a portable manner is difficult but we should be able to
|
# Doing this in a portable manner is difficult but we should be able to
|
||||||
# count on the depth of the directory hierarchy used. Three steps up from
|
# count on the depth of the directory hierarchy used. Three steps up from
|
||||||
# the datadir is the 'mysql_test' directory.
|
# the datadir is the 'mysql_test' directory.
|
||||||
--let $PROTECTED_FILE=`SELECT concat(@@datadir,'/../../../bug50373.txt')`;
|
--let $PROTECTED_FILE=`SELECT concat(@@datadir,'/../../../bug50373.txt')`
|
||||||
--eval SELECT * FROM t1 INTO OUTFILE '$PROTECTED_FILE';
|
--eval SELECT * FROM t1 INTO OUTFILE '$PROTECTED_FILE';
|
||||||
DELETE FROM t1;
|
DELETE FROM t1;
|
||||||
--eval LOAD DATA INFILE '$PROTECTED_FILE' INTO TABLE t1;
|
--eval LOAD DATA INFILE '$PROTECTED_FILE' INTO TABLE t1;
|
||||||
|
@ -494,6 +494,32 @@ remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
|
|||||||
--error 1
|
--error 1
|
||||||
--exec echo "--disable_query_log;" | $MYSQL_TEST 2>&1
|
--exec echo "--disable_query_log;" | $MYSQL_TEST 2>&1
|
||||||
|
|
||||||
|
#
|
||||||
|
# Extra text after ``
|
||||||
|
#
|
||||||
|
# Cannot use exec echo here as ` may or may not need to be escaped
|
||||||
|
--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql
|
||||||
|
let $x= `select 1` BOO ;
|
||||||
|
EOF
|
||||||
|
--error 1
|
||||||
|
--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1
|
||||||
|
remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
|
||||||
|
--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql
|
||||||
|
--let $x= `select 1`;
|
||||||
|
EOF
|
||||||
|
--error 1
|
||||||
|
--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1
|
||||||
|
remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
|
||||||
|
--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql
|
||||||
|
# Missing ; in next line should be detected and cause failure
|
||||||
|
let $x= `select 1`
|
||||||
|
let $x= 2;
|
||||||
|
echo $x;
|
||||||
|
EOF
|
||||||
|
--error 1
|
||||||
|
--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1
|
||||||
|
remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
|
||||||
|
|
||||||
|
|
||||||
# Allow trailing # comment
|
# Allow trailing # comment
|
||||||
--sleep 1 # Wait for insert delayed to be executed.
|
--sleep 1 # Wait for insert delayed to be executed.
|
||||||
@ -980,16 +1006,13 @@ EOF
|
|||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# Test inc
|
# Test inc
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
inc $i;
|
let $i= 0;
|
||||||
echo $i;
|
|
||||||
inc $i;
|
inc $i;
|
||||||
echo $i;
|
echo $i;
|
||||||
let $i=100;
|
let $i=100;
|
||||||
inc $i;
|
inc $i;
|
||||||
echo $i;
|
echo $i;
|
||||||
|
let $i= -100;
|
||||||
let $i=hej;
|
|
||||||
echo $i;
|
|
||||||
inc $i;
|
inc $i;
|
||||||
echo $i;
|
echo $i;
|
||||||
|
|
||||||
@ -998,7 +1021,13 @@ echo $i;
|
|||||||
--error 1
|
--error 1
|
||||||
--exec echo "inc i;" | $MYSQL_TEST 2>&1
|
--exec echo "inc i;" | $MYSQL_TEST 2>&1
|
||||||
--error 1
|
--error 1
|
||||||
|
--exec echo "inc \$i;" | $MYSQL_TEST 2>&1
|
||||||
|
--error 1
|
||||||
--exec echo "let \$i=100; inc \$i 1000; echo \$i;" | $MYSQL_TEST 2>&1
|
--exec echo "let \$i=100; inc \$i 1000; echo \$i;" | $MYSQL_TEST 2>&1
|
||||||
|
--error 1
|
||||||
|
--exec echo "let \$i=text; inc \$i; echo \$i;" | $MYSQL_TEST 2>&1
|
||||||
|
--error 1
|
||||||
|
--exec echo "let \$i=10cc; inc \$i; echo \$i;" | $MYSQL_TEST 2>&1
|
||||||
|
|
||||||
inc $i; inc $i; inc $i; --echo $i
|
inc $i; inc $i; inc $i; --echo $i
|
||||||
echo $i;
|
echo $i;
|
||||||
@ -1008,25 +1037,25 @@ echo $i;
|
|||||||
# Test dec
|
# Test dec
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
dec $d;
|
let $d= 0;
|
||||||
echo $d;
|
|
||||||
dec $d;
|
dec $d;
|
||||||
echo $d;
|
echo $d;
|
||||||
let $d=100;
|
let $d=100;
|
||||||
dec $d;
|
dec $d;
|
||||||
echo $d;
|
echo $d;
|
||||||
|
|
||||||
let $d=hej;
|
|
||||||
echo $d;
|
|
||||||
dec $d;
|
|
||||||
echo $d;
|
|
||||||
|
|
||||||
--error 1
|
--error 1
|
||||||
--exec echo "dec;" | $MYSQL_TEST 2>&1
|
--exec echo "dec;" | $MYSQL_TEST 2>&1
|
||||||
--error 1
|
--error 1
|
||||||
--exec echo "dec i;" | $MYSQL_TEST 2>&1
|
--exec echo "dec i;" | $MYSQL_TEST 2>&1
|
||||||
--error 1
|
--error 1
|
||||||
|
--exec echo "dec \$i;" | $MYSQL_TEST 2>&1
|
||||||
|
--error 1
|
||||||
--exec echo "let \$i=100; dec \$i 1000; echo \$i;" | $MYSQL_TEST 2>&1
|
--exec echo "let \$i=100; dec \$i 1000; echo \$i;" | $MYSQL_TEST 2>&1
|
||||||
|
--error 1
|
||||||
|
--exec echo "let \$i=text; dec \$i; echo \$i;" | $MYSQL_TEST 2>&1
|
||||||
|
--error 1
|
||||||
|
--exec echo "let \$i=10cc; dec \$i; echo \$i;" | $MYSQL_TEST 2>&1
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
@ -1439,19 +1468,6 @@ eval select "$long_rep" as x;
|
|||||||
--error 1
|
--error 1
|
||||||
--exec echo "connect (con1,localhost,root,,,,,SMTP POP);" | $MYSQL_TEST 2>&1
|
--exec echo "connect (con1,localhost,root,,,,,SMTP POP);" | $MYSQL_TEST 2>&1
|
||||||
|
|
||||||
# Repeat connect/disconnect
|
|
||||||
--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql
|
|
||||||
let $i=100;
|
|
||||||
while ($i)
|
|
||||||
{
|
|
||||||
connect (test_con1,localhost,root,,);
|
|
||||||
disconnect test_con1;
|
|
||||||
dec $i;
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
--exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql; echo OK; exit;" | $MYSQL_TEST 2>&1
|
|
||||||
remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
|
|
||||||
|
|
||||||
# Repeat connect/disconnect
|
# Repeat connect/disconnect
|
||||||
--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql
|
--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql
|
||||||
let $i=200;
|
let $i=200;
|
||||||
@ -1461,9 +1477,8 @@ while ($i)
|
|||||||
disconnect test_con1;
|
disconnect test_con1;
|
||||||
dec $i;
|
dec $i;
|
||||||
}
|
}
|
||||||
|
echo 200 connects succeeded;
|
||||||
EOF
|
EOF
|
||||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
||||||
--error 1
|
|
||||||
--exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql;" | $MYSQL_TEST 2>&1
|
--exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql;" | $MYSQL_TEST 2>&1
|
||||||
remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
|
remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
|
||||||
|
|
||||||
@ -1504,6 +1519,22 @@ show tables;
|
|||||||
disconnect con2;
|
disconnect con2;
|
||||||
connection default;
|
connection default;
|
||||||
|
|
||||||
|
# Test enable_connect_log
|
||||||
|
--enable_connect_log
|
||||||
|
connect (con1,localhost,root,,);
|
||||||
|
connection default;
|
||||||
|
connection con1;
|
||||||
|
--disable_query_log
|
||||||
|
# These should not be logged
|
||||||
|
connect (con2,localhost,root,,*NO-ONE*);
|
||||||
|
connection con2;
|
||||||
|
disconnect con2;
|
||||||
|
connection con1;
|
||||||
|
--enable_query_log
|
||||||
|
disconnect con1;
|
||||||
|
connection default;
|
||||||
|
--disable_connect_log
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# Test mysqltest arguments
|
# Test mysqltest arguments
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user