Skip to content

Commit 74e86fe

Browse files
committed
Support SQL exception translation for MSSQL 209
SQL Server error 209 [1] will now raise a BadSqlGrammarException. [1]: http://www.sql-server-helper.com/error-messages/msg-1-500.aspx Issue: SPR-9946
1 parent 1070e4d commit 74e86fe

File tree

2 files changed

+44
-2
lines changed

2 files changed

+44
-2
lines changed

spring-jdbc/src/main/resources/org/springframework/jdbc/support/sql-error-codes.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@
121121
<value>Microsoft SQL Server</value>
122122
</property>
123123
<property name="badSqlGrammarCodes">
124-
<value>156,170,207,208</value>
124+
<value>156,170,207,208,209</value>
125125
</property>
126126
<property name="permissionDeniedCodes">
127127
<value>229</value>

spring-jdbc/src/test/java/org/springframework/jdbc/support/SQLErrorCodesFactoryTests.java

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,14 @@
2424
import javax.sql.DataSource;
2525

2626
import junit.framework.TestCase;
27-
import org.easymock.MockControl;
2827

28+
import org.easymock.MockControl;
2929
import org.springframework.core.io.ClassPathResource;
3030
import org.springframework.core.io.Resource;
3131

32+
import static org.hamcrest.CoreMatchers.*;
33+
import static org.junit.Assert.*;
34+
3235
/**
3336
* Tests for SQLErrorCodes loading.
3437
*
@@ -64,6 +67,40 @@ private void assertIsOracle(SQLErrorCodes sec) {
6467
assertFalse(Arrays.binarySearch(sec.getBadSqlGrammarCodes(), "9xx42") >= 0);
6568
}
6669

70+
private void assertIsSQLServer(SQLErrorCodes sec) {
71+
assertThat(sec.getDatabaseProductName(), equalTo("Microsoft SQL Server"));
72+
73+
assertTrue(sec.getBadSqlGrammarCodes().length > 0);
74+
75+
assertTrue(Arrays.binarySearch(sec.getBadSqlGrammarCodes(), "156") >= 0);
76+
assertTrue(Arrays.binarySearch(sec.getBadSqlGrammarCodes(), "170") >= 0);
77+
assertTrue(Arrays.binarySearch(sec.getBadSqlGrammarCodes(), "207") >= 0);
78+
assertTrue(Arrays.binarySearch(sec.getBadSqlGrammarCodes(), "208") >= 0);
79+
assertTrue(Arrays.binarySearch(sec.getBadSqlGrammarCodes(), "209") >= 0);
80+
assertFalse(Arrays.binarySearch(sec.getBadSqlGrammarCodes(), "9xx42") >= 0);
81+
82+
assertTrue(sec.getPermissionDeniedCodes().length > 0);
83+
assertTrue(Arrays.binarySearch(sec.getPermissionDeniedCodes(), "229") >= 0);
84+
85+
assertTrue(sec.getDuplicateKeyCodes().length > 0);
86+
assertTrue(Arrays.binarySearch(sec.getDuplicateKeyCodes(), "2601") >= 0);
87+
assertTrue(Arrays.binarySearch(sec.getDuplicateKeyCodes(), "2627") >= 0);
88+
89+
assertTrue(sec.getDataIntegrityViolationCodes().length > 0);
90+
assertTrue(Arrays.binarySearch(sec.getDataIntegrityViolationCodes(), "544") >= 0);
91+
assertTrue(Arrays.binarySearch(sec.getDataIntegrityViolationCodes(), "8114") >= 0);
92+
assertTrue(Arrays.binarySearch(sec.getDataIntegrityViolationCodes(), "8115") >= 0);
93+
94+
assertTrue(sec.getDataAccessResourceFailureCodes().length > 0);
95+
assertTrue(Arrays.binarySearch(sec.getDataAccessResourceFailureCodes(), "4060") >= 0);
96+
97+
assertTrue(sec.getCannotAcquireLockCodes().length > 0);
98+
assertTrue(Arrays.binarySearch(sec.getCannotAcquireLockCodes(), "1222") >= 0);
99+
100+
assertTrue(sec.getDeadlockLoserCodes().length > 0);
101+
assertTrue(Arrays.binarySearch(sec.getDeadlockLoserCodes(), "1205") >= 0);
102+
}
103+
67104
private void assertIsHsql(SQLErrorCodes sec) {
68105
assertTrue(sec.getBadSqlGrammarCodes().length > 0);
69106
assertTrue(sec.getDataIntegrityViolationCodes().length > 0);
@@ -252,6 +289,11 @@ private SQLErrorCodes getErrorCodesFromDataSource(String productName, SQLErrorCo
252289
return sec;
253290
}
254291

292+
public void testSQLServerRecognizedFromMetadata() throws Exception {
293+
SQLErrorCodes sec = getErrorCodesFromDataSource("MS-SQL", null);
294+
assertIsSQLServer(sec);
295+
}
296+
255297
public void testOracleRecognizedFromMetadata() throws Exception {
256298
SQLErrorCodes sec = getErrorCodesFromDataSource("Oracle", null);
257299
assertIsOracle(sec);

0 commit comments

Comments
 (0)