vendor/doctrine/dbal/src/Driver/API/MySQL/ExceptionConverter.php line 129

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Doctrine\DBAL\Driver\API\MySQL;
  4. use Doctrine\DBAL\Driver\API\ExceptionConverter as ExceptionConverterInterface;
  5. use Doctrine\DBAL\Driver\Exception;
  6. use Doctrine\DBAL\Exception\ConnectionException;
  7. use Doctrine\DBAL\Exception\ConnectionLost;
  8. use Doctrine\DBAL\Exception\DatabaseDoesNotExist;
  9. use Doctrine\DBAL\Exception\DeadlockException;
  10. use Doctrine\DBAL\Exception\DriverException;
  11. use Doctrine\DBAL\Exception\ForeignKeyConstraintViolationException;
  12. use Doctrine\DBAL\Exception\InvalidFieldNameException;
  13. use Doctrine\DBAL\Exception\LockWaitTimeoutException;
  14. use Doctrine\DBAL\Exception\NonUniqueFieldNameException;
  15. use Doctrine\DBAL\Exception\NotNullConstraintViolationException;
  16. use Doctrine\DBAL\Exception\SyntaxErrorException;
  17. use Doctrine\DBAL\Exception\TableExistsException;
  18. use Doctrine\DBAL\Exception\TableNotFoundException;
  19. use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
  20. use Doctrine\DBAL\Query;
  21. use function strpos;
  22. /** @internal */
  23. final class ExceptionConverter implements ExceptionConverterInterface
  24. {
  25.     /**
  26.      * @link https://dev.mysql.com/doc/mysql-errors/8.0/en/client-error-reference.html
  27.      * @link https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html
  28.      */
  29.     public function convert(Exception $exception, ?Query $query): DriverException
  30.     {
  31.         switch ($exception->getCode()) {
  32.             case 1008:
  33.                 return new DatabaseDoesNotExist($exception$query);
  34.             case 1213:
  35.                 return new DeadlockException($exception$query);
  36.             case 1205:
  37.                 return new LockWaitTimeoutException($exception$query);
  38.             case 1050:
  39.                 return new TableExistsException($exception$query);
  40.             case 1051:
  41.             case 1146:
  42.                 return new TableNotFoundException($exception$query);
  43.             case 1216:
  44.             case 1217:
  45.             case 1451:
  46.             case 1452:
  47.             case 1701:
  48.                 return new ForeignKeyConstraintViolationException($exception$query);
  49.             case 1062:
  50.             case 1557:
  51.             case 1569:
  52.             case 1586:
  53.                 return new UniqueConstraintViolationException($exception$query);
  54.             case 1054:
  55.             case 1166:
  56.             case 1611:
  57.                 return new InvalidFieldNameException($exception$query);
  58.             case 1052:
  59.             case 1060:
  60.             case 1110:
  61.                 return new NonUniqueFieldNameException($exception$query);
  62.             case 1064:
  63.             case 1149:
  64.             case 1287:
  65.             case 1341:
  66.             case 1342:
  67.             case 1343:
  68.             case 1344:
  69.             case 1382:
  70.             case 1479:
  71.             case 1541:
  72.             case 1554:
  73.             case 1626:
  74.                 return new SyntaxErrorException($exception$query);
  75.             case 1524:
  76.                 if (strpos($exception->getMessage(), 'Plugin \'mysql_native_password\' is not loaded') === false) {
  77.                     break;
  78.                 }
  79.                 // Workaround for MySQL 8.4 if we request an unknown user.
  80.                 // https://bugs.mysql.com/bug.php?id=114876
  81.                 return new ConnectionException($exception$query);
  82.             case 1044:
  83.             case 1045:
  84.             case 1046:
  85.             case 1049:
  86.             case 1095:
  87.             case 1142:
  88.             case 1143:
  89.             case 1227:
  90.             case 1370:
  91.             case 1429:
  92.             case 2002:
  93.             case 2005:
  94.             case 2054:
  95.                 return new ConnectionException($exception$query);
  96.             case 2006:
  97.             case 4031:
  98.                 return new ConnectionLost($exception$query);
  99.             case 1048:
  100.             case 1121:
  101.             case 1138:
  102.             case 1171:
  103.             case 1252:
  104.             case 1263:
  105.             case 1364:
  106.             case 1566:
  107.                 return new NotNullConstraintViolationException($exception$query);
  108.         }
  109.         return new DriverException($exception$query);
  110.     }
  111. }