Browse Source

Polish duplicate key exception error code support for SAP HANA database for R2DBC

See gh-31554
pull/31571/head
Sam Brannen 2 years ago
parent
commit
e778d2e908
  1. 16
      spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/ConnectionFactoryUtils.java
  2. 2
      spring-r2dbc/src/test/java/org/springframework/r2dbc/connection/ConnectionFactoryUtilsUnitTests.java

16
spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/ConnectionFactoryUtils.java

@ -72,12 +72,12 @@ public abstract class ConnectionFactoryUtils { @@ -72,12 +72,12 @@ public abstract class ConnectionFactoryUtils {
public static final int CONNECTION_SYNCHRONIZATION_ORDER = 1000;
private static final Set<Integer> DUPLICATE_KEY_ERROR_CODES = Set.of(
1, // Oracle
301, // Sap Hana
1, // Oracle
301, // SAP HANA
1062, // MySQL/MariaDB
2601, // MS SQL Server
2627 // MS SQL Server
);
);
/**
@ -257,11 +257,13 @@ public abstract class ConnectionFactoryUtils { @@ -257,11 +257,13 @@ public abstract class ConnectionFactoryUtils {
}
/**
* Check whether the given SQL state (and the associated error code in case
* of a generic SQL state value) indicate a duplicate key exception. See
* {@code org.springframework.jdbc.support.SQLStateSQLExceptionTranslator#indicatesDuplicateKey}.
* Check whether the given SQL state and the associated error code (in case
* of a generic SQL state value) indicate a duplicate key exception:
* either SQL state 23505 as a specific indication, or the generic SQL state
* 23000 with a well-known vendor code.
* @param sqlState the SQL state value
* @param errorCode the error code value
* @param errorCode the error code
* @see org.springframework.jdbc.support.SQLStateSQLExceptionTranslator#indicatesDuplicateKey
*/
static boolean indicatesDuplicateKey(@Nullable String sqlState, int errorCode) {
return ("23505".equals(sqlState) ||

2
spring-r2dbc/src/test/java/org/springframework/r2dbc/connection/ConnectionFactoryUtilsUnitTests.java

@ -102,7 +102,7 @@ class ConnectionFactoryUtilsUnitTests { @@ -102,7 +102,7 @@ class ConnectionFactoryUtilsUnitTests {
exception = ConnectionFactoryUtils.convertR2dbcException("", "",
new R2dbcDataIntegrityViolationException("reason", "23000", 301));
assertThat(exception).isExactlyInstanceOf(DuplicateKeyException.class);
assertThat(exception).as("SAP HANA").isExactlyInstanceOf(DuplicateKeyException.class);
exception = ConnectionFactoryUtils.convertR2dbcException("", "",
new R2dbcDataIntegrityViolationException("reason", "23000", 1062));

Loading…
Cancel
Save