Class BinlogUnsignedIntegerConverter

java.lang.Object
io.debezium.connector.binlog.BinlogUnsignedIntegerConverter

public class BinlogUnsignedIntegerConverter extends Object
A converter for unsigned integer types.

It is intended to convert any integer type value from binlog into the current representation of unsigned numeric values. The binlog store unsigned numeric values as insertion value - max data type boundary - 1, therefore, to calculate the correct unsigned numeric representation, the calculation needs to be inverted as insertion value + max data type boundary + 1.

See DBZ-228 for more information.
Author:
Omar Al-Safi, Chris Cranford
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private static final BigDecimal
     
    private static final BigDecimal
     
    private static final long
     
    private static final long
     
    private static final int
     
    private static final int
     
    private static final int
     
    private static final int
     
    private static final short
     
    private static final short
    Maximum values for unsigned integer types, used to calculate actual value from binlog.
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    private
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static BigDecimal
    Convert original value insertion of type 'BIGINT' into the correct BIGINT UNSIGNED representation Note: Unsigned BIGINT (64-bit) is represented in 'BigDecimal' data type.
    static long
    convertUnsignedInteger(long originalNumber)
    Convert original value insertion of type 'INT' into the correct INT UNSIGNED representation Note: Unsigned INT (32-bit) is represented in 'Long' 64-bit data type.
    static int
    convertUnsignedMediumint(int originalNumber)
    Convert original value insertion of type 'MEDIUMINT' into the correct MEDIUMINT UNSIGNED representation Note: Unsigned MEDIUMINT (24-bit) is represented in 'Integer' 32-bit data type since the MAX value of Unsigned MEDIUMINT 16777215 < Max value of Integer 2147483647
    static int
    convertUnsignedSmallint(int originalNumber)
    Convert original value insertion of type 'SMALLINT' into the correct SMALLINT UNSIGNED representation Note: Unsigned SMALLINT (16-bit) is represented in 'Integer' 32-bit data type.
    static short
    convertUnsignedTinyint(short originalNumber)
    Convert original value insertion of type 'TINYINT' into the correct TINYINT UNSIGNED representation Note: Unsigned TINYINT (8-bit) is represented in 'Short' 16-bit data type.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • TINYINT_MAX_VALUE

      private static final short TINYINT_MAX_VALUE
      Maximum values for unsigned integer types, used to calculate actual value from binlog. See integer-types
      See Also:
    • SMALLINT_MAX_VALUE

      private static final int SMALLINT_MAX_VALUE
      See Also:
    • MEDIUMINT_MAX_VALUE

      private static final int MEDIUMINT_MAX_VALUE
      See Also:
    • INT_MAX_VALUE

      private static final long INT_MAX_VALUE
      See Also:
    • BIGINT_MAX_VALUE

      private static final BigDecimal BIGINT_MAX_VALUE
    • TINYINT_CORRECTION

      private static final short TINYINT_CORRECTION
      See Also:
    • SMALLINT_CORRECTION

      private static final int SMALLINT_CORRECTION
      See Also:
    • MEDIUMINT_CORRECTION

      private static final int MEDIUMINT_CORRECTION
      See Also:
    • INT_CORRECTION

      private static final long INT_CORRECTION
      See Also:
    • BIGINT_CORRECTION

      private static final BigDecimal BIGINT_CORRECTION
  • Constructor Details

    • BinlogUnsignedIntegerConverter

      private BinlogUnsignedIntegerConverter()
  • Method Details

    • convertUnsignedTinyint

      public static short convertUnsignedTinyint(short originalNumber)
      Convert original value insertion of type 'TINYINT' into the correct TINYINT UNSIGNED representation Note: Unsigned TINYINT (8-bit) is represented in 'Short' 16-bit data type. Reference: https://kafka.apache.org/0102/javadoc/org/apache/kafka/connect/data/Schema.Type.html
      Parameters:
      originalNumber - Short the original insertion value
      Returns:
      Short the correct representation of the original insertion value
    • convertUnsignedSmallint

      public static int convertUnsignedSmallint(int originalNumber)
      Convert original value insertion of type 'SMALLINT' into the correct SMALLINT UNSIGNED representation Note: Unsigned SMALLINT (16-bit) is represented in 'Integer' 32-bit data type. Reference: https://kafka.apache.org/0102/javadoc/org/apache/kafka/connect/data/Schema.Type.html
      Parameters:
      originalNumber - Integer the original insertion value
      Returns:
      Integer the correct representation of the original insertion value
    • convertUnsignedMediumint

      public static int convertUnsignedMediumint(int originalNumber)
      Convert original value insertion of type 'MEDIUMINT' into the correct MEDIUMINT UNSIGNED representation Note: Unsigned MEDIUMINT (24-bit) is represented in 'Integer' 32-bit data type since the MAX value of Unsigned MEDIUMINT 16777215 < Max value of Integer 2147483647
      Parameters:
      originalNumber - Integer the original insertion value
      Returns:
      Integer the correct representation of the original insertion value
    • convertUnsignedInteger

      public static long convertUnsignedInteger(long originalNumber)
      Convert original value insertion of type 'INT' into the correct INT UNSIGNED representation Note: Unsigned INT (32-bit) is represented in 'Long' 64-bit data type. Reference: https://kafka.apache.org/0102/javadoc/org/apache/kafka/connect/data/Schema.Type.html
      Parameters:
      originalNumber - Long the original insertion value
      Returns:
      Long the correct representation of the original insertion value
    • convertUnsignedBigint

      public static BigDecimal convertUnsignedBigint(BigDecimal originalNumber)
      Convert original value insertion of type 'BIGINT' into the correct BIGINT UNSIGNED representation Note: Unsigned BIGINT (64-bit) is represented in 'BigDecimal' data type. Reference: https://kafka.apache.org/0102/javadoc/org/apache/kafka/connect/data/Schema.Type.html
      Parameters:
      originalNumber - BigDecimal the original insertion value
      Returns:
      BigDecimal the correct representation of the original insertion value