/*
* Copyright 2014 mango.jfaster.org
*
* The Mango Project licenses this file to you 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:
*
* http://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.jfaster.mango.jdbc;
/**
* @author ash
*/
public enum SQLErrorCodes {
EMPTY {
@Override
void init() {
}
},
DB2 {
@Override
void init() {
setDatabaseProductName("DB2*");
setBadSqlGrammarCodes(parse("-007,-029,-097,-104,-109,-115,-128,-199,-204,-206,-301,-408,-441,-491"));
setDuplicateKeyCodes(parse("-803"));
setDataIntegrityViolationCodes(parse("-407,-530,-531,-532,-543,-544,-545,-603,-667"));
setDataAccessResourceFailureCodes(parse("-904,-971"));
setTransientDataAccessResourceCodes(parse("-1035,-1218,-30080,-30081"));
setDeadlockLoserCodes(parse("-911,-913"));
}
},
Derby {
@Override
void init() {
setDatabaseProductName("Apache Derby");
setUseSqlStateForTranslation(true);
setBadSqlGrammarCodes(parse("42802,42821,42X01,42X02,42X03,42X04,42X05,42X06,42X07,42X08"));
setDuplicateKeyCodes(parse("23505"));
setDataIntegrityViolationCodes(parse("22001,22005,23502,23503,23513,X0Y32"));
setDataAccessResourceFailureCodes(parse("04501,08004,42Y07"));
setCannotAcquireLockCodes(parse("40XL1"));
setDeadlockLoserCodes(parse("40001"));
}
},
H2 {
@Override
void init() {
setBadSqlGrammarCodes(parse("42000,42001,42101,42102,42111,42112,42121,42122,42132"));
setDuplicateKeyCodes(parse("23001,23505"));
setDataIntegrityViolationCodes(parse("22001,22003,22012,22018,22025,23000,23002,23003,23502,23503,23506,23507,23513"));
setDataAccessResourceFailureCodes(parse("90046,90100,90117,90121,90126"));
setCannotAcquireLockCodes(parse("50200"));
}
},
Informix {
@Override
void init() {
setDatabaseProductName("Informix Dynamic Server");
setBadSqlGrammarCodes(parse("-201,-217,-696"));
setDuplicateKeyCodes(parse("-239,-268,-6017"));
setDataIntegrityViolationCodes(parse("-692,-11030"));
}
},
MSSQL {
@Override
void init() {
setDatabaseProductNames(new String[]{
"MS-SQL", "Microsoft SQL Server"
});
setBadSqlGrammarCodes(parse("156,170,207,208,209"));
setPermissionDeniedCodes(parse("229"));
setDuplicateKeyCodes(parse("2601,2627"));
setDataIntegrityViolationCodes(parse("544,8114,8115"));
setDataAccessResourceFailureCodes(parse("4060"));
setCannotAcquireLockCodes(parse("1222"));
setDeadlockLoserCodes(parse("1205"));
}
},
HSQL {
@Override
void init() {
setDatabaseProductName("HSQL Database Engine");
setBadSqlGrammarCodes(parse("-22,-28"));
setDuplicateKeyCodes(parse("-104"));
setDataIntegrityViolationCodes(parse("-9"));
setDataAccessResourceFailureCodes(parse("-80"));
}
},
MySQL {
@Override
void init() {
setBadSqlGrammarCodes(parse("1054,1064,1146"));
setDuplicateKeyCodes(parse("1062"));
setDataIntegrityViolationCodes(parse("630,839,840,893,1169,1215,1216,1217,1364,1451,1452,1557"));
setDataAccessResourceFailureCodes(parse("1"));
setCannotAcquireLockCodes(parse("1205"));
setDeadlockLoserCodes(parse("1213"));
}
},
Oracle {
@Override
void init() {
setBadSqlGrammarCodes(parse("900,903,904,917,936,942,17006,6550"));
setInvalidResultSetAccessCodes(parse("17003"));
setDuplicateKeyCodes(parse("1"));
setDataIntegrityViolationCodes(parse("1400,1722,2291,2292"));
setDataAccessResourceFailureCodes(parse("17002,17447"));
setCannotAcquireLockCodes(parse("54,30006"));
setCannotSerializeTransactionCodes(parse("8177"));
setDeadlockLoserCodes(parse("60"));
}
},
PostgreSQL {
@Override
void init() {
setUseSqlStateForTranslation(true);
setBadSqlGrammarCodes(parse("03000,42000,42601,42602,42622,42804,42P01"));
setDuplicateKeyCodes(parse("23505"));
setDataIntegrityViolationCodes(parse("23000,23502,23503,23514"));
setDataAccessResourceFailureCodes(parse("53000,53100,53200,53300"));
setCannotAcquireLockCodes(parse("55P03"));
setCannotSerializeTransactionCodes(parse("40001"));
setDeadlockLoserCodes(parse("40P01"));
}
},
Sybase {
@Override
void init() {
setDatabaseProductNames(new String[]{
"Sybase SQL Server",
"SQL Server",
"Adaptive Server Enterprise",
"ASE",
"sql server"
});
setBadSqlGrammarCodes(parse("101,102,103,104,105,106,107,108,109,110,111,112,113,116,120,121,123,207,208,213,257,512"));
setDuplicateKeyCodes(parse("2601,2615,2626"));
setDataIntegrityViolationCodes(parse("233,511,515,530,546,547,2615,2714"));
setTransientDataAccessResourceCodes(parse("921,1105"));
setCannotAcquireLockCodes(parse("12205"));
setDeadlockLoserCodes(parse("1205"));
}
},
Hana {
@Override
void init() {
setDatabaseProductName("SAP DB");
setBadSqlGrammarCodes(parse("257,259,260,261,262,263,264,267,268,269,270,271,272,273,275,276,277,278,278,279,280,281,282,283,284,285,286,288,289,290,294,295,296,297,299,308,309,313,315,316,318,319,320,321,322,323,324,328,329,330,333,335,336,337,338,340,343,350,351,352,362,368"));
setPermissionDeniedCodes(parse("10,258"));
setDuplicateKeyCodes(parse("301"));
setDataIntegrityViolationCodes(parse("461,462"));
setDataAccessResourceFailureCodes(parse("-813,-709,-708,1024,1025,1026,1027,1029,1030,1031"));
setInvalidResultSetAccessCodes(parse("-11210,582,587,588,594"));
setCannotAcquireLockCodes(parse("131"));
setCannotSerializeTransactionCodes(parse("138,143"));
setDeadlockLoserCodes(parse("133"));
}
},;
private String[] databaseProductNames = new String[0];
private boolean useSqlStateForTranslation = false;
private String[] badSqlGrammarCodes = new String[0];
private String[] invalidResultSetAccessCodes = new String[0];
private String[] duplicateKeyCodes = new String[0];
private String[] dataIntegrityViolationCodes = new String[0];
private String[] permissionDeniedCodes = new String[0];
private String[] dataAccessResourceFailureCodes = new String[0];
private String[] transientDataAccessResourceCodes = new String[0];
private String[] cannotAcquireLockCodes = new String[0];
private String[] deadlockLoserCodes = new String[0];
private String[] cannotSerializeTransactionCodes = new String[0];
public String getDatabaseProductName() {
return (databaseProductNames != null && databaseProductNames.length > 0 ?
databaseProductNames[0] : null);
}
public void setDatabaseProductName(String databaseProductName) {
this.databaseProductNames = new String[]{databaseProductName};
}
public String[] getDatabaseProductNames() {
return databaseProductNames;
}
public void setDatabaseProductNames(String[] databaseProductNames) {
this.databaseProductNames = databaseProductNames;
}
public boolean isUseSqlStateForTranslation() {
return useSqlStateForTranslation;
}
public void setUseSqlStateForTranslation(boolean useSqlStateForTranslation) {
this.useSqlStateForTranslation = useSqlStateForTranslation;
}
public String[] getBadSqlGrammarCodes() {
return badSqlGrammarCodes;
}
public void setBadSqlGrammarCodes(String[] badSqlGrammarCodes) {
this.badSqlGrammarCodes = badSqlGrammarCodes;
}
public String[] getInvalidResultSetAccessCodes() {
return invalidResultSetAccessCodes;
}
public void setInvalidResultSetAccessCodes(String[] invalidResultSetAccessCodes) {
this.invalidResultSetAccessCodes = invalidResultSetAccessCodes;
}
public String[] getDuplicateKeyCodes() {
return duplicateKeyCodes;
}
public void setDuplicateKeyCodes(String[] duplicateKeyCodes) {
this.duplicateKeyCodes = duplicateKeyCodes;
}
public String[] getDataIntegrityViolationCodes() {
return dataIntegrityViolationCodes;
}
public void setDataIntegrityViolationCodes(String[] dataIntegrityViolationCodes) {
this.dataIntegrityViolationCodes = dataIntegrityViolationCodes;
}
public String[] getPermissionDeniedCodes() {
return permissionDeniedCodes;
}
public void setPermissionDeniedCodes(String[] permissionDeniedCodes) {
this.permissionDeniedCodes = permissionDeniedCodes;
}
public String[] getDataAccessResourceFailureCodes() {
return dataAccessResourceFailureCodes;
}
public void setDataAccessResourceFailureCodes(String[] dataAccessResourceFailureCodes) {
this.dataAccessResourceFailureCodes = dataAccessResourceFailureCodes;
}
public String[] getTransientDataAccessResourceCodes() {
return transientDataAccessResourceCodes;
}
public void setTransientDataAccessResourceCodes(String[] transientDataAccessResourceCodes) {
this.transientDataAccessResourceCodes = transientDataAccessResourceCodes;
}
public String[] getCannotAcquireLockCodes() {
return cannotAcquireLockCodes;
}
public void setCannotAcquireLockCodes(String[] cannotAcquireLockCodes) {
this.cannotAcquireLockCodes = cannotAcquireLockCodes;
}
public String[] getDeadlockLoserCodes() {
return deadlockLoserCodes;
}
public void setDeadlockLoserCodes(String[] deadlockLoserCodes) {
this.deadlockLoserCodes = deadlockLoserCodes;
}
public String[] getCannotSerializeTransactionCodes() {
return cannotSerializeTransactionCodes;
}
public void setCannotSerializeTransactionCodes(String[] cannotSerializeTransactionCodes) {
this.cannotSerializeTransactionCodes = cannotSerializeTransactionCodes;
}
abstract void init();
private static String[] parse(String codes) {
return codes.split(",");
}
}