Here is a patch for interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java
authorBruce Momjian <bruce@momjian.us>
Wed, 7 Jun 2000 20:01:20 +0000 (20:01 +0000)
committerBruce Momjian <bruce@momjian.us>
Wed, 7 Jun 2000 20:01:20 +0000 (20:01 +0000)
It addresses three issues:

1. The problem with ResultSet's interface specifying 1-based indexing was
not quite fixed in 7.0.2.  absolute would stop the user form moving to the
first record (record 0 internally).

2. Absolute did not set current_row

3. For field.mod=-1, GetObject would try to return numeric values with a
precision of around 65000.  Now GetObject detects when field.mod==-1, and
passes that as the scale to getBigDecimal.  getBigDecimal detects when a
-1 is passed and simply does not scale the value returned.  You still get
the correct value back, it simply does not tweak the precision.

I'm working off of a source tree I just checked out from the
repository.  The diff is based on what was in the repository about ten
minutes ago.

----------------------------------------------------------------
Travis Bauer | CS Grad Student | IU |www.cs.indiana.edu/~trbauer
----------------------------------------------------------------

src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java

index bcde5043b725c7e9f092107da4e43a073f1b5f38..1b957bd9cbf52caa964aeaf792ae041d55209654 100644 (file)
@@ -347,6 +347,7 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
          } catch (NumberFormatException e) {
            throw new PSQLException ("postgresql.res.badbigdec",s);
          }
+       if (scale==-1) return val;
          try
            {
              return val.setScale(scale);
@@ -739,7 +740,8 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
       case Types.BIGINT:
        return new Long(getLong(columnIndex));
       case Types.NUMERIC:
-       return getBigDecimal(columnIndex, ((field.mod-4) & 0xffff));
+       return getBigDecimal
+           (columnIndex, (field.mod==-1)?-1:((field.mod-4) & 0xffff));
       case Types.REAL:
        return new Float(getFloat(columnIndex));
       case Types.DOUBLE:
@@ -804,9 +806,10 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
        if(index<0)
            index=rows.size()+index;
        
-       if (index==0 || index > rows.size())
+       if (index > rows.size())
            return false;
        
+       current_row=index;
        this_row = (byte [][])rows.elementAt(index);
        return true;
     }