From 99aa2f8ef90a6164c33c2557af3385f54621473a Mon Sep 17 00:00:00 2001
From: Barry Lind <barry@xythos.com>
Date: Mon, 24 Jun 2002 05:09:29 +0000
Subject: [PATCH] patch submitted by Jason Davies jason@netspade.com to improve
 ResultSetMetaData.getColumnClassName() support

---
 .../jdbc/org/postgresql/jdbc1/ResultSet.java  |  4 +-
 .../jdbc/org/postgresql/jdbc2/ResultSet.java  |  4 +-
 .../postgresql/jdbc2/ResultSetMetaData.java   | 86 ++++++++++++-------
 3 files changed, 61 insertions(+), 33 deletions(-)

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 <code>ResultSet.getObject</code>
+	 * is called to retrieve a value from the column.
+	 * 
+	 * <code>ResultSet.getObject</code> 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
+	 *         <code>ResultSet.getObject</code> 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();
-
-     	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();
-       }
-   }       
+		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.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");
+		}
+	}
 }
 
-- 
GitLab