Jdbc folks, have you reviewed this patch?
---------------------------------------------------------------------------
Jason Davies wrote:
> Hi,
>
> This patch handles Types.{SMALLINT,DATE,TIME,BINARY,VARBINARY,ARRAY}
> properly in ResultSetMetaData.getColumnClassName(int col). The
> default return value has been improved slightly too.
>
> In the case of Types.{BINARY,VARBINARY} it should be a byte[]
> class name, but AFAIK no such thing exists therefore I used
> "java.lang.Object" instead.
>
> Also I optimized just a couple of things in ResultSet.getObject:
> there's no need to create a new Boolean object every time and
> there's no need to use (short)getInt(...) since getShort(...)
> does the same thing :-)
>
> Thank you, --Jase
>
> -- Jason Davies
>
> jason@netspade.com
[ Attachment, skipping... ]
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister
> command
> (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
? build
? jars
? patch.diff
? org/postgresql/Driver.java
? org/postgresql/jdbc2/ResultSetMetaData.java.diff
Index: org/postgresql/jdbc1/ResultSet.java
===================================================================
RCS file: /projects/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java,v
retrieving revision 1.33
diff -c -r1.33 ResultSet.java
*** org/postgresql/jdbc1/ResultSet.java 2002/06/07 16:46:23 1.33
--- org/postgresql/jdbc1/ResultSet.java 2002/06/08 23:58:45
***************
*** 927,935 ****
switch (field.getSQLType())
{
case Types.BIT:
! return new Boolean(getBoolean(columnIndex));
case Types.SMALLINT:
! return new Short((short)getInt(columnIndex));
case Types.INTEGER:
return new Integer(getInt(columnIndex));
case Types.BIGINT:
--- 927,935 ----
switch (field.getSQLType())
{
case Types.BIT:
! return getBoolean(columnIndex) ? Boolean.TRUE : Boolean.FALSE;
case Types.SMALLINT:
! return new Short(getShort(columnIndex));
case Types.INTEGER:
return new Integer(getInt(columnIndex));
case Types.BIGINT:
Index: org/postgresql/jdbc2/ResultSet.java
===================================================================
RCS file: /projects/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java,v
retrieving revision 1.52
diff -c -r1.52 ResultSet.java
*** org/postgresql/jdbc2/ResultSet.java 2002/06/07 16:46:24 1.52
--- org/postgresql/jdbc2/ResultSet.java 2002/06/08 23:58:47
***************
*** 744,752 ****
switch (field.getSQLType())
{
case Types.BIT:
! return new Boolean(getBoolean(columnIndex));
case Types.SMALLINT:
! return new Short((short)getInt(columnIndex));
case Types.INTEGER:
return new Integer(getInt(columnIndex));
case Types.BIGINT:
--- 744,752 ----
switch (field.getSQLType())
{
case Types.BIT:
! return getBoolean(columnIndex) ? Boolean.TRUE : Boolean.FALSE;
case Types.SMALLINT:
! return new Short(getShort(columnIndex));
case Types.INTEGER:
return new Integer(getInt(columnIndex));
case Types.BIGINT:
Index: org/postgresql/jdbc2/ResultSetMetaData.java
===================================================================
RCS file: /projects/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSetMetaData.java,v
retrieving revision 1.11
diff -c -r1.11 ResultSetMetaData.java
*** org/postgresql/jdbc2/ResultSetMetaData.java 2002/02/22 03:22:31 1.11
--- org/postgresql/jdbc2/ResultSetMetaData.java 2002/06/08 23:58:59
***************
*** 471,476 ****
--- 471,491 ----
// ** 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,538 ****
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();
! }
! }
}
--- 520,566 ----
Types.TIMESTAMP,Types.TIMESTAMP
*/
! 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");
! }
! }
}