vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php line 157

Open in your IDE?
  1. <?php
  2. namespace Doctrine\DBAL;
  3. use Doctrine\DBAL\Driver\DriverException as DriverExceptionInterface;
  4. use Doctrine\DBAL\Driver\ExceptionConverterDriver;
  5. use Doctrine\DBAL\Exception\DriverException;
  6. use Doctrine\DBAL\Platforms\AbstractPlatform;
  7. use Doctrine\DBAL\Types\Type;
  8. use Exception;
  9. use Throwable;
  10. use function array_map;
  11. use function bin2hex;
  12. use function get_class;
  13. use function gettype;
  14. use function implode;
  15. use function is_object;
  16. use function is_resource;
  17. use function is_string;
  18. use function json_encode;
  19. use function preg_replace;
  20. use function spl_object_hash;
  21. use function sprintf;
  22. /**
  23.  * @psalm-immutable
  24.  */
  25. class DBALException extends Exception
  26. {
  27.     /**
  28.      * @param string $method
  29.      *
  30.      * @return \Doctrine\DBAL\DBALException
  31.      */
  32.     public static function notSupported($method)
  33.     {
  34.         return new self(sprintf("Operation '%s' is not supported by platform."$method));
  35.     }
  36.     public static function invalidPlatformSpecified() : self
  37.     {
  38.         return new self(
  39.             "Invalid 'platform' option specified, need to give an instance of " AbstractPlatform::class . '.'
  40.         );
  41.     }
  42.     /**
  43.      * @param mixed $invalidPlatform
  44.      */
  45.     public static function invalidPlatformType($invalidPlatform) : self
  46.     {
  47.         if (is_object($invalidPlatform)) {
  48.             return new self(
  49.                 sprintf(
  50.                     "Option 'platform' must be a subtype of '%s', instance of '%s' given",
  51.                     AbstractPlatform::class,
  52.                     get_class($invalidPlatform)
  53.                 )
  54.             );
  55.         }
  56.         return new self(
  57.             sprintf(
  58.                 "Option 'platform' must be an object and subtype of '%s'. Got '%s'",
  59.                 AbstractPlatform::class,
  60.                 gettype($invalidPlatform)
  61.             )
  62.         );
  63.     }
  64.     /**
  65.      * Returns a new instance for an invalid specified platform version.
  66.      *
  67.      * @param string $version        The invalid platform version given.
  68.      * @param string $expectedFormat The expected platform version format.
  69.      *
  70.      * @return DBALException
  71.      */
  72.     public static function invalidPlatformVersionSpecified($version$expectedFormat)
  73.     {
  74.         return new self(
  75.             sprintf(
  76.                 'Invalid platform version "%s" specified. ' .
  77.                 'The platform version has to be specified in the format: "%s".',
  78.                 $version,
  79.                 $expectedFormat
  80.             )
  81.         );
  82.     }
  83.     /**
  84.      * @return \Doctrine\DBAL\DBALException
  85.      */
  86.     public static function invalidPdoInstance()
  87.     {
  88.         return new self(
  89.             "The 'pdo' option was used in DriverManager::getConnection() but no " .
  90.             'instance of PDO was given.'
  91.         );
  92.     }
  93.     /**
  94.      * @param string|null $url The URL that was provided in the connection parameters (if any).
  95.      *
  96.      * @return \Doctrine\DBAL\DBALException
  97.      */
  98.     public static function driverRequired($url null)
  99.     {
  100.         if ($url) {
  101.             return new self(
  102.                 sprintf(
  103.                     "The options 'driver' or 'driverClass' are mandatory if a connection URL without scheme " .
  104.                     'is given to DriverManager::getConnection(). Given URL: %s',
  105.                     $url
  106.                 )
  107.             );
  108.         }
  109.         return new self("The options 'driver' or 'driverClass' are mandatory if no PDO " .
  110.             'instance is given to DriverManager::getConnection().');
  111.     }
  112.     /**
  113.      * @param string   $unknownDriverName
  114.      * @param string[] $knownDrivers
  115.      *
  116.      * @return \Doctrine\DBAL\DBALException
  117.      */
  118.     public static function unknownDriver($unknownDriverName, array $knownDrivers)
  119.     {
  120.         return new self("The given 'driver' " $unknownDriverName ' is unknown, ' .
  121.             'Doctrine currently supports only the following drivers: ' implode(', '$knownDrivers));
  122.     }
  123.     /**
  124.      * @param string  $sql
  125.      * @param mixed[] $params
  126.      *
  127.      * @return self
  128.      */
  129.     public static function driverExceptionDuringQuery(Driver $driverThrowable $driverEx$sql, array $params = [])
  130.     {
  131.         $msg "An exception occurred while executing '" $sql "'";
  132.         if ($params) {
  133.             $msg .= ' with params ' self::formatParameters($params);
  134.         }
  135.         $msg .= ":\n\n" $driverEx->getMessage();
  136.         return static::wrapException($driver$driverEx$msg);
  137.     }
  138.     /**
  139.      * @return self
  140.      */
  141.     public static function driverException(Driver $driverThrowable $driverEx)
  142.     {
  143.         return static::wrapException($driver$driverEx'An exception occurred in driver: ' $driverEx->getMessage());
  144.     }
  145.     /**
  146.      * @return self
  147.      */
  148.     private static function wrapException(Driver $driverThrowable $driverExstring $msg)
  149.     {
  150.         if ($driverEx instanceof DriverException) {
  151.             return $driverEx;
  152.         }
  153.         if ($driver instanceof ExceptionConverterDriver && $driverEx instanceof DriverExceptionInterface) {
  154.             return $driver->convertException($msg$driverEx);
  155.         }
  156.         return new self($msg0$driverEx);
  157.     }
  158.     /**
  159.      * Returns a human-readable representation of an array of parameters.
  160.      * This properly handles binary data by returning a hex representation.
  161.      *
  162.      * @param mixed[] $params
  163.      *
  164.      * @return string
  165.      */
  166.     private static function formatParameters(array $params)
  167.     {
  168.         return '[' implode(', 'array_map(static function ($param) {
  169.             if (is_resource($param)) {
  170.                 return (string) $param;
  171.             }
  172.             $json = @json_encode($param);
  173.             if (! is_string($json) || $json === 'null' && is_string($param)) {
  174.                 // JSON encoding failed, this is not a UTF-8 string.
  175.                 return sprintf('"%s"'preg_replace('/.{2}/''\\x$0'bin2hex($param)));
  176.             }
  177.             return $json;
  178.         }, $params)) . ']';
  179.     }
  180.     /**
  181.      * @param string $wrapperClass
  182.      *
  183.      * @return \Doctrine\DBAL\DBALException
  184.      */
  185.     public static function invalidWrapperClass($wrapperClass)
  186.     {
  187.         return new self("The given 'wrapperClass' " $wrapperClass ' has to be a ' .
  188.             'subtype of \Doctrine\DBAL\Connection.');
  189.     }
  190.     /**
  191.      * @param string $driverClass
  192.      *
  193.      * @return \Doctrine\DBAL\DBALException
  194.      */
  195.     public static function invalidDriverClass($driverClass)
  196.     {
  197.         return new self("The given 'driverClass' " $driverClass ' has to implement the ' Driver::class . ' interface.');
  198.     }
  199.     /**
  200.      * @param string $tableName
  201.      *
  202.      * @return \Doctrine\DBAL\DBALException
  203.      */
  204.     public static function invalidTableName($tableName)
  205.     {
  206.         return new self('Invalid table name specified: ' $tableName);
  207.     }
  208.     /**
  209.      * @param string $tableName
  210.      *
  211.      * @return \Doctrine\DBAL\DBALException
  212.      */
  213.     public static function noColumnsSpecifiedForTable($tableName)
  214.     {
  215.         return new self('No columns specified for table ' $tableName);
  216.     }
  217.     /**
  218.      * @return \Doctrine\DBAL\DBALException
  219.      */
  220.     public static function limitOffsetInvalid()
  221.     {
  222.         return new self('Invalid Offset in Limit Query, it has to be larger than or equal to 0.');
  223.     }
  224.     /**
  225.      * @param string $name
  226.      *
  227.      * @return \Doctrine\DBAL\DBALException
  228.      */
  229.     public static function typeExists($name)
  230.     {
  231.         return new self('Type ' $name ' already exists.');
  232.     }
  233.     /**
  234.      * @param string $name
  235.      *
  236.      * @return \Doctrine\DBAL\DBALException
  237.      */
  238.     public static function unknownColumnType($name)
  239.     {
  240.         return new self('Unknown column type "' $name '" requested. Any Doctrine type that you use has ' .
  241.             'to be registered with \Doctrine\DBAL\Types\Type::addType(). You can get a list of all the ' .
  242.             'known types with \Doctrine\DBAL\Types\Type::getTypesMap(). If this error occurs during database ' .
  243.             'introspection then you might have forgotten to register all database types for a Doctrine Type. Use ' .
  244.             'AbstractPlatform#registerDoctrineTypeMapping() or have your custom types implement ' .
  245.             'Type#getMappedDatabaseTypes(). If the type name is empty you might ' .
  246.             'have a problem with the cache or forgot some mapping information.');
  247.     }
  248.     /**
  249.      * @param string $name
  250.      *
  251.      * @return \Doctrine\DBAL\DBALException
  252.      */
  253.     public static function typeNotFound($name)
  254.     {
  255.         return new self('Type to be overwritten ' $name ' does not exist.');
  256.     }
  257.     public static function typeNotRegistered(Type $type) : self
  258.     {
  259.         return new self(sprintf('Type of the class %s@%s is not registered.'get_class($type), spl_object_hash($type)));
  260.     }
  261.     public static function typeAlreadyRegistered(Type $type) : self
  262.     {
  263.         return new self(
  264.             sprintf('Type of the class %s@%s is already registered.'get_class($type), spl_object_hash($type))
  265.         );
  266.     }
  267. }