Thread: OID Bug in AbstractJdbc2DatabaseMetaData.java

OID Bug in AbstractJdbc2DatabaseMetaData.java

From
Q
Date:
I recently ran into an issue upgrading from the 8.1 JDBC driver where the more recent drivers would throw an exception when retrieving meta data if there were any relations with very large OID's. (exceeding 2^31).

The following patch "resolved" things enough to avoid the issue.

--- org/postgresql/jdbc2/AbstractJdbc2DatabaseMetaData.java.orig        Thu Apr 26 10:42:27 2007
+++ org/postgresql/jdbc2/AbstractJdbc2DatabaseMetaData.java     Thu Apr 26 10:52:45 2007
@@ -3564,7 +3564,7 @@
         {
             byte[][] tuple = new byte[18][];
             String typname = rs.getString(1);
-            int typeOid = rs.getInt(2);
+            int typeOid = (int)rs.getLong(2) & 0xffffffff;
             tuple[0] = connection.encodeString(typname);
             tuple[1] = connection.encodeString(Integer.toString(connection.getSQLType(typname)));


-- 

Seeya...Q


Quinton Dolan - qdolan@gmail.com

Gold Coast, QLD, Australia

Ph: +61 419 729 806


Re: OID Bug in AbstractJdbc2DatabaseMetaData.java

From
Kris Jurka
Date:

On Mon, 7 May 2007, Q wrote:

> I recently ran into an issue upgrading from the 8.1 JDBC driver where the
> more recent drivers would throw an exception when retrieving meta data if
> there were any relations with very large OID's. (exceeding 2^31).
>
> The following patch "resolved" things enough to avoid the issue.
>
> [Retrieve as long and cast to int.]

Based on this I've put a fix into CVS for all the places that retrieve
oids as integers, so we can work on databases that have high OIDs.

Kris Jurka