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
protected Object convertTinyInt(Column column, Field fieldDefn, Object data) {
if (data == null && !fieldDefn.schema().isOptional()) {
data = fieldDefn.schema().defaultValue();
return convertValue(column, fieldDefn, data, BYTE_FALSE, (r) -> {
if (data instanceof Byte) {
r.deliver(data);
}
if (data == null) {
if (column.isOptional()) {
return null;
}
else {
return BYTE_FALSE;
}
}
if (data instanceof Byte) return data;
if (data instanceof Number) {
else if (data instanceof Number) {
Number value = (Number) data;
return value.byteValue();
r.deliver(value.byteValue());
}
if (data instanceof Boolean) {
return NumberConversions.getByte((boolean) data);
else if (data instanceof Boolean) {
r.deliver(NumberConversions.getByte((boolean) data));
}
if (data instanceof String) {
return Byte.parseByte((String) data);
else if (data instanceof String) {
r.deliver(Byte.parseByte((String) data));
}
return handleUnknownData(column, fieldDefn, 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) {
return null;
@ -398,18 +390,12 @@ protected Object convertTimestampWithZone(Column column, Field fieldDefn, Object
}
protected Object convertIntervalYearMonth(Column column, Field fieldDefn, Object data) {
if (data == null && !fieldDefn.schema().isOptional()) {
data = fieldDefn.schema().defaultValue();
}
if (data == null) {
if (column.isOptional()) return null;
return NumberConversions.DOUBLE_FALSE;
}
return convertValue(column, fieldDefn, data, NumberConversions.DOUBLE_FALSE, (r) -> {
if (data instanceof Number) {
// 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();
int sign = 1;
int start = 0;
@ -421,32 +407,26 @@ protected Object convertIntervalYearMonth(Column column, Field fieldDefn, Object
if (interval.charAt(i) == '-') {
final int year = sign * Integer.parseInt(interval.substring(start, i));
final int month = sign * Integer.parseInt(interval.substring(i + 1, interval.length()));
return MicroDuration.durationMicros(year, month, 0, 0,
0, 0, MicroDuration.DAYS_PER_MONTH_AVG);
r.deliver(MicroDuration.durationMicros(year, month, 0, 0,
0, 0, MicroDuration.DAYS_PER_MONTH_AVG));
}
}
}
return handleUnknownData(column, fieldDefn, data);
});
}
protected Object convertIntervalDaySecond(Column column, Field fieldDefn, Object data) {
if (data == null && !fieldDefn.schema().isOptional()) {
data = fieldDefn.schema().defaultValue();
}
if (data == null) {
if (column.isOptional()) return null;
return NumberConversions.DOUBLE_FALSE;
}
return convertValue(column, fieldDefn, data, NumberConversions.DOUBLE_FALSE, (r) -> {
if (data instanceof Number) {
// 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 Matcher m = INTERVAL_DAY_SECOND_PATTERN.matcher(interval);
if (m.matches()) {
final int sign = "-".equals(m.group(1)) ? -1 : 1;
return MicroDuration.durationMicros(
r.deliver(MicroDuration.durationMicros(
0,
0,
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(5)),
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);
});
}
}