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
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc pgsql-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 Content-Type Size
patch.diff text/plain 782 bytes

Responses

Browse pgsql-jdbc by date

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

Browse pgsql-patches by date

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