[jOOQ/jOOQ#7334] DataAccessException.sqlStateClass() always returns
OTHER for SQLite
This commit is contained in:
parent
bbcc30ac76
commit
d46a9a8a86
@ -96,7 +96,10 @@ public class DataAccessException extends RuntimeException {
|
||||
public SQLStateClass sqlStateClass() {
|
||||
SQLException e = getCause(SQLException.class);
|
||||
if (e != null)
|
||||
return SQLStateClass.fromCode(e.getSQLState());
|
||||
if (e.getSQLState() != null)
|
||||
return SQLStateClass.fromCode(e.getSQLState());
|
||||
else if (e.getSQLState() == null && "org.sqlite.SQLiteException".equals(e.getClass().getName()))
|
||||
return SQLStateClass.fromSQLiteVendorCode(e.getErrorCode());
|
||||
|
||||
return SQLStateClass.NONE;
|
||||
}
|
||||
|
||||
@ -176,4 +176,21 @@ public enum SQLStateClass {
|
||||
SQLStateClass result = lookup.get(code.substring(0, 2));
|
||||
return result != null ? result : SQLStateClass.OTHER;
|
||||
}
|
||||
|
||||
static SQLStateClass fromSQLiteVendorCode(int errorCode) {
|
||||
|
||||
// See https://sqlite.org/c3ref/c_abort.html
|
||||
// And https://sqlite.org/c3ref/c_abort_rollback.html
|
||||
switch (errorCode & 0xFF) {
|
||||
case 0: return C00_SUCCESSFUL_COMPLETION;
|
||||
case 3: return C42_SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION;
|
||||
case 18: return C22_DATA_EXCEPTION;
|
||||
case 19: return C23_INTEGRITY_CONSTRAINT_VIOLATION;
|
||||
case 20: return C22_DATA_EXCEPTION;
|
||||
case 27: return C01_WARNING;
|
||||
case 28: return C01_WARNING;
|
||||
}
|
||||
|
||||
return SQLStateClass.OTHER;
|
||||
}
|
||||
}
|
||||
|
||||
@ -487,4 +487,21 @@ public enum SQLStateSubclass {
|
||||
else
|
||||
return SQLStateSubclass.OTHER;
|
||||
}
|
||||
|
||||
static SQLStateSubclass fromSQLiteVendorCode(int errorCode) {
|
||||
|
||||
// See https://sqlite.org/c3ref/c_abort.html
|
||||
// And https://sqlite.org/c3ref/c_abort_rollback.html
|
||||
switch (errorCode & 0xFF) {
|
||||
case 0: return C00000_NO_SUBCLASS;
|
||||
case 3: return C42000_NO_SUBCLASS;
|
||||
case 18: return C22001_STRING_DATA_RIGHT_TRUNCATION;
|
||||
case 19: return C23000_NO_SUBCLASS;
|
||||
case 20: return C22000_NO_SUBCLASS;
|
||||
case 27: return C01000_NO_SUBCLASS;
|
||||
case 28: return C01000_NO_SUBCLASS;
|
||||
}
|
||||
|
||||
return SQLStateSubclass.OTHER;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user