private void appendByGraphTraversal()

in sql-gremlin/src/main/java/org/twilmes/sql/gremlin/adapter/converter/ast/nodes/select/GremlinSqlSelectSingle.java [233:279]


    private void appendByGraphTraversal(final GremlinSqlNode gremlinSqlNode, final String table,
                                        final GraphTraversal graphTraversal)
            throws SQLException {
        final GraphTraversal graphTraversal1 = __.unfold();
        if (gremlinSqlNode instanceof GremlinSqlIdentifier) {
            final String column = sqlMetadata
                    .getActualColumnName(sqlMetadata.getGremlinTable(table),
                            ((GremlinSqlIdentifier) gremlinSqlNode).getColumn());
            if (column.endsWith(GremlinTableBase.IN_ID) || column.endsWith(GremlinTableBase.OUT_ID)) {
                // TODO: Grouping edges that are not the edge that the vertex are connected - needs to be implemented.
                throw SqlGremlinError.create(SqlGremlinError.CANNOT_GROUP_EDGES);
            } else {
                graphTraversal1.values(sqlMetadata.getActualColumnName(sqlMetadata.getGremlinTable(table), column));
            }
            graphTraversal.by(__.coalesce(graphTraversal1, __.constant(sqlMetadata.getDefaultCoalesceValue(column))));
        } else if (gremlinSqlNode instanceof GremlinSqlBasicCall) {
            final GremlinSqlBasicCall gremlinSqlBasicCall = (GremlinSqlBasicCall) gremlinSqlNode;
            gremlinSqlBasicCall.generateTraversal(graphTraversal1);
            if (gremlinSqlBasicCall.getGremlinSqlOperator() instanceof GremlinSqlPostfixOperator) {
                final GremlinSqlPostfixOperator gremlinSqlPostFixOperator =
                        (GremlinSqlPostfixOperator) gremlinSqlBasicCall.getGremlinSqlOperator();
                graphTraversal.by(__.coalesce(graphTraversal1,
                                __.constant(sqlMetadata.getDefaultCoalesceValue(gremlinSqlBasicCall.getOutputColumn()))),
                        gremlinSqlPostFixOperator.getOrder());
            } else {
                graphTraversal.by(__.coalesce(graphTraversal1,
                        __.constant(sqlMetadata.getDefaultCoalesceValue(gremlinSqlBasicCall.getOutputColumn()))));
            }
        } else if (gremlinSqlNode instanceof GremlinSqlLiteral) {
            final GremlinSqlLiteral gremlinSqlLiteral = (GremlinSqlLiteral) gremlinSqlNode;
            final List<SqlNode> sqlNodeList = sqlSelect.getSelectList().getList();
            if (gremlinSqlLiteral.getValue() instanceof Number) {
                final Number value = (Number) gremlinSqlLiteral.getValue();
                if (sqlNodeList.size() <= value.intValue() || value.intValue() <= 0) {
                    appendByGraphTraversal(GremlinSqlFactory.createNode(sqlNodeList.get(value.intValue() - 1)), table,
                            graphTraversal);
                } else {
                    throw SqlGremlinError.create(SqlGremlinError.ORDER_BY_ORDINAL_VALUE);
                }
            } else {
                throw SqlGremlinError.create(SqlGremlinError.CANNOT_ORDER_COLUMN_LITERAL);
            }
        } else {
            throw SqlGremlinError.createNotSupported(SqlGremlinError.CANNOT_ORDER_BY,
                    gremlinSqlNode.getClass().getName());
        }
    }