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