71 lines
2.5 KiB
JavaScript
71 lines
2.5 KiB
JavaScript
import {
|
|
ConnectionException,
|
|
ExceptionConverter,
|
|
InvalidFieldNameException,
|
|
LockWaitTimeoutException,
|
|
NonUniqueFieldNameException,
|
|
CheckConstraintViolationException,
|
|
NotNullConstraintViolationException,
|
|
ReadOnlyException,
|
|
SyntaxErrorException,
|
|
TableExistsException,
|
|
TableNotFoundException,
|
|
UniqueConstraintViolationException,
|
|
ForeignKeyConstraintViolationException,
|
|
} from '@mikro-orm/core';
|
|
export class SqliteExceptionConverter extends ExceptionConverter {
|
|
/**
|
|
* @inheritDoc
|
|
* @see http://www.sqlite.org/c3ref/c_abort.html
|
|
* @see https://github.com/doctrine/dbal/blob/master/src/Driver/AbstractSQLiteDriver.php
|
|
*/
|
|
convertException(exception) {
|
|
/* v8 ignore next */
|
|
if (exception.message.includes('database is locked')) {
|
|
return new LockWaitTimeoutException(exception);
|
|
}
|
|
if (
|
|
exception.message.includes('must be unique') ||
|
|
exception.message.includes('is not unique') ||
|
|
exception.message.includes('are not unique') ||
|
|
exception.message.includes('UNIQUE constraint failed')
|
|
) {
|
|
return new UniqueConstraintViolationException(exception);
|
|
}
|
|
if (exception.message.includes('may not be NULL') || exception.message.includes('NOT NULL constraint failed')) {
|
|
return new NotNullConstraintViolationException(exception);
|
|
}
|
|
/* v8 ignore next */
|
|
if (exception.message.includes('CHECK constraint failed')) {
|
|
return new CheckConstraintViolationException(exception);
|
|
}
|
|
if (exception.message.includes('no such table:')) {
|
|
return new TableNotFoundException(exception);
|
|
}
|
|
if (exception.message.includes('already exists')) {
|
|
return new TableExistsException(exception);
|
|
}
|
|
if (exception.message.includes('no such column:')) {
|
|
return new InvalidFieldNameException(exception);
|
|
}
|
|
if (exception.message.includes('ambiguous column name')) {
|
|
return new NonUniqueFieldNameException(exception);
|
|
}
|
|
if (exception.message.includes('syntax error')) {
|
|
return new SyntaxErrorException(exception);
|
|
}
|
|
/* v8 ignore next */
|
|
if (exception.message.includes('attempt to write a readonly database')) {
|
|
return new ReadOnlyException(exception);
|
|
}
|
|
/* v8 ignore next */
|
|
if (exception.message.includes('unable to open database file')) {
|
|
return new ConnectionException(exception);
|
|
}
|
|
if (exception.message.includes('FOREIGN KEY constraint failed')) {
|
|
return new ForeignKeyConstraintViolationException(exception);
|
|
}
|
|
return super.convertException(exception);
|
|
}
|
|
}
|