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

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. }