private static void appendGraphTraversal()

in sql-gremlin/src/main/java/org/twilmes/sql/gremlin/adapter/converter/SqlTraversalEngine.java [147:189]


    private static void appendGraphTraversal(final String table, final String column,
                                             final SqlMetadata sqlMetadata,
                                             final GraphTraversal<?, ?> graphTraversal) throws SQLException {
        final GremlinTableBase gremlinTableBase = sqlMetadata.getGremlinTable(table);
        final String columnName = sqlMetadata.getActualColumnName(gremlinTableBase, column);

        // Primary/foreign key, need to traverse appropriately.
        if (!columnName.endsWith(GremlinTableBase.ID)) {
            if (sqlMetadata.getIsAggregate()) {
                graphTraversal.has(columnName).values(columnName);
            } else {
                appendColumnSelect(sqlMetadata, columnName, graphTraversal);
            }
        } else {
            // It's this vertex/edge.
            if (columnName.toLowerCase(Locale.getDefault())
                    .startsWith(gremlinTableBase.getLabel().toLowerCase(Locale.getDefault()))) {
                graphTraversal.id();
            } else {
                if (columnName.endsWith(IN_ID)) {
                    // Vertices can have many connected, edges (thus we need to fold). Edges can only connect to 1 vertex.
                    if (gremlinTableBase.getIsVertex()) {
                        graphTraversal.coalesce(__.inE().hasLabel(columnName.replace(IN_ID, "")).id().fold(),
                                __.constant(new ArrayList<>()));
                    } else {
                        graphTraversal.coalesce(__.inV().hasLabel(columnName.replace(IN_ID, "")).id(),
                                __.constant(new ArrayList<>()));
                    }
                } else if (column.endsWith(OUT_ID)) {
                    // Vertices can have many connected, edges (thus we need to fold). Edges can only connect to 1 vertex.
                    if (gremlinTableBase.getIsVertex()) {
                        graphTraversal.coalesce(__.outE().hasLabel(columnName.replace(OUT_ID, "")).id().fold(),
                                __.constant(new ArrayList<>()));
                    } else {
                        graphTraversal.coalesce(__.outV().hasLabel(columnName.replace(OUT_ID, "")).id(),
                                __.constant(new ArrayList<>()));
                    }
                } else {
                    graphTraversal.constant(new ArrayList<>());
                }
            }
        }
    }