Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Duplicate
-
10.8.2.2
-
None
-
None
-
Embedded/Client difference
Description
On the embedded driver, SQLException.getErrorCode() returns a value representing the severity of the error. On the client driver, it returns -1 for almost all exceptions. (It has some logic to make session-severity errors return 40000, but the other errors return -1. And SQLWarnings will preserve their error code, which is 10000.)
The error code gets lost when DRDAConnThread calls getSqlCode(getExceptionSeverity(e)), as getSqlCode() always returns -1 for exceptions:
private int getSqlCode(int severity)
{ if (severity == CodePoint.SVRCOD_WARNING) // warning return 100; //CLI likes it else if (severity == CodePoint.SVRCOD_INFO) return 0; else return -1; }It's not just its returning -1 for exceptions that's problematic in the above method. Returning 100 for warnings causes them to be ignored by the client, since that error code is interpreted as end-of-data. After the changes for DERBY-129 DRDAConnThread.getSqlCode() won't be called for warnings, though, so it should be safe to remove the SVRCOD_WARNING case from the method. (The real end-of-data warnings use a different code path, from DRDAConnThread.doneData().)
Attachments
Issue Links
- duplicates
-
DERBY-2601 Server SQLException error codes are not returned to client
- Closed