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) {
if (column.isOptional()) {
return null;
} }
else { else if (data instanceof Number) {
return BYTE_FALSE; Number value = (Number) data;
r.deliver(value.byteValue());
} }
} else if (data instanceof Boolean) {
if (data instanceof Byte) return data; r.deliver(NumberConversions.getByte((boolean) data));
if (data instanceof Number) { }
Number value = (Number) data; else if (data instanceof String) {
return value.byteValue(); r.deliver(Byte.parseByte((String) data));
} }
if (data instanceof Boolean) { });
return NumberConversions.getByte((boolean) data);
}
if (data instanceof String) {
return 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,65 +390,53 @@ 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 instanceof Number) {
} // we expect to get back from the plugin a double value
if (data == null) { r.deliver(((Number) data).doubleValue());
if (column.isOptional()) return null;
return NumberConversions.DOUBLE_FALSE;
}
if (data instanceof Number) {
// we expect to get back from the plugin a double value
return ((Number) data).doubleValue();
}
if (data instanceof INTERVALYM) {
final String interval = ((INTERVALYM) data).stringValue();
int sign = 1;
int start = 0;
if (interval.charAt(0) == '-') {
sign = -1;
start = 1;
} }
for (int i = 1; i < interval.length(); i++) { else if (data instanceof INTERVALYM) {
if (interval.charAt(i) == '-') { final String interval = ((INTERVALYM) data).stringValue();
final int year = sign * Integer.parseInt(interval.substring(start, i)); int sign = 1;
final int month = sign * Integer.parseInt(interval.substring(i + 1, interval.length())); int start = 0;
return MicroDuration.durationMicros(year, month, 0, 0, if (interval.charAt(0) == '-') {
0, 0, MicroDuration.DAYS_PER_MONTH_AVG); sign = -1;
start = 1;
}
for (int i = 1; i < interval.length(); i++) {
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()));
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) { 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 instanceof Number) {
} // we expect to get back from the plugin a double value
if (data == null) { r.deliver(((Number) data).doubleValue());
if (column.isOptional()) return null;
return NumberConversions.DOUBLE_FALSE;
}
if (data instanceof Number) {
// we expect to get back from the plugin a double value
return ((Number) data).doubleValue();
}
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(
0,
0,
sign * Integer.valueOf(m.group(2)),
sign * Integer.valueOf(m.group(3)),
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);
} }
} else if (data instanceof INTERVALDS) {
return handleUnknownData(column, fieldDefn, data); 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;
r.deliver(MicroDuration.durationMicros(
0,
0,
sign * Integer.valueOf(m.group(2)),
sign * Integer.valueOf(m.group(3)),
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));
}
}
});
} }
} }