DBZ-804 Basing decision whether to use VariableScaleDecimal on presence of scale and not precision

This commit is contained in:
Gunnar Morling 2018-07-23 12:14:10 +02:00 committed by Jiri Pechanec
parent e493951271
commit 6c899c2de4
2 changed files with 10 additions and 13 deletions

View File

@ -223,13 +223,10 @@ else if (ctx.datatype().native_datatype_element().REAL() != null) {
else if (ctx.datatype().native_datatype_element().NUMBER() != null) { else if (ctx.datatype().native_datatype_element().NUMBER() != null) {
columnEditor columnEditor
.jdbcType(Types.NUMERIC) .jdbcType(Types.NUMERIC)
.type("NUMBER") .type("NUMBER");
.length(38)
.scale(0);
if (precisionPart == null) { if (precisionPart == null) {
columnEditor columnEditor.length(38);
.length(0)
.scale(-127);
} }
} }
else { else {

View File

@ -37,7 +37,7 @@
import oracle.sql.TIMESTAMPTZ; import oracle.sql.TIMESTAMPTZ;
public class OracleValueConverters extends JdbcValueConverters { public class OracleValueConverters extends JdbcValueConverters {
private static int NUMBER_VARIABLE_SCALE_LENGTH = 0;
private static final Pattern INTERVAL_DAY_SECOND_PATTERN = Pattern.compile("([+\\-])?(\\d+) (\\d+):(\\d+):(\\d+).(\\d+)"); private static final Pattern INTERVAL_DAY_SECOND_PATTERN = Pattern.compile("([+\\-])?(\\d+) (\\d+):(\\d+):(\\d+).(\\d+)");
private final OracleConnection connection; private final OracleConnection connection;
@ -61,9 +61,9 @@ public SchemaBuilder schemaBuilder(Column column) {
case Types.FLOAT: case Types.FLOAT:
return VariableScaleDecimal.builder(); return VariableScaleDecimal.builder();
case Types.NUMERIC: case Types.NUMERIC:
return column.length() == NUMBER_VARIABLE_SCALE_LENGTH ? return column.scale().isPresent() ?
VariableScaleDecimal.builder() : super.schemaBuilder(column) :
super.schemaBuilder(column); VariableScaleDecimal.builder();
case OracleTypes.BINARY_FLOAT: case OracleTypes.BINARY_FLOAT:
return SchemaBuilder.float32(); return SchemaBuilder.float32();
case OracleTypes.BINARY_DOUBLE: case OracleTypes.BINARY_DOUBLE:
@ -92,9 +92,9 @@ public ValueConverter converter(Column column, Field fieldDefn) {
case OracleTypes.BINARY_DOUBLE: case OracleTypes.BINARY_DOUBLE:
return data -> convertDouble(column, fieldDefn, data); return data -> convertDouble(column, fieldDefn, data);
case Types.NUMERIC: case Types.NUMERIC:
return column.length() == NUMBER_VARIABLE_SCALE_LENGTH ? return column.scale().isPresent() ?
data -> convertVariableScale(column, fieldDefn, data) : data -> convertNumeric(column, fieldDefn, data) :
data -> convertNumeric(column, fieldDefn, data); data -> convertVariableScale(column, fieldDefn, data);
case Types.FLOAT: case Types.FLOAT:
return data -> convertVariableScale(column, fieldDefn, data); return data -> convertVariableScale(column, fieldDefn, data);
case OracleTypes.TIMESTAMPTZ: case OracleTypes.TIMESTAMPTZ: