in athena-neptune/src/main/java/com/amazonaws/athena/connectors/neptune/propertygraph/rowwriters/EdgeRowWriter.java [56:169]
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;
Object fieldValue = obj.get(field.getName());
value.isSet = 0;
if (fieldValue != null) {
Boolean booleanValue = Boolean.parseBoolean(fieldValue.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;
value.isSet = 0;
String fieldName = field.getName().toLowerCase().trim();
// 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 if (fieldName.equals(SpecialKeys.IN.toString().toLowerCase())) {
Object fieldValue = ((LinkedHashMap) obj.get(Direction.IN)).get(T.id);
if (fieldValue != null) {
value.value = fieldValue.toString();
value.isSet = 1;
}
}
else if (fieldName.equals(SpecialKeys.OUT.toString().toLowerCase())) {
Object fieldValue = ((LinkedHashMap) obj.get(Direction.OUT)).get(T.id);
if (fieldValue != null) {
value.value = fieldValue.toString();
value.isSet = 1;
}
}
else {
Object fieldValue = obj.get(field.getName());
if (fieldValue != null) {
value.value = fieldValue.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;
Object fieldValue = obj.get(field.getName());
if (fieldValue != null) {
value.value = Integer.parseInt(fieldValue.toString());
value.isSet = 1;
}
});
break;
case BIGINT:
rowWriterBuilder.withExtractor(field.getName(),
(BigIntExtractor) (Object context, NullableBigIntHolder value) -> {
Map<Object, Object> obj = (Map<Object, Object>) context;
value.isSet = 0;
Object fieldValue = obj.get(field.getName());
if (fieldValue != null) {
value.value = Long.parseLong(fieldValue.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;
Object fieldValue = obj.get(field.getName());
if (fieldValue != null) {
value.value = Float.parseFloat(fieldValue.toString());
value.isSet = 1;
}
});
break;
case FLOAT8:
rowWriterBuilder.withExtractor(field.getName(),
(Float8Extractor) (Object context, NullableFloat8Holder value) -> {
Map<Object, Object> obj = (Map<Object, Object>) context;
value.isSet = 0;
Object fieldValue = obj.get(field.getName());
if (fieldValue != null) {
value.value = Double.parseDouble(fieldValue.toString());
value.isSet = 1;
}
});
break;
}
}