Package org.firebirdsql.gds.ng.fields

## Class FieldDescriptor

- java.lang.Object
- - org.firebirdsql.gds.ng.fields.FieldDescriptor

-     public final class FieldDescriptor
      extends java.lang.Object

  The class `FieldDescriptor` contains the column metadata of the XSQLVAR server data structure used to describe one column for input or output.

  FieldDescriptor is an immutable type, the value of a field is maintained separately in `RowValue`.

  Author:
    Mark Rotteveel

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `FieldDescriptor​(int position, DatatypeCoder datatypeCoder, int type, int subType, int scale, int length, java.lang.String fieldName, java.lang.String tableAlias, java.lang.String originalName, java.lang.String originalTableName, java.lang.String ownerName)` | Constructor for metadata FieldDescriptor.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `equals​(java.lang.Object obj)` |
    `int` | `getCharacterLength()` | The length in characters of this field.
    `int` | `getCharacterSetId()` | Determines the character set id (without collation id).
    `DatatypeCoder` | `getDatatypeCoder()` |
    `IEncodingFactory` | `getEncodingFactory()` |
    `java.lang.String` | `getFieldName()` |
    `int` | `getLength()` |
    `java.lang.String` | `getOriginalName()` |
    `java.lang.String` | `getOriginalTableName()` |
    `java.lang.String` | `getOwnerName()` |
    `byte` | `getPaddingByte()` | Padding to use for fields of this type.
    `int` | `getPosition()` |
    `int` | `getScale()` |
    `int` | `getSubType()` |
    `java.lang.String` | `getTableAlias()` |
    `int` | `getType()` |
    `int` | `hashCode()` |
    `boolean` | `isDbKey()` | Determines if this is a db-key (RDB$DB_KEY) of a table.
    `boolean` | `isFbType​(int fbType)` | Check if the type of this field is the specified Firebird data type.
    `boolean` | `isNullable()` |
    `boolean` | `isVarying()` |
    `java.lang.String` | `toString()` |
    `boolean` | `typeEquals​(FieldDescriptor other)` | Limited equals that only checks if the data type in the provided field descriptor is the same as this descriptor.

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

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### FieldDescriptor

          public FieldDescriptor​(int position,
                                 DatatypeCoder datatypeCoder,
                                 int type,
                                 int subType,
                                 int scale,
                                 int length,
                                 java.lang.String fieldName,
                                 java.lang.String tableAlias,
                                 java.lang.String originalName,
                                 java.lang.String originalTableName,
                                 java.lang.String ownerName)

      Constructor for metadata FieldDescriptor.
      Parameters:
        `position` - Position of this field (0-based), or `-1` if position is not known (e.g. for test code)
        `datatypeCoder` - Instance of DatatypeCoder to use when decoding column data (note that another instance may be derived internally, which then will be returned by `getDatatypeCoder()`)
        `type` - Column SQL type
        `subType` - Column subtype
        `scale` - Column scale
        `length` - Column defined length
        `fieldName` - Column alias name
        `tableAlias` - Column table alias
        `originalName` - Column original name
        `originalTableName` - Column original table
        `ownerName` - Owner of the column/table

  - ### Method Detail

    - #### getPosition

          public int getPosition()

      Returns:
        The 0-based position of this field (or `-1`)

    - #### getDatatypeCoder

          public DatatypeCoder getDatatypeCoder()

      Returns:
        The `DatatypeCoder` to use when decoding field data.

    - #### getEncodingFactory

          public IEncodingFactory getEncodingFactory()

      Returns:
        The `IEncodingFactory` for the associated connection.

    - #### getType

          public int getType()

      Returns:
        The Firebird type of this field

    - #### getSubType

          public int getSubType()

      Returns:
        The Firebird subtype of this field

    - #### getScale

          public int getScale()

      Returns:
        The scale of this field

    - #### getLength

          public int getLength()

      Returns:
        The declared (maximum) length of this field

    - #### getFieldName

          public java.lang.String getFieldName()

      Returns:
        The (aliased) field name

    - #### getTableAlias

          public java.lang.String getTableAlias()

      Returns:
        The (aliased) table name

    - #### getOriginalName

          public java.lang.String getOriginalName()

      Returns:
        The original name of the field (e.g. the column name in the table)

    - #### getOriginalTableName

          public java.lang.String getOriginalTableName()

      Returns:
        The original table name

    - #### getOwnerName

          public java.lang.String getOwnerName()

      Returns:
        The owner

    - #### isVarying

          public boolean isVarying()

      Returns:
        `true` if the type is variable length (ie `ISCConstants.SQL_VARYING`).

    - #### isFbType

          public boolean isFbType​(int fbType)

      Check if the type of this field is the specified Firebird data type.

      This method assumes the not-nullable data type is passed, on checking the nullable bit of `getType()` is set to `0`.

      Parameters:
        `fbType` - One of the `SQL_` data type identifier values
      Returns:
        `true` if the type is the same as the type of this field

    - #### isNullable

          public boolean isNullable()

      Returns:
        `true` if this field is nullable.

    - #### isDbKey

          public boolean isDbKey()

      Determines if this is a db-key (RDB$DB_KEY) of a table.

      NOTE: Technically it could also be a normal `CHAR CHARACTER SET OCTETS` column called `DB_KEY`.

      Returns:
        `true` if the field is a RDB$DB_KEY
      Since:
        4.0

    - #### getCharacterLength

          public int getCharacterLength()

      The length in characters of this field.

      This takes into account the max bytes per character of the character set.

      Returns:
        Character length, or `-1` for non-character types (including blobs)

    - #### getCharacterSetId

          public int getCharacterSetId()

      Determines the character set id (without collation id).
      Returns:
        Character set id for the type, if the type has no character set, than `ISCConstants.CS_dynamic` is returned

    - #### typeEquals

          public boolean typeEquals​(FieldDescriptor other)

      Limited equals that only checks if the data type in the provided field descriptor is the same as this descriptor.

      The fields checked are:

      - type
      - subType
      - scale
      - length
      Parameters:
        `other` - Field descriptor to check
      Returns:
        `true` when `other` is not null and has the same type definition as this instance, `false` otherwise.

    - #### getPaddingByte

          public byte getPaddingByte()

      Padding to use for fields of this type.
      Returns:
        padding byte (generally 0x00, or 0x20 for non-binary character data).
      Since:
        5

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `java.lang.Object`

    - #### equals

          public boolean equals​(java.lang.Object obj)

      Overrides:
        `equals` in class `java.lang.Object`

    - #### hashCode

          public int hashCode()

      Overrides:
        `hashCode` in class `java.lang.Object`