58 lines
1.4 KiB
PHP
58 lines
1.4 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Doctrine\DBAL\Exception;
|
||
|
|
||
|
use Doctrine\DBAL\Driver\Exception as TheDriverException;
|
||
|
use Doctrine\DBAL\Exception;
|
||
|
use Doctrine\DBAL\Query;
|
||
|
|
||
|
use function assert;
|
||
|
|
||
|
/**
|
||
|
* Base class for all errors detected in the driver.
|
||
|
*
|
||
|
* @psalm-immutable
|
||
|
*/
|
||
|
class DriverException extends Exception implements TheDriverException
|
||
|
{
|
||
|
/**
|
||
|
* The query that triggered the exception, if any.
|
||
|
*/
|
||
|
private ?Query $query;
|
||
|
|
||
|
/**
|
||
|
* @internal
|
||
|
*
|
||
|
* @param TheDriverException $driverException The DBAL driver exception to chain.
|
||
|
* @param Query|null $query The SQL query that triggered the exception, if any.
|
||
|
*/
|
||
|
public function __construct(TheDriverException $driverException, ?Query $query)
|
||
|
{
|
||
|
if ($query !== null) {
|
||
|
$message = 'An exception occurred while executing a query: ' . $driverException->getMessage();
|
||
|
} else {
|
||
|
$message = 'An exception occurred in the driver: ' . $driverException->getMessage();
|
||
|
}
|
||
|
|
||
|
parent::__construct($message, $driverException->getCode(), $driverException);
|
||
|
|
||
|
$this->query = $query;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* {@inheritDoc}
|
||
|
*/
|
||
|
public function getSQLState()
|
||
|
{
|
||
|
$previous = $this->getPrevious();
|
||
|
assert($previous instanceof TheDriverException);
|
||
|
|
||
|
return $previous->getSQLState();
|
||
|
}
|
||
|
|
||
|
public function getQuery(): ?Query
|
||
|
{
|
||
|
return $this->query;
|
||
|
}
|
||
|
}
|