use of io.debezium.connector.postgresql.PostgresType in project debezium by debezium.
the class Wal2JsonReplicationMessage method transform.
private List<ReplicationMessage.Column> transform(final Document data, final String nameField, final String typeField, final String valueField, final String optionalsField) {
final Array columnNames = data.getArray(nameField);
final Array columnTypes = data.getArray(typeField);
final Array columnValues = data.getArray(valueField);
final Array columnOptionals = data.getArray(optionalsField);
if (columnNames.size() != columnTypes.size() || columnNames.size() != columnValues.size()) {
throw new ConnectException("Column related arrays do not have the same size");
}
final List<ReplicationMessage.Column> columns = new ArrayList<>(columnNames.size());
for (int i = 0; i < columnNames.size(); i++) {
final String columnName = columnNames.get(i).asString();
final String columnTypeName = columnTypes.get(i).asString();
final boolean columnOptional = columnOptionals != null ? columnOptionals.get(i).asBoolean() : false;
final Value rawValue = columnValues.get(i);
final PostgresType columnType = typeRegistry.get(parseType(columnName, columnTypeName));
columns.add(new AbstractReplicationMessageColumn(columnName, columnType, columnTypeName, columnOptional, true) {
@Override
public Object getValue(PgConnectionSupplier connection, boolean includeUnknownDatatypes) {
return Wal2JsonReplicationMessage.this.getValue(columnName, columnType, columnTypeName, rawValue, connection, includeUnknownDatatypes);
}
});
}
return columns;
}
use of io.debezium.connector.postgresql.PostgresType in project debezium by debezium.
the class PostgresConnection method initTypeRegistry.
private static TypeRegistry initTypeRegistry(Connection db, Map<String, Integer> nameToJdbc) {
final TypeInfo typeInfo = ((BaseConnection) db).getTypeInfo();
TypeRegistry.Builder typeRegistryBuilder = TypeRegistry.create(typeInfo);
try {
try (final Statement statement = db.createStatement()) {
// Read non-array types
try (final ResultSet rs = statement.executeQuery(SQL_NON_ARRAY_TYPES)) {
while (rs.next()) {
final int oid = rs.getInt("oid");
typeRegistryBuilder.addType(new PostgresType(rs.getString("name"), oid, nameToJdbc.get(rs.getString("name")), typeInfo));
}
}
// Read array types
try (final ResultSet rs = statement.executeQuery(SQL_ARRAY_TYPES)) {
while (rs.next()) {
// int2vector and oidvector will not be treated as arrays
final int oid = rs.getInt("oid");
typeRegistryBuilder.addType(new PostgresType(rs.getString("name"), oid, nameToJdbc.get(rs.getString("name")), typeInfo, typeRegistryBuilder.get(rs.getInt("element"))));
}
}
}
} catch (SQLException e) {
throw new ConnectException("Could not intialize type registry", e);
}
return typeRegistryBuilder.build();
}
Aggregations