Re: Patch for ResultSetMetaData.getColumnClassName(), ResultSet.getObject() - Mailing list pgsql-jdbc

From Bruce Momjian
Subject Re: Patch for ResultSetMetaData.getColumnClassName(), ResultSet.getObject()
Date
Msg-id 200206160042.g5G0gEY00147@candle.pha.pa.us
Whole thread Raw
In response to Patch for ResultSetMetaData.getColumnClassName(), ResultSet.getObject()  (Jason Davies <jason@netspade.com>)
List pgsql-jdbc
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");
!         }
!     }
  }


pgsql-jdbc by date:

Previous
From: Dave Cramer
Date:
Subject: Re: Problem with JTA/JTS
Next
From: Vernon Wu
Date:
Subject: How to retrieve an array of string using JDBC?