patch submitted by Jason Davies [email protected] to improve ResultSetMetaData.getCo...
authorBarry Lind
Mon, 24 Jun 2002 05:09:29 +0000 (05:09 +0000)
committerBarry Lind
Mon, 24 Jun 2002 05:09:29 +0000 (05:09 +0000)
src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java
src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java
src/interfaces/jdbc/org/postgresql/jdbc2/ResultSetMetaData.java

index 11b3e70a56cbc3ac02e309ba5ced58a7bd8537a3..1d640cebe49543903641d97876793e21ceb4ac94 100644 (file)
@@ -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:
index e30849bbe6b96935e8fe725c512b2412d6dd655f..43c5e3d2d861cdf742a6230cb3e7e23810bab0d1 100644 (file)
@@ -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:
index 6ff6094b64df0e8d3d4f458343c6d8f89896228c..91ee4b306beee0b540786bdba928af0cca44f981 100644 (file)
@@ -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();
-
-       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");
+       }
+   }
 }