Interface DatatypeCoder

All Known Implementing Classes:
BigEndianDatatypeCoder, DefaultDatatypeCoder, EncodingSpecificDatatypeCoder, LittleEndianDatatypeCoder

public interface DatatypeCoder
Interface defining the encoding and decoding for Firebird (numerical) data types.
Since:
3.0
Author:
Mark Rotteveel
  • Field Details

  • Method Details

    • sizeOfShort

      int sizeOfShort()
      The size of an encoded short in this data type coder.
      Returns:
      The size of an encoded short (either 2 or 4 bytes)
      Since:
      4.0
    • encodeShort

      byte[] encodeShort(short value)
      Encode a short value as a byte array.
      Parameters:
      value - The value to be encoded
      Returns:
      The value of value encoded as a byte array
      See Also:
    • encodeShort

      byte[] encodeShort(int value)
      Encode a short value as a byte array.
      Parameters:
      value - The value to be encoded
      Returns:
      The value of value encoded as a byte array
    • encodeShort

      void encodeShort(int value, byte[] target, int fromIndex)
      Encode a short value into the target byte array starting at index fromIndex.
      Parameters:
      value - The value to be encoded
      target - Target byte array of sufficient size (warning: this may be datatype coder specific)
      fromIndex - Index to start writing
      Since:
      4.0
    • decodeShort

      short decodeShort(byte[] byte_int)
      Decode a byte array into a short value.
      Parameters:
      byte_int - The byte array to be decoded
      Returns:
      The short value of the decoded byte array
    • decodeShort

      short decodeShort(byte[] bytes, int fromIndex)
      Decode from a byte array to a short value.
      Parameters:
      bytes - The byte array to be decoded
      fromIndex - The index to start reading
      Returns:
      The short value of the decoded byte array
      Since:
      4.0
    • encodeInt

      byte[] encodeInt(int value)
      Encode an int value as a byte array.
      Parameters:
      value - The value to be encoded
      Returns:
      The value of value encoded as a byte array
    • encodeInt

      void encodeInt(int value, byte[] target, int fromIndex)
      Encode an int value into the target byte array starting at index fromIndex.
      Parameters:
      value - The value to be encoded
      target - Target byte array of sufficient size
      fromIndex - Index to start writing
      Since:
      4.0
    • decodeInt

      int decodeInt(byte[] byte_int)
      Decode a byte array into an int value.
      Parameters:
      byte_int - The byte array to be decoded
      Returns:
      The int value of the decoded byte array
    • decodeInt

      int decodeInt(byte[] bytes, int fromIndex)
      Decode a byte array to an int value.
      Parameters:
      bytes - The byte array to be decoded
      fromIndex - The index to start reading
      Returns:
      The int value of the decoded byte array
      Since:
      4.0
    • encodeLong

      byte[] encodeLong(long value)
      Encode a long value as a byte array.
      Parameters:
      value - The value to be encoded
      Returns:
      The value of value encoded as a byte array
    • decodeLong

      long decodeLong(byte[] byte_int)
      Decode a byte array into a long value.
      Parameters:
      byte_int - The byte array to be decoded
      Returns:
      The long value of the decoded byte array
    • encodeFloat

      byte[] encodeFloat(float value)
      Encode a float value as a byte array.
      Parameters:
      value - The value to be encoded
      Returns:
      The value of value encoded as a byte array
    • decodeFloat

      float decodeFloat(byte[] byte_int)
      Decode a byte array into a float value.
      Parameters:
      byte_int - The byte array to be decoded
      Returns:
      The float value of the decoded byte array
    • encodeDouble

      byte[] encodeDouble(double value)
      Encode a double value as a byte array.
      Parameters:
      value - The value to be encoded
      Returns:
      The value of value encoded as a byte array
    • decodeDouble

      double decodeDouble(byte[] byte_int)
      Decode a byte array into a double value.
      Parameters:
      byte_int - The byte array to be decoded
      Returns:
      The double value of the decoded byte array
    • encodeString

      byte[] encodeString(String value)
      Encode a String value into a byte array using the encoding of this datatype coder.
      Parameters:
      value - The String to be encoded
      Returns:
      The value of value as a byte array
      Since:
      4.0
    • createWriter

      Writer createWriter(OutputStream outputStream)
      Creates a writer wrapping an input stream.
      Parameters:
      outputStream - Input stream
      Returns:
      Writer applying the encoding of this datatype when writing
      Since:
      4.0
    • decodeString

      String decodeString(byte[] value)
      Decode an encoded byte array into a String using the encoding of this datatype coder.
      Parameters:
      value - The value to be decoded
      Returns:
      The decoded String
      Since:
      4.0
    • createReader

      Reader createReader(InputStream inputStream)
      Creates a reader wrapping an input stream.
      Parameters:
      inputStream - Input stream
      Returns:
      Reader applying the encoding of this datatype coder when reading
      Since:
      4.0
    • encodeTimestamp

      Timestamp encodeTimestamp(Timestamp value, Calendar cal)
      Encode a Timestamp using a given Calendar.
      Parameters:
      value - The Timestamp to be encoded
      cal - The Calendar to be used for encoding, may be null
    • encodeTimestamp

      Timestamp encodeTimestamp(Timestamp value, Calendar cal, boolean invertTimeZone)
      Encode a Timestamp using a given Calendar.
      Parameters:
      value - The Timestamp to be encoded
      cal - The Calendar to be used for encoding, may be null
      invertTimeZone - If true, the timezone offset value will be subtracted from the encoded value, otherwise it will be added
      Returns:
      The encoded Timestamp
    • encodeTimestamp

      byte[] encodeTimestamp(Timestamp value)
      Encode a Timestamp as a byte array.
      Parameters:
      value - The Timestamp to be encoded
      Returns:
      The array of bytes that represents the given Timestamp value
    • encodeTimestampRaw

      byte[] encodeTimestampRaw(DatatypeCoder.RawDateTimeStruct raw)
      Encode the date and time portions of a raw date time struct into a byte array.
      Parameters:
      raw - The RawDateTimeStruct to be encoded
      Returns:
      The array of bytes representing the date and time of the given RawDateTimeStruct
    • encodeTimestampCalendar

      byte[] encodeTimestampCalendar(Timestamp value, Calendar c)
    • decodeTimestamp

      Timestamp decodeTimestamp(Timestamp value, Calendar cal)
      Decode a Timestamp value using a given Calendar.
      Parameters:
      value - The Timestamp to be decoded
      cal - The Calendar to be used in decoding, may be null
      Returns:
      The decoded Timestamp
    • decodeTimestamp

      Timestamp decodeTimestamp(Timestamp value, Calendar cal, boolean invertTimeZone)
      Decode a Timestamp value using a given Calendar.
      Parameters:
      value - The Timestamp to be decoded
      cal - The Calendar to be used in decoding, may be null
      invertTimeZone - If true, the timezone offset value will be subtracted from the decoded value, otherwise it will be added
      Returns:
      The encoded Timestamp
    • decodeTimestamp

      Timestamp decodeTimestamp(byte[] byte_long)
      Decode a 8-byte byte array into a Timestamp.
      Parameters:
      byte_long - The byte array to be decoded
      Returns:
      A Timestamp value from the decoded bytes
    • decodeTimestampRaw

      DatatypeCoder.RawDateTimeStruct decodeTimestampRaw(byte[] byte_long)
      Decode a 8-byte byte array into a raw date time struct.
      Parameters:
      byte_long - The byte array to be decoded
      Returns:
      A DatatypeCoder.RawDateTimeStruct.
    • decodeTimestampCalendar

      Timestamp decodeTimestampCalendar(byte[] byte_long, Calendar c)
    • encodeTime

      Time encodeTime(Time d, Calendar cal, boolean invertTimeZone)
      Encode a given Time value using a given Calendar.
      Parameters:
      d - The Time to be encoded
      cal - The Calendar to be used in the encoding, may be null
      Returns:
      The encoded Time
    • encodeTime

      byte[] encodeTime(Time d)
      Encode a Time value into a byte array.
      Parameters:
      d - The Time to be encoded
      Returns:
      The array of bytes representing the given Time
    • encodeTimeRaw

      byte[] encodeTimeRaw(DatatypeCoder.RawDateTimeStruct raw)
      Encode the time portion of a raw date time struct into a byte array.
      Parameters:
      raw - The RawDateTimeStruct to be encoded
      Returns:
      The array of bytes representing the time of the given RawDateTimeStruct
    • encodeTimeCalendar

      byte[] encodeTimeCalendar(Time d, Calendar c)
    • decodeTime

      Time decodeTime(Time d, Calendar cal, boolean invertTimeZone)
      Decode a Time value using a given Calendar.
      Parameters:
      d - The Time to be decoded
      cal - The Calendar to be used in the decoding, may be null
      Returns:
      The decooded Time
    • decodeTime

      Time decodeTime(byte[] int_byte)
      Decode a byte array into a Time value.
      Parameters:
      int_byte - The byte array to be decoded
      Returns:
      The decoded Time
    • decodeTimeRaw

      DatatypeCoder.RawDateTimeStruct decodeTimeRaw(byte[] int_byte)
      Decode a byte array into a raw date time struct.
      Parameters:
      int_byte - The byte array to be decoded
      Returns:
      The DatatypeCoder.RawDateTimeStruct
    • decodeTimeCalendar

      Time decodeTimeCalendar(byte[] int_byte, Calendar c)
    • encodeDate

      Date encodeDate(Date d, Calendar cal)
      Encode a given Date value using a given Calendar.
      Parameters:
      d - The Date to be encoded
      cal - The Calendar to be used in the encoding, may be null
      Returns:
      The encoded Date
    • encodeDate

      byte[] encodeDate(Date d)
      Encode a Date value into a byte array.
      Parameters:
      d - The Date to be encoded
      Returns:
      The array of bytes representing the given Date
    • encodeDateRaw

      byte[] encodeDateRaw(DatatypeCoder.RawDateTimeStruct raw)
      Encode the date portion of a raw date time struct into a byte array.
      Parameters:
      raw - The RawDateTimeStruct to be encoded
      Returns:
      The array of bytes representing the date of the given RawDateTimeStruct
    • encodeDateCalendar

      byte[] encodeDateCalendar(Date d, Calendar c)
    • decodeDate

      Date decodeDate(Date d, Calendar cal)
      Decode a Date value using a given Calendar.
      Parameters:
      d - The Date to be decoded
      cal - The Calendar to be used in the decoding, may be null
      Returns:
      The decoded Date
    • decodeDate

      Date decodeDate(byte[] byte_int)
      Decode a byte array into a Date value.
      Parameters:
      byte_int - The byte array to be decoded
      Returns:
      The decoded Date
    • decodeDateRaw

      DatatypeCoder.RawDateTimeStruct decodeDateRaw(byte[] byte_int)
      Decode a byte array into a raw date time struct.
      Parameters:
      byte_int - The byte array to be decoded
      Returns:
      The DatatypeCoder.RawDateTimeStruct
    • decodeDateCalendar

      Date decodeDateCalendar(byte[] byte_int, Calendar c)
    • decodeBoolean

      boolean decodeBoolean(byte[] data)
      Decode boolean from supplied data.
      Parameters:
      data - (expected) 1 bytes
      Returns:
      false when 0, true for all other values
    • encodeBoolean

      byte[] encodeBoolean(boolean value)
      Encodes boolean to 1 byte data.
      Parameters:
      value - Boolean value to encode
      Returns:
      true as 1, false as 0.
    • encodeLocalTime

      byte[] encodeLocalTime(int hour, int minute, int second, int nanos)
      Encodes a java.time.LocalTime equivalent to time bytes.
      Parameters:
      hour - Number of hours (is assumed to be 0..23)
      minute - Number of minutes (is assumed to be 0..59)
      second - Number of seconds (is assumed to be 0..59)
      nanos - Sub-second nanoseconds (actual resolution is 100 microseconds, is assumed to be 0 .. 10^9 - 1 ns)
      Returns:
      Byte array for time
    • encodeLocalDate

      byte[] encodeLocalDate(int year, int month, int day)
      Encodes a java.time.LocalDate equivalent to date bytes.
      Parameters:
      year - Year
      month - Month (is assumed to be 1..12)
      day - Day (is assumed to be valid for year and month)
      Returns:
      Byte array for date
    • encodeLocalDateTime

      byte[] encodeLocalDateTime(int year, int month, int day, int hour, int minute, int second, int nanos)
      Encodes a java.time.LocalDateTime equivalent to timestamp bytes.
      Parameters:
      year - Year
      month - Month (is assumed to be 1..12)
      day - Day (is assumed to be valid for year and month)
      hour - Number of hours (is assumed to be 0..23)
      minute - Number of minutes (is assumed to be 0..59)
      second - Number of seconds (is assumed to be 0..59)
      nanos - Sub-second nanoseconds (actual resolution is 100 microseconds, is assumed to be 0 .. 10^9 - 1 ns)
      Returns:
      Byte array for timestamp
    • decodeDecimal64

      Decimal64 decodeDecimal64(byte[] data)
      Decodes a decimal64 from byte array.
      Parameters:
      data - Data to decode (expected 8 bytes)
      Returns:
      Decimal64 value
    • encodeDecimal64

      byte[] encodeDecimal64(Decimal64 decimal64)
      Encodes a decimal64 to a byte array.
      Parameters:
      decimal64 - The decimal64 value to be encoded
      Returns:
      Byte array for decimal64 value
    • decodeDecimal128

      Decimal128 decodeDecimal128(byte[] data)
      Decodes a decimal128 from byte array.
      Parameters:
      data - Data to decode (expected 16 bytes)
      Returns:
      Decimal128 value
    • encodeDecimal128

      byte[] encodeDecimal128(Decimal128 decimal128)
      Encodes a decimal128 to a byte array.
      Parameters:
      decimal128 - The decimal128 value to be encoded
      Returns:
      Byte array for decimal128 value
    • decodeInt128

      BigInteger decodeInt128(byte[] data)
      Decodes a BigInteger from byte array.
      Parameters:
      data - Data to decode (expected 16 bytes)
      Returns:
      BigInteger value
    • encodeInt128

      byte[] encodeInt128(BigInteger bigInteger)
      Encodes a BigInteger to a 16-byte byte array.

      The implementation expects to be passed a value that fits in 16 bytes. If a larger value is passed, and IllegalArgumentException is thrown.

      Parameters:
      bigInteger - The BigInteger value to be encoded
      Returns:
      Byte array for bigInteger value
    • getEncodingFactory

      IEncodingFactory getEncodingFactory()
      Returns:
      The encoding factory.
    • getEncodingDefinition

      EncodingDefinition getEncodingDefinition()
      Returns:
      The encoding definition used by this datatype coder for string conversions.
    • getEncoding

      Encoding getEncoding()
      Returns:
      The encoding used by this datatype coder for string conversions.
    • forEncodingDefinition

      DatatypeCoder forEncodingDefinition(EncodingDefinition encodingDefinition)
      Return a derived datatype coder that applies the supplied encoding definition for string conversions.
      Parameters:
      encodingDefinition - Encoding definition
      Returns:
      Derived datatype coder (may be this instance if encoding definition is the same)
      Since:
      4.0
    • unwrap

      DatatypeCoder unwrap()
      Unwrap this datatype coder to its parent (or itself).
      Returns:
      Return the parent of this datatype code, or itself if it has no parent.
      Since:
      4.0
    • equals

      boolean equals(Object other)

      Equality: same basic type (ie: wire protocol/JNA type + endianness) and same encoding definition.

      This does not need to take into account the encoding factory, as usage should be limited to datatype coders derived from the same connection.

      Overrides:
      equals in class Object
      Parameters:
      other - Object to compare to
      Returns:
      true if other is an equivalent datatype coder.
    • hashCode

      int hashCode()
      Overrides:
      hashCode in class Object