fromPostgresError static method

PrismaException fromPostgresError(
  1. String message, {
  2. String? sqlState,
  3. String? constraintName,
  4. Object? originalError,
})

Map a PostgreSQL error to a PrismaException.

Implementation

static PrismaException fromPostgresError(
  String message, {
  String? sqlState,
  String? constraintName,
  Object? originalError,
}) {
  switch (sqlState) {
    // Connection errors
    case '08000': // connection_exception
    case '08003': // connection_does_not_exist
    case '08006': // connection_failure
      return ConnectionException(
        message,
        originalError: originalError,
      );

    case '28000': // invalid_authorization_specification
    case '28P01': // invalid_password
      return AuthenticationException(
        message,
        originalError: originalError,
      );

    // Constraint violations
    case '23505': // unique_violation
      return UniqueConstraintException(
        message,
        constraintName: constraintName,
        originalError: originalError,
      );

    case '23503': // foreign_key_violation
      return ForeignKeyException(
        message,
        constraintName: constraintName,
        originalError: originalError,
      );

    case '23502': // not_null_violation
      return ConstraintException(
        message,
        constraintName: constraintName,
        constraintType: 'not_null',
        originalError: originalError,
      );

    case '23514': // check_violation
      return ConstraintException(
        message,
        constraintName: constraintName,
        constraintType: 'check',
        originalError: originalError,
      );

    // Query errors
    case '42P01': // undefined_table
    case '42703': // undefined_column
      return InternalException(
        message,
        originalError: originalError,
      );

    // Timeout
    case '57014': // query_canceled (timeout)
      return QueryTimeoutException(
        message,
        originalError: originalError,
      );

    default:
      return InternalException(
        message,
        originalError: originalError,
        context: {'sqlState': sqlState},
      );
  }
}