Polish "Add SAP HANA duplicate key exception error code"
See gh-31554
This commit is contained in:
parent
fcd4ba2f1f
commit
50e55d5219
|
|
@ -81,6 +81,11 @@ public class SQLStateSQLExceptionTranslatorTests {
|
|||
doTest("23000", 2627, DuplicateKeyException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void translateDuplicateKeySapHana() {
|
||||
doTest("23000", 301, DuplicateKeyException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void translateDataAccessResourceFailure() {
|
||||
doTest("53", DataAccessResourceFailureException.class);
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@
|
|||
|
||||
package org.springframework.r2dbc.connection;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import io.r2dbc.spi.Connection;
|
||||
import io.r2dbc.spi.ConnectionFactory;
|
||||
import io.r2dbc.spi.R2dbcBadGrammarException;
|
||||
|
|
@ -69,6 +71,14 @@ 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
|
||||
1062, // MySQL/MariaDB
|
||||
2601, // MS SQL Server
|
||||
2627 // MS SQL Server
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* Obtain a {@link Connection} from the given {@link ConnectionFactory}.
|
||||
|
|
@ -255,8 +265,7 @@ public abstract class ConnectionFactoryUtils {
|
|||
*/
|
||||
static boolean indicatesDuplicateKey(@Nullable String sqlState, int errorCode) {
|
||||
return ("23505".equals(sqlState) ||
|
||||
("23000".equals(sqlState) &&
|
||||
(errorCode == 1 || errorCode == 1062 || errorCode == 2601 || errorCode == 2627)));
|
||||
("23000".equals(sqlState) && DUPLICATE_KEY_ERROR_CODES.contains(errorCode)));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -100,6 +100,10 @@ public class ConnectionFactoryUtilsUnitTests {
|
|||
new R2dbcDataIntegrityViolationException("reason", "23000", 1));
|
||||
assertThat(exception).isExactlyInstanceOf(DuplicateKeyException.class);
|
||||
|
||||
exception = ConnectionFactoryUtils.convertR2dbcException("", "",
|
||||
new R2dbcDataIntegrityViolationException("reason", "23000", 301));
|
||||
assertThat(exception).isExactlyInstanceOf(DuplicateKeyException.class);
|
||||
|
||||
exception = ConnectionFactoryUtils.convertR2dbcException("", "",
|
||||
new R2dbcDataIntegrityViolationException("reason", "23000", 1062));
|
||||
assertThat(exception).isExactlyInstanceOf(DuplicateKeyException.class);
|
||||
|
|
|
|||
Loading…
Reference in New Issue