Skip site navigation (1) Skip section navigation (2)

patch for jdbc BigDecimal bug

From: Barry Lind <barry(at)xythos(dot)com>
To: pgsql-patches <pgsql-patches(at)postgresql(dot)org>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: patch for jdbc BigDecimal bug
Date: 2001-08-22 11:03:33
Message-ID: 3B839185.7050002@xythos.com (view raw or flat)
Thread:
Lists: pgsql-jdbcpgsql-patches
Attached is a simple one line patch for the problem reported in the 
following email.

thanks,
--Barry


 > -----Original Message-----
 > From: Barry Lind [mailto:barry(at)xythos(dot)com]
 > Sent: Tuesday, August 21, 2001 11:45 AM
 > To: Jason Orendorff
 > Cc: pgsql-interfaces(at)postgresql(dot)org; pgsql-jdbc(at)postgresql(dot)org
 > Subject: Re: [INTERFACES] Bad BigDecimal
 >
 >
 > Yes this does appear to be a bug.  Can you submit a patch to
 > pgsql-patches(at)postgresql(dot)org with the fix.  If you don't have time, let
 > me know and I will submit the patch.
 >
 > thanks,
 > --Barry
 >
 >
 >
 > Jason Orendorff wrote:
 > > Reply-To: sender
 > >
 > > Hi.  I'm having a problem with the JDBC driver.  It's excellent for
 > > the most part - kudos to Mr. Mount - and this is the first problem
 > > I've run into.  I think there's a bug; read below for my explanation
 > > and (I think) the fix.
 > >
 > > The problem:  When I call getBigDecimal() on a ResultSet, it
 > > sometimes throws an exception:
 > >
 > >   Bad BigDecimal 174.50
 > >     at org.postgresql.jdbc2.ResultSet.getBigDecimal(ResultSet.java:373)
 > >     at org.postgresql.jdbc2.ResultSet.getBigDecimal(ResultSet.java:984)
 > >     ...blah blah blah...
 > >   org.postgresql.util.PSQLException: Bad BigDecimal 174.50
 > >
 > > I think the problem is on line 984 of
 > > org/postgresql/jdbc2/ResultSet.java.  Here's the method I'm looking at
 > > (slightly reformatted to fit in this e-mail message):
 > >
 > >   public java.math.BigDecimal getBigDecimal(int columnIndex)
 > >       throws SQLException
 > >     {
 > >       // Now must call BigDecimal with a scale otherwise JBuilder
 > >       // barfs
 > >       return getBigDecimal(columnIndex,0);
 > >     }
 > >
 > > Notice that it's calling getBigDecimal(int, int) with a 0 for the
 > > second argument.  Here's the source of that method (again, slightly
 > > reformatted):
 > >
 > >   public BigDecimal getBigDecimal(int columnIndex, int scale)
 > >       throws SQLException
 > >     {
 > >       String s = getFixedString(columnIndex);
 > >       BigDecimal val;
 > >
 > >       if (s != null)
 > >         {
 > >
 > >           try
 > >             {
 > >               val = new BigDecimal(s);
 > >             } catch (NumberFormatException e) {
 > >               throw new PSQLException("postgresql.res.badbigdec",s);
 > >             }
 > >           if (scale==-1) return val;
 > >           try
 > >             {
 > >               return val.setScale(scale);
 > >             } catch (ArithmeticException e) {
 > >               throw new PSQLException("postgresql.res.badbigdec",s);
 > >             }
 > >         }
 > >       return null;              // SQL NULL
 > >     }
 > >
 > > Okay.  The fact that the default scale is 0 causes essentially
 > > the following to happen:
 > >   BigDecimal val;
 > >   val = new BigDecimal("174.50");
 > >   return val.setScale(0);
 > >
 > > This causes an exception because 174.50 can't be exactly represented
 > > by a BigDecimal that has scale 0.
 > >
 > > The fix:  change the appropriate line to read:
 > >   return getBigDecimal(columnIndex, -1);
 > >
 > > I'm sure I'm probably overlooking something; please let me know...
 > > Also, please copy me on replies!  Thanks!
 > >
 > >
 >
 >
 >


Attachment: patch.diff
Description: text/plain (782 bytes)

Responses

pgsql-patches by date

Next:From: Karel ZakDate: 2001-08-22 13:10:58
Subject: encoding names v2.
Previous:From: Barry LindDate: 2001-08-22 10:28:00
Subject: patch for JDBC1 build problems

pgsql-jdbc by date

Next:From: Gunnar RønningDate: 2001-08-22 11:39:07
Subject: Re: Couple of patches for jdbc driver
Previous:From: Barry LindDate: 2001-08-22 10:49:08
Subject: Re: Data types

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group