From 99aa2f8ef90a6164c33c2557af3385f54621473a Mon Sep 17 00:00:00 2001 From: Barry Lind 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 | 84 ++++++++++++------- 3 files changed, 60 insertions(+), 32 deletions(-) diff --git a/src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java b/src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java index 11b3e70a56..1d640cebe4 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 e30849bbe6..43c5e3d2d8 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 6ff6094b64..91ee4b306b 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"); + } + } }