org.firebirdsql.jdbc

## Class AbstractFieldMetaData

- java.lang.Object
- - org.firebirdsql.jdbc.AbstractFieldMetaData

All Implemented Interfaces:
  java.sql.Wrapper

Direct Known Subclasses:
  FBParameterMetaData, FBResultSetMetaData

    public abstract class AbstractFieldMetaData
    extends java.lang.Object
    implements java.sql.Wrapper

Base class for `FBResultSetMetaData` and `FBParameterMetaData` for methods common to both implementations.

Since:
  3.0
Author:
  David Jencks, Nickolay Samofatov, Mark Rotteveel

### Nested Class Summary

Nested Classes
`protected static class` `AbstractFieldMetaData.ExtendedFieldInfo` This class is an old-fashion data structure that stores additional information about fields in a database.
`protected static class` `AbstractFieldMetaData.FieldKey` This class should be used as a composite key in an internal field mapping structures.

### Constructor Summary

Constructors
`protected` `AbstractFieldMetaData(RowDescriptor rowDescriptor, FBConnection connection)`

### Method Summary

All Methods Instance Methods Abstract Methods Concrete Methods
`protected int` `estimateFixedPrecision(int fieldIndex)`
`protected abstract java.util.Map<AbstractFieldMetaData.FieldKey,AbstractFieldMetaData.ExtendedFieldInfo>` `getExtendedFieldInfo(FBConnection connection)` This method retrieves extended information from the system tables in a database.
`protected AbstractFieldMetaData.ExtendedFieldInfo` `getExtFieldInfo(int columnIndex)`
`protected java.lang.String` `getFieldClassName(int field)`
`protected int` `getFieldCount()` Retrieves the number of fields in the object for which this `AbstractFieldMetaData` object contains information.
`protected FieldDescriptor` `getFieldDescriptor(int fieldIndex)` The `FieldDescriptor` of the field with index `fieldIndex`.
`protected int` `getFieldType(int field)`
`protected java.lang.String` `getFieldTypeName(int field)`
`protected int` `getPrecisionInternal(int field)` Retrieves the designated parameter's specified column size.
`protected RowDescriptor` `getRowDescriptor()`
`protected int` `getScaleInternal(int field)` Retrieves the designated field's number of digits to right of the decimal point.
`protected boolean` `isSignedInternal(int field)` Retrieves whether values for the designated field can be signed numbers.
`boolean` `isWrapperFor(java.lang.Class<?> iface)`
`<T> T` `unwrap(java.lang.Class<T> iface)`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### AbstractFieldMetaData

    protected AbstractFieldMetaData(RowDescriptor rowDescriptor,
                                    FBConnection connection)

### Method Detail

#### isWrapperFor

    public boolean isWrapperFor(java.lang.Class<?> iface)
                         throws java.sql.SQLException

Specified by:
  `isWrapperFor` in interface `java.sql.Wrapper`
Throws:
  `java.sql.SQLException`

#### unwrap

    public <T> T unwrap(java.lang.Class<T> iface)
                 throws java.sql.SQLException

Specified by:
  `unwrap` in interface `java.sql.Wrapper`
Throws:
  `java.sql.SQLException`

#### getRowDescriptor

    protected final RowDescriptor getRowDescriptor()

Returns:
  The row descriptor.

#### getFieldCount

    protected final int getFieldCount()

Retrieves the number of fields in the object for which this `AbstractFieldMetaData` object contains information.

Returns:
  the number of fields

#### getFieldDescriptor

    protected final FieldDescriptor getFieldDescriptor(int fieldIndex)

The `FieldDescriptor` of the field with index `fieldIndex`.

Parameters:
  `fieldIndex` - 1-based index of a field in this metadata object
Returns:
  field descriptor

#### isSignedInternal

    protected final boolean isSignedInternal(int field)

Retrieves whether values for the designated field can be signed numbers.

Parameters:
  `field` - the first field is 1, the second is 2, ...
Returns:
  `true` if so; `false` otherwise

#### getScaleInternal

    protected final int getScaleInternal(int field)

Retrieves the designated field's number of digits to right of the decimal point. 0 is returned for data types where the scale is not applicable.

Parameters:
  `field` - the first field is 1, the second is 2, ...
Returns:
  scale

#### getFieldClassName

    protected final java.lang.String getFieldClassName(int field)
                                                throws java.sql.SQLException

Throws:
  `java.sql.SQLException`

#### getFieldTypeName

    protected final java.lang.String getFieldTypeName(int field)

#### getFieldType

    protected int getFieldType(int field)

#### getPrecisionInternal

    protected final int getPrecisionInternal(int field)
                                      throws java.sql.SQLException

Retrieves the designated parameter's specified column size.

The returned value represents the maximum column size for the given parameter. For numeric data, this is the maximum precision. For character data, this is the length in characters. For datetime datatypes, this is the length in characters of the String representation (assuming the maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, this is the length in bytes. 0 is returned for data types where the column size is not applicable.

Parameters:
  `field` - the first field is 1, the second is 2, ...
Returns:
  precision
Throws:
  `java.sql.SQLException` - if a database access error occurs

#### estimateFixedPrecision

    protected final int estimateFixedPrecision(int fieldIndex)

#### getExtFieldInfo

    protected final AbstractFieldMetaData.ExtendedFieldInfo getExtFieldInfo(int columnIndex)
                                                                     throws java.sql.SQLException

Throws:
  `java.sql.SQLException`

#### getExtendedFieldInfo

    protected abstract java.util.Map<AbstractFieldMetaData.FieldKey,AbstractFieldMetaData.ExtendedFieldInfo> getExtendedFieldInfo(FBConnection connection)
                                                                                                                           throws java.sql.SQLException

This method retrieves extended information from the system tables in a database. Since this method is expensive, use it with care.

Returns:
  mapping between `AbstractFieldMetaData.FieldKey` instances and `AbstractFieldMetaData.ExtendedFieldInfo` instances, or an empty Map if the metadata implementation does not support extended info.
Throws:
  `java.sql.SQLException` - if a database error occurs while obtaining extended field information.