/**
   * 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 {
    Field field = getField(column);
    String result = connection.getTypeInfo().getJavaClass(field.getOID());

    if (result != null) return result;

    int sqlType = getSQLType(column);
    switch (sqlType) {
      case Types.ARRAY:
        return ("java.sql.Array");
      default:
        String type = getPGType(column);
        if ("unknown".equals(type)) {
          return ("java.lang.String");
        }
        return ("java.lang.Object");
    }
  }
 /*
  * Does a column's case matter? ASSUMPTION: Any field that is
  * not obviously case insensitive is assumed to be case sensitive
  *
  * @param column the first column is 1, the second is 2...
  * @return true if so
  * @exception SQLException if a database access error occurs
  */
 public boolean isCaseSensitive(int column) throws SQLException {
   Field field = getField(column);
   return connection.getTypeInfo().isCaseSensitive(field.getOID());
 }
 /*
  * Is the column automatically numbered (and thus read-only)
  * I believe that PostgreSQL does not support this feature.
  *
  * @param column the first column is 1, the second is 2...
  * @return true if so
  * @exception SQLException if a database access error occurs
  */
 public boolean isAutoIncrement(int column) throws SQLException {
   fetchFieldMetaData();
   Field field = getField(column);
   return field.getAutoIncrement();
 }
 public String getBaseTableName(int column) throws SQLException {
   fetchFieldMetaData();
   Field field = getField(column);
   return field.getTableName();
 }
 /*
  * What is a column's number of digits to the right of the
  * decimal point?
  *
  * @param column the first column is 1, the second is 2...
  * @return the scale
  * @exception SQLException if a database access error occurs
  */
 public int getScale(int column) throws SQLException {
   Field field = getField(column);
   return connection.getTypeInfo().getScale(field.getOID(), field.getMod());
 }
 /*
  * @param column the first column is 1, the second is 2, etc.
  * @return the column label
  * @exception SQLException if a database access error occurs
  */
 public String getColumnLabel(int column) throws SQLException {
   Field field = getField(column);
   return field.getColumnLabel();
 }
 /*
  * Indicates the nullability of values in the designated column.
  *
  * @param column the first column is 1, the second is 2...
  * @return one of the columnNullable values
  * @exception SQLException if a database access error occurs
  */
 public int isNullable(int column) throws SQLException {
   fetchFieldMetaData();
   Field field = getField(column);
   return field.getNullable();
 }