DBZ-804 Adjust metadata for NUMBER columns without explicit scale value

This commit is contained in:
Gunnar Morling 2018-07-23 13:28:32 +02:00 committed by Jiri Pechanec
parent f4aa437741
commit 5b07419ee9

View File

@ -25,11 +25,17 @@
import io.debezium.relational.Tables;
import io.debezium.relational.Tables.ColumnNameFilter;
import io.debezium.relational.Tables.TableFilter;
import oracle.jdbc.OracleTypes;
public class OracleConnection extends JdbcConnection {
private final static Logger LOGGER = LoggerFactory.getLogger(OracleConnection.class);
/**
* Returned by column metadata in Oracle if no scale is set;
*/
private static final int ORACLE_UNSET_SCALE = -127;
public OracleConnection(Configuration config, ConnectionFactory connectionFactory) {
super(config, connectionFactory);
}
@ -117,6 +123,19 @@ public void readSchema(Tables tables, String databaseCatalog, String schemaNameP
.create()
);
}
// NUMBER columns without scale value have it set to -127 instead of null;
// let's rectify that
else if (column.jdbcType() == OracleTypes.NUMBER) {
column.scale()
.filter(s -> s == ORACLE_UNSET_SCALE)
.ifPresent(s -> {
editor.addColumn(
column.edit()
.scale(null)
.create()
);
});
}
}
tables.overwriteTable(editor.create());
}