Uploaded image for project: 'Derby'
  1. Derby
  2. DERBY-5773

SQLException.getErrorCode() returns -1 on client

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Duplicate
    • Affects Version/s: 10.8.2.2
    • Fix Version/s: None
    • Labels:
      None
    • Bug behavior facts:
      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

            Activity

              People

              • Assignee:
                Unassigned
                Reporter:
                knutanders Knut Anders Hatlen
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: