/**
  * {@inheritdoc}
  *
  * @link http://dcx.sybase.com/home.php#sa160/en/saerrors/sqlerror.html
  */
 public function convertException($message, DriverException $exception)
 {
     switch ($exception->getErrorCode()) {
         case '-100':
         case '-103':
         case '-832':
             return new Exception\ConnectionException($message, $exception);
         case '-143':
             return new Exception\InvalidFieldNameException($message, $exception);
         case '-193':
         case '-196':
             return new Exception\UniqueConstraintViolationException($message, $exception);
         case '-194':
         case '-198':
             return new Exception\ForeignKeyConstraintViolationException($message, $exception);
         case '-144':
             return new Exception\NonUniqueFieldNameException($message, $exception);
         case '-184':
         case '-195':
             return new Exception\NotNullConstraintViolationException($message, $exception);
         case '-131':
             return new Exception\SyntaxErrorException($message, $exception);
         case '-110':
             return new Exception\TableExistsException($message, $exception);
         case '-141':
         case '-1041':
             return new Exception\TableNotFoundException($message, $exception);
     }
     return new Exception\DriverException($message, $exception);
 }
예제 #2
0
 /**
  * {@inheritdoc}
  */
 public function convertException($message, DriverException $exception)
 {
     switch ($exception->getErrorCode()) {
         case '1':
         case '2299':
         case '38911':
             return new Exception\UniqueConstraintViolationException($message, $exception);
         case '904':
             return new Exception\InvalidFieldNameException($message, $exception);
         case '918':
         case '960':
             return new Exception\NonUniqueFieldNameException($message, $exception);
         case '923':
             return new Exception\SyntaxErrorException($message, $exception);
         case '942':
             return new Exception\TableNotFoundException($message, $exception);
         case '955':
             return new Exception\TableExistsException($message, $exception);
         case '1017':
         case '12545':
             return new Exception\ConnectionException($message, $exception);
         case '1400':
             return new Exception\NotNullConstraintViolationException($message, $exception);
         case '2266':
         case '2291':
         case '2292':
             return new Exception\ForeignKeyConstraintViolationException($message, $exception);
     }
     return new Exception\DriverException($message, $exception);
 }
 /**
  * {@inheritdoc}
  *
  * @link http://www.postgresql.org/docs/9.3/static/errcodes-appendix.html
  */
 public function convertException($message, DriverException $exception)
 {
     switch ($exception->getSQLState()) {
         case '23502':
             return new Exception\NotNullConstraintViolationException($message, $exception);
         case '23503':
             return new Exception\ForeignKeyConstraintViolationException($message, $exception);
         case '23505':
             return new Exception\UniqueConstraintViolationException($message, $exception);
         case '42601':
             return new Exception\SyntaxErrorException($message, $exception);
         case '42702':
             return new Exception\NonUniqueFieldNameException($message, $exception);
         case '42703':
             return new Exception\InvalidFieldNameException($message, $exception);
         case '42P01':
             return new Exception\TableNotFoundException($message, $exception);
         case '42P07':
             return new Exception\TableExistsException($message, $exception);
         case '7':
             // In some case (mainly connection errors) the PDO exception does not provide a SQLSTATE via its code.
             // The exception code is always set to 7 here.
             // We have to match against the SQLSTATE in the error message in these cases.
             if (strpos($exception->getMessage(), 'SQLSTATE[08006]') !== false) {
                 return new Exception\ConnectionException($message, $exception);
             }
             break;
     }
     return new Exception\DriverException($message, $exception);
 }
 /**
  * {@inheritdoc}
  */
 public function convertException($message, DriverException $exception)
 {
     switch ($exception->getErrorCode()) {
         case '-239':
         case '-268':
             return new Exception\UniqueConstraintViolationException($message, $exception);
         case '-206':
             return new Exception\TableNotFoundException($message, $exception);
         case '-310':
             return new Exception\TableExistsException($message, $exception);
         case '-691':
         case '-692':
         case '-26018':
             return new Exception\ForeignKeyConstraintViolationException($message, $exception);
         case '-391':
             return new Exception\NotNullConstraintViolationException($message, $exception);
         case '-217':
             return new Exception\InvalidFieldNameException($message, $exception);
         case '-324':
             return new Exception\NonUniqueFieldNameException($message, $exception);
         case '-201':
             return new Exception\SyntaxErrorException($message, $exception);
         case '-908':
         case '-930':
         case '-951':
             return new Exception\ConnectionException($message, $exception);
     }
     // In some cases the exception doesn't have the driver-specific error code
     if (self::isErrorAccessDeniedMessage($exception->getMessage())) {
         return new Exception\ConnectionException($message, $exception);
     }
     return new Exception\DriverException($message, $exception);
 }
 /**
  * {@inheritdoc}
  *
  * @link http://dev.mysql.com/doc/refman/5.7/en/error-messages-client.html
  * @link http://dev.mysql.com/doc/refman/5.7/en/error-messages-server.html
  */
 public function convertException($message, DriverException $exception)
 {
     switch ($exception->getErrorCode()) {
         case '1050':
             return new Exception\TableExistsException($message, $exception);
         case '1051':
         case '1146':
             return new Exception\TableNotFoundException($message, $exception);
         case '1216':
         case '1217':
         case '1451':
         case '1452':
         case '1701':
             return new Exception\ForeignKeyConstraintViolationException($message, $exception);
         case '1062':
         case '1557':
         case '1569':
         case '1586':
             return new Exception\UniqueConstraintViolationException($message, $exception);
         case '1054':
         case '1166':
         case '1611':
             return new Exception\InvalidFieldNameException($message, $exception);
         case '1052':
         case '1060':
         case '1110':
             return new Exception\NonUniqueFieldNameException($message, $exception);
         case '1064':
         case '1149':
         case '1287':
         case '1341':
         case '1342':
         case '1343':
         case '1344':
         case '1382':
         case '1479':
         case '1541':
         case '1554':
         case '1626':
             return new Exception\SyntaxErrorException($message, $exception);
         case '1044':
         case '1045':
         case '1046':
         case '1049':
         case '1095':
         case '1142':
         case '1143':
         case '1227':
         case '1370':
         case '2002':
         case '2005':
             return new Exception\ConnectionException($message, $exception);
         case '1048':
         case '1121':
         case '1138':
         case '1171':
         case '1252':
         case '1263':
         case '1566':
             return new Exception\NotNullConstraintViolationException($message, $exception);
     }
     return new Exception\DriverException($message, $exception);
 }
 /**
  * {@inheritdoc}
  *
  * @link http://www.sqlite.org/c3ref/c_abort.html
  */
 public function convertException($message, DriverException $exception)
 {
     if (strpos($exception->getMessage(), 'must be unique') !== false || strpos($exception->getMessage(), 'is not unique') !== false || strpos($exception->getMessage(), 'are not unique') !== false || strpos($exception->getMessage(), 'UNIQUE constraint failed') !== false) {
         return new Exception\UniqueConstraintViolationException($message, $exception);
     }
     if (strpos($exception->getMessage(), 'may not be NULL') !== false || strpos($exception->getMessage(), 'NOT NULL constraint failed') !== false) {
         return new Exception\NotNullConstraintViolationException($message, $exception);
     }
     if (strpos($exception->getMessage(), 'no such table:') !== false) {
         return new Exception\TableNotFoundException($message, $exception);
     }
     if (strpos($exception->getMessage(), 'already exists') !== false) {
         return new Exception\TableExistsException($message, $exception);
     }
     if (strpos($exception->getMessage(), 'has no column named') !== false) {
         return new Exception\InvalidFieldNameException($message, $exception);
     }
     if (strpos($exception->getMessage(), 'ambiguous column name') !== false) {
         return new Exception\NonUniqueFieldNameException($message, $exception);
     }
     if (strpos($exception->getMessage(), 'syntax error') !== false) {
         return new Exception\SyntaxErrorException($message, $exception);
     }
     if (strpos($exception->getMessage(), 'attempt to write a readonly database') !== false) {
         return new Exception\ReadOnlyException($message, $exception);
     }
     if (strpos($exception->getMessage(), 'unable to open database file') !== false) {
         return new Exception\ConnectionException($message, $exception);
     }
     return new Exception\DriverException($message, $exception);
 }
 /**
  * Returns the SQLSTATE the driver was in at the time the error occurred, if given.
  *
  * Returns null if no SQLSTATE was given by the driver.
  *
  * @return string|null
  */
 public function getSQLState()
 {
     return $this->driverException->getSQLState();
 }