merge from 5.5-mtr
This commit is contained in:
commit
add4d5c006
@ -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,
|
|||||||
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()
|
|||||||
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)
|
|||||||
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, ...)
|
|||||||
/* 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, ...)
|
|||||||
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)
|
|||||||
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)
|
|||||||
|
|
||||||
|
|
||||||
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,
|
|||||||
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,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
|||||||
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)
|
|||||||
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:
|
|||||||
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
|
|||||||
|
|
||||||
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
|
||||||
|
41
mysql-test/include/plugin.defs
Normal file
41
mysql-test/include/plugin.defs
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# 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 ($$$$) {
|
|||||||
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 ($) {
|
|||||||
# 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 ($$;$) {
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
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 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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;
|
|||||||
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 {
|
|||||||
|
|
||||||
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 {
|
|||||||
"$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($$)
|
|||||||
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 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
# Add the path where mysqld will find udf_example.so
|
# Read definitions from include/plugin.defs
|
||||||
|
#
|
||||||
|
# Plugin settings should no longer be added here, instead
|
||||||
|
# place definitions in include/plugin.defs.
|
||||||
|
# See comment in that file for details.
|
||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
my $udf_example_filename;
|
read_plugin_defs("include/plugin.defs");
|
||||||
if (IS_WINDOWS)
|
|
||||||
{
|
|
||||||
$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 )
|
# Simplify reference to semisync plugins
|
||||||
{
|
$ENV{'SEMISYNC_PLUGIN_OPT'}= $ENV{'SEMISYNC_MASTER_PLUGIN_OPT'};
|
||||||
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) {
|
|
||||||
|
|
||||||
|
|
||||||
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)."'";
|
|
||||||
$ENV{'SIMPLE_PARSER'}=
|
|
||||||
($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
|
|||||||
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
|
|||||||
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
|
|||||||
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 @@
|
|||||||
# 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 @@
|
|||||||
|
|
||||||
--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 @@
|
|||||||
# 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`');
|
|||||||
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;
|
|||||||
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;
|
|||||||
--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;
|
|||||||
# 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;
|
||||||
|
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
$PLUGIN_AUTH_OPT
|
$PLUGIN_AUTH_INTERFACE_OPT
|
||||||
$PLUGIN_AUTH_INTERFACE
|
$PLUGIN_AUTH_INTERFACE_LOAD
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
$PLUGIN_AUTH_OPT
|
$PLUGIN_AUTH_SERVER_OPT
|
||||||
$PLUGIN_AUTH_SERVER
|
$PLUGIN_AUTH_SERVER_LOAD
|
||||||
|
@ -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;
|
|||||||
# 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';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user