60 lines
2.1 KiB
JavaScript
60 lines
2.1 KiB
JavaScript
import {
|
|
DeadlockException,
|
|
ExceptionConverter,
|
|
ForeignKeyConstraintViolationException,
|
|
InvalidFieldNameException,
|
|
NonUniqueFieldNameException,
|
|
NotNullConstraintViolationException,
|
|
SyntaxErrorException,
|
|
TableExistsException,
|
|
TableNotFoundException,
|
|
UniqueConstraintViolationException,
|
|
CheckConstraintViolationException,
|
|
} from '@mikro-orm/core';
|
|
export class PostgreSqlExceptionConverter extends ExceptionConverter {
|
|
/**
|
|
* @see http://www.postgresql.org/docs/9.4/static/errcodes-appendix.html
|
|
* @see https://github.com/doctrine/dbal/blob/master/src/Driver/AbstractPostgreSQLDriver.php
|
|
*/
|
|
convertException(exception) {
|
|
if (exception.detail?.toString().trim()) {
|
|
exception.message += '\n - detail: ' + exception.detail;
|
|
}
|
|
if (exception.hint?.toString().trim()) {
|
|
exception.message += '\n - hint: ' + exception.hint;
|
|
}
|
|
/* v8 ignore next */
|
|
switch (exception.code) {
|
|
case '40001':
|
|
case '40P01':
|
|
return new DeadlockException(exception);
|
|
case '0A000':
|
|
// Foreign key constraint violations during a TRUNCATE operation
|
|
// are considered "feature not supported" in PostgreSQL.
|
|
if (exception.message.includes('truncate')) {
|
|
return new ForeignKeyConstraintViolationException(exception);
|
|
}
|
|
break;
|
|
case '23502':
|
|
return new NotNullConstraintViolationException(exception);
|
|
case '23503':
|
|
return new ForeignKeyConstraintViolationException(exception);
|
|
case '23505':
|
|
return new UniqueConstraintViolationException(exception);
|
|
case '23514':
|
|
return new CheckConstraintViolationException(exception);
|
|
case '42601':
|
|
return new SyntaxErrorException(exception);
|
|
case '42702':
|
|
return new NonUniqueFieldNameException(exception);
|
|
case '42703':
|
|
return new InvalidFieldNameException(exception);
|
|
case '42P01':
|
|
return new TableNotFoundException(exception);
|
|
case '42P07':
|
|
return new TableExistsException(exception);
|
|
}
|
|
return super.convertException(exception);
|
|
}
|
|
}
|