Package 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
    Modifier and Type | Class | Description
    --- | --- | ---
    `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
    Modifier | Constructor | Description
    --- | --- | ---
    `protected` | `AbstractFieldMetaData​(RowDescriptor rowDescriptor, FBConnection connection)` |

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `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.