DBZ-1064 Use convert value template

This commit is contained in:
Jiri Pechanec 2019-01-16 13:34:36 +01:00
parent 501cbfc98e
commit 4d9cd1c267

View File

@ -311,33 +311,25 @@ protected Object convertNumericAsBigInteger(Column column, Field fieldDefn, Obje
@Override @Override
protected Object convertTinyInt(Column column, Field fieldDefn, Object data) { protected Object convertTinyInt(Column column, Field fieldDefn, Object data) {
if (data == null && !fieldDefn.schema().isOptional()) { return convertValue(column, fieldDefn, data, BYTE_FALSE, (r) -> {
data = fieldDefn.schema().defaultValue(); if (data instanceof Byte) {
r.deliver(data);
} }
if (data == null) { else if (data instanceof Number) {
if (column.isOptional()) {
return null;
}
else {
return BYTE_FALSE;
}
}
if (data instanceof Byte) return data;
if (data instanceof Number) {
Number value = (Number) data; Number value = (Number) data;
return value.byteValue(); r.deliver(value.byteValue());
} }
if (data instanceof Boolean) { else if (data instanceof Boolean) {
return NumberConversions.getByte((boolean) data); r.deliver(NumberConversions.getByte((boolean) data));
} }
if (data instanceof String) { else if (data instanceof String) {
return Byte.parseByte((String) data); r.deliver(Byte.parseByte((String) data));
} }
return handleUnknownData(column, fieldDefn, data); });
} }
protected Object convertVariableScale(Column column, Field fieldDefn, Object data) { protected Object convertVariableScale(Column column, Field fieldDefn, Object data) {
data = convertNumeric(column, fieldDefn, data); data = convertNumeric(column, fieldDefn, data); // provides default value
if (data == null) { if (data == null) {
return null; return null;
@ -398,18 +390,12 @@ protected Object convertTimestampWithZone(Column column, Field fieldDefn, Object
} }
protected Object convertIntervalYearMonth(Column column, Field fieldDefn, Object data) { protected Object convertIntervalYearMonth(Column column, Field fieldDefn, Object data) {
if (data == null && !fieldDefn.schema().isOptional()) { return convertValue(column, fieldDefn, data, NumberConversions.DOUBLE_FALSE, (r) -> {
data = fieldDefn.schema().defaultValue();
}
if (data == null) {
if (column.isOptional()) return null;
return NumberConversions.DOUBLE_FALSE;
}
if (data instanceof Number) { if (data instanceof Number) {
// we expect to get back from the plugin a double value // we expect to get back from the plugin a double value
return ((Number) data).doubleValue(); r.deliver(((Number) data).doubleValue());
} }
if (data instanceof INTERVALYM) { else if (data instanceof INTERVALYM) {
final String interval = ((INTERVALYM) data).stringValue(); final String interval = ((INTERVALYM) data).stringValue();
int sign = 1; int sign = 1;
int start = 0; int start = 0;
@ -421,32 +407,26 @@ protected Object convertIntervalYearMonth(Column column, Field fieldDefn, Object
if (interval.charAt(i) == '-') { if (interval.charAt(i) == '-') {
final int year = sign * Integer.parseInt(interval.substring(start, i)); final int year = sign * Integer.parseInt(interval.substring(start, i));
final int month = sign * Integer.parseInt(interval.substring(i + 1, interval.length())); final int month = sign * Integer.parseInt(interval.substring(i + 1, interval.length()));
return MicroDuration.durationMicros(year, month, 0, 0, r.deliver(MicroDuration.durationMicros(year, month, 0, 0,
0, 0, MicroDuration.DAYS_PER_MONTH_AVG); 0, 0, MicroDuration.DAYS_PER_MONTH_AVG));
} }
} }
} }
return handleUnknownData(column, fieldDefn, data); });
} }
protected Object convertIntervalDaySecond(Column column, Field fieldDefn, Object data) { protected Object convertIntervalDaySecond(Column column, Field fieldDefn, Object data) {
if (data == null && !fieldDefn.schema().isOptional()) { return convertValue(column, fieldDefn, data, NumberConversions.DOUBLE_FALSE, (r) -> {
data = fieldDefn.schema().defaultValue();
}
if (data == null) {
if (column.isOptional()) return null;
return NumberConversions.DOUBLE_FALSE;
}
if (data instanceof Number) { if (data instanceof Number) {
// we expect to get back from the plugin a double value // we expect to get back from the plugin a double value
return ((Number) data).doubleValue(); r.deliver(((Number) data).doubleValue());
} }
if (data instanceof INTERVALDS) { else if (data instanceof INTERVALDS) {
final String interval = ((INTERVALDS) data).stringValue(); final String interval = ((INTERVALDS) data).stringValue();
final Matcher m = INTERVAL_DAY_SECOND_PATTERN.matcher(interval); final Matcher m = INTERVAL_DAY_SECOND_PATTERN.matcher(interval);
if (m.matches()) { if (m.matches()) {
final int sign = "-".equals(m.group(1)) ? -1 : 1; final int sign = "-".equals(m.group(1)) ? -1 : 1;
return MicroDuration.durationMicros( r.deliver(MicroDuration.durationMicros(
0, 0,
0, 0,
sign * Integer.valueOf(m.group(2)), sign * Integer.valueOf(m.group(2)),
@ -454,9 +434,9 @@ protected Object convertIntervalDaySecond(Column column, Field fieldDefn, Object
sign * Integer.valueOf(m.group(4)), sign * Integer.valueOf(m.group(4)),
sign * Integer.valueOf(m.group(5)), sign * Integer.valueOf(m.group(5)),
sign * Integer.valueOf(Strings.pad(m.group(6), 6, '0')), sign * Integer.valueOf(Strings.pad(m.group(6), 6, '0')),
MicroDuration.DAYS_PER_MONTH_AVG); MicroDuration.DAYS_PER_MONTH_AVG));
} }
} }
return handleUnknownData(column, fieldDefn, data); });
} }
} }