diff --git a/src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java b/src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java
index 11b3e70a56c..1d640cebe49 100644
--- a/src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java
+++ b/src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java
@@ -935,9 +935,9 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
switch (field.getSQLType())
{
case Types.BIT:
- return new Boolean(getBoolean(columnIndex));
+ return getBoolean(columnIndex) ? Boolean.TRUE : Boolean.FALSE;
case Types.SMALLINT:
- return new Short((short)getInt(columnIndex));
+ return new Short(getShort(columnIndex));
case Types.INTEGER:
return new Integer(getInt(columnIndex));
case Types.BIGINT:
diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java b/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java
index e30849bbe6b..43c5e3d2d86 100644
--- a/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java
+++ b/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java
@@ -780,9 +780,9 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
switch (field.getSQLType())
{
case Types.BIT:
- return new Boolean(getBoolean(columnIndex));
+ return getBoolean(columnIndex) ? Boolean.TRUE : Boolean.FALSE;
case Types.SMALLINT:
- return new Short((short)getInt(columnIndex));
+ return new Short(getShort(columnIndex));
case Types.INTEGER:
return new Integer(getInt(columnIndex));
case Types.BIGINT:
diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSetMetaData.java b/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSetMetaData.java
index 6ff6094b64d..91ee4b306be 100644
--- a/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSetMetaData.java
+++ b/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSetMetaData.java
@@ -471,6 +471,21 @@ public class ResultSetMetaData implements java.sql.ResultSetMetaData
// ** JDBC 2 Extensions **
// This can hook into our PG_Object mechanism
+ /**
+ * Returns the fully-qualified name of the Java class whose instances
+ * are manufactured if the method ResultSet.getObject
+ * is called to retrieve a value from the column.
+ *
+ * ResultSet.getObject
may return a subclass of the class
+ * returned by this method.
+ *
+ * @param column the first column is 1, the second is 2, ...
+ * @return the fully-qualified name of the class in the Java programming
+ * language that would be used by the method
+ * ResultSet.getObject
to retrieve the value in the specified
+ * column. This is the class name used for custom mapping.
+ * @exception SQLException if a database access error occurs
+ */
public String getColumnClassName(int column) throws SQLException
{
/*
@@ -505,34 +520,47 @@ public class ResultSetMetaData implements java.sql.ResultSetMetaData
Types.TIMESTAMP,Types.TIMESTAMP
*/
- int sql_type = getField(column).getSQLType();
+ Field field = getField(column);
+ int sql_type = field.getSQLType();
- switch (sql_type)
- {
- case Types.BIT:
- return("java.lang.Boolean");
- case Types.SMALLINT:
- return("java.lang.Integer");
- case Types.INTEGER:
- return("java.lang.Integer");
- case Types.BIGINT:
- return("java.lang.Long");
- case Types.NUMERIC:
- return("java.math.BigDecimal");
- case Types.REAL:
- return("java.lang.Float");
- case Types.DOUBLE:
- return("java.lang.Double");
- case Types.CHAR:
- case Types.VARCHAR:
- return("java.lang.String");
- case Types.DATE:
- case Types.TIME:
- case Types.TIMESTAMP:
- return("java.sql.Timestamp");
- default:
- throw org.postgresql.Driver.notImplemented();
- }
- }
+ switch (sql_type)
+ {
+ case Types.BIT:
+ return("java.lang.Boolean");
+ case Types.SMALLINT:
+ return("java.lang.Short");
+ case Types.INTEGER:
+ return("java.lang.Integer");
+ case Types.BIGINT:
+ return("java.lang.Long");
+ case Types.NUMERIC:
+ return("java.math.BigDecimal");
+ case Types.REAL:
+ return("java.lang.Float");
+ case Types.DOUBLE:
+ return("java.lang.Double");
+ case Types.CHAR:
+ case Types.VARCHAR:
+ return("java.lang.String");
+ case Types.DATE:
+ return("java.sql.Date");
+ case Types.TIME:
+ return("java.sql.Time");
+ case Types.TIMESTAMP:
+ return("java.sql.Timestamp");
+ case Types.BINARY:
+ case Types.VARBINARY:
+ return("java.sql.Object");
+ case Types.ARRAY:
+ return("java.sql.Array");
+ default:
+ String type = field.getPGType();
+ if ("unknown".equals(type))
+ {
+ return("java.lang.String");
+ }
+ return("java.lang.Object");
+ }
+ }
}