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

    All Methods Instance Methods Abstract Methods
    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 Detail

    - #### calculateBlr

          byte[] calculateBlr​(RowDescriptor rowDescriptor)
                       throws java.sql.SQLException

      Calculates the blr for the row descriptor.
      Parameters:
        `rowDescriptor` - Row descriptor
      Returns:
        Byte array with the blr
      Throws:
        `java.sql.SQLException` - When the `RowDescriptor` contains an unsupported field type.

    - #### calculateBlr

          byte[] calculateBlr​(RowDescriptor rowDescriptor,
                              RowValue rowValue)
                       throws java.sql.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:
        `java.sql.SQLException` - When the `RowValue` contains an unsupported field type.

    - #### calculateIoLength

          int calculateIoLength​(FieldDescriptor fieldDescriptor)
                         throws java.sql.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:
        `java.sql.SQLException`

    - #### calculateIoLength

          int calculateIoLength​(FieldDescriptor fieldDescriptor,
                                byte[] fieldData)
                         throws java.sql.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:
        `java.sql.SQLException`
      Since:
        4.0

    - #### calculateBatchMessageLength

          int calculateBatchMessageLength​(RowDescriptor rowDescriptor)
                                   throws java.sql.SQLException

      Calculates the batch message length.
      Parameters:
        `rowDescriptor` - row descriptor
      Returns:
        batch message length
      Throws:
        `java.sql.SQLException` - when the `RowDescriptor` contains an unsupported field type.
      Since:
        5