Uploaded image for project: 'Apache Drill'
  1. Apache Drill
  2. DRILL-2769

many(?) JDBC methods throw non-SQLException exceptions (e.g., UnsupportedOperationException, RuntimeException)

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 1.4.0
    • Component/s: None
    • Labels:
      None

      Description

      It seems that many JDBC methods throw exceptions of type UnsupportedOperationException or RuntimeException to indicate that they are not applicable (e.g., Drill's implementation of Connection.commit(), since Drill isn't transactional) or not implemented yet (and some throw other {{RuntimeException}}s to indicate other problems ).

      However, these methods should be throwing exceptions of type SQLException (or subclasses thereof).

      The JDBC pattern is to throw {{SQLException}}s, not {{RuntimeException}}s, so JDBC client code is not likely to handle {{RuntimeException}}s well.

      (For example, it is suspected that Connection.commit()'s throwing of UnsupportedOperationException is causing a hang in the JDBC client Spotfire.)

      JDBC does provide a SQLFeatureNotSupportedException. However, it is specified to be for when "the JDBC driver does does not support an optional JDBC feature." It's not clear how risky it would be to use this exception when Drill does not support a non-optional JDBC feature.

      (Possibly, some methods that can't really do what JDBC specifies might need to just return silently without throwing any exception.)

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                dsbos Daniel Barclay
                Reporter:
                dsbos Daniel Barclay
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: