Browse Source
Favors PessimisticLockingFailureException over plain ConcurrencyFailureException. Deprecates CannotSerializeTransactionException and DeadlockLoserDataAccessException. Closes gh-29511 Closes gh-29675pull/29692/head
18 changed files with 208 additions and 297 deletions
@ -1,78 +0,0 @@
@@ -1,78 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.jdbc.support; |
||||
|
||||
import java.sql.SQLDataException; |
||||
import java.sql.SQLException; |
||||
import java.sql.SQLFeatureNotSupportedException; |
||||
import java.sql.SQLIntegrityConstraintViolationException; |
||||
import java.sql.SQLInvalidAuthorizationSpecException; |
||||
import java.sql.SQLNonTransientConnectionException; |
||||
import java.sql.SQLRecoverableException; |
||||
import java.sql.SQLSyntaxErrorException; |
||||
import java.sql.SQLTimeoutException; |
||||
import java.sql.SQLTransactionRollbackException; |
||||
import java.sql.SQLTransientConnectionException; |
||||
|
||||
/** |
||||
* Class to generate {@link SQLException} subclasses for testing purposes. |
||||
* |
||||
* @author Thomas Risberg |
||||
*/ |
||||
public class SQLExceptionSubclassFactory { |
||||
|
||||
public static SQLException newSQLDataException(String reason, String SQLState, int vendorCode) { |
||||
return new SQLDataException(reason, SQLState, vendorCode); |
||||
} |
||||
|
||||
public static SQLException newSQLFeatureNotSupportedException(String reason, String SQLState, int vendorCode) { |
||||
return new SQLFeatureNotSupportedException(reason, SQLState, vendorCode); |
||||
} |
||||
|
||||
public static SQLException newSQLIntegrityConstraintViolationException(String reason, String SQLState, int vendorCode) { |
||||
return new SQLIntegrityConstraintViolationException(reason, SQLState, vendorCode); |
||||
} |
||||
|
||||
public static SQLException newSQLInvalidAuthorizationSpecException(String reason, String SQLState, int vendorCode) { |
||||
return new SQLInvalidAuthorizationSpecException(reason, SQLState, vendorCode); |
||||
} |
||||
|
||||
public static SQLException newSQLNonTransientConnectionException(String reason, String SQLState, int vendorCode) { |
||||
return new SQLNonTransientConnectionException(reason, SQLState, vendorCode); |
||||
} |
||||
|
||||
public static SQLException newSQLSyntaxErrorException(String reason, String SQLState, int vendorCode) { |
||||
return new SQLSyntaxErrorException(reason, SQLState, vendorCode); |
||||
} |
||||
|
||||
public static SQLException newSQLTransactionRollbackException(String reason, String SQLState, int vendorCode) { |
||||
return new SQLTransactionRollbackException(reason, SQLState, vendorCode); |
||||
} |
||||
|
||||
public static SQLException newSQLTransientConnectionException(String reason, String SQLState, int vendorCode) { |
||||
return new SQLTransientConnectionException(reason, SQLState, vendorCode); |
||||
} |
||||
|
||||
public static SQLException newSQLTimeoutException(String reason, String SQLState, int vendorCode) { |
||||
return new SQLTimeoutException(reason, SQLState, vendorCode); |
||||
} |
||||
|
||||
public static SQLException newSQLRecoverableException(String reason, String SQLState, int vendorCode) { |
||||
return new SQLRecoverableException(reason, SQLState, vendorCode); |
||||
} |
||||
|
||||
} |
||||
@ -1,77 +0,0 @@
@@ -1,77 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2019 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.jdbc.support; |
||||
|
||||
import java.sql.SQLException; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.jdbc.BadSqlGrammarException; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* @author Rod Johnson |
||||
* @since 13-Jan-03 |
||||
*/ |
||||
public class SQLStateExceptionTranslatorTests { |
||||
|
||||
private static final String sql = "SELECT FOO FROM BAR"; |
||||
|
||||
private final SQLStateSQLExceptionTranslator trans = new SQLStateSQLExceptionTranslator(); |
||||
|
||||
// ALSO CHECK CHAIN of SQLExceptions!?
|
||||
// also allow chain of translators? default if can't do specific?
|
||||
|
||||
@Test |
||||
public void badSqlGrammar() { |
||||
SQLException sex = new SQLException("Message", "42001", 1); |
||||
try { |
||||
throw this.trans.translate("task", sql, sex); |
||||
} |
||||
catch (BadSqlGrammarException ex) { |
||||
// OK
|
||||
assertThat(sql.equals(ex.getSql())).as("SQL is correct").isTrue(); |
||||
assertThat(sex.equals(ex.getSQLException())).as("Exception matches").isTrue(); |
||||
} |
||||
} |
||||
|
||||
@Test |
||||
public void invalidSqlStateCode() { |
||||
SQLException sex = new SQLException("Message", "NO SUCH CODE", 1); |
||||
assertThat(this.trans.translate("task", sql, sex)).isNull(); |
||||
} |
||||
|
||||
/** |
||||
* PostgreSQL can return null. |
||||
* SAP DB can apparently return empty SQL code. |
||||
* Bug 729170 |
||||
*/ |
||||
@Test |
||||
public void malformedSqlStateCodes() { |
||||
SQLException sex = new SQLException("Message", null, 1); |
||||
assertThat(this.trans.translate("task", sql, sex)).isNull(); |
||||
|
||||
sex = new SQLException("Message", "", 1); |
||||
assertThat(this.trans.translate("task", sql, sex)).isNull(); |
||||
|
||||
// One char's not allowed
|
||||
sex = new SQLException("Message", "I", 1); |
||||
assertThat(this.trans.translate("task", sql, sex)).isNull(); |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue