Module org.firebirdsql.jaybird
Package org.firebirdsql.gds.ng.fields

# Interface BlrCalculator

All Known Implementing Classes:
  `DefaultBlrCalculator`

public interface BlrCalculator
Interface for calculating the blr (binary language representation) of a row.

Since:
  3.0
Author:
  Mark Rotteveel

- ## Method Summary

  Modifier and Type
  Method
  Description
  `int`
  `calculateBatchMessageLength(RowDescriptor rowDescriptor)`
  Calculates the batch message length.
  `byte[]`
  `calculateBlr(RowDescriptor rowDescriptor)`
  Calculates the blr for the row descriptor.
  `byte[]`
  `calculateBlr(RowDescriptor rowDescriptor, RowValue rowValue)`
  Calculates the blr for a specific row value.
  `int`
  `calculateIoLength(FieldDescriptor fieldDescriptor)`
  Calculates the io length for the field descriptor.
  `int`
  `calculateIoLength(FieldDescriptor fieldDescriptor, byte[] fieldData)`
  Calculates the io length for the field descriptor and actual data.

- ## Method Details

  - ### calculateBlr

    byte[] calculateBlr(RowDescriptor rowDescriptor) throws SQLException
    Calculates the blr for the row descriptor.
    Parameters:
      `rowDescriptor` - Row descriptor
    Returns:
      Byte array with the blr
    Throws:
      `SQLException` - When the `RowDescriptor` contains an unsupported field type.

  - ### calculateBlr

    byte[] calculateBlr(RowDescriptor rowDescriptor, RowValue rowValue) throws SQLException
    Calculates the blr for a specific row value.

    This allows to optimize for the actual length of the field.

    Parameters:
      `rowDescriptor` - Row descriptor
      `rowValue` - Row value
    Returns:
      Byte array with the blr
    Throws:
      `SQLException` - When the `RowValue` contains an unsupported field type.

  - ### calculateIoLength

    int calculateIoLength(FieldDescriptor fieldDescriptor) throws SQLException
    Calculates the io length for the field descriptor.

    The return value indicates the length and padding of the type in the buffer

    - < 0 : Type is of specified length * -1 and not padded
    - == 0 : Type is of dynamic length (which is specified in the buffer as an integer) and padded
    - > 0 : Type is of specified length minus 1 (subtracting 1 is required to avoid 0 for types of zero length) and padded
    Parameters:
      `fieldDescriptor` - Field descriptor
    Returns:
      The io length
    Throws:
      `SQLException`

  - ### calculateIoLength

    int calculateIoLength(FieldDescriptor fieldDescriptor, byte[] fieldData) throws SQLException
    Calculates the io length for the field descriptor and actual data.

    The return value indicates the length and padding of the type in the buffer

    - < 0 : Type is of specified length * -1 and not padded
    - == 0 : Type is of dynamic length (which is specified in the buffer as an integer) and padded
    - > 0 : Type is of specified length minus 1 (subtracting 1 is required to avoid 0 for types of zero length) and padded

    This allows to optimize for the actual length of the field.

    For `CHAR` (`ISCConstants.SQL_TEXT` the implementation should be consistent with the lengths as given by `calculateIoLength(FieldDescriptor)`.

    Parameters:
      `fieldDescriptor` - Field descriptor
      `fieldData` - byte array (can be `null`) with field data.
    Returns:
      The io length
    Throws:
      `SQLException`
    Since:
      4.0

  - ### calculateBatchMessageLength

    int calculateBatchMessageLength(RowDescriptor rowDescriptor) throws SQLException
    Calculates the batch message length.
    Parameters:
      `rowDescriptor` - row descriptor
    Returns:
      batch message length
    Throws:
      `SQLException` - when the `RowDescriptor` contains an unsupported field type.
    Since:
      5