~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to lib/GenTest/Transform/DisableChosenPlan.pm

only use SET optimizer_switch on switches that are supported in the particular server release

Show diffs side-by-side

added added

removed removed

Lines of Context:
45
45
        '<exists>'              => 'in_to_exists'
46
46
);
47
47
 
 
48
my $available_switches;
 
49
 
48
50
sub transform {
49
51
        my ($class, $original_query, $executor) = @_;
50
52
 
 
53
        if (not defined $available_switches) {
 
54
                my $optimizer_switches = $executor->dbh()->selectrow_array('SELECT @@optimizer_switch');
 
55
                my @optimizer_switches = split(',', $optimizer_switches);
 
56
                foreach my $optimizer_switch (@optimizer_switches) {
 
57
                        my ($switch_name, $switch_value) = split('=', $optimizer_switch);
 
58
                        $available_switches->{$switch_name}++;
 
59
                }
 
60
        }
 
61
 
51
62
        return STATUS_WONT_HANDLE if $original_query !~ m{^\s*SELECT}sio;
52
63
 
53
64
        my $original_explain = $executor->execute("EXPLAIN EXTENDED $original_query");
62
73
 
63
74
        my @transformed_queries;
64
75
        while (my ($explain_fragment, $optimizer_switch) = each %explain2switch) {
 
76
                next if not exists $available_switches->{$optimizer_switch};
65
77
                if ($original_explain_string =~ m{$explain_fragment}si) {
66
78
                        push @transformed_queries,
67
79
                                "SET SESSION optimizer_switch='".$optimizer_switch."=OFF' ;",