protected void applyOrderBy()

in sql-gremlin/src/main/java/org/twilmes/sql/gremlin/adapter/converter/ast/nodes/select/GremlinSqlSelectMulti.java [277:307]


    protected void applyOrderBy(final GraphTraversal<?, ?> graphTraversal, final String edgeLabel,
                                final String inVRename, final String outVRename) throws SQLException {
        graphTraversal.order();
        if (sqlSelect.getOrderList() == null || sqlSelect.getOrderList().getList().isEmpty()) {
            graphTraversal.by(__.unfold().id());
            return;
        }
        final List<GremlinSqlIdentifier> gremlinSqlIdentifiers = new ArrayList<>();
        for (final SqlNode sqlNode : sqlSelect.getOrderList().getList()) {
            gremlinSqlIdentifiers.add(GremlinSqlFactory.createNodeCheckType(sqlNode, GremlinSqlIdentifier.class));
        }
        final GremlinTableBase outVTable = sqlMetadata.getGremlinTable(outVRename);
        final GremlinTableBase inVTable = sqlMetadata.getGremlinTable(inVRename);
        for (final GremlinSqlIdentifier gremlinSqlIdentifier : gremlinSqlIdentifiers) {
            final String column = gremlinSqlIdentifier.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 {
                if (sqlMetadata.getTableHasColumn(inVTable, column)) {
                    graphTraversal.by(__.unfold().inV().hasLabel(inVTable.getLabel())
                            .values(sqlMetadata.getActualColumnName(inVTable, column)));
                } else if (sqlMetadata.getTableHasColumn(outVTable, column)) {
                    graphTraversal.by(__.unfold().outV().hasLabel(outVTable.getLabel())
                            .values(sqlMetadata.getActualColumnName(outVTable, column)));
                } else {
                    throw SqlGremlinError.create(SqlGremlinError.CANNOT_GROUP_COLUMN, column);
                }
            }
        }
    }