org.firebirdsql.gds.ng.wire

## Class DefaultBlrCalculator

- java.lang.Object
- - org.firebirdsql.gds.ng.wire.DefaultBlrCalculator

- All Implemented Interfaces:
    BlrCalculator

      public class DefaultBlrCalculator
      extends java.lang.Object
      implements BlrCalculator

  Default BLR calculator for the wire protocol.

  Most likely this can be used without change for other protocol versions as well, although we may need to investigate the TODOs specified in `calculateBlr(org.firebirdsql.gds.ng.fields.RowDescriptor)`.

  Since:
    3.0
  Author:
    Mark Rotteveel

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static DefaultBlrCalculator` | `CALCULATOR_DIALECT_3` Cached instance of `DefaultBlrCalculator` for dialect 3 databases.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `DefaultBlrCalculator(short dialect)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `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, FieldValue fieldValue)` Calculates the io length for the field descriptor.

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

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### CALCULATOR_DIALECT_3

          public static final DefaultBlrCalculator CALCULATOR_DIALECT_3

      Cached instance of `DefaultBlrCalculator` for dialect 3 databases.

  - ### Constructor Detail

    - #### DefaultBlrCalculator

          public DefaultBlrCalculator(short dialect)

  - ### Method Detail

    - #### calculateBlr

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

      Description copied from interface: `BlrCalculator`
      Calculates the blr for the row descriptor.
      Specified by:
        `calculateBlr` in interface `BlrCalculator`
      Parameters:
        `rowDescriptor` - Row descriptor
      Returns:
        Byte array with the blr
      Throws:
        `java.sql.SQLException` - When the `RowDescriptor` contains an unsupported field type.

    - #### calculateBlr

          public byte[] calculateBlr(RowDescriptor rowDescriptor,
                            RowValue rowValue)
                              throws java.sql.SQLException

      Description copied from interface: `BlrCalculator`
      Calculates the blr for a specific row value.

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

      Specified by:
        `calculateBlr` in interface `BlrCalculator`
      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

          public int calculateIoLength(FieldDescriptor fieldDescriptor)
                                throws java.sql.SQLException

      Description copied from interface: `BlrCalculator`
      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
      Specified by:
        `calculateIoLength` in interface `BlrCalculator`
      Parameters:
        `fieldDescriptor` - Field descriptor
      Returns:
        The io length
      Throws:
        `java.sql.SQLException`

    - #### calculateIoLength

          public int calculateIoLength(FieldDescriptor fieldDescriptor,
                              FieldValue fieldValue)
                                throws java.sql.SQLException

      Description copied from interface: `BlrCalculator`
      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) nd 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 `BlrCalculator.calculateBlr(RowDescriptor, RowValue)`.

      Specified by:
        `calculateIoLength` in interface `BlrCalculator`
      Parameters:
        `fieldDescriptor` - Field descriptor
        `fieldValue` - Field value
      Returns:
        The io length
      Throws:
        `java.sql.SQLException`

Copyright © 2001-2021 Jaybird (Firebird JDBC/JCA) team. All rights reserved.