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
`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
`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`