Check well-known database error codes in case of generic SQL state 23000
Closes gh-29699
This commit is contained in:
@@ -57,6 +57,9 @@ public class SQLExceptionSubclassTranslatorTests {
|
||||
doTest(new SQLFeatureNotSupportedException("", "", 0), InvalidDataAccessApiUsageException.class);
|
||||
doTest(new SQLIntegrityConstraintViolationException("", "", 0), DataIntegrityViolationException.class);
|
||||
doTest(new SQLIntegrityConstraintViolationException("", "23505", 0), DuplicateKeyException.class);
|
||||
doTest(new SQLIntegrityConstraintViolationException("", "23000", 1), DuplicateKeyException.class);
|
||||
doTest(new SQLIntegrityConstraintViolationException("", "23000", 1062), DuplicateKeyException.class);
|
||||
doTest(new SQLIntegrityConstraintViolationException("", "23505", 2627), DuplicateKeyException.class);
|
||||
doTest(new SQLInvalidAuthorizationSpecException("", "", 0), PermissionDeniedDataAccessException.class);
|
||||
doTest(new SQLNonTransientConnectionException("", "", 0), DataAccessResourceFailureException.class);
|
||||
doTest(new SQLRecoverableException("", "", 0), RecoverableDataAccessException.class);
|
||||
|
||||
@@ -61,6 +61,21 @@ public class SQLStateSQLExceptionTranslatorTests {
|
||||
doTest("23505", DuplicateKeyException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void translateDuplicateKeyOracle() {
|
||||
doTest("23000", 1, DuplicateKeyException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void translateDuplicateKeyMySQL() {
|
||||
doTest("23000", 1062, DuplicateKeyException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void translateDuplicateKeyMSSQL() {
|
||||
doTest("23000", 2627, DuplicateKeyException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void translateDataAccessResourceFailure() {
|
||||
doTest("53", DataAccessResourceFailureException.class);
|
||||
@@ -105,8 +120,12 @@ public class SQLStateSQLExceptionTranslatorTests {
|
||||
|
||||
|
||||
private void doTest(@Nullable String sqlState, @Nullable Class<?> dataAccessExceptionType) {
|
||||
doTest(sqlState, 0, dataAccessExceptionType);
|
||||
}
|
||||
|
||||
private void doTest(@Nullable String sqlState, int errorCode, @Nullable Class<?> dataAccessExceptionType) {
|
||||
SQLExceptionTranslator translator = new SQLStateSQLExceptionTranslator();
|
||||
SQLException ex = new SQLException("reason", sqlState);
|
||||
SQLException ex = new SQLException("reason", sqlState, errorCode);
|
||||
DataAccessException dax = translator.translate("task", "SQL", ex);
|
||||
|
||||
if (dataAccessExceptionType == null) {
|
||||
|
||||
Reference in New Issue
Block a user