0.67.305
by Bernt M. Johnsen
Copyright headres and license added |
1 |
# Copyright (C) 2008-2009 Sun Microsystems, Inc. All rights reserved.
|
2 |
# Use is subject to license terms.
|
|
3 |
#
|
|
4 |
# This program is free software; you can redistribute it and/or modify
|
|
5 |
# it under the terms of the GNU General Public License as published by
|
|
6 |
# the Free Software Foundation; version 2 of the License.
|
|
7 |
#
|
|
8 |
# This program is distributed in the hope that it will be useful, but
|
|
9 |
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
11 |
# General Public License for more details.
|
|
12 |
#
|
|
13 |
# You should have received a copy of the GNU General Public License
|
|
14 |
# along with this program; if not, write to the Free Software
|
|
15 |
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
|
16 |
# USA
|
|
17 |
||
0.67.1
by Philip Stoev
initial import from internal tree |
18 |
package GenTest::Validator::ResultsetComparator; |
19 |
||
20 |
require Exporter; |
|
21 |
@ISA = qw(GenTest GenTest::Validator); |
|
22 |
||
23 |
use strict; |
|
24 |
||
25 |
use GenTest; |
|
26 |
use GenTest::Constants; |
|
27 |
use GenTest::Comparator; |
|
28 |
use GenTest::Result; |
|
29 |
use GenTest::Validator; |
|
30 |
||
31 |
sub validate { |
|
32 |
my ($comparator, $executors, $results) = @_; |
|
33 |
||
34 |
return STATUS_OK if $#$results != 1; |
|
35 |
||
36 |
my $query = $results->[0]->query(); |
|
37 |
my $compare_outcome = GenTest::Comparator::compare($results->[0], $results->[1]); |
|
38 |
||
0.67.9
by Philip Stoev
merge from internal tree |
39 |
return STATUS_WONT_HANDLE if $results->[0]->status() == STATUS_SEMANTIC_ERROR || $results->[1]->status() == STATUS_SEMANTIC_ERROR; |
40 |
return STATUS_WONT_HANDLE if $results->[0]->query() =~ m{EXPLAIN}sio; |
|
0.67.1
by Philip Stoev
initial import from internal tree |
41 |
|
42 |
if ($compare_outcome == STATUS_LENGTH_MISMATCH) { |
|
43 |
if ($query =~ m{^\s*select}io) { |
|
44 |
say("Query: $query failed: result length mismatch between servers (".$results->[0]->rows()." vs. ".$results->[1]->rows().")"); |
|
45 |
say(GenTest::Comparator::dumpDiff($results->[0], $results->[1])); |
|
46 |
} else { |
|
47 |
say("Query: $query failed: affected_rows mismatch between servers (".$results->[0]->affectedRows()." vs. ".$results->[1]->affectedRows().")"); |
|
48 |
}
|
|
49 |
} elsif ($compare_outcome == STATUS_CONTENT_MISMATCH) { |
|
50 |
say("Query: ".$results->[0]->query()." failed: result content mismatch between servers."); |
|
51 |
say(GenTest::Comparator::dumpDiff($results->[0], $results->[1])); |
|
52 |
}
|
|
53 |
||
54 |
#
|
|
55 |
# If the discrepancy is found on SELECT, we reduce the severity of the error so that the test can continue
|
|
56 |
# hopefully finding further errors in the same run or providing an indication as to how frequent the error is
|
|
57 |
#
|
|
58 |
# If the discrepancy is on an UPDATE, then the servers have diverged and the test can not continue safely.
|
|
59 |
#
|
|
60 |
||
0.67.9
by Philip Stoev
merge from internal tree |
61 |
if ($query =~ m{^[\s/*!0-9]*(EXPLAIN|SELECT|ALTER|LOAD\s+INDEX|CACHE\s+INDEX)}io) { |
0.67.1
by Philip Stoev
initial import from internal tree |
62 |
return $compare_outcome - STATUS_SELECT_REDUCTION; |
63 |
} else { |
|
0.67.9
by Philip Stoev
merge from internal tree |
64 |
return $compare_outcome; |
0.67.1
by Philip Stoev
initial import from internal tree |
65 |
}
|
66 |
}
|
|
67 |
||
68 |
1; |