Commit 61a1dc97 authored by Bjorn Munch's avatar Bjorn Munch

merge from 5.5-mtr

parents 7d2c7748 31ecfd7d
...@@ -468,6 +468,8 @@ TYPELIB command_typelib= {array_elements(command_names),"", ...@@ -468,6 +468,8 @@ TYPELIB command_typelib= {array_elements(command_names),"",
command_names, 0}; command_names, 0};
DYNAMIC_STRING ds_res; DYNAMIC_STRING ds_res;
/* Points to ds_warning in run_query, so it can be freed */
DYNAMIC_STRING *ds_warn= 0;
char builtin_echo[FN_REFLEN]; char builtin_echo[FN_REFLEN];
...@@ -488,7 +490,7 @@ VAR* var_init(VAR* v, const char *name, int name_len, const char *val, ...@@ -488,7 +490,7 @@ VAR* var_init(VAR* v, const char *name, int name_len, const char *val,
VAR* var_get(const char *var_name, const char** var_name_end, VAR* var_get(const char *var_name, const char** var_name_end,
my_bool raw, my_bool ignore_not_existing); my_bool raw, my_bool ignore_not_existing);
void eval_expr(VAR* v, const char *p, const char** p_end, void eval_expr(VAR* v, const char *p, const char** p_end,
bool open_end=false, bool backtick=true); bool open_end=false, bool do_eval=true);
my_bool match_delimiter(int c, const char *delim, uint length); my_bool match_delimiter(int c, const char *delim, uint length);
void dump_result_to_reject_file(char *buf, int size); void dump_result_to_reject_file(char *buf, int size);
void dump_warning_messages(); void dump_warning_messages();
...@@ -1275,6 +1277,8 @@ void free_used_memory() ...@@ -1275,6 +1277,8 @@ void free_used_memory()
my_free(embedded_server_args[--embedded_server_arg_count]); my_free(embedded_server_args[--embedded_server_arg_count]);
delete_dynamic(&q_lines); delete_dynamic(&q_lines);
dynstr_free(&ds_res); dynstr_free(&ds_res);
if (ds_warn)
dynstr_free(ds_warn);
free_all_replace(); free_all_replace();
my_free(opt_pass); my_free(opt_pass);
free_defaults(default_argv); free_defaults(default_argv);
...@@ -1318,6 +1322,17 @@ static void cleanup_and_exit(int exit_code) ...@@ -1318,6 +1322,17 @@ static void cleanup_and_exit(int exit_code)
exit(exit_code); exit(exit_code);
} }
void print_file_stack()
{
for (struct st_test_file* err_file= cur_file;
err_file != file_stack;
err_file--)
{
fprintf(stderr, "included from %s at line %d:\n",
err_file->file_name, err_file->lineno);
}
}
void die(const char *fmt, ...) void die(const char *fmt, ...)
{ {
static int dying= 0; static int dying= 0;
...@@ -1337,8 +1352,12 @@ void die(const char *fmt, ...) ...@@ -1337,8 +1352,12 @@ void die(const char *fmt, ...)
/* Print the error message */ /* Print the error message */
fprintf(stderr, "mysqltest: "); fprintf(stderr, "mysqltest: ");
if (cur_file && cur_file != file_stack) if (cur_file && cur_file != file_stack)
fprintf(stderr, "In included file \"%s\": ", {
fprintf(stderr, "In included file \"%s\": \n",
cur_file->file_name); cur_file->file_name);
print_file_stack();
}
if (start_lineno > 0) if (start_lineno > 0)
fprintf(stderr, "At line %u: ", start_lineno); fprintf(stderr, "At line %u: ", start_lineno);
if (fmt) if (fmt)
...@@ -1368,20 +1387,14 @@ void die(const char *fmt, ...) ...@@ -1368,20 +1387,14 @@ void die(const char *fmt, ...)
void abort_not_supported_test(const char *fmt, ...) void abort_not_supported_test(const char *fmt, ...)
{ {
va_list args; va_list args;
struct st_test_file* err_file= cur_file;
DBUG_ENTER("abort_not_supported_test"); DBUG_ENTER("abort_not_supported_test");
/* Print include filestack */ /* Print include filestack */
fprintf(stderr, "The test '%s' is not supported by this installation\n", fprintf(stderr, "The test '%s' is not supported by this installation\n",
file_stack->file_name); file_stack->file_name);
fprintf(stderr, "Detected in file %s at line %d\n", fprintf(stderr, "Detected in file %s at line %d\n",
err_file->file_name, err_file->lineno); cur_file->file_name, cur_file->lineno);
while (err_file != file_stack) print_file_stack();
{
err_file--;
fprintf(stderr, "included from %s at line %d\n",
err_file->file_name, err_file->lineno);
}
/* Print error message */ /* Print error message */
va_start(args, fmt); va_start(args, fmt);
...@@ -2519,7 +2532,7 @@ void var_set_query_get_value(struct st_command *command, VAR *var) ...@@ -2519,7 +2532,7 @@ void var_set_query_get_value(struct st_command *command, VAR *var)
break; break;
} }
} }
eval_expr(var, value, 0); eval_expr(var, value, 0, false, false);
} }
dynstr_free(&ds_query); dynstr_free(&ds_query);
mysql_free_result(res); mysql_free_result(res);
...@@ -2551,12 +2564,16 @@ void var_copy(VAR *dest, VAR *src) ...@@ -2551,12 +2564,16 @@ void var_copy(VAR *dest, VAR *src)
void eval_expr(VAR *v, const char *p, const char **p_end, void eval_expr(VAR *v, const char *p, const char **p_end,
bool open_end, bool backtick) bool open_end, bool do_eval)
{ {
DBUG_ENTER("eval_expr"); DBUG_ENTER("eval_expr");
DBUG_PRINT("enter", ("p: '%s'", p)); DBUG_PRINT("enter", ("p: '%s'", p));
/* Skip to treat as pure string if no evaluation */
if (! do_eval)
goto NO_EVAL;
if (*p == '$') if (*p == '$')
{ {
VAR *vp; VAR *vp;
...@@ -2576,7 +2593,7 @@ void eval_expr(VAR *v, const char *p, const char **p_end, ...@@ -2576,7 +2593,7 @@ void eval_expr(VAR *v, const char *p, const char **p_end,
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
if (*p == '`' && backtick) if (*p == '`')
{ {
var_query_set(v, p, p_end); var_query_set(v, p, p_end);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
...@@ -2599,6 +2616,7 @@ void eval_expr(VAR *v, const char *p, const char **p_end, ...@@ -2599,6 +2616,7 @@ void eval_expr(VAR *v, const char *p, const char **p_end,
} }
} }
NO_EVAL:
{ {
int new_val_len = (p_end && *p_end) ? int new_val_len = (p_end && *p_end) ?
(int) (*p_end - p) : (int) strlen(p); (int) (*p_end - p) : (int) strlen(p);
...@@ -7679,6 +7697,8 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags) ...@@ -7679,6 +7697,8 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
die ("Cannot reap on a connection without pending send"); die ("Cannot reap on a connection without pending send");
init_dynamic_string(&ds_warnings, NULL, 0, 256); init_dynamic_string(&ds_warnings, NULL, 0, 256);
ds_warn= &ds_warnings;
/* /*
Evaluate query if this is an eval command Evaluate query if this is an eval command
*/ */
...@@ -7836,6 +7856,7 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags) ...@@ -7836,6 +7856,7 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
ds, &ds_warnings); ds, &ds_warnings);
dynstr_free(&ds_warnings); dynstr_free(&ds_warnings);
ds_warn= 0;
if (command->type == Q_EVAL || command->type == Q_SEND_EVAL) if (command->type == Q_EVAL || command->type == Q_SEND_EVAL)
dynstr_free(&eval_query); dynstr_free(&eval_query);
......
...@@ -15,9 +15,13 @@ The syntax is as follows: ...@@ -15,9 +15,13 @@ The syntax is as follows:
and any subsequent characters are ignored. and any subsequent characters are ignored.
4) The full test case name including the suite and execution mode 4) The full test case name including the suite and execution mode
must be specified, for example: may be specified, for example:
main.alias 'row' # bug#00000 main.alias 'row' # bug#00000
4b) Now, combinations will also be covered if only the test name is
specified, for example:
rpl.rpl_ps # Covers 'row', 'mix' and 'stmt'
5) As an exception to item 4, the last character of the test case 5) As an exception to item 4, the last character of the test case
specification may be an asterisk (*). In that case, all test cases that specification may be an asterisk (*). In that case, all test cases that
start with the same characters up to the last letter before the asterisk start with the same characters up to the last letter before the asterisk
......
...@@ -21,7 +21,7 @@ main.wait_timeout @solaris # Bug#51244 2010-04-26 alik wait_timeou ...@@ -21,7 +21,7 @@ main.wait_timeout @solaris # Bug#51244 2010-04-26 alik wait_timeou
rpl.rpl_heartbeat_basic # BUG#54820 2010-06-26 alik rpl.rpl_heartbeat_basic fails sporadically again rpl.rpl_heartbeat_basic # BUG#54820 2010-06-26 alik rpl.rpl_heartbeat_basic fails sporadically again
rpl.rpl_heartbeat_2slaves # BUG#43828 2009-10-22 luis fails sporadically rpl.rpl_heartbeat_2slaves # BUG#43828 2009-10-22 luis fails sporadically
rpl.rpl_innodb_bug28430* # Bug#46029 rpl.rpl_innodb_bug28430 # Bug#46029
sys_vars.max_sp_recursion_depth_func @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun sys_vars.max_sp_recursion_depth_func @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
sys_vars.plugin_dir_basic # Bug#52223 2010-11-24 alik Test "plugin_dir_basic" does not support RPM build (test) directory structure sys_vars.plugin_dir_basic # Bug#52223 2010-11-24 alik Test "plugin_dir_basic" does not support RPM build (test) directory structure
......
# Definition file for plugins.
#
# <lib name> <directory> <variable> [<plugin name>,...]
#
# The following variables will be set for a plugin, where PLUGVAR
# represents the variable name given as the 3rd item
#
# PLUGVAR: name of plugin file including extension .so or .dll
# PLUGVAR_DIR: name of directory where plugin was found
# PLUGVAR_OPT: mysqld option --plugin_dir=....
# PLUGVAR_LOAD: option --plugin_load=.... if the 4th element is present
#
# If a listed plugin is not found, the corresponding variables will be
# set to empty, they will not be unset.
#
# The PLUGVAR variable is not quoted, so you must remember to quote it
# when using it in an INSTALL PLUGIN command.
#
# The envorinment variables can be used in tests. If adding a new plugin,
# you are free to pick your variable name, but please keep it upper
# case for consistency.
#
# The _LOAD variable will have a form
#
# --plugin_load=<name1>=<lib_name>;<name2>=<lib_name>.....
#
# with name1, name2 etc from the comma separated list of plugin names
# in the optional 4th argument.
auth_test_plugin plugin/auth PLUGIN_AUTH test_plugin_server
qa_auth_interface plugin/auth PLUGIN_AUTH_INTERFACE qa_auth_interface
qa_auth_server plugin/auth PLUGIN_AUTH_SERVER qa_auth_server
qa_auth_client plugin/auth PLUGIN_AUTH_CLIENT qa_auth_client
udf_example sql UDF_EXAMPLE_LIB
ha_example storage/example EXAMPLE_PLUGIN EXAMPLE
semisync_master plugin/semisync SEMISYNC_MASTER_PLUGIN
semisync_slave plugin/semisync SEMISYNC_SLAVE_PLUGIN
ha_archive storage/archive ARCHIVE_PLUGIN
ha_blackhole storage/blackhole BLACKHOLE_PLUGIN
ha_federated storage/federated FEDERATED_PLUGIN
mypluglib plugin/fulltext SIMPLE_PARSER
...@@ -229,8 +229,11 @@ sub collect_test_cases ($$$$) { ...@@ -229,8 +229,11 @@ sub collect_test_cases ($$$$) {
sub split_testname { sub split_testname {
my ($test_name)= @_; my ($test_name)= @_;
# Get rid of directory part and split name on .'s # If .test file name is used, get rid of directory part
my @parts= split(/\./, basename($test_name)); $test_name= basename($test_name) if $test_name =~ /\.test$/;
# Now split name on .'s
my @parts= split(/\./, $test_name);
if (@parts == 1){ if (@parts == 1){
# Only testname given, ex: alias # Only testname given, ex: alias
......
...@@ -129,7 +129,8 @@ sub mtr_report_test ($) { ...@@ -129,7 +129,8 @@ sub mtr_report_test ($) {
# Find out if this test case is an experimental one, so we can treat # Find out if this test case is an experimental one, so we can treat
# the failure as an expected failure instead of a regression. # the failure as an expected failure instead of a regression.
for my $exp ( @$::experimental_test_cases ) { for my $exp ( @$::experimental_test_cases ) {
if ( $exp ne $test_name ) { # Include pattern match for combinations
if ( $exp ne $test_name && $test_name !~ /^$exp / ) {
# if the expression is not the name of this test case, but has # if the expression is not the name of this test case, but has
# an asterisk at the end, determine if the characters up to # an asterisk at the end, determine if the characters up to
# but excluding the asterisk are the same # but excluding the asterisk are the same
...@@ -395,7 +396,7 @@ sub mtr_report_stats ($$;$) { ...@@ -395,7 +396,7 @@ sub mtr_report_stats ($$;$) {
############################################################################## ##############################################################################
sub mtr_print_line () { sub mtr_print_line () {
print '-' x 60 . "\n"; print '-' x 74 . "\n";
} }
...@@ -405,13 +406,18 @@ sub mtr_print_thick_line { ...@@ -405,13 +406,18 @@ sub mtr_print_thick_line {
} }
sub mtr_print_header () { sub mtr_print_header ($) {
my ($wid) = @_;
print "\n"; print "\n";
printf "TEST"; printf "TEST";
print " " x 38; if ($wid) {
print " " x 34 . "WORKER ";
} else {
print " " x 38;
}
print "RESULT "; print "RESULT ";
print "TIME (ms)" if $timer; print "TIME (ms) or " if $timer;
print "\n"; print "COMMENT\n";
mtr_print_line(); mtr_print_line();
print "\n"; print "\n";
} }
......
...@@ -131,10 +131,6 @@ my $opt_start_dirty; ...@@ -131,10 +131,6 @@ my $opt_start_dirty;
my $opt_start_exit; my $opt_start_exit;
my $start_only; my $start_only;
my $auth_interface_fn; # the name of qa_auth_interface plugin
my $auth_server_fn; # the name of qa_auth_server plugin
my $auth_client_fn; # the name of qa_auth_client plugin
my $auth_filename; # the name of the authentication test plugin
my $auth_plugin; # the path to the authentication test plugin my $auth_plugin; # the path to the authentication test plugin
END { END {
...@@ -442,7 +438,7 @@ sub main { ...@@ -442,7 +438,7 @@ sub main {
mtr_report(); mtr_report();
mtr_print_thick_line(); mtr_print_thick_line();
mtr_print_header(); mtr_print_header($opt_parallel > 1);
mark_time_used('init'); mark_time_used('init');
...@@ -1124,27 +1120,7 @@ sub command_line_setup { ...@@ -1124,27 +1120,7 @@ sub command_line_setup {
"$basedir/sql/share/charsets", "$basedir/sql/share/charsets",
"$basedir/share/charsets"); "$basedir/share/charsets");
# Look for auth test plugins ($auth_plugin)= find_plugin("auth_test_plugin", "plugin/auth");
if (IS_WINDOWS)
{
$auth_filename = "auth_test_plugin.dll";
$auth_interface_fn = "qa_auth_interface.dll";
$auth_server_fn = "qa_auth_server.dll";
$auth_client_fn = "qa_auth_client.dll";
}
else
{
$auth_filename = "auth_test_plugin.so";
$auth_interface_fn = "qa_auth_interface.so";
$auth_server_fn = "qa_auth_server.so";
$auth_client_fn = "qa_auth_client.so";
}
$auth_plugin=
mtr_file_exists(vs_config_dirs('plugin/auth/',$auth_filename),
"$basedir/plugin/auth/.libs/" . $auth_filename,
"$basedir/lib/mysql/plugin/" . $auth_filename,
"$basedir/lib/plugin/" . $auth_filename);
if (using_extern()) if (using_extern())
{ {
...@@ -1983,6 +1959,53 @@ sub find_plugin($$) ...@@ -1983,6 +1959,53 @@ sub find_plugin($$)
return $lib_example_plugin; return $lib_example_plugin;
} }
#
# Read plugin defintions file
#
sub read_plugin_defs($)
{
my ($defs_file)= @_;
open(PLUGDEF, '<', $defs_file)
or mtr_error("Can't read plugin defintions file $defs_file");
while (<PLUGDEF>) {
next if /^#/;
my ($plug_file, $plug_loc, $plug_var, $plug_names)= split;
# Allow empty lines
next unless $plug_file;
mtr_error("Lines in $defs_file must have 3 or 4 items") unless $plug_var;
my ($plugin)= find_plugin($plug_file, $plug_loc);
# Set env. variables that tests may use, set to empty if plugin
# listed in def. file but not found.
if ($plugin) {
$ENV{$plug_var}= basename($plugin);
$ENV{$plug_var.'_DIR'}= dirname($plugin);
$ENV{$plug_var.'_OPT'}= "--plugin-dir=".dirname($plugin);
if ($plug_names) {
my $lib_name= basename($plugin);
my $load_var= "--plugin_load=";
my $semi= '';
foreach my $plug_name (split (',', $plug_names)) {
$load_var .= $semi . "$plug_name=$lib_name";
$semi= ';';
}
$ENV{$plug_var.'_LOAD'}= $load_var;
}
} else {
$ENV{$plug_var}= "";
$ENV{$plug_var.'_DIR'}= "";
$ENV{$plug_var.'_OPT'}= "";
$ENV{$plug_var.'_LOAD'}= "" if $plug_names;
}
}
close PLUGDEF;
}
sub environment_setup { sub environment_setup {
umask(022); umask(022);
...@@ -2019,127 +2042,16 @@ sub environment_setup { ...@@ -2019,127 +2042,16 @@ sub environment_setup {
} }
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
# Add the path where mysqld will find udf_example.so # Read definitions from include/plugin.defs
# -------------------------------------------------------------------------- #
my $udf_example_filename; # Plugin settings should no longer be added here, instead
if (IS_WINDOWS) # place definitions in include/plugin.defs.
{ # See comment in that file for details.
$udf_example_filename = "udf_example.dll";
}
else
{
$udf_example_filename = "udf_example.so";
}
my $lib_udf_example=
mtr_file_exists(vs_config_dirs('sql', $udf_example_filename),
"$basedir/sql/.libs/$udf_example_filename",);
if ( $lib_udf_example )
{
push(@ld_library_paths, dirname($lib_udf_example));
}
$ENV{'UDF_EXAMPLE_LIB'}=
($lib_udf_example ? basename($lib_udf_example) : "");
$ENV{'UDF_EXAMPLE_LIB_OPT'}= "--plugin-dir=".
($lib_udf_example ? dirname($lib_udf_example) : "");
# --------------------------------------------------------------------------
# Add the path where mysqld will find the auth test plugin (dialog.so/dll)
# --------------------------------------------------------------------------
if ($auth_plugin)
{
$ENV{'PLUGIN_AUTH'}= basename($auth_plugin);
$ENV{'PLUGIN_AUTH_OPT'}= "--plugin-dir=".dirname($auth_plugin);
$ENV{'PLUGIN_AUTH_LOAD'}="--plugin_load=test_plugin_server=".$auth_filename;
$ENV{'PLUGIN_AUTH_INTERFACE'}="--plugin_load=qa_auth_interface=".$auth_interface_fn;
$ENV{'PLUGIN_AUTH_SERVER'}="--plugin_load=qa_auth_server=".$auth_server_fn;
$ENV{'PLUGIN_AUTH_CLIENT'}="--plugin_load=qa_auth_client=".$auth_client_fn;
}
else
{
$ENV{'PLUGIN_AUTH'}= "";
$ENV{'PLUGIN_AUTH_OPT'}="--plugin-dir=";
$ENV{'PLUGIN_AUTH_LOAD'}="";
$ENV{'PLUGIN_AUTH_INTERFACE'}="";
$ENV{'PLUGIN_AUTH_SERVER'}="";
$ENV{'PLUGIN_AUTH_CLIENT'}="";
}
# --------------------------------------------------------------------------
# Add the path where mysqld will find ha_example.so
# --------------------------------------------------------------------------
if ($mysql_version_id >= 50100) {
my ($lib_example_plugin) = find_plugin("ha_example", "storage/example");
if($lib_example_plugin)
{
$ENV{'EXAMPLE_PLUGIN'}=
($lib_example_plugin ? basename($lib_example_plugin) : "");
$ENV{'EXAMPLE_PLUGIN_OPT'}= "--plugin-dir=".
($lib_example_plugin ? dirname($lib_example_plugin) : "");
$ENV{'HA_EXAMPLE_SO'}="'".basename($lib_example_plugin)."'";
$ENV{'EXAMPLE_PLUGIN_LOAD'}="--plugin_load=EXAMPLE=".basename($lib_example_plugin);
}
else
{
# Some ".opt" files use some of these variables, so they must be defined
$ENV{'EXAMPLE_PLUGIN'}= "";
$ENV{'EXAMPLE_PLUGIN_OPT'}= "";
$ENV{'HA_EXAMPLE_SO'}= "";
$ENV{'EXAMPLE_PLUGIN_LOAD'}= "";
}
}
# --------------------------------------------------------------------------
# Add the path where mysqld will find semisync plugins
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
if (!$opt_embedded_server) { read_plugin_defs("include/plugin.defs");
my ($lib_semisync_master_plugin) = find_plugin("semisync_master", "plugin/semisync");
my ($lib_semisync_slave_plugin) = find_plugin("semisync_slave", "plugin/semisync");
if ($lib_semisync_master_plugin && $lib_semisync_slave_plugin)
{
$ENV{'SEMISYNC_MASTER_PLUGIN'}= basename($lib_semisync_master_plugin);
$ENV{'SEMISYNC_SLAVE_PLUGIN'}= basename($lib_semisync_slave_plugin);
$ENV{'SEMISYNC_PLUGIN_OPT'}= "--plugin-dir=".dirname($lib_semisync_master_plugin);
}
else
{
$ENV{'SEMISYNC_MASTER_PLUGIN'}= "";
$ENV{'SEMISYNC_SLAVE_PLUGIN'}= "";
$ENV{'SEMISYNC_PLUGIN_OPT'}="--plugin-dir=";
}
}
# ----------------------------------------------------
# Add the paths where mysqld will find archive/blackhole/federated plugins.
# ----------------------------------------------------
$ENV{'ARCHIVE_PLUGIN_DIR'} =
dirname(find_plugin("ha_archive", "storage/archive"));
$ENV{'BLACKHOLE_PLUGIN_DIR'} =
dirname(find_plugin("ha_blackhole", "storage/blackhole"));
$ENV{'FEDERATED_PLUGIN_DIR'} =
dirname(find_plugin("ha_federated", "storage/federated"));
# ----------------------------------------------------
# Add the path where mysqld will find mypluglib.so
# ----------------------------------------------------
my ($lib_simple_parser) = find_plugin("mypluglib", "plugin/fulltext");
$ENV{'MYPLUGLIB_SO'}="'".basename($lib_simple_parser)."'"; # Simplify reference to semisync plugins
$ENV{'SIMPLE_PARSER'}= $ENV{'SEMISYNC_PLUGIN_OPT'}= $ENV{'SEMISYNC_MASTER_PLUGIN_OPT'};
($lib_simple_parser ? basename($lib_simple_parser) : "");
$ENV{'SIMPLE_PARSER_OPT'}= "--plugin-dir=".
($lib_simple_parser ? dirname($lib_simple_parser) : "");
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
# Valgrind need to be run with debug libraries otherwise it's almost # Valgrind need to be run with debug libraries otherwise it's almost
......
...@@ -311,12 +311,33 @@ failing query in let ...@@ -311,12 +311,33 @@ failing query in let
create table t1 (a varchar(100)); create table t1 (a varchar(100));
insert into t1 values ('`select 42`'); insert into t1 values ('`select 42`');
`select 42` `select 42`
insert into t1 values ('$dollar');
$dollar
`select 42`
drop table t1; drop table t1;
mysqltest: At line 1: Error running query 'failing query': 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'failing query' at line 1 mysqltest: At line 1: Error running query 'failing query': 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'failing query' at line 1
mysqltest: At line 1: Missing required argument 'filename' to command 'source' mysqltest: At line 1: Missing required argument 'filename' to command 'source'
mysqltest: At line 1: Could not open './non_existingFile' for reading, errno: 2 mysqltest: At line 1: Could not open './non_existingFile' for reading, errno: 2
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/recursive.sql": At line 1: Source directives are nesting too deep mysqltest: In included file "MYSQLTEST_VARDIR/tmp/recursive.sql":
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/error.sql": At line 1: query 'garbage ' failed: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'garbage' at line 1 included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
included from MYSQLTEST_VARDIR/tmp/recursive.sql at line 1:
At line 1: Source directives are nesting too deep
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/error.sql":
included from MYSQLTEST_VARDIR/tmp/error.sql at line 1:
At line 1: query 'garbage ' failed: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'garbage' at line 1
2 = outer loop variable after while 2 = outer loop variable after while
here is the sourced script here is the sourced script
...@@ -444,7 +465,9 @@ counter is 6 ...@@ -444,7 +465,9 @@ counter is 6
counter is 7 counter is 7
1 1
Testing while with not Testing while with not
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest_while.inc": At line 64: Nesting too deeply mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest_while.inc":
included from MYSQLTEST_VARDIR/tmp/mysqltest_while.inc at line 65:
At line 64: Nesting too deeply
mysqltest: At line 1: missing '(' in while mysqltest: At line 1: missing '(' in while
mysqltest: At line 1: missing ')' in while mysqltest: At line 1: missing ')' in while
mysqltest: At line 1: Missing '{' after while. Found "dec $i" mysqltest: At line 1: Missing '{' after while. Found "dec $i"
...@@ -493,8 +516,12 @@ mysqltest: At line 1: query 'connect con2,localhost,root,,illegal_db' failed: 1 ...@@ -493,8 +516,12 @@ mysqltest: At line 1: query 'connect con2,localhost,root,,illegal_db' failed: 1
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
200 connects succeeded 200 connects succeeded
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":
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 2: Connection test_con1 already exists included from MYSQLTEST_VARDIR/tmp/mysqltest.sql at line 3:
At line 3: connection 'test_con1' not found in connection pool
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql":
included from MYSQLTEST_VARDIR/tmp/mysqltest.sql at line 2:
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,,; connect con1,localhost,root,,;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
# switched directory after starting the server and am using a relative # switched directory after starting the server and am using a relative
# --defaults-file. # --defaults-file.
--replace_regex /\.dll/.so/ --replace_regex /\.dll/.so/
eval INSTALL PLUGIN example SONAME $HA_EXAMPLE_SO; eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN';
--query_vertical SELECT @@global.connect_timeout AS connect_timeout, @@global.local_infile AS local_infile --query_vertical SELECT @@global.connect_timeout AS connect_timeout, @@global.local_infile AS local_infile
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
--replace_regex /\.dll/.so/ --replace_regex /\.dll/.so/
--error ER_OPTION_PREVENTS_STATEMENT --error ER_OPTION_PREVENTS_STATEMENT
eval INSTALL PLUGIN example SONAME $HA_EXAMPLE_SO; eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN';
--replace_regex /\.dll/.so/ --replace_regex /\.dll/.so/
--error ER_OPTION_PREVENTS_STATEMENT --error ER_OPTION_PREVENTS_STATEMENT
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# BUG#39746 - Debug flag breaks struct definition (server crash) # BUG#39746 - Debug flag breaks struct definition (server crash)
# #
--replace_regex /\.dll/.so/ --replace_regex /\.dll/.so/
eval INSTALL PLUGIN simple_parser SONAME $MYPLUGLIB_SO; eval INSTALL PLUGIN simple_parser SONAME '$SIMPLE_PARSER';
CREATE TABLE t1(a TEXT, b TEXT, FULLTEXT(a) WITH PARSER simple_parser); CREATE TABLE t1(a TEXT, b TEXT, FULLTEXT(a) WITH PARSER simple_parser);
ALTER TABLE t1 ADD FULLTEXT(b) WITH PARSER simple_parser; ALTER TABLE t1 ADD FULLTEXT(b) WITH PARSER simple_parser;
DROP TABLE t1; DROP TABLE t1;
......
...@@ -859,6 +859,12 @@ insert into t1 values ('`select 42`'); ...@@ -859,6 +859,12 @@ insert into t1 values ('`select 42`');
let $a= `select * from t1`; let $a= `select * from t1`;
# This should output `select 42`, not evaluate it again to 42 # This should output `select 42`, not evaluate it again to 42
echo $a; echo $a;
insert into t1 values ('$dollar');
# These should also output the string without evaluating it.
let $a= query_get_value(select * from t1 order by a, a, 1);
echo $a;
let $a= query_get_value(select * from t1 order by a, a, 2);
echo $a;
drop table t1; drop table t1;
--error 1 --error 1
......
...@@ -5,15 +5,15 @@ CREATE TABLE t1(a int) ENGINE=EXAMPLE; ...@@ -5,15 +5,15 @@ CREATE TABLE t1(a int) ENGINE=EXAMPLE;
DROP TABLE t1; DROP TABLE t1;
--replace_regex /\.dll/.so/ --replace_regex /\.dll/.so/
eval INSTALL PLUGIN example SONAME $HA_EXAMPLE_SO; eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN';
--replace_regex /\.dll/.so/ --replace_regex /\.dll/.so/
--error 1125 --error 1125
eval INSTALL PLUGIN EXAMPLE SONAME $HA_EXAMPLE_SO; eval INSTALL PLUGIN EXAMPLE SONAME '$EXAMPLE_PLUGIN';
UNINSTALL PLUGIN example; UNINSTALL PLUGIN example;
--replace_regex /\.dll/.so/ --replace_regex /\.dll/.so/
eval INSTALL PLUGIN example SONAME $HA_EXAMPLE_SO; eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN';
CREATE TABLE t1(a int) ENGINE=EXAMPLE; CREATE TABLE t1(a int) ENGINE=EXAMPLE;
...@@ -41,7 +41,7 @@ UNINSTALL PLUGIN non_exist; ...@@ -41,7 +41,7 @@ UNINSTALL PLUGIN non_exist;
--echo # to impossible int val --echo # to impossible int val
--echo # --echo #
--replace_regex /\.dll/.so/ --replace_regex /\.dll/.so/
eval INSTALL PLUGIN example SONAME $HA_EXAMPLE_SO; eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN';
SET GLOBAL example_enum_var= e1; SET GLOBAL example_enum_var= e1;
SET GLOBAL example_enum_var= e2; SET GLOBAL example_enum_var= e2;
...@@ -56,7 +56,7 @@ UNINSTALL PLUGIN example; ...@@ -56,7 +56,7 @@ UNINSTALL PLUGIN example;
# Bug #32757 hang with sql_mode set when setting some global variables # Bug #32757 hang with sql_mode set when setting some global variables
# #
--replace_regex /\.dll/.so/ --replace_regex /\.dll/.so/
eval INSTALL PLUGIN example SONAME $HA_EXAMPLE_SO; eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN';
select @@session.sql_mode into @old_sql_mode; select @@session.sql_mode into @old_sql_mode;
......
$PLUGIN_AUTH_OPT $PLUGIN_AUTH_INTERFACE_OPT
$PLUGIN_AUTH_INTERFACE $PLUGIN_AUTH_INTERFACE_LOAD
$PLUGIN_AUTH_OPT $PLUGIN_AUTH_SERVER_OPT
$PLUGIN_AUTH_SERVER $PLUGIN_AUTH_SERVER_LOAD
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
GRANT INSERT ON mysql.plugin TO bug51770@localhost; GRANT INSERT ON mysql.plugin TO bug51770@localhost;
connect(con1,localhost,bug51770,,); connect(con1,localhost,bug51770,,);
--replace_regex /\.dll/.so/ --replace_regex /\.dll/.so/
eval INSTALL PLUGIN example SONAME $HA_EXAMPLE_SO; eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN';
--error ER_TABLEACCESS_DENIED_ERROR --error ER_TABLEACCESS_DENIED_ERROR
UNINSTALL PLUGIN example; UNINSTALL PLUGIN example;
connection default; connection default;
...@@ -25,7 +25,7 @@ DROP USER bug51770@localhost; ...@@ -25,7 +25,7 @@ DROP USER bug51770@localhost;
# The bug consisted of not recognizing / on Windows, so checking / on # The bug consisted of not recognizing / on Windows, so checking / on
# all platforms should cover this case. # all platforms should cover this case.
let $path = `select CONCAT_WS('/', '..', $HA_EXAMPLE_SO)`; let $path = `select CONCAT_WS('/', '..', '$EXAMPLE_PLUGIN')`;
--replace_regex /\.dll/.so/ --replace_regex /\.dll/.so/
--error ER_UDF_NO_PATHS --error ER_UDF_NO_PATHS
eval INSTALL PLUGIN example SONAME '$path'; eval INSTALL PLUGIN example SONAME '$path';
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment