Package io.debezium.connector.postgresql
Class PostgresValueConverter
java.lang.Object
io.debezium.jdbc.JdbcValueConverters
io.debezium.connector.postgresql.PostgresValueConverter
- All Implemented Interfaces:
ValueConverterProvider
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)
-
Nested Class Summary
Nested classes/interfaces inherited from class io.debezium.jdbc.JdbcValueConverters
JdbcValueConverters.BigIntUnsignedMode, JdbcValueConverters.DecimalMode -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final CharsetThe current database's character encoding.private final PostgresConnectorConfig.HStoreHandlingModeprivate final booleantrueif fields of data type not know should be handle as opaque binary;falseif they should be omittedprivate final PostgresConnectorConfig.IntervalHandlingModeprivate final com.fasterxml.jackson.core.JsonFactoryprivate static final BigDecimalprivate final intstatic final StringA string denoting not-a- number for FP and Numeric typesstatic final StringA string denoting negative infinity for FP and Numeric typesstatic final Datestatic final Instantstatic final LocalDatestatic final LocalDateTimestatic final OffsetDateTimestatic final Timestampstatic final StringA string denoting positive infinity for FP and Numeric typesstatic final Datestatic final Instantstatic final LocalDatestatic final LocalDateTimestatic final OffsetDateTimestatic final Timestampprivate static final DateTimeFormatterA formatter used to parse TIMETZ columns when provided as strings.private final TypeRegistryprivate final UnchangedToastedPlaceholderprivate static final intVariable scale decimal/numeric is defined by metadata scale - 0 length - 131089Fields inherited from class io.debezium.jdbc.JdbcValueConverters
adaptiveTimeMicrosecondsPrecisionMode, adaptiveTimePrecisionMode, adjuster, bigIntUnsignedMode, binaryMode, decimalMode, defaultOffset, fallbackTimestampWithTimeZone, logger -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedPostgresValueConverter(Charset databaseCharset, JdbcValueConverters.DecimalMode decimalMode, TemporalPrecisionMode temporalPrecisionMode, ZoneOffset defaultOffset, JdbcValueConverters.BigIntUnsignedMode bigIntUnsignedMode, boolean includeUnknownDatatypes, TypeRegistry typeRegistry, PostgresConnectorConfig.HStoreHandlingMode hStoreMode, CommonConnectorConfig.BinaryHandlingMode binaryMode, PostgresConnectorConfig.IntervalHandlingMode intervalMode, UnchangedToastedPlaceholder unchangedToastedPlaceholder, int moneyFractionDigits) -
Method Summary
Modifier and TypeMethodDescriptionprivate org.apache.kafka.connect.data.SchemaBuilderarrayElementSchema(Column column) private StringasHstoreString(byte[] data) Returns an Hstore field as string in the form of"key 1"=>"value1", "key_2"=>"val 1"; i.e.private Stringprotected ObjectconvertArray(Column column, org.apache.kafka.connect.data.Field fieldDefn, PostgresType elementType, ValueConverter elementConverter, Object data) protected ObjectconvertBinaryToBase64(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) protected ObjectconvertBinaryToBase64UrlSafe(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) protected ObjectconvertBinaryToBytes(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) Extracts a value from a PGobject .protected ObjectconvertBinaryToHex(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) protected ObjectconvertBit(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) protected ObjectconvertBits(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data, int numBytes) protected ObjectconvertCitext(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) protected ObjectconvertDecimal(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data, JdbcValueConverters.DecimalMode mode) protected ObjectconvertGeography(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) protected ObjectconvertGeometry(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) protected ObjectconvertHStore(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data, PostgresConnectorConfig.HStoreHandlingMode mode) private ObjectconvertHstoreToJsonString(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) private ObjectconvertHstoreToMap(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) protected ObjectconvertInterval(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) private ObjectconvertLtree(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) private ObjectconvertLtreeArray(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) private Stringprotected ObjectconvertMoney(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data, JdbcValueConverters.DecimalMode mode) protected ObjectconvertPoint(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.protected ObjectconvertString(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) Replaces toasted value with a placeholderprotected ObjectconvertTime(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) protected ObjectconvertTimestampToLocalDateTime(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) protected ObjectconvertTimestampWithZone(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) protected ObjectconvertTimeWithZone(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) private ValueConvertercreateArrayConverter(Column column, org.apache.kafka.connect.data.Field fieldDefn) protected intgetTimePrecision(Column column) protected ObjecthandleUnknownData(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) private org.apache.kafka.connect.data.SchemaBuilderprivate booleanisVariableScaleDecimal(Column column) private org.apache.kafka.connect.data.SchemaBuilderprivate org.apache.kafka.connect.data.SchemaBuildernumericSchema(Column column) static PostgresValueConverterof(PostgresConnectorConfig connectorConfig, Charset databaseCharset, TypeRegistry typeRegistry) private ObjectresolveArrayValue(Object value, PostgresType elementType) org.apache.kafka.connect.data.SchemaBuilderschemaBuilder(Column column) static Optional<SpecialValueDecimal>toSpecialValue(String value) Methods inherited from class io.debezium.jdbc.JdbcValueConverters
byteOrderOfBitType, convertBigInt, convertBinary, convertBits, convertBoolean, convertDateToEpochDays, convertDateToEpochDaysAsDate, convertDecimal, convertDouble, convertFloat, convertInteger, convertNumeric, convertReal, convertRowId, convertSmallInt, convertTimestampToEpochMicros, convertTimestampToEpochMillis, convertTimestampToEpochMillisAsDate, convertTimestampToEpochNanos, convertTimeToMicrosPastMidnight, convertTimeToMillisPastMidnight, convertTimeToMillisPastMidnightAsDate, convertTimeToNanosPastMidnight, convertTinyInt, convertValue, normalizeBinaryData, padLittleEndian, toBigDecimal, toByteBuffer, unexpectedBinary, withScaleAdjustedIfNeeded
-
Field Details
-
POSITIVE_INFINITY_DATE
-
POSITIVE_INFINITY_TIMESTAMP
-
POSITIVE_INFINITY_INSTANT
-
POSITIVE_INFINITY_LOCAL_DATE_TIME
-
POSITIVE_INFINITY_OFFSET_DATE_TIME
-
POSITIVE_INFINITY_LOCAL_DATE
-
NEGATIVE_INFINITY_DATE
-
NEGATIVE_INFINITY_TIMESTAMP
-
NEGATIVE_INFINITY_INSTANT
-
NEGATIVE_INFINITY_LOCAL_DATE_TIME
-
NEGATIVE_INFINITY_OFFSET_DATE_TIME
-
NEGATIVE_INFINITY_LOCAL_DATE
-
VARIABLE_SCALE_DECIMAL_LENGTH
private static final int VARIABLE_SCALE_DECIMAL_LENGTHVariable scale decimal/numeric is defined by metadata scale - 0 length - 131089- See Also:
-
N_A_N
A string denoting not-a- number for FP and Numeric types- See Also:
-
POSITIVE_INFINITY
A string denoting positive infinity for FP and Numeric types- See Also:
-
NEGATIVE_INFINITY
A string denoting negative infinity for FP and Numeric types- See Also:
-
MICROSECONDS_PER_SECOND
-
TIME_WITH_TIMEZONE_FORMATTER
A formatter used to parse TIMETZ columns when provided as strings. -
includeUnknownDatatypes
private final boolean includeUnknownDatatypestrueif fields of data type not know should be handle as opaque binary;falseif they should be omitted -
typeRegistry
-
hStoreMode
-
intervalMode
-
databaseCharset
The current database's character encoding. -
jsonFactory
private final com.fasterxml.jackson.core.JsonFactory jsonFactory -
unchangedToastedPlaceholder
-
moneyFractionDigits
private final int moneyFractionDigits
-
-
Constructor Details
-
PostgresValueConverter
protected PostgresValueConverter(Charset databaseCharset, JdbcValueConverters.DecimalMode decimalMode, TemporalPrecisionMode temporalPrecisionMode, ZoneOffset defaultOffset, JdbcValueConverters.BigIntUnsignedMode bigIntUnsignedMode, boolean includeUnknownDatatypes, TypeRegistry typeRegistry, PostgresConnectorConfig.HStoreHandlingMode hStoreMode, CommonConnectorConfig.BinaryHandlingMode binaryMode, PostgresConnectorConfig.IntervalHandlingMode intervalMode, UnchangedToastedPlaceholder unchangedToastedPlaceholder, int moneyFractionDigits)
-
-
Method Details
-
of
public static PostgresValueConverter of(PostgresConnectorConfig connectorConfig, Charset databaseCharset, TypeRegistry typeRegistry) -
schemaBuilder
- Specified by:
schemaBuilderin interfaceValueConverterProvider- Overrides:
schemaBuilderin classJdbcValueConverters
-
numericSchema
-
hstoreSchema
private org.apache.kafka.connect.data.SchemaBuilder hstoreSchema() -
moneySchema
private org.apache.kafka.connect.data.SchemaBuilder moneySchema() -
arrayElementSchema
-
converter
- Specified by:
converterin interfaceValueConverterProvider- Overrides:
converterin classJdbcValueConverters
-
createArrayConverter
private ValueConverter createArrayConverter(Column column, org.apache.kafka.connect.data.Field fieldDefn) -
convertTime
protected Object convertTime(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) - Overrides:
convertTimein classJdbcValueConverters
-
convertDecimal
protected Object convertDecimal(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data, JdbcValueConverters.DecimalMode mode) -
convertHStore
protected Object convertHStore(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data, PostgresConnectorConfig.HStoreHandlingMode mode) -
convertLtree
-
convertLtreeArray
-
convertHstoreToMap
-
asHstoreString
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
-
changePlainStringRepresentationToJsonStringRepresentation
-
convertMapToJsonStringRepresentation
-
convertBit
protected Object convertBit(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) - Overrides:
convertBitin classJdbcValueConverters
-
convertBits
protected Object convertBits(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data, int numBytes) - Overrides:
convertBitsin classJdbcValueConverters
-
convertMoney
protected Object convertMoney(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data, JdbcValueConverters.DecimalMode mode) -
convertInterval
-
convertTimestampWithZone
protected Object convertTimestampWithZone(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) - Overrides:
convertTimestampWithZonein classJdbcValueConverters
-
convertTimeWithZone
protected Object convertTimeWithZone(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) - Overrides:
convertTimeWithZonein classJdbcValueConverters
-
convertGeometry
-
convertGeography
-
convertCitext
-
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 nullfieldDefn- the Connect field definition for this column; never nulldata- 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
-
convertArray
protected Object convertArray(Column column, org.apache.kafka.connect.data.Field fieldDefn, PostgresType elementType, ValueConverter elementConverter, Object data) -
resolveArrayValue
-
isVariableScaleDecimal
-
toSpecialValue
-
convertTimestampToLocalDateTime
-
getTimePrecision
- Overrides:
getTimePrecisionin classJdbcValueConverters
-
convertBinaryToBytes
protected Object convertBinaryToBytes(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) Extracts a value from a PGobject .- Overrides:
convertBinaryToBytesin classJdbcValueConverters- Parameters:
column- the column definition describing thedatavalue; never nullfieldDefn- the field definition; never nulldata- 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
-
convertBinaryToBase64
protected Object convertBinaryToBase64(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) - Overrides:
convertBinaryToBase64in classJdbcValueConverters
-
convertBinaryToBase64UrlSafe
protected Object convertBinaryToBase64UrlSafe(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) - Overrides:
convertBinaryToBase64UrlSafein classJdbcValueConverters
-
convertBinaryToHex
protected Object convertBinaryToHex(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) - Overrides:
convertBinaryToHexin classJdbcValueConverters
-
convertString
protected Object convertString(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) Replaces toasted value with a placeholder- Overrides:
convertStringin classJdbcValueConverters- Parameters:
column- the column definition describing thedatavalue; never nullfieldDefn- the field definition; never nulldata- 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
-
handleUnknownData
protected Object handleUnknownData(Column column, org.apache.kafka.connect.data.Field fieldDefn, Object data) - Overrides:
handleUnknownDatain classJdbcValueConverters
-