Class PostgresValueConverter

  • All Implemented Interfaces:
    ValueConverterProvider

    public class PostgresValueConverter
    extends JdbcValueConverters
    A provider of ValueConverters and SchemaBuilders for various Postgres specific column types. In addition to handling data type conversion from values coming from JDBC, this is also expected to handle data type conversion for data types coming from the logical decoding plugin.
    Author:
    Horia Chiorean (hchiorea@redhat.com)
    • Field Detail

      • POSITIVE_INFINITY_TIMESTAMP

        public static final Timestamp POSITIVE_INFINITY_TIMESTAMP
      • POSITIVE_INFINITY_INSTANT

        public static final Instant POSITIVE_INFINITY_INSTANT
      • POSITIVE_INFINITY_LOCAL_DATE_TIME

        public static final LocalDateTime POSITIVE_INFINITY_LOCAL_DATE_TIME
      • POSITIVE_INFINITY_OFFSET_DATE_TIME

        public static final OffsetDateTime POSITIVE_INFINITY_OFFSET_DATE_TIME
      • NEGATIVE_INFINITY_TIMESTAMP

        public static final Timestamp NEGATIVE_INFINITY_TIMESTAMP
      • NEGATIVE_INFINITY_INSTANT

        public static final Instant NEGATIVE_INFINITY_INSTANT
      • NEGATIVE_INFINITY_LOCAL_DATE_TIME

        public static final LocalDateTime NEGATIVE_INFINITY_LOCAL_DATE_TIME
      • NEGATIVE_INFINITY_OFFSET_DATE_TIME

        public static final OffsetDateTime NEGATIVE_INFINITY_OFFSET_DATE_TIME
      • VARIABLE_SCALE_DECIMAL_LENGTH

        private static final int VARIABLE_SCALE_DECIMAL_LENGTH
        Variable scale decimal/numeric is defined by metadata scale - 0 length - 131089
        See Also:
        Constant Field Values
      • POSITIVE_INFINITY

        public static final String POSITIVE_INFINITY
        A string denoting positive infinity for FP and Numeric types
        See Also:
        Constant Field Values
      • NEGATIVE_INFINITY

        public static final String NEGATIVE_INFINITY
        A string denoting negative infinity for FP and Numeric types
        See Also:
        Constant Field Values
      • MICROSECONDS_PER_SECOND

        private static final BigDecimal MICROSECONDS_PER_SECOND
      • TIME_WITH_TIMEZONE_FORMATTER

        private static final DateTimeFormatter TIME_WITH_TIMEZONE_FORMATTER
        A formatter used to parse TIMETZ columns when provided as strings.
      • includeUnknownDatatypes

        private final boolean includeUnknownDatatypes
        true if fields of data type not know should be handle as opaque binary; false if they should be omitted
      • databaseCharset

        private final Charset databaseCharset
        The current database's character encoding.
      • jsonFactory

        private final com.fasterxml.jackson.core.JsonFactory jsonFactory
      • toastPlaceholderString

        private final String toastPlaceholderString
      • toastPlaceholderBinary

        private final byte[] toastPlaceholderBinary
    • Method Detail

      • numericSchema

        private org.apache.kafka.connect.data.SchemaBuilder numericSchema​(Column column)
      • hstoreSchema

        private org.apache.kafka.connect.data.SchemaBuilder hstoreSchema()
      • createArrayConverter

        private ValueConverter createArrayConverter​(Column column,
                                                    org.apache.kafka.connect.data.Field fieldDefn)
      • convertLtree

        private Object convertLtree​(Column column,
                                    org.apache.kafka.connect.data.Field fieldDefn,
                                    Object data)
      • convertLtreeArray

        private Object convertLtreeArray​(Column column,
                                         org.apache.kafka.connect.data.Field fieldDefn,
                                         Object data)
      • convertHstoreToMap

        private Object convertHstoreToMap​(Column column,
                                          org.apache.kafka.connect.data.Field fieldDefn,
                                          Object data)
      • asHstoreString

        private String asHstoreString​(byte[] data)
        Returns an Hstore field as string in the form of "key 1"=>"value1", "key_2"=>"val 1"; i.e. the given byte array is NOT the byte representation returned by {@link HStoreConverter#toBytes(Map, org.postgresql.core.Encoding))}, but the String based representation
      • convertHstoreToJsonString

        private Object convertHstoreToJsonString​(Column column,
                                                 org.apache.kafka.connect.data.Field fieldDefn,
                                                 Object data)
      • changePlainStringRepresentationToJsonStringRepresentation

        private String changePlainStringRepresentationToJsonStringRepresentation​(String text)
      • convertMapToJsonStringRepresentation

        private String convertMapToJsonStringRepresentation​(Map<String,​String> map)
      • convertMoney

        protected Object convertMoney​(Column column,
                                      org.apache.kafka.connect.data.Field fieldDefn,
                                      Object data)
      • convertInterval

        protected Object convertInterval​(Column column,
                                         org.apache.kafka.connect.data.Field fieldDefn,
                                         Object data)
      • convertGeometry

        protected Object convertGeometry​(Column column,
                                         org.apache.kafka.connect.data.Field fieldDefn,
                                         Object data)
      • convertGeography

        protected Object convertGeography​(Column column,
                                          org.apache.kafka.connect.data.Field fieldDefn,
                                          Object data)
      • convertCitext

        protected Object convertCitext​(Column column,
                                       org.apache.kafka.connect.data.Field fieldDefn,
                                       Object data)
      • convertPoint

        protected Object convertPoint​(Column column,
                                      org.apache.kafka.connect.data.Field fieldDefn,
                                      Object data)
        Converts a value representing a Postgres point for a column, to a Kafka Connect value.
        Parameters:
        column - the JDBC column; never null
        fieldDefn - the Connect field definition for this column; never null
        data - a data for the point column, either coming from the JDBC driver or logical decoding plugin
        Returns:
        a value which will be used by Connect to represent the actual point value
      • isVariableScaleDecimal

        private boolean isVariableScaleDecimal​(Column column)
      • convertTimestampToLocalDateTime

        protected Object convertTimestampToLocalDateTime​(Column column,
                                                         org.apache.kafka.connect.data.Field fieldDefn,
                                                         Object data)
      • convertBinaryToBytes

        protected Object convertBinaryToBytes​(Column column,
                                              org.apache.kafka.connect.data.Field fieldDefn,
                                              Object data)
        Extracts a value from a PGobject .
        Overrides:
        convertBinaryToBytes in class JdbcValueConverters
        Parameters:
        column - the column definition describing the data value; never null
        fieldDefn - the field definition; never null
        data - the data object to be converted into a Kafka Connect type
        Returns:
        the converted value, or null if the conversion could not be made and the column allows nulls
        Throws:
        IllegalArgumentException - if the value could not be converted but the column does not allow nulls
      • convertString

        protected Object convertString​(Column column,
                                       org.apache.kafka.connect.data.Field fieldDefn,
                                       Object data)
        Replaces toasted value with a placeholder
        Overrides:
        convertString in class JdbcValueConverters
        Parameters:
        column - the column definition describing the data value; never null
        fieldDefn - the field definition; never null
        data - the data object to be converted into a Kafka Connect type
        Returns:
        the converted value, or null if the conversion could not be made and the column allows nulls
        Throws:
        IllegalArgumentException - if the value could not be converted but the column does not allow nulls