SqlException::getSQLDetailedErrorMessage()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 9
rs 9.9666
c 0
b 0
f 0
cc 1
nc 1
nop 0
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