in athena-neptune/src/main/java/com/amazonaws/athena/connectors/neptune/propertygraph/rowwriters/VertexRowWriter.java [55:159]
public static void writeRowTemplate(RowWriterBuilder rowWriterBuilder, Field field)
{
ArrowType arrowType = field.getType();
Types.MinorType minorType = Types.getMinorTypeForArrowType(arrowType);
switch (minorType) {
case BIT:
rowWriterBuilder.withExtractor(field.getName(),
(BitExtractor) (Object context, NullableBitHolder value) -> {
Map<Object, Object> obj = (Map<Object, Object>) context;
ArrayList<Object> objValues = (ArrayList) obj.get(field.getName());
value.isSet = 0;
if (objValues != null && objValues.get(0) != null) {
Boolean booleanValue = Boolean.parseBoolean(objValues.get(0).toString());
value.value = booleanValue ? 1 : 0;
value.isSet = 1;
}
});
break;
case VARCHAR:
rowWriterBuilder.withExtractor(field.getName(),
(VarCharExtractor) (Object context, NullableVarCharHolder value) -> {
Map<Object, Object> obj = (Map<Object, Object>) context;
String fieldName = field.getName().toLowerCase().trim();
value.isSet = 0;
// check for special keys and parse them separately
if (fieldName.equals(SpecialKeys.ID.toString().toLowerCase())) {
Object fieldValue = obj.get(T.id);
if (fieldValue != null) {
value.value = fieldValue.toString();
value.isSet = 1;
}
}
else {
ArrayList<Object> objValues = (ArrayList) obj.get(field.getName());
if (objValues != null && objValues.get(0) != null) {
value.value = objValues.get(0).toString();
value.isSet = 1;
}
}
});
break;
case INT:
rowWriterBuilder.withExtractor(field.getName(),
(IntExtractor) (Object context, NullableIntHolder value) -> {
Map<Object, Object> obj = (Map<Object, Object>) context;
value.isSet = 0;
ArrayList<Object> objValues = (ArrayList) obj.get(field.getName());
if (objValues != null && objValues.get(0) != null) {
value.value = Integer.parseInt(objValues.get(0).toString());
value.isSet = 1;
}
});
break;
case BIGINT:
rowWriterBuilder.withExtractor(field.getName(),
(BigIntExtractor) (Object context, NullableBigIntHolder value) -> {
Map<Object, Object> obj = (Map<Object, Object>) context;
ArrayList<Object> objValues = (ArrayList) obj.get(field.getName());
value.isSet = 0;
if (objValues != null && objValues.get(0) != null) {
value.value = Long.parseLong(objValues.get(0).toString());
value.isSet = 1;
}
});
break;
case FLOAT4:
rowWriterBuilder.withExtractor(field.getName(),
(Float4Extractor) (Object context, NullableFloat4Holder value) -> {
Map<Object, Object> obj = (Map<Object, Object>) context;
ArrayList<Object> objValues = (ArrayList) obj.get(field.getName());
value.isSet = 0;
if (objValues != null && objValues.get(0) != null) {
value.value = Float.parseFloat(objValues.get(0).toString());
value.isSet = 1;
}
});
break;
case FLOAT8:
rowWriterBuilder.withExtractor(field.getName(),
(Float8Extractor) (Object context, NullableFloat8Holder value) -> {
Map<Object, Object> obj = (Map<Object, Object>) context;
ArrayList<Object> objValues = (ArrayList) obj.get(field.getName());
value.isSet = 0;
if (objValues != null && objValues.get(0) != null) {
value.value = Double.parseDouble(objValues.get(0).toString());
value.isSet = 1;
}
});
break;
}
}