public static OrmSqlException doTranslate(final String task, final String sql, final SQLException ex) {
String sqlState = getSqlState(ex);
if ((sqlState != null) && (sqlState.length() >= 2)) {
String classCode = sqlState.substring(0, 2);
if (BAD_SQL_GRAMMAR_CODES.contains(classCode)) {
return new OrmSqlBadGrammarException(buildMessage(task, sql, ex), ex);
}
else if (DATA_INTEGRITY_VIOLATION_CODES.contains(classCode)) {
return new OrmSqlDataIntegrityViolationException(buildMessage(task, sql, ex), ex);
}
else if (DATA_ACCESS_RESOURCE_FAILURE_CODES.contains(classCode)) {
return new OrmSqlDataAccessResourceFailureException(buildMessage(task, sql, ex), ex);
}
else if (TRANSIENT_DATA_ACCESS_RESOURCE_CODES.contains(classCode)) {
return new OrmSqlTransientDataAccessResourceException(buildMessage(task, sql, ex), ex);
}
else if (CONCURRENCY_FAILURE_CODES.contains(classCode)) {
return new OrmSqlConcurrencyFailureException(buildMessage(task, sql, ex), ex);
}
}
return new OrmSqlException(buildMessage(task, sql, ex), ex);
}