|
13 | 13 | /** |
14 | 14 | * Base class for all errors in the driver or SQL server. |
15 | 15 | */ |
16 | | -class DriverException extends \PDOException |
| 16 | +class DriverException extends \Exception |
17 | 17 | { |
18 | 18 | public ?string $queryString = null; |
19 | 19 | public ?array $params = null; |
| 20 | + private int|string|null $driverCode = null; |
| 21 | + private string|null $sqlState = null; |
20 | 22 |
|
21 | 23 |
|
22 | | - public static function from(\PDOException $src): static |
| 24 | + public function __construct(string $message = '', $code = 0, ?\Throwable $previous = null) |
23 | 25 | { |
24 | | - $e = new static($src->message, 0, $src); |
25 | | - $e->file = $src->file; |
26 | | - $e->line = $src->line; |
27 | | - if (!$src->errorInfo && preg_match('#SQLSTATE\[(.*?)\] \[(.*?)\] (.*)#A', $src->message, $m)) { |
28 | | - $m[2] = (int) $m[2]; |
29 | | - $e->errorInfo = array_slice($m, 1); |
30 | | - $e->code = $m[1]; |
31 | | - } else { |
32 | | - $e->errorInfo = $src->errorInfo; |
33 | | - $e->code = $src->code; |
34 | | - $e->code = $e->errorInfo[0] ?? $src->code; |
| 26 | + parent::__construct($message, 0, $previous); |
| 27 | + $this->code = $code; |
| 28 | + if ($previous) { |
| 29 | + $this->file = $previous->file; |
| 30 | + $this->line = $previous->line; |
35 | 31 | } |
| 32 | + } |
| 33 | + |
36 | 34 |
|
37 | | - return $e; |
| 35 | + /** @internal */ |
| 36 | + public function setDriverCode(string $state, int|string $code): void |
| 37 | + { |
| 38 | + $this->sqlState = $state; |
| 39 | + $this->driverCode = $code; |
38 | 40 | } |
39 | 41 |
|
40 | 42 |
|
41 | 43 | public function getDriverCode(): int|string|null |
42 | 44 | { |
43 | | - return $this->errorInfo[1] ?? null; |
| 45 | + return $this->driverCode; |
44 | 46 | } |
45 | 47 |
|
46 | 48 |
|
47 | 49 | public function getSqlState(): ?string |
48 | 50 | { |
49 | | - return $this->errorInfo[0] ?? null; |
| 51 | + return $this->sqlState; |
50 | 52 | } |
51 | 53 |
|
52 | 54 |
|
|
0 commit comments