public static void writeRowTemplate()

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;
        }
    }