Package 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 Description static DefaultBlrCalculator
CALCULATOR_DIALECT_3
Cached instance ofDefaultBlrCalculator
for dialect 3 databases.
-
Constructor Summary
Constructors Constructor Description DefaultBlrCalculator(short dialect)
-
Method Summary
All Methods Instance Methods Concrete 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.
-
-
-
Field Detail
-
CALCULATOR_DIALECT_3
public static final DefaultBlrCalculator CALCULATOR_DIALECT_3
Cached instance ofDefaultBlrCalculator
for dialect 3 databases.
-
-
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 interfaceBlrCalculator
- Parameters:
rowDescriptor
- Row descriptor- Returns:
- Byte array with the blr
- Throws:
java.sql.SQLException
- When theRowDescriptor
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 interfaceBlrCalculator
- Parameters:
rowDescriptor
- Row descriptorrowValue
- Row value- Returns:
- Byte array with the blr
- Throws:
java.sql.SQLException
- When theRowValue
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 interfaceBlrCalculator
- Parameters:
fieldDescriptor
- Field descriptor- Returns:
- The io length
- Throws:
java.sql.SQLException
-
calculateIoLength
public int calculateIoLength(FieldDescriptor fieldDescriptor, byte[] fieldData) throws java.sql.SQLException
Description copied from interface:BlrCalculator
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 byBlrCalculator.calculateIoLength(FieldDescriptor)
.- Specified by:
calculateIoLength
in interfaceBlrCalculator
- Parameters:
fieldDescriptor
- Field descriptorfieldData
- byte array (can benull
) with field data.- Returns:
- The io length
- Throws:
java.sql.SQLException
-
calculateBatchMessageLength
public int calculateBatchMessageLength(RowDescriptor rowDescriptor) throws java.sql.SQLException
Description copied from interface:BlrCalculator
Calculates the batch message length.- Specified by:
calculateBatchMessageLength
in interfaceBlrCalculator
- Parameters:
rowDescriptor
- row descriptor- Returns:
- batch message length
- Throws:
java.sql.SQLException
- when theRowDescriptor
contains an unsupported field type.
-
-