Uploaded image for project: 'Cayenne'
  1. Cayenne
  2. CAY-1052

Invalid cast on NUMERICs with scale of 0 using Postgres JDBC 8.2+

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.2 branch, 2.0 branch
    • 1.2 branch, 2.0 branch
    • Core Library
    • None
    • All

    Description

      A change was recently made in the Postgres JDBC driver, versions 8.2 and up, that makes some of the Cayenne code do the wrong thing now.

      In the TypesMapping class, there is the following code:

      if (type == Types.NUMERIC && precision == 0) {
      type = Types.INTEGER;
      }

      This code no longer works right on the newer drivers because the behavior of the ResultSetMetaData.getScale() method was changed. It used to return "-1" for NUMERICs where it could not determine the scale, but now it returns "0". So values with decimal information are being truncated to integers. Please reference the following thread for more detail on the return value change: http://groups.google.com/group/pgsql.interfaces.jdbc/browse_thread/thread/ee82d41155147672

      Attachments

        Activity

          People

            andrus Andrus Adamchik
            shentalus Dave Dombrosky
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: