mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
Merge with MySQL 5.1, with following additions:
- Moved some code from innodb_plugin to xtradb, to ensure that all tests runs - Did changes in pbxt and maria storage engines becasue of changes in thd->query - Reverted wrong code in sql_table.cc for how ROW_FORMAT is used. This is a re-commit of Monty's merge to eliminate an extra commit from MySQL-5.1.42 that was accidentally included in the merge. This is a merge of the MySQL 5.1.41 clone-off (clone-5.1.41-build). In case there are any extra changes done before final MySQL 5.1.41 release, these will need to be merged later before MariaDB 5.1.41 release.
This commit is contained in:
@@ -41,6 +41,7 @@ our $opt_with_ndbcluster_only;
|
||||
our $defaults_file;
|
||||
our $defaults_extra_file;
|
||||
our $reorder= 1;
|
||||
our $quick_collect;
|
||||
|
||||
sub collect_option {
|
||||
my ($opt, $value)= @_;
|
||||
@@ -68,6 +69,13 @@ require "mtr_misc.pl";
|
||||
my $do_test_reg;
|
||||
my $skip_test_reg;
|
||||
|
||||
# Related to adding InnoDB plugin combinations
|
||||
my $lib_innodb_plugin;
|
||||
my $do_innodb_plugin;
|
||||
|
||||
# If "Quick collect", set to 1 once a test to run has been found.
|
||||
my $some_test_found;
|
||||
|
||||
sub init_pattern {
|
||||
my ($from, $what)= @_;
|
||||
return undef unless defined $from;
|
||||
@@ -100,10 +108,23 @@ sub collect_test_cases ($$) {
|
||||
$do_test_reg= init_pattern($do_test, "--do-test");
|
||||
$skip_test_reg= init_pattern($skip_test, "--skip-test");
|
||||
|
||||
$lib_innodb_plugin=
|
||||
my_find_file($::basedir,
|
||||
["storage/innodb_plugin", "storage/innodb_plugin/.libs",
|
||||
"lib/mysql/plugin", "lib/mariadb/plugin", "lib/plugin"],
|
||||
["ha_innodb_plugin.dll", "ha_innodb_plugin.so",
|
||||
"ha_innodb_plugin.sl"],
|
||||
NOT_REQUIRED);
|
||||
|
||||
$do_innodb_plugin= ($::mysql_version_id >= 50100 &&
|
||||
!(IS_WINDOWS && $::opt_embedded_server) &&
|
||||
$lib_innodb_plugin);
|
||||
|
||||
foreach my $suite (split(",", $suites))
|
||||
{
|
||||
push(@$cases, collect_one_suite($suite, $opt_cases));
|
||||
$found_suites{$suite}= 1;
|
||||
last if $some_test_found;
|
||||
}
|
||||
|
||||
if ( @$opt_cases )
|
||||
@@ -147,7 +168,7 @@ sub collect_test_cases ($$) {
|
||||
}
|
||||
}
|
||||
|
||||
if ( $reorder )
|
||||
if ( $reorder && !$quick_collect)
|
||||
{
|
||||
# Reorder the test cases in an order that will make them faster to run
|
||||
my %sort_criteria;
|
||||
@@ -398,7 +419,7 @@ sub collect_one_suite($)
|
||||
# Read combinations for this suite and build testcases x combinations
|
||||
# if any combinations exists
|
||||
# ----------------------------------------------------------------------
|
||||
if ( ! $skip_combinations )
|
||||
if ( ! $skip_combinations && ! $quick_collect )
|
||||
{
|
||||
my @combinations;
|
||||
my $combination_file= "$suitedir/combinations";
|
||||
@@ -491,21 +512,16 @@ sub collect_one_suite($)
|
||||
# ----------------------------------------------------------------------
|
||||
# Testing InnoDB plugin.
|
||||
# ----------------------------------------------------------------------
|
||||
my $lib_innodb_plugin=
|
||||
mtr_file_exists(::vs_config_dirs('storage/innodb_plugin', 'ha_innodb_plugin.dll'),
|
||||
"$::basedir/storage/innodb_plugin/.libs/ha_innodb_plugin.so",
|
||||
"$::basedir/lib/mariadb/plugin/ha_innodb_plugin.so",
|
||||
"$::basedir/lib/mariadb/plugin/ha_innodb_plugin.dll",
|
||||
"$::basedir/lib/mysql/plugin/ha_innodb_plugin.so",
|
||||
"$::basedir/lib/mysql/plugin/ha_innodb_plugin.dll");
|
||||
if ($::mysql_version_id >= 50100 && !(IS_WINDOWS && $::opt_embedded_server) &&
|
||||
$lib_innodb_plugin)
|
||||
if ($do_innodb_plugin)
|
||||
{
|
||||
my @new_cases;
|
||||
my $sep= (IS_WINDOWS) ? ';' : ':';
|
||||
|
||||
foreach my $test (@cases)
|
||||
{
|
||||
next if ($test->{'skip'} || !$test->{'innodb_test'});
|
||||
next if (!$test->{'innodb_test'});
|
||||
# If skipped due to no builtin innodb, we can still run it with plugin
|
||||
next if ($test->{'skip'} && $test->{comment} ne "No innodb support");
|
||||
# Exceptions
|
||||
next if ($test->{'name'} eq 'main.innodb'); # Failed with wrong errno (fk)
|
||||
next if ($test->{'name'} eq 'main.index_merge_innodb'); # Explain diff
|
||||
@@ -515,6 +531,8 @@ sub collect_one_suite($)
|
||||
next if ($test->{'name'} eq 'sys_vars.innodb_lock_wait_timeout_basic');
|
||||
# Diff around innodb_thread_concurrency variable
|
||||
next if ($test->{'name'} eq 'sys_vars.innodb_thread_concurrency_basic');
|
||||
# Can't work with InnoPlug. Test framework needs to be re-designed.
|
||||
next if ($test->{'name'} eq 'main.innodb_bug46000');
|
||||
# Copy test options
|
||||
my $new_test= My::Test->new();
|
||||
while (my ($key, $value) = each(%$test))
|
||||
@@ -525,23 +543,24 @@ sub collect_one_suite($)
|
||||
}
|
||||
else
|
||||
{
|
||||
$new_test->{$key}= $value;
|
||||
$new_test->{$key}= $value unless ($key eq 'skip');
|
||||
}
|
||||
}
|
||||
my $plugin_filename= basename($lib_innodb_plugin);
|
||||
my $plugin_list= "innodb=$plugin_filename" . $sep . "innodb_locks=$plugin_filename";
|
||||
push(@{$new_test->{master_opt}}, '--ignore-builtin-innodb');
|
||||
push(@{$new_test->{master_opt}}, '--plugin-dir=' . dirname($lib_innodb_plugin));
|
||||
push(@{$new_test->{master_opt}}, "--plugin_load=innodb=$plugin_filename;innodb_locks=$plugin_filename");
|
||||
push(@{$new_test->{master_opt}}, "--plugin_load=$plugin_list");
|
||||
push(@{$new_test->{slave_opt}}, '--ignore-builtin-innodb');
|
||||
push(@{$new_test->{slave_opt}}, '--plugin-dir=' . dirname($lib_innodb_plugin));
|
||||
push(@{$new_test->{slave_opt}}, "--plugin_load=innodb=$plugin_filename;innodb_locks=$plugin_filename");
|
||||
push(@{$new_test->{slave_opt}}, "--plugin_load=$plugin_list");
|
||||
if ($new_test->{combination})
|
||||
{
|
||||
$new_test->{combination}.= ' + InnoDB plugin';
|
||||
$new_test->{combination}.= '+innodb_plugin';
|
||||
}
|
||||
else
|
||||
{
|
||||
$new_test->{combination}= 'InnoDB plugin';
|
||||
$new_test->{combination}= 'innodb_plugin';
|
||||
}
|
||||
push(@new_cases, $new_test);
|
||||
}
|
||||
@@ -670,34 +689,10 @@ sub optimize_cases {
|
||||
}
|
||||
}
|
||||
|
||||
# =======================================================
|
||||
# Check that engine selected by
|
||||
# --default-storage-engine=<engine> is supported
|
||||
# =======================================================
|
||||
my %builtin_engines = ('myisam' => 1, 'memory' => 1);
|
||||
|
||||
foreach my $opt ( @{$tinfo->{master_opt}} ) {
|
||||
my $default_engine=
|
||||
mtr_match_prefix($opt, "--default-storage-engine=");
|
||||
|
||||
if (defined $default_engine){
|
||||
|
||||
|
||||
my $engine_value= $::mysqld_variables{$default_engine};
|
||||
|
||||
if ( ! exists $::mysqld_variables{$default_engine} and
|
||||
! exists $builtin_engines{$default_engine} )
|
||||
{
|
||||
$tinfo->{'skip'}= 1;
|
||||
$tinfo->{'comment'}=
|
||||
"'$default_engine' not supported";
|
||||
}
|
||||
|
||||
$tinfo->{'ndb_test'}= 1
|
||||
if ( $default_engine =~ /^ndb/i );
|
||||
$tinfo->{'innodb_test'}= 1
|
||||
if ( $default_engine =~ /^innodb/i );
|
||||
}
|
||||
if ($quick_collect && ! $tinfo->{'skip'})
|
||||
{
|
||||
$some_test_found= 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@$cases= @new_cases;
|
||||
@@ -1001,21 +996,24 @@ sub collect_one_test_case {
|
||||
|
||||
if ($tinfo->{'federated_test'})
|
||||
{
|
||||
# This is a test that need federated, enable it
|
||||
# This is a test that needs federated, enable it
|
||||
push(@{$tinfo->{'master_opt'}}, "--loose-federated");
|
||||
push(@{$tinfo->{'slave_opt'}}, "--loose-federated");
|
||||
}
|
||||
|
||||
if ( $tinfo->{'innodb_test'} )
|
||||
{
|
||||
# This is a test that need innodb
|
||||
# This is a test that needs innodb
|
||||
if ( $::mysqld_variables{'innodb'} eq "OFF" ||
|
||||
! exists $::mysqld_variables{'innodb'} )
|
||||
{
|
||||
# innodb is not supported, skip it
|
||||
$tinfo->{'skip'}= 1;
|
||||
# This comment is checked for running with innodb plugin (see above),
|
||||
# please keep that in mind if changing the text.
|
||||
$tinfo->{'comment'}= "No innodb support";
|
||||
return $tinfo;
|
||||
# But continue processing if we may run it with innodb plugin
|
||||
return $tinfo unless $do_innodb_plugin;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1071,6 +1069,17 @@ sub collect_one_test_case {
|
||||
}
|
||||
}
|
||||
|
||||
if ( $tinfo->{'need_ssl'} )
|
||||
{
|
||||
# This is a test that needs ssl
|
||||
if ( ! $::opt_ssl_supported ) {
|
||||
# SSL is not supported, skip it
|
||||
$tinfo->{'skip'}= 1;
|
||||
$tinfo->{'comment'}= "No SSL support";
|
||||
return $tinfo;
|
||||
}
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# Find config file to use if not already selected in <testname>.opt file
|
||||
# ----------------------------------------------------------------------
|
||||
@@ -1163,7 +1172,8 @@ my @tags=
|
||||
["federated.inc", "federated_test", 1],
|
||||
["include/not_embedded.inc", "not_embedded", 1],
|
||||
["include/not_valgrind.inc", "not_valgrind", 1],
|
||||
["include/have_example_plugin.inc", "example_plugin_test", 1]
|
||||
["include/have_example_plugin.inc", "example_plugin_test", 1],
|
||||
["include/have_ssl.inc", "need_ssl", 1],
|
||||
);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user