~drizzle-trunk/drizzle/development

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# Copyright (c) 2008,2011 Oracle and/or its affiliates. All rights reserved.
# Use is subject to license terms.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
# USA

package GenTest::Constants;

require Exporter;

@ISA = qw(Exporter);

@EXPORT = qw(
	STATUS_OK
	STATUS_UNKNOWN_ERROR
	STATUS_ANY_ERROR

	STATUS_EOF
	STATUS_ENVIRONMENT_FAILURE
	STATUS_PERL_FAILURE

	STATUS_CUSTOM_OUTCOME

	STATUS_WONT_HANDLE
	STATUS_SKIP

	STATUS_SYNTAX_ERROR
	STATUS_SEMANTIC_ERROR
	STATUS_TRANSACTION_ERROR

	STATUS_TEST_FAILURE

	STATUS_ERROR_MISMATCH_SELECT
	STATUS_LENGTH_MISMATCH_SELECT
	STATUS_CONTENT_MISMATCH_SELECT
	STATUS_SELECT_REDUCTION

	STATUS_ERROR_MISMATCH
	STATUS_LENGTH_MISMATCH
	STATUS_CONTENT_MISMATCH

	STATUS_CRITICAL_FAILURE
	STATUS_SERVER_CRASHED
	STATUS_SERVER_KILLED
	STATUS_REPLICATION_FAILURE
	STATUS_BACKUP_FAILURE
	STATUS_RECOVERY_FAILURE
	STATUS_DATABASE_CORRUPTION
	STATUS_SERVER_DEADLOCKED
	STATUS_VALGRIND_FAILURE
	STATUS_ALARM

	ORACLE_ISSUE_STILL_REPEATABLE
	ORACLE_ISSUE_NO_LONGER_REPEATABLE
	ORACLE_ISSUE_STATUS_UNKNOWN

	DB_UNKNOWN
	DB_DUMMY
	DB_MYSQL
	DB_POSTGRES
	DB_JAVADB
	DB_DRIZZLE

	DEFAULT_MTR_BUILD_THREAD

	constant2text
	status2text
);

use strict;

use constant STATUS_OK				=> 0; ## Suitable for exit code
use constant STATUS_UNKNOWN_ERROR		=> 2;

use constant STATUS_ANY_ERROR			=> 3;	# Used in util/simplify* to not differentiate based on error code

use constant STATUS_EOF				=> 4;	# A module requested that the test is terminated without failure

use constant STATUS_WONT_HANDLE			=> 5;	# A module, e.g. a Validator refuses to handle certain query
use constant STATUS_SKIP			=> 6;	# A Filter specifies that the query should not be processed further

use constant STATUS_SYNTAX_ERROR		=> 21;
use constant STATUS_SEMANTIC_ERROR		=> 22;	# Errors caused by the randomness of the test, e.g. dropping a non-existing table
use constant STATUS_TRANSACTION_ERROR		=> 23;	# Lock wait timeouts, deadlocks, duplicate keys, etc.

use constant STATUS_TEST_FAILURE		=> 24;	# Boundary between genuine errors and false positives due to randomness

use constant STATUS_SELECT_REDUCTION		=> 5;	# A coefficient to substract from error codes in order to make them non-fatal

use constant STATUS_ERROR_MISMATCH_SELECT	=> 26;	# A SELECT query caused those erros, however the test can continue
use constant STATUS_LENGTH_MISMATCH_SELECT	=> 27;	# since the database has not been modified
use constant STATUS_CONTENT_MISMATCH_SELECT		=> 28;	# 

use constant STATUS_ERROR_MISMATCH		=> 31;	# A DML statement caused those errors, and the test can not continue
use constant STATUS_LENGTH_MISMATCH		=> 32;	# because the databases are in an unknown inconsistent state
use constant STATUS_CONTENT_MISMATCH		=> 33;	#

# Higher-priority errors

use constant STATUS_CRITICAL_FAILURE		=> 100;	# Boundary between critical and non-critical errors

use constant STATUS_ENVIRONMENT_FAILURE		=> 110;	# A failure in the environment or the grammar file
use constant STATUS_PERL_FAILURE		=> 255; # Perl died for some reason

use constant STATUS_CUSTOM_OUTCOME		=> 36;	# Used for things such as signaling an EXPLAIN hit from the ExplainMatch Validator

use constant STATUS_SERVER_CRASHED		=> 101;

use constant STATUS_SERVER_KILLED		=> 102;	# Willfull killing of the server, will not be reported as a crash

use constant STATUS_REPLICATION_FAILURE		=> 103;
use constant STATUS_RECOVERY_FAILURE		=> 104;
use constant STATUS_DATABASE_CORRUPTION		=> 105;
use constant STATUS_SERVER_DEADLOCKED		=> 106;
use constant STATUS_BACKUP_FAILURE		=> 107;
use constant STATUS_VALGRIND_FAILURE		=> 108;
use constant STATUS_ALARM			=> 109; # A module, e.g. a Reporter, raises an alarm with critical severity

use constant ORACLE_ISSUE_STILL_REPEATABLE	=> 1;
use constant ORACLE_ISSUE_NO_LONGER_REPEATABLE	=> 0;
use constant ORACLE_ISSUE_STATUS_UNKNOWN	=> 2;

use constant DB_UNKNOWN		=> 0;
use constant DB_DUMMY        => 1;
use constant DB_MYSQL		=> 2;
use constant DB_POSTGRES	=> 3;
use constant DB_JAVADB		=> 4;
use constant DB_DRIZZLE		=> 5;

use constant DEFAULT_MTR_BUILD_THREAD => 930; ## Legacy...

#
# The part below deals with constant value to constant name conversions
#


my %text2value;

sub BEGIN {

	# What we do here is open the Constants.pm file and parse the 'use constant' lines from it
	# The regexp is faily hairy in order to be more permissive.

	open (CONSTFILE, __FILE__) or die "Unable to read constants from ".__FILE__;
	read(CONSTFILE, my $constants_text, -s __FILE__);
	%text2value = $constants_text =~ m{^\s*use\s+constant\s+([A-Z_0-9]*?)\s*=>\s*(\d+)\s*;}mgio;
}

sub constant2text {
	my ($constant_value, $prefix) = @_;

	foreach my $constant_text (keys %text2value) {
		return $constant_text if $text2value{$constant_text} == $constant_value && $constant_text =~ m{^$prefix}si;
	}
	warn "Unable to obtain constant text for constant_value = $constant_value; prefix = $prefix";
	return undef;
}

sub status2text {
	return constant2text($_[0], 'STATUS_');
}

1;