in server/pxf-jdbc/src/main/java/org/greenplum/pxf/plugins/jdbc/JdbcResolver.java [149:228]
public OneRow setFields(List<OneField> record) throws UnsupportedOperationException, ParseException {
int columnIndex = 0;
for (OneField oneField : record) {
ColumnDescriptor column = columns.get(columnIndex++);
DataType oneFieldType = DataType.get(oneField.type);
DataType columnType = column.getDataType();
if (!DATATYPES_SUPPORTED.contains(oneFieldType)) {
throw new UnsupportedOperationException(
String.format("Field type '%s' (column '%s') is not supported",
oneFieldType, column));
}
if (LOG.isDebugEnabled()) {
String valDebug;
if (oneField.val == null) {
valDebug = "null";
} else if (oneFieldType == DataType.BYTEA) {
valDebug = String.format("'{}'", new String((byte[]) oneField.val));
} else {
valDebug = String.format("'{}'", oneField.val.toString());
}
LOG.debug("Column {} OneField: type {}, content {}", columnIndex, oneFieldType, valDebug);
}
// Convert TEXT columns into native data types
if ((oneFieldType == DataType.TEXT) && (columnType != DataType.TEXT)) {
oneField.type = columnType.getOID();
if (oneField.val == null) {
continue;
}
String rawVal = (String) oneField.val;
switch (columnType) {
case VARCHAR:
case BPCHAR:
case TEXT:
case BYTEA:
break;
case BOOLEAN:
oneField.val = Boolean.parseBoolean(rawVal);
break;
case INTEGER:
oneField.val = Integer.parseInt(rawVal);
break;
case FLOAT8:
oneField.val = Double.parseDouble(rawVal);
break;
case REAL:
oneField.val = Float.parseFloat(rawVal);
break;
case BIGINT:
oneField.val = Long.parseLong(rawVal);
break;
case SMALLINT:
oneField.val = Short.parseShort(rawVal);
break;
case NUMERIC:
oneField.val = new BigDecimal(rawVal);
break;
case TIMESTAMP:
oneField.val = Timestamp.valueOf(rawVal);
break;
case DATE:
oneField.val = Date.valueOf(rawVal);
break;
default:
throw new UnsupportedOperationException(
String.format("Field type '%s' (column '%s') is not supported",
oneFieldType, column));
}
}
}
return new OneRow(record);
}