1
|
|
|
<?php |
2
|
|
|
/* |
3
|
|
|
* This file is part of the Pomm's Foundation package. |
4
|
|
|
* |
5
|
|
|
* (c) 2014 - 2017 Grégoire HUBERT <[email protected]> |
6
|
|
|
* |
7
|
|
|
* For the full copyright and license information, please view the LICENSE |
8
|
|
|
* file that was distributed with this source code. |
9
|
|
|
*/ |
10
|
|
|
namespace PommProject\Foundation\Exception; |
11
|
|
|
|
12
|
|
|
/** |
13
|
|
|
* SqlException |
14
|
|
|
* |
15
|
|
|
* Errors from the rdbms with the result resource. |
16
|
|
|
* |
17
|
|
|
* @link https://www.postgresql.org/docs/current/errcodes-appendix.html |
18
|
|
|
* @package Foundation |
19
|
|
|
* @uses FoundationException |
20
|
|
|
* @copyright 2014 - 2017 Grégoire HUBERT |
21
|
|
|
* @author Grégoire HUBERT <[email protected]> |
22
|
|
|
* @license X11 {@link http://opensource.org/licenses/mit-license.php} |
23
|
|
|
*/ |
24
|
|
|
class SqlException extends FoundationException |
25
|
|
|
{ |
26
|
|
|
/* 00 - Successful Completion */ |
27
|
|
|
const SUCCESSFUL_COMPLETION = '00000'; |
28
|
|
|
/* 01 - Warning */ |
29
|
|
|
const WARNING = '01000'; |
30
|
|
|
const DYNAMIC_RESULT_SETS_RETURNED = '0100C'; |
31
|
|
|
const IMPLICIT_ZERO_BIT_PADDING = '01008'; |
32
|
|
|
const NULL_VALUE_ELIMINATED_IN_SET_FUNCTION = '01003'; |
33
|
|
|
const PRIVILEGE_NOT_GRANTED = '01007'; |
34
|
|
|
const PRIVILEGE_NOT_REVOKED = '01006'; |
35
|
|
|
const STRING_DATA_RIGHT_TRUNCATION = '01004'; |
36
|
|
|
const DEPRECATED_FEATURE = '01P01'; |
37
|
|
|
/* 02 - No Data (this is also a warning class per the SQL standard) */ |
38
|
|
|
const NO_DATA = '02000'; |
39
|
|
|
const NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED = '02001'; |
40
|
|
|
/* 03 - SQL Statement Not Yet Complete */ |
41
|
|
|
const SQL_STATEMENT_NOT_YET_COMPLETE = '03000'; |
42
|
|
|
/* 08 - Connection Exception */ |
43
|
|
|
const CONNECTION_EXCEPTION = '08000'; |
44
|
|
|
const CONNECTION_DOES_NOT_EXIST = '08003'; |
45
|
|
|
const CONNECTION_FAILURE = '08006'; |
46
|
|
|
const SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION = '08001'; |
47
|
|
|
const SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION = '08004'; |
48
|
|
|
const TRANSACTION_RESOLUTION_UNKNOWN = '08007'; |
49
|
|
|
const PROTOCOL_VIOLATION = '08P01'; |
50
|
|
|
/* 09 - Triggered Action Exception */ |
51
|
|
|
const TRIGGERED_ACTION_EXCEPTION = '09000'; |
52
|
|
|
/* 0A - Feature Not Supported */ |
53
|
|
|
const FEATURE_NOT_SUPPORTED = '0A000'; |
54
|
|
|
/* 0B - Invalid Transaction Initiation */ |
55
|
|
|
const INVALID_TRANSACTION_INITIATION = '0B000'; |
56
|
|
|
/* 0F - Locator Exception */ |
57
|
|
|
const LOCATOR_EXCEPTION = '0F000'; |
58
|
|
|
const INVALID_LOCATOR_SPECIFICATION = '0F001'; |
59
|
|
|
/* 0L - Invalid Grantor */ |
60
|
|
|
const INVALID_GRANTOR = '0L000'; |
61
|
|
|
const INVALID_GRANT_OPERATION = '0LP01'; |
62
|
|
|
/* 0P - Invalid Role Specification */ |
63
|
|
|
const INVALID_ROLE_SPECIFICATION = '0P000'; |
64
|
|
|
/* 0Z - Diagnostics Exception */ |
65
|
|
|
const DIAGNOSTICS_EXCEPTION = '0Z000'; |
66
|
|
|
const STACKED_DIAGNOSTICS_ACCESSED_WITHOUT_ACTIVE_HANDLER = '0Z002'; |
67
|
|
|
/* 20 - Case Not Found */ |
68
|
|
|
const CASE_NOT_FOUND = '20000'; |
69
|
|
|
/* 21 - Cardinality Violation */ |
70
|
|
|
const CARDINALITY_VIOLATION = '21000'; |
71
|
|
|
/* 22 - Data Exception */ |
72
|
|
|
const DATA_EXCEPTION = '22000'; |
73
|
|
|
const ARRAY_SUBSCRIPT_ERROR = '2202E'; |
74
|
|
|
const CHARACTER_NOT_IN_REPERTOIRE = '22021'; |
75
|
|
|
const DATETIME_FIELD_OVERFLOW = '22008'; |
76
|
|
|
const DIVISION_BY_ZERO = '22012'; |
77
|
|
|
const ERROR_IN_ASSIGNMENT = '22005'; |
78
|
|
|
const ESCAPE_CHARACTER_CONFLICT = '2200B'; |
79
|
|
|
const INDICATOR_OVERFLOW = '22022'; |
80
|
|
|
const INTERVAL_FIELD_OVERFLOW = '22017'; |
81
|
|
|
const INVALID_ARGUMENT_FOR_LOGARITHM = '2201E'; |
82
|
|
|
const INVALID_ARGUMENT_FOR_NTILE_FUNCTION = '22014'; |
83
|
|
|
const INVALID_ARGUMENT_FOR_NTH_VALUE_FUNCTION = '22017'; |
84
|
|
|
const INVALID_ARGUMENT_FOR_POWER_FUNCTION = '2201F'; |
85
|
|
|
const INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION = '2201G'; |
86
|
|
|
const INVALID_CHARACTER_VALUE_FOR_CAST = '22018'; |
87
|
|
|
const INVALID_DATETIME_FORMAT = '22007'; |
88
|
|
|
const INVALID_ESCAPE_CHARACTER = '22019'; |
89
|
|
|
const INVALID_ESCAPE_OCTET = '2200D'; |
90
|
|
|
const INVALID_ESCAPE_SEQUENCE = '22025'; |
91
|
|
|
const NONSTANDARD_USE_OF_ESCAPE_CHARACTER = '22P06'; |
92
|
|
|
const INVALID_INDICATOR_PARAMETER_VALUE = '22010'; |
93
|
|
|
const INVALID_PARAMETER_VALUE = '22023'; |
94
|
|
|
const INVALID_PRECEDING_OR_FOLLOWING_SIZE = '22013'; |
95
|
|
|
const INVALID_REGULAR_EXPRESSION = '2201B'; |
96
|
|
|
const INVALID_ROW_COUNT_IN_LIMIT_CLAUSE = '2201W'; |
97
|
|
|
const INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE = '2201X'; |
98
|
|
|
const INVALID_TABLESAMPLE_ARGUMENT = '2202H'; |
99
|
|
|
const INVALID_TABLESAMPLE_REPEAT = '2202G'; |
100
|
|
|
const INVALID_TIME_ZONE_DISPLACEMENT_VALUE = '22009'; |
101
|
|
|
const INVALID_USE_OF_ESCAPE_CHARACTER = '2200C'; |
102
|
|
|
const MOST_SPECIFIC_TYPE_MISMATCH = '2200G'; |
103
|
|
|
const NULL_VALUE_NOT_ALLOWED = '22004'; |
104
|
|
|
const NULL_VALUE_NO_INDICATOR_PARAMETER = '22002'; |
105
|
|
|
const NUMERIC_VALUE_OUT_OF_RANGE = '22003'; |
106
|
|
|
const SEQUENCE_GENERATOR_LIMIT_EXCEEDED = '2200H'; |
107
|
|
|
const STRING_DATA_LENGTH_MISMATCH = '22026'; |
108
|
|
|
#const STRING_DATA_RIGHT_TRUNCATION = '22001'; |
109
|
|
|
const SUBSTRING_ERROR = '22011'; |
110
|
|
|
const TRIM_ERROR = '22027'; |
111
|
|
|
const UNTERMINATED_C_STRING = '22024'; |
112
|
|
|
const ZERO_LENGTH_CHARACTER_STRING = '2200F'; |
113
|
|
|
const FLOATING_POINT_EXCEPTION = '22P01'; |
114
|
|
|
const INVALID_TEXT_REPRESENTATION = '22P02'; |
115
|
|
|
const INVALID_BINARY_REPRESENTATION = '22P03'; |
116
|
|
|
const BAD_COPY_FILE_FORMAT = '22P04'; |
117
|
|
|
const UNTRANSLATABLE_CHARACTER = '22P05'; |
118
|
|
|
const NOT_AN_XML_DOCUMENT = '2200L'; |
119
|
|
|
const INVALID_XML_DOCUMENT = '2200M'; |
120
|
|
|
const INVALID_XML_CONTENT = '2200N'; |
121
|
|
|
const INVALID_XML_COMMENT = '2200S'; |
122
|
|
|
const INVALID_XML_PROCESSING_INSTRUCTION = '2200T'; |
123
|
|
|
const DUPLICATE_JSON_OBJECT_KEY_VALUE = '22030'; |
124
|
|
|
const INVALID_ARGUMENT_FOR_SQL_JSON_DATETIME_FUNCTION = '22031'; |
125
|
|
|
const INVALID_JSON_TEXT = '22032'; |
126
|
|
|
const INVALID_SQL_JSON_SUBSCRIPT = '22033'; |
127
|
|
|
const MORE_THAN_ONE_SQL_JSON_ITEM = '22034'; |
128
|
|
|
const NO_SQL_JSON_ITEM = '22035'; |
129
|
|
|
const NON_NUMERIC_SQL_JSON_ITEM = '22036'; |
130
|
|
|
const NON_UNIQUE_KEYS_IN_A_JSON_OBJECT = '22037'; |
131
|
|
|
const SINGLETON_SQL_JSON_ITEM_REQUIRED = '22038'; |
132
|
|
|
const SQL_JSON_ARRAY_NOT_FOUND = '22039'; |
133
|
|
|
const SQL_JSON_MEMBER_NOT_FOUND = '2203A'; |
134
|
|
|
const SQL_JSON_NUMBER_NOT_FOUND = '2203B'; |
135
|
|
|
const SQL_JSON_OBJECT_NOT_FOUND = '2203C'; |
136
|
|
|
const TOO_MANY_JSON_ARRAY_ELEMENTS = '2203D'; |
137
|
|
|
const TOO_MANY_JSON_OBJECT_MEMBERS = '2203E'; |
138
|
|
|
const SQL_JSON_SCALAR_REQUIRED = '2203F'; |
139
|
|
|
/* 23 - Integrity Constraint Violation */ |
140
|
|
|
const INTEGRITY_CONSTRAINT_VIOLATION = '23000'; |
141
|
|
|
const RESTRICT_VIOLATION = '23001'; |
142
|
|
|
const NOT_NULL_VIOLATION = '23502'; |
143
|
|
|
const FOREIGN_KEY_VIOLATION = '23503'; |
144
|
|
|
const UNIQUE_VIOLATION = '23505'; |
145
|
|
|
const CHECK_VIOLATION = '23514'; |
146
|
|
|
const EXCLUSION_VIOLATION = '23P01'; |
147
|
|
|
/* 24 - Invalid Cursor State */ |
148
|
|
|
const INVALID_CURSOR_STATE = '24000'; |
149
|
|
|
/* 25 - Invalid Transaction State */ |
150
|
|
|
const INVALID_TRANSACTION_STATE = '25000'; |
151
|
|
|
const ACTIVE_SQL_TRANSACTION = '25001'; |
152
|
|
|
const BRANCH_TRANSACTION_ALREADY_ACTIVE = '25002'; |
153
|
|
|
const HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL = '25008'; |
154
|
|
|
const INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION = '25003'; |
155
|
|
|
const INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION = '25004'; |
156
|
|
|
const NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION = '25005'; |
157
|
|
|
const READ_ONLY_SQL_TRANSACTION = '25006'; |
158
|
|
|
const SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED = '25007'; |
159
|
|
|
const NO_ACTIVE_SQL_TRANSACTION = '25P01'; |
160
|
|
|
const IN_FAILED_SQL_TRANSACTION = '25P02'; |
161
|
|
|
const IDLE_IN_TRANSACTION_SESSION_TIMEOUT = '25P03'; |
162
|
|
|
/* 26 - Invalid SQL Statement Name */ |
163
|
|
|
const INVALID_SQL_STATEMENT_NAME = '26000'; |
164
|
|
|
/* 27 - Triggered Data Change Violation */ |
165
|
|
|
const TRIGGERED_DATA_CHANGE_VIOLATION = '27000'; |
166
|
|
|
/* 28 - Invalid Authorization Specification */ |
167
|
|
|
const INVALID_AUTHORIZATION_SPECIFICATION = '28000'; |
168
|
|
|
const INVALID_PASSWORD = '28P01'; |
169
|
|
|
/* 2B - Dependent Privilege Descriptors Still Exist */ |
170
|
|
|
const DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST = '2B000'; |
171
|
|
|
const DEPENDENT_OBJECTS_STILL_EXIST = '2BP01'; |
172
|
|
|
/* 2D - Invalid Transaction Termination */ |
173
|
|
|
const INVALID_TRANSACTION_TERMINATION = '2D000'; |
174
|
|
|
/* 2F - SQL Routine Exception */ |
175
|
|
|
const SQL_ROUTINE_EXCEPTION = '2F000'; |
176
|
|
|
const FUNCTION_EXECUTED_NO_RETURN_STATEMENT = '2F005'; |
177
|
|
|
const MODIFYING_SQL_DATA_NOT_PERMITTED = '2F002'; |
178
|
|
|
const PROHIBITED_SQL_STATEMENT_ATTEMPTED = '2F003'; |
179
|
|
|
const READING_SQL_DATA_NOT_PERMITTED = '2F004'; |
180
|
|
|
/* 34 - Invalid Cursor Name */ |
181
|
|
|
const INVALID_CURSOR_NAME = '34000'; |
182
|
|
|
/* 38 - External Routine Exception */ |
183
|
|
|
const EXTERNAL_ROUTINE_EXCEPTION = '38000'; |
184
|
|
|
const CONTAINING_SQL_NOT_PERMITTED = '38001'; |
185
|
|
|
#const MODIFYING_SQL_DATA_NOT_PERMITTED = '38002'; |
186
|
|
|
#const PROHIBITED_SQL_STATEMENT_ATTEMPTED = '38003'; |
187
|
|
|
#const READING_SQL_DATA_NOT_PERMITTED = '38004'; |
188
|
|
|
/* 39 - External Routine Invocation Exception */ |
189
|
|
|
const EXTERNAL_ROUTINE_INVOCATION_EXCEPTION = '39000'; |
190
|
|
|
const INVALID_SQLSTATE_RETURNED = '39001'; |
191
|
|
|
#const NULL_VALUE_NOT_ALLOWED = '39004'; |
192
|
|
|
const TRIGGER_PROTOCOL_VIOLATED = '39P01'; |
193
|
|
|
const SRF_PROTOCOL_VIOLATED = '39P02'; |
194
|
|
|
const EVENT_TRIGGER_PROTOCOL_VIOLATED = '39P03'; |
195
|
|
|
/* 3B - Savepoint Exception */ |
196
|
|
|
const SAVEPOINT_EXCEPTION = '3B000'; |
197
|
|
|
const INVALID_SAVEPOINT_SPECIFICATION = '3B001'; |
198
|
|
|
/* 3D - Invalid Catalog Name */ |
199
|
|
|
const INVALID_CATALOG_NAME = '3D000'; |
200
|
|
|
/* 3F - Invalid Schema Name */ |
201
|
|
|
const INVALID_SCHEMA_NAME = '3F000'; |
202
|
|
|
/* 40 - Transaction Rollback */ |
203
|
|
|
const TRANSACTION_ROLLBACK = '40000'; |
204
|
|
|
const TRANSACTION_INTEGRITY_CONSTRAINT_VIOLATION = '40002'; |
205
|
|
|
const SERIALIZATION_FAILURE = '40001'; |
206
|
|
|
const STATEMENT_COMPLETION_UNKNOWN = '40003'; |
207
|
|
|
const DEADLOCK_DETECTED = '40P01'; |
208
|
|
|
/* 42 - Syntax Error or Access Rule Violation */ |
209
|
|
|
const SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION = '42000'; |
210
|
|
|
const SYNTAX_ERROR = '42601'; |
211
|
|
|
const INSUFFICIENT_PRIVILEGE = '42501'; |
212
|
|
|
const CANNOT_COERCE = '42846'; |
213
|
|
|
const GROUPING_ERROR = '42803'; |
214
|
|
|
const WINDOWING_ERROR = '42P20'; |
215
|
|
|
const INVALID_RECURSION = '42P19'; |
216
|
|
|
const INVALID_FOREIGN_KEY = '42830'; |
217
|
|
|
const INVALID_NAME = '42602'; |
218
|
|
|
const NAME_TOO_LONG = '42622'; |
219
|
|
|
const RESERVED_NAME = '42939'; |
220
|
|
|
const DATATYPE_MISMATCH = '42804'; |
221
|
|
|
const INDETERMINATE_DATATYPE = '42P18'; |
222
|
|
|
const COLLATION_MISMATCH = '42P21'; |
223
|
|
|
const INDETERMINATE_COLLATION = '42P22'; |
224
|
|
|
const WRONG_OBJECT_TYPE = '42809'; |
225
|
|
|
const GENERATED_ALWAYS = '428C9'; |
226
|
|
|
const UNDEFINED_COLUMN = '42703'; |
227
|
|
|
const UNDEFINED_FUNCTION = '42883'; |
228
|
|
|
const UNDEFINED_TABLE = '42P01'; |
229
|
|
|
const UNDEFINED_PARAMETER = '42P02'; |
230
|
|
|
const UNDEFINED_OBJECT = '42704'; |
231
|
|
|
const DUPLICATE_COLUMN = '42701'; |
232
|
|
|
const DUPLICATE_CURSOR = '42P03'; |
233
|
|
|
const DUPLICATE_DATABASE = '42P04'; |
234
|
|
|
const DUPLICATE_FUNCTION = '42723'; |
235
|
|
|
const DUPLICATE_PREPARED_STATEMENT = '42P05'; |
236
|
|
|
const DUPLICATE_SCHEMA = '42P06'; |
237
|
|
|
const DUPLICATE_TABLE = '42P07'; |
238
|
|
|
const DUPLICATE_ALIAS = '42712'; |
239
|
|
|
const DUPLICATE_OBJECT = '42710'; |
240
|
|
|
const AMBIGUOUS_COLUMN = '42702'; |
241
|
|
|
const AMBIGUOUS_FUNCTION = '42725'; |
242
|
|
|
const AMBIGUOUS_PARAMETER = '42P08'; |
243
|
|
|
const AMBIGUOUS_ALIAS = '42P09'; |
244
|
|
|
const INVALID_COLUMN_REFERENCE = '42P10'; |
245
|
|
|
const INVALID_COLUMN_DEFINITION = '42611'; |
246
|
|
|
const INVALID_CURSOR_DEFINITION = '42P11'; |
247
|
|
|
const INVALID_DATABASE_DEFINITION = '42P12'; |
248
|
|
|
const INVALID_FUNCTION_DEFINITION = '42P13'; |
249
|
|
|
const INVALID_PREPARED_STATEMENT_DEFINITION = '42P14'; |
250
|
|
|
const INVALID_SCHEMA_DEFINITION = '42P15'; |
251
|
|
|
const INVALID_TABLE_DEFINITION = '42P16'; |
252
|
|
|
const INVALID_OBJECT_DEFINITION = '42P17'; |
253
|
|
|
/* 44 - WITH CHECK OPTION Violation */ |
254
|
|
|
const WITH_CHECK_OPTION_VIOLATION = '44000'; |
255
|
|
|
/* 53 - Insufficient Resources */ |
256
|
|
|
const INSUFFICIENT_RESOURCES = '53000'; |
257
|
|
|
const DISK_FULL = '53100'; |
258
|
|
|
const OUT_OF_MEMORY = '53200'; |
259
|
|
|
const TOO_MANY_CONNECTIONS = '53300'; |
260
|
|
|
const CONFIGURATION_LIMIT_EXCEEDED = '53400'; |
261
|
|
|
/* 54 - Program Limit Exceeded */ |
262
|
|
|
const PROGRAM_LIMIT_EXCEEDED = '54000'; |
263
|
|
|
const STATEMENT_TOO_COMPLEX = '54001'; |
264
|
|
|
const TOO_MANY_COLUMNS = '54011'; |
265
|
|
|
const TOO_MANY_ARGUMENTS = '54023'; |
266
|
|
|
/* 55 - Object Not In Prerequisite State */ |
267
|
|
|
const OBJECT_NOT_IN_PREREQUISITE_STATE = '55000'; |
268
|
|
|
const OBJECT_IN_USE = '55006'; |
269
|
|
|
const CANT_CHANGE_RUNTIME_PARAM = '55P02'; |
270
|
|
|
const LOCK_NOT_AVAILABLE = '55P03'; |
271
|
|
|
const UNSAFE_NEW_ENUM_VALUE_USAGE = '55P04'; |
272
|
|
|
/* 57 - Operator Intervention */ |
273
|
|
|
const OPERATOR_INTERVENTION = '57000'; |
274
|
|
|
const QUERY_CANCELED = '57014'; |
275
|
|
|
const ADMIN_SHUTDOWN = '57P01'; |
276
|
|
|
const CRASH_SHUTDOWN = '57P02'; |
277
|
|
|
const CANNOT_CONNECT_NOW = '57P03'; |
278
|
|
|
const DATABASE_DROPPED = '57P04'; |
279
|
|
|
/* 58 - System Error (errors external to PostgreSQL itself) */ |
280
|
|
|
const SYSTEM_ERROR = '58000'; |
281
|
|
|
const IO_ERROR = '58030'; |
282
|
|
|
const UNDEFINED_FILE = '58P01'; |
283
|
|
|
const DUPLICATE_FILE = '58P02'; |
284
|
|
|
/* F0 - Configuration File Error */ |
285
|
|
|
const CONFIG_FILE_ERROR = 'F0000'; |
286
|
|
|
const LOCK_FILE_EXISTS = 'F0001'; |
287
|
|
|
/* HV - Foreign Data Wrapper Error (SQL/MED) */ |
288
|
|
|
const FDW_ERROR = 'HV000'; |
289
|
|
|
const FDW_COLUMN_NAME_NOT_FOUND = 'HV005'; |
290
|
|
|
const FDW_DYNAMIC_PARAMETER_VALUE_NEEDED = 'HV002'; |
291
|
|
|
const FDW_FUNCTION_SEQUENCE_ERROR = 'HV010'; |
292
|
|
|
const FDW_INCONSISTENT_DESCRIPTOR_INFORMATION = 'HV021'; |
293
|
|
|
const FDW_INVALID_ATTRIBUTE_VALUE = 'HV024'; |
294
|
|
|
const FDW_INVALID_COLUMN_NAME = 'HV007'; |
295
|
|
|
const FDW_INVALID_COLUMN_NUMBER = 'HV008'; |
296
|
|
|
const FDW_INVALID_DATA_TYPE = 'HV004'; |
297
|
|
|
const FDW_INVALID_DATA_TYPE_DESCRIPTORS = 'HV006'; |
298
|
|
|
const FDW_INVALID_DESCRIPTOR_FIELD_IDENTIFIER = 'HV091'; |
299
|
|
|
const FDW_INVALID_HANDLE = 'HV00B'; |
300
|
|
|
const FDW_INVALID_OPTION_INDEX = 'HV00C'; |
301
|
|
|
const FDW_INVALID_OPTION_NAME = 'HV00D'; |
302
|
|
|
const FDW_INVALID_STRING_LENGTH_OR_BUFFER_LENGTH = 'HV090'; |
303
|
|
|
const FDW_INVALID_STRING_FORMAT = 'HV00A'; |
304
|
|
|
const FDW_INVALID_USE_OF_NULL_POINTER = 'HV009'; |
305
|
|
|
const FDW_TOO_MANY_HANDLES = 'HV014'; |
306
|
|
|
const FDW_OUT_OF_MEMORY = 'HV001'; |
307
|
|
|
const FDW_NO_SCHEMAS = 'HV00P'; |
308
|
|
|
const FDW_OPTION_NAME_NOT_FOUND = 'HV00J'; |
309
|
|
|
const FDW_REPLY_HANDLE = 'HV00K'; |
310
|
|
|
const FDW_SCHEMA_NOT_FOUND = 'HV00Q'; |
311
|
|
|
const FDW_TABLE_NOT_FOUND = 'HV00R'; |
312
|
|
|
const FDW_UNABLE_TO_CREATE_EXECUTION = 'HV00L'; |
313
|
|
|
const FDW_UNABLE_TO_CREATE_REPLY = 'HV00M'; |
314
|
|
|
const FDW_UNABLE_TO_ESTABLISH_CONNECTION = 'HV00N'; |
315
|
|
|
/* P0 - PL/pgSQL Error */ |
316
|
|
|
const PLPGSQL_ERROR = 'P0000'; |
317
|
|
|
const RAISE_EXCEPTION = 'P0001'; |
318
|
|
|
const NO_DATA_FOUND = 'P0002'; |
319
|
|
|
const TOO_MANY_ROWS = 'P0003'; |
320
|
|
|
const ASSERT_FAILURE = 'P0004'; |
321
|
|
|
/* XX - Internal Error */ |
322
|
|
|
const INTERNAL_ERROR = 'XX000'; |
323
|
|
|
const DATA_CORRUPTED = 'XX001'; |
324
|
|
|
const INDEX_CORRUPTED = 'XX002'; |
325
|
|
|
|
326
|
|
|
protected $result_resource; |
327
|
|
|
protected $sql; |
328
|
|
|
protected $query_parameters = []; |
329
|
|
|
|
330
|
|
|
/** |
331
|
|
|
* __construct |
332
|
|
|
* |
333
|
|
|
* @param resource $result_resource |
334
|
|
|
* @param string $sql |
335
|
|
|
* @param string $code |
336
|
|
|
* @param \Exception $e |
337
|
|
|
*/ |
338
|
|
|
public function __construct($result_resource, $sql, $code = null, \Exception $e = null) |
339
|
|
|
{ |
340
|
|
|
$this->result_resource = $result_resource; |
341
|
|
|
$this->sql = $sql; |
342
|
|
|
parent::__construct( |
343
|
|
|
sprintf( |
344
|
|
|
"\nSQL error state '%s' [%s]\n====\n%s\n====\n«%s».", |
345
|
|
|
$this->getSQLErrorState(), |
346
|
|
|
$this->getSQLErrorSeverity(), |
347
|
|
|
$this->getSqlErrorMessage(), |
348
|
|
|
$sql |
349
|
|
|
), |
350
|
|
|
$code, |
351
|
|
|
$e |
352
|
|
|
); |
353
|
|
|
} |
354
|
|
|
|
355
|
|
|
/** |
356
|
|
|
* getSQLErrorState |
357
|
|
|
* |
358
|
|
|
* Returns the SQLSTATE of the last SQL error. |
359
|
|
|
* |
360
|
|
|
* @link http://www.postgresql.org/docs/9.0/interactive/errcodes-appendix.html |
361
|
|
|
* @return string |
362
|
|
|
*/ |
363
|
|
|
public function getSQLErrorState() |
364
|
|
|
{ |
365
|
|
|
return pg_result_error_field($this->result_resource, \PGSQL_DIAG_SQLSTATE); |
366
|
|
|
} |
367
|
|
|
|
368
|
|
|
/** |
369
|
|
|
* getSQLErrorSeverity |
370
|
|
|
* |
371
|
|
|
* Returns the severity level of the error. |
372
|
|
|
* |
373
|
|
|
* @return string |
374
|
|
|
*/ |
375
|
|
|
public function getSQLErrorSeverity() |
376
|
|
|
{ |
377
|
|
|
return pg_result_error_field($this->result_resource, \PGSQL_DIAG_SEVERITY); |
378
|
|
|
} |
379
|
|
|
|
380
|
|
|
/** |
381
|
|
|
* getSqlErrorMessage |
382
|
|
|
* |
383
|
|
|
* Returns the error message sent by the server. |
384
|
|
|
* |
385
|
|
|
* @return string |
386
|
|
|
*/ |
387
|
|
|
|
388
|
|
|
public function getSqlErrorMessage() |
389
|
|
|
{ |
390
|
|
|
return pg_result_error($this->result_resource); |
391
|
|
|
} |
392
|
|
|
|
393
|
|
|
/** |
394
|
|
|
* getSQLDetailedErrorMessage |
395
|
|
|
* |
396
|
|
|
* @return string |
397
|
|
|
*/ |
398
|
|
|
public function getSQLDetailedErrorMessage() |
399
|
|
|
{ |
400
|
|
|
return sprintf( |
401
|
|
|
"«%s»\n%s\n(%s)", |
402
|
|
|
pg_result_error_field($this->result_resource, \PGSQL_DIAG_MESSAGE_PRIMARY), |
403
|
|
|
pg_result_error_field($this->result_resource, \PGSQL_DIAG_MESSAGE_DETAIL), |
404
|
|
|
pg_result_error_field($this->result_resource, \PGSQL_DIAG_MESSAGE_HINT) |
405
|
|
|
); |
406
|
|
|
} |
407
|
|
|
|
408
|
|
|
/** |
409
|
|
|
* getQuery |
410
|
|
|
* |
411
|
|
|
* Return the associated query. |
412
|
|
|
* |
413
|
|
|
* @return string |
414
|
|
|
*/ |
415
|
|
|
public function getQuery() |
416
|
|
|
{ |
417
|
|
|
return $this->sql; |
418
|
|
|
} |
419
|
|
|
|
420
|
|
|
/** |
421
|
|
|
* setQueryParameters |
422
|
|
|
* |
423
|
|
|
* Set the query parameters sent with the query. |
424
|
|
|
* |
425
|
|
|
* @param array $parameters |
426
|
|
|
* @return SqlException $this |
427
|
|
|
*/ |
428
|
|
|
public function setQueryParameters(array $parameters) |
429
|
|
|
{ |
430
|
|
|
$this->query_parameters = $parameters; |
431
|
|
|
|
432
|
|
|
return $this; |
433
|
|
|
} |
434
|
|
|
|
435
|
|
|
/** |
436
|
|
|
* getQueryParameters |
437
|
|
|
* |
438
|
|
|
* Return the query parameters sent with the query. |
439
|
|
|
* |
440
|
|
|
* @return array |
441
|
|
|
*/ |
442
|
|
|
public function getQueryParameters() |
443
|
|
|
{ |
444
|
|
|
return $this->query_parameters; |
445
|
|
|
} |
446
|
|
|
} |
447
|
|
|
|