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